mirror of
https://github.com/anomalyco/opencode.git
synced 2026-08-04 00:48:41 +00:00
Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
def14d96ef | ||
|
|
b0b1149233 | ||
|
|
7becbbf711 | ||
|
|
87481f2bb6 | ||
|
|
9535a8f929 | ||
|
|
e917c12c80 |
@@ -252,33 +252,6 @@ These are not strictly enforced, they are just general guidelines:
|
||||
|
||||
For net-new functionality, start with a design conversation. Open an issue describing the problem, your proposed approach (optional), and why it belongs in OpenCode. The core team will help decide whether it should move forward; please wait for that approval instead of opening a feature PR directly.
|
||||
|
||||
## Trust & Vouch System
|
||||
|
||||
This project uses [vouch](https://github.com/mitchellh/vouch) to manage contributor trust. The vouch list is maintained in [`.github/VOUCHED.td`](.github/VOUCHED.td).
|
||||
|
||||
### How it works
|
||||
|
||||
- **Vouched users** are explicitly trusted contributors.
|
||||
- **Denounced users** are explicitly blocked. Issues and pull requests from denounced users are automatically closed. If you have been denounced, you can request to be unvouched by reaching out to a maintainer on [Discord](https://opencode.ai/discord)
|
||||
- **Everyone else** can participate normally — you don't need to be vouched to open issues or PRs.
|
||||
|
||||
### For maintainers
|
||||
|
||||
Collaborators with write access can manage the vouch list by commenting on any issue:
|
||||
|
||||
- `vouch` — vouch for the issue author
|
||||
- `vouch @username` — vouch for a specific user
|
||||
- `denounce` — denounce the issue author
|
||||
- `denounce @username` — denounce a specific user
|
||||
- `denounce @username <reason>` — denounce with a reason
|
||||
- `unvouch` / `unvouch @username` — remove someone from the list
|
||||
|
||||
Changes are committed automatically to `.github/VOUCHED.td`.
|
||||
|
||||
### Denouncement policy
|
||||
|
||||
Denouncement is reserved for users who repeatedly submit low-quality AI-generated contributions, spam, or otherwise act in bad faith. It is not used for disagreements or honest mistakes.
|
||||
|
||||
## Issue Requirements
|
||||
|
||||
All issues **must** use one of our issue templates:
|
||||
|
||||
@@ -59,7 +59,30 @@ export namespace Referral {
|
||||
const accountID = Actor.account()
|
||||
const code = await ensureCode(workspaceID)
|
||||
const rows = await Database.use(async (tx) => {
|
||||
const [invites, inviteeReferral] = await Promise.all([
|
||||
const [rewards, invites, inviteeReferral, inviteeRewards] = await Promise.all([
|
||||
tx
|
||||
.select({
|
||||
referralID: ReferralRewardTable.referralID,
|
||||
workspaceID: ReferralRewardTable.workspaceID,
|
||||
referralWorkspaceID: ReferralTable.workspaceID,
|
||||
inviteeEmail: AuthTable.subject,
|
||||
amount: ReferralRewardTable.amount,
|
||||
timeCreated: ReferralRewardTable.timeCreated,
|
||||
timeApplied: ReferralRewardTable.timeApplied,
|
||||
})
|
||||
.from(ReferralRewardTable)
|
||||
.innerJoin(ReferralTable, eq(ReferralTable.id, ReferralRewardTable.referralID))
|
||||
.innerJoin(
|
||||
AuthTable,
|
||||
and(eq(AuthTable.accountID, ReferralTable.inviteeAccountID), eq(AuthTable.provider, "email")),
|
||||
)
|
||||
.where(
|
||||
and(
|
||||
eq(ReferralRewardTable.workspaceID, workspaceID),
|
||||
isNull(ReferralRewardTable.timeDeleted),
|
||||
isNull(ReferralTable.timeDeleted),
|
||||
),
|
||||
),
|
||||
tx
|
||||
.select({ id: ReferralTable.id, inviteeEmail: AuthTable.subject, timeCreated: ReferralTable.timeCreated })
|
||||
.from(ReferralTable)
|
||||
@@ -83,20 +106,19 @@ export namespace Referral {
|
||||
.where(and(eq(ReferralTable.inviteeAccountID, accountID), isNull(ReferralTable.timeDeleted)))
|
||||
.orderBy(asc(UserTable.timeCreated))
|
||||
.then((rows) => rows.find((row) => row.inviterEmail) ?? rows[0]),
|
||||
tx
|
||||
.select({ referralID: ReferralRewardTable.referralID })
|
||||
.from(ReferralRewardTable)
|
||||
.innerJoin(ReferralTable, eq(ReferralTable.id, ReferralRewardTable.referralID))
|
||||
.where(
|
||||
and(
|
||||
eq(ReferralTable.inviteeAccountID, accountID),
|
||||
isNull(ReferralRewardTable.timeDeleted),
|
||||
isNull(ReferralTable.timeDeleted),
|
||||
),
|
||||
),
|
||||
])
|
||||
|
||||
// Hide reward history until the referral_id index can be deployed and this lookup restored.
|
||||
const rewards: {
|
||||
referralID: string
|
||||
workspaceID: string
|
||||
referralWorkspaceID: string
|
||||
inviteeEmail: string
|
||||
amount: number
|
||||
timeCreated: Date
|
||||
timeApplied: Date | null
|
||||
}[] = []
|
||||
// Hide pending invitee rewards until the referral_id index can be deployed and this lookup restored.
|
||||
const inviteeRewards = inviteeReferral ? [{ referralID: inviteeReferral.id }] : []
|
||||
return { inviteeReferral, inviteeRewards, invites, rewards }
|
||||
})
|
||||
|
||||
|
||||
@@ -1270,6 +1270,17 @@ export function options(input: {
|
||||
result["gateway"] = { caching: "auto" }
|
||||
}
|
||||
|
||||
// Any gpt version above 5.4 in combination with azure does not support reasoningEffort
|
||||
// so we should return early here.
|
||||
const [, gptMajorVersion, gptMinorVersion] = input.model.api.id.match(/gpt-(\d+)\.(\d+)/) ?? []
|
||||
const isGpt55OrNewer = Number(gptMajorVersion) > 5 || (Number(gptMajorVersion) === 5 && Number(gptMinorVersion) >= 5)
|
||||
if (input.model.api.npm === "@ai-sdk/azure" && input.providerOptions?.useCompletionUrls) {
|
||||
if (!isGpt55OrNewer) {
|
||||
result["reasoningEffort"] = "medium"
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
if (input.model.api.id.includes("gpt-5") && !input.model.api.id.includes("gpt-5-chat")) {
|
||||
if (!input.model.api.id.includes("gpt-5-pro")) {
|
||||
result["reasoningEffort"] = "medium"
|
||||
|
||||
@@ -93,7 +93,6 @@ export const prepare = Effect.fn("LLMRequestPrep.prepare")(function* (input: Pre
|
||||
input.model.api.npm === "@ai-sdk/azure" &&
|
||||
(input.provider.options.useCompletionUrls || input.model.options.useCompletionUrls || options.useCompletionUrls)
|
||||
) {
|
||||
delete options.reasoningEffort
|
||||
delete options.reasoningSummary
|
||||
delete options.include
|
||||
}
|
||||
|
||||
@@ -252,7 +252,7 @@ describe("ProviderTransform.options - setCacheKey", () => {
|
||||
expect(result.promptCacheKey).toBeUndefined()
|
||||
})
|
||||
|
||||
test("should keep the Azure cache key for gpt-5.5 Responses defaults", () => {
|
||||
test("should keep the Azure cache key for gpt-5.5 early return", () => {
|
||||
const result = ProviderTransform.options({
|
||||
model: {
|
||||
...mockModel,
|
||||
@@ -525,7 +525,7 @@ describe("ProviderTransform.options - gpt-5 textVerbosity", () => {
|
||||
expect(result.include).toBeUndefined()
|
||||
})
|
||||
|
||||
test("azure chat completions omit unsupported reasoning options after variants merge", async () => {
|
||||
test("azure chat completions omit Responses-only reasoning options after variants merge", async () => {
|
||||
const model = {
|
||||
...createGpt5Model("gpt-5.4"),
|
||||
id: "azure/gpt-5.4",
|
||||
@@ -580,7 +580,7 @@ describe("ProviderTransform.options - gpt-5 textVerbosity", () => {
|
||||
isWorkflow: false,
|
||||
}),
|
||||
)
|
||||
expect(result.params.options.reasoningEffort).toBeUndefined()
|
||||
expect(result.params.options.reasoningEffort).toBe("high")
|
||||
expect(result.params.options.reasoningSummary).toBeUndefined()
|
||||
expect(result.params.options.include).toBeUndefined()
|
||||
expect(result.tools.lookup.strict).toBe(false)
|
||||
@@ -681,15 +681,34 @@ describe("ProviderTransform.options - gpt-5 reasoningEffort", () => {
|
||||
expect(result.reasoningEffort).toBeUndefined()
|
||||
})
|
||||
|
||||
test("gpt-5.5 should set Responses reasoning options", () => {
|
||||
test("gpt-5.5 should NOT set reasoningEffort for the completions API", () => {
|
||||
const result = ProviderTransform.options({
|
||||
model: createModel("gpt-5.5"),
|
||||
sessionID,
|
||||
providerOptions: { useCompletionUrls: true },
|
||||
})
|
||||
|
||||
expect(result.reasoningEffort).toBeUndefined()
|
||||
})
|
||||
|
||||
test("gpt-5.6 should NOT set reasoningEffort for the completions API", () => {
|
||||
const result = ProviderTransform.options({
|
||||
model: createModel("gpt-5.6"),
|
||||
sessionID,
|
||||
providerOptions: { useCompletionUrls: true },
|
||||
})
|
||||
|
||||
expect(result.reasoningEffort).toBeUndefined()
|
||||
})
|
||||
|
||||
test("gpt-5.6 should set reasoningEffort for the responses API", () => {
|
||||
const result = ProviderTransform.options({
|
||||
model: createModel("gpt-5.6"),
|
||||
sessionID,
|
||||
providerOptions: {},
|
||||
})
|
||||
|
||||
expect(result.reasoningEffort).toBe("medium")
|
||||
expect(result.reasoningSummary).toBe("auto")
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -255,8 +255,16 @@ function useFileViewer(config: ViewerConfig) {
|
||||
if (!dragMoved) {
|
||||
pendingSelectionEnd = false
|
||||
const selected = config.buildClickSelection()
|
||||
if (selected) config.setSelectedLines(selected)
|
||||
config.onLineSelectionEnd(lastSelection)
|
||||
const next =
|
||||
selected &&
|
||||
lastSelection?.start === selected.start &&
|
||||
lastSelection.end === selected.end &&
|
||||
lastSelection.side === selected.side &&
|
||||
(lastSelection.endSide ?? lastSelection.side) === (selected.endSide ?? selected.side)
|
||||
? null
|
||||
: selected
|
||||
if (next !== undefined) config.setSelectedLines(next)
|
||||
config.onLineSelectionEnd(next === undefined ? lastSelection : next)
|
||||
dragStart = undefined
|
||||
dragEnd = undefined
|
||||
dragMoved = false
|
||||
@@ -291,10 +299,29 @@ function useFileViewer(config: ViewerConfig) {
|
||||
createEffect(() => {
|
||||
rendered()
|
||||
const ranges = config.commentedLines()
|
||||
requestAnimationFrame(() => {
|
||||
const root = getRoot()
|
||||
if (!root) return
|
||||
const root = getRoot()
|
||||
if (!root) return
|
||||
if (ranges.length === 0) {
|
||||
config.markCommented(root, ranges)
|
||||
return
|
||||
}
|
||||
|
||||
let frame: number | undefined
|
||||
const mark = () => {
|
||||
if (frame !== undefined) cancelAnimationFrame(frame)
|
||||
frame = requestAnimationFrame(() => {
|
||||
frame = undefined
|
||||
config.markCommented(root, ranges)
|
||||
})
|
||||
}
|
||||
const observer = new MutationObserver(mark)
|
||||
|
||||
observer.observe(root, { childList: true, subtree: true })
|
||||
mark()
|
||||
|
||||
onCleanup(() => {
|
||||
observer.disconnect()
|
||||
if (frame !== undefined) cancelAnimationFrame(frame)
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -26,30 +26,19 @@ const unsafeCSS = `
|
||||
color-mix(in lab, var(--diffs-bg) 33.333%, var(--diffs-deletion-base)),
|
||||
color-mix(in lab, var(--diffs-bg) 60%, var(--diffs-deletion-base))
|
||||
);
|
||||
--diffs-bg-deletion-number-override: var(--diffs-bg-deletion-override);
|
||||
--diffs-bg-addition-override: light-dark(
|
||||
color-mix(in lab, var(--diffs-bg) 33.333%, var(--diffs-addition-base)),
|
||||
color-mix(in lab, var(--diffs-bg) 60%, var(--diffs-addition-base))
|
||||
);
|
||||
--diffs-selection-base: var(--surface-warning-strong);
|
||||
--diffs-selection-border: var(--border-warning-base);
|
||||
--diffs-selection-number-fg: #1c1917;
|
||||
--diffs-bg-addition-number-override: var(--diffs-bg-addition-override);
|
||||
--diffs-selection-base: var(--v2-background-bg-accent);
|
||||
--diffs-selection-number-fg: var(--v2-text-text-accent);
|
||||
--diffs-comment-bg: rgb(from var(--v2-background-bg-accent) r g b / 0.06);
|
||||
/* Use explicit alpha instead of color-mix(..., transparent) to avoid Safari's non-premultiplied interpolation bugs. */
|
||||
--diffs-bg-selection: var(--diffs-bg-selection-override, rgb(from var(--surface-warning-base) r g b / 0.65));
|
||||
--diffs-bg-selection-number: var(
|
||||
--diffs-bg-selection-number-override,
|
||||
rgb(from var(--surface-warning-base) r g b / 0.85)
|
||||
);
|
||||
--diffs-bg-selection-text: rgb(from var(--surface-warning-strong) r g b / 0.2);
|
||||
}
|
||||
|
||||
:host([data-color-scheme='dark']) [data-diff],
|
||||
:host([data-color-scheme='dark']) [data-file] {
|
||||
--diffs-selection-number-fg: #fdfbfb;
|
||||
--diffs-bg-selection: var(--diffs-bg-selection-override, rgb(from var(--solaris-dark-6) r g b / 0.65));
|
||||
--diffs-bg-selection-number: var(
|
||||
--diffs-bg-selection-number-override,
|
||||
rgb(from var(--solaris-dark-6) r g b / 0.85)
|
||||
);
|
||||
--diffs-bg-selection: var(--diffs-bg-selection-override, rgb(from var(--diffs-selection-base) r g b / 0.2));
|
||||
--diffs-bg-selection-number: var(--diffs-bg-selection-number-override, var(--diffs-bg-selection));
|
||||
--diffs-bg-selection-text: rgb(from var(--diffs-selection-base) r g b / 0.2);
|
||||
}
|
||||
|
||||
[data-diff] ::selection,
|
||||
@@ -57,6 +46,34 @@ const unsafeCSS = `
|
||||
background-color: var(--diffs-bg-selection-text);
|
||||
}
|
||||
|
||||
[data-indicators='bars'] [data-column-number][data-line-type='change-addition']::before,
|
||||
[data-indicators='bars'] [data-column-number][data-line-type='change-deletion']::before {
|
||||
width: 2px;
|
||||
}
|
||||
|
||||
[data-indicators='bars'] [data-column-number][data-line-type='change-deletion']::before {
|
||||
background-image: none;
|
||||
background-color: var(--diffs-deletion-base);
|
||||
}
|
||||
|
||||
[data-background] [data-column-number] {
|
||||
--mix-light: 88%;
|
||||
--mix-dark: 80%;
|
||||
}
|
||||
|
||||
[data-diff-type='split'] [data-additions],
|
||||
[data-diff-type='split'] [data-additions] [data-gutter],
|
||||
[data-diff-type='split'] [data-deletions],
|
||||
[data-diff-type='split'] [data-deletions] [data-content] {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
[data-content-buffer] {
|
||||
background-image: none;
|
||||
background-color: var(--diffs-bg-context-gutter);
|
||||
}
|
||||
|
||||
::highlight(opencode-find) {
|
||||
background-color: rgb(from var(--surface-warning-base) r g b / 0.35);
|
||||
}
|
||||
@@ -83,22 +100,24 @@ const unsafeCSS = `
|
||||
color: var(--diffs-selection-number-fg);
|
||||
}
|
||||
|
||||
[data-diff] [data-line-annotation][data-comment-selected]:not([data-selected-line]) [data-annotation-content] {
|
||||
box-shadow: inset 0 0 0 9999px var(--diffs-bg-selection);
|
||||
}
|
||||
|
||||
[data-file] [data-line-annotation][data-comment-selected]:not([data-selected-line]) [data-annotation-content] {
|
||||
box-shadow: inset 0 0 0 9999px var(--diffs-bg-selection);
|
||||
[data-diff] [data-line-annotation],
|
||||
[data-diff] [data-gutter-buffer='annotation'],
|
||||
[data-file] [data-line-annotation],
|
||||
[data-file] [data-gutter-buffer='annotation'] {
|
||||
--diffs-annotation-bg: var(--diffs-comment-bg);
|
||||
--diffs-computed-decoration-bg: var(--diffs-comment-bg);
|
||||
--diffs-computed-diff-line-bg: var(--diffs-comment-bg);
|
||||
--diffs-computed-selected-line-bg: var(--diffs-comment-bg);
|
||||
--diffs-line-bg: var(--diffs-comment-bg);
|
||||
background-color: var(--diffs-comment-bg);
|
||||
}
|
||||
|
||||
[data-diff] [data-line][data-selected-line] {
|
||||
background-color: var(--diffs-bg-selection);
|
||||
box-shadow: inset 2px 0 0 var(--diffs-selection-border);
|
||||
}
|
||||
|
||||
[data-file] [data-line][data-selected-line] {
|
||||
background-color: var(--diffs-bg-selection);
|
||||
box-shadow: inset 2px 0 0 var(--diffs-selection-border);
|
||||
}
|
||||
|
||||
[data-diff] [data-column-number][data-selected-line] {
|
||||
@@ -118,6 +137,19 @@ const unsafeCSS = `
|
||||
color: var(--diffs-selection-number-fg);
|
||||
}
|
||||
|
||||
@media (pointer: fine) {
|
||||
[data-gutter-utility-slot] {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
[data-column-number][data-hovered] [data-gutter-utility-slot],
|
||||
[data-gutter-utility-slot]:focus-within {
|
||||
opacity: 1;
|
||||
pointer-events: auto;
|
||||
}
|
||||
}
|
||||
|
||||
/* The deletion word-diff emphasis is stronger than additions; soften it while selected so the selection highlight reads consistently. */
|
||||
[data-diff] [data-line][data-line-type='change-deletion'][data-selected-line] {
|
||||
--diffs-bg-deletion-emphasis: light-dark(
|
||||
@@ -133,7 +165,6 @@ const unsafeCSS = `
|
||||
height: 24px;
|
||||
}
|
||||
[data-column-number] {
|
||||
background-color: var(--diffs-bg);
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
@@ -182,5 +213,6 @@ export const styleVariables = {
|
||||
"--diffs-font-features": "var(--font-family-mono--font-feature-settings)",
|
||||
"--diffs-header-font-family": "var(--font-family-sans)",
|
||||
"--diffs-gap-block": 0,
|
||||
"--diffs-min-number-column-width": "4ch",
|
||||
"--diffs-gap-style": 0,
|
||||
"--diffs-min-number-column-width": "3ch",
|
||||
}
|
||||
|
||||
@@ -151,7 +151,10 @@ export function createLineCommentControllerV2<T extends LineCommentShape>(props:
|
||||
}
|
||||
: undefined
|
||||
},
|
||||
onMouseEnter: () => note.hoverComment(comment.selection),
|
||||
onMouseEnter: () => {
|
||||
if (note.commenting()) return
|
||||
note.hoverComment(comment.selection)
|
||||
},
|
||||
onClick: () => {
|
||||
if (note.isEditing(comment.id)) return
|
||||
note.toggleComment(comment.id, comment.selection)
|
||||
@@ -164,10 +167,14 @@ export function createLineCommentControllerV2<T extends LineCommentShape>(props:
|
||||
},
|
||||
selection: formatSelectedLineLabel(range, i18n.t),
|
||||
onInput: note.setDraft,
|
||||
onCancel: note.cancelDraft,
|
||||
onCancel: () => {
|
||||
note.cancelDraft()
|
||||
note.select(null)
|
||||
},
|
||||
onSubmit: (comment) => {
|
||||
props.onSubmit({ comment, selection: cloneSelectedLineRange(range) })
|
||||
note.cancelDraft()
|
||||
note.select(null)
|
||||
},
|
||||
cancelLabel: i18n.t("ui.lineComment.cancel"),
|
||||
submitLabel: i18n.t("ui.lineComment.submit"),
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M3.10913 12.07C3.65512 12.07 5.76627 11.5988 6.85825 10.98C7.95023 10.3612 7.95023 10.3612 10.207 8.75965C13.0642 6.73196 15.0845 7.41088 18.3968 7.41088" fill="currentColor"/>
|
||||
<path d="M3.10913 12.07C3.65512 12.07 5.76627 11.5988 6.85825 10.98C7.95023 10.3612 7.95023 10.3612 10.207 8.75965C13.0642 6.73196 15.0845 7.41088 18.3968 7.41088" stroke="currentColor" stroke-width="3.27593"/>
|
||||
<path d="M21.6 7.43108L16.0037 10.6622V4.20001L21.6 7.43108Z" fill="currentColor" stroke="currentColor" stroke-width="0.0363992"/>
|
||||
<path d="M3 12.072C3.54599 12.072 5.65714 12.5432 6.74912 13.162C7.8411 13.7808 7.8411 13.7808 10.0978 15.3823C12.9551 17.41 14.9753 16.7311 18.2877 16.7311" fill="currentColor"/>
|
||||
<path d="M3 12.072C3.54599 12.072 5.65714 12.5432 6.74912 13.162C7.8411 13.7808 7.8411 13.7808 10.0978 15.3823C12.9551 17.41 14.9753 16.7311 18.2877 16.7311" stroke="currentColor" stroke-width="3.27593"/>
|
||||
<path d="M21.4909 16.7109L15.8945 13.4798V19.942L21.4909 16.7109Z" fill="currentColor" stroke="currentColor" stroke-width="0.0363992"/>
|
||||
<path d="M728.039 234C819.325 234 893.323 308.62 893.323 400.668C893.323 492.716 819.325 567.336 728.039 567.336L891.984 732.656C912.81 753.655 898.061 789.56 868.613 789.56H397.472C245.333 789.56 122 665.193 122 511.78C122 358.367 245.333 234 397.472 234H728.039ZM397.472 345.112C306.189 345.112 232.189 419.732 232.189 511.78C232.189 603.828 306.189 678.448 397.472 678.448C488.756 678.448 562.756 603.828 562.756 511.78C562.756 419.732 488.756 345.112 397.472 345.112Z" fill="currentColor" transform="scale(0.0234375)"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 627 B |
@@ -366,34 +366,9 @@
|
||||
</symbol>
|
||||
<symbol viewBox="0 0 24 24" fill="none" id="openrouter">
|
||||
<path
|
||||
d="M3.10913 12.07C3.65512 12.07 5.76627 11.5988 6.85825 10.98C7.95023 10.3612 7.95023 10.3612 10.207 8.75965C13.0642 6.73196 15.0845 7.41088 18.3968 7.41088"
|
||||
d="M728.039 234C819.325 234 893.323 308.62 893.323 400.668C893.323 492.716 819.325 567.336 728.039 567.336L891.984 732.656C912.81 753.655 898.061 789.56 868.613 789.56H397.472C245.333 789.56 122 665.193 122 511.78C122 358.367 245.333 234 397.472 234H728.039ZM397.472 345.112C306.189 345.112 232.189 419.732 232.189 511.78C232.189 603.828 306.189 678.448 397.472 678.448C488.756 678.448 562.756 603.828 562.756 511.78C562.756 419.732 488.756 345.112 397.472 345.112Z"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
<path
|
||||
d="M3.10913 12.07C3.65512 12.07 5.76627 11.5988 6.85825 10.98C7.95023 10.3612 7.95023 10.3612 10.207 8.75965C13.0642 6.73196 15.0845 7.41088 18.3968 7.41088"
|
||||
stroke="currentColor"
|
||||
stroke-width="3.27593"
|
||||
></path>
|
||||
<path
|
||||
d="M21.6 7.43108L16.0037 10.6622V4.20001L21.6 7.43108Z"
|
||||
fill="currentColor"
|
||||
stroke="currentColor"
|
||||
stroke-width="0.0363992"
|
||||
></path>
|
||||
<path
|
||||
d="M3 12.072C3.54599 12.072 5.65714 12.5432 6.74912 13.162C7.8411 13.7808 7.8411 13.7808 10.0978 15.3823C12.9551 17.41 14.9753 16.7311 18.2877 16.7311"
|
||||
fill="currentColor"
|
||||
></path>
|
||||
<path
|
||||
d="M3 12.072C3.54599 12.072 5.65714 12.5432 6.74912 13.162C7.8411 13.7808 7.8411 13.7808 10.0978 15.3823C12.9551 17.41 14.9753 16.7311 18.2877 16.7311"
|
||||
stroke="currentColor"
|
||||
stroke-width="3.27593"
|
||||
></path>
|
||||
<path
|
||||
d="M21.4909 16.7109L15.8945 13.4798V19.942L21.4909 16.7109Z"
|
||||
fill="currentColor"
|
||||
stroke="currentColor"
|
||||
stroke-width="0.0363992"
|
||||
transform="scale(0.0234375)"
|
||||
></path>
|
||||
</symbol>
|
||||
<symbol viewBox="0 0 24 24" fill="none" id="opencode">
|
||||
|
||||
|
Before Width: | Height: | Size: 276 KiB After Width: | Height: | Size: 275 KiB |
@@ -41,7 +41,8 @@
|
||||
"syntax-type": "var(--v2-purple-800)",
|
||||
"syntax-constant": "#007b80",
|
||||
"syntax-critical": "var(--v2-red-800)",
|
||||
"syntax-diff-delete": "#ff8c00",
|
||||
"syntax-diff-add": "var(--v2-state-fg-success)",
|
||||
"syntax-diff-delete": "var(--v2-state-fg-danger)",
|
||||
"syntax-diff-unknown": "#a753ae",
|
||||
"surface-critical-base": "#FFF2F0"
|
||||
},
|
||||
@@ -275,7 +276,8 @@
|
||||
"syntax-type": "var(--v2-purple-400)",
|
||||
"syntax-constant": "#93e9f6",
|
||||
"syntax-critical": "var(--v2-red-400)",
|
||||
"syntax-diff-delete": "#fab283",
|
||||
"syntax-diff-add": "var(--v2-state-fg-success)",
|
||||
"syntax-diff-delete": "var(--v2-state-fg-danger)",
|
||||
"syntax-diff-unknown": "#edb2f1",
|
||||
"surface-critical-base": "#1F0603"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user