amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn - #18

Merged
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes
Jul 10, 2026
Merged

amicode: fix chat prose clipping + restore AMICO identity on every assistant turn#18
Rchari1 merged 2 commits into
local/amicodefrom
rchari/chat-fixes

Conversation

@Rchari1

Copy link
Copy Markdown
Member

Two chat bugs, fresh branch off local/amicode.

1. Prose clips on the right edge

Long assistant lines (e.g. "…overlappingtransfers" running past the viewport) were cut off with no wrap — see the reported screenshot. Root cause: the assistant-message flex column and its text-part children had no min-width: 0, so a long line's intrinsic width prevented the flex child from shrinking and it overflowed the container (the outer container chain already had min-width: 0; the message column + text parts were the gap). Fix: min-width: 0 / max-width: 100% on [data-component="assistant-message"] and its text-part / text-part-body. The markdown component already wraps correctly — this was purely the flex container.

2. AMICO identity vanished from plain chat

The AMICO mark + wordmark only rendered on interview receipt cards (card.tsx), so ordinary prose replies showed no Amico identity — the brand disappeared for most of a conversation. Fix: AssistantParts now heads each assistant turn with the AMICO signature, suppressed when the turn already contains an amicode_* tool card (those bring their own signature — no double-up). This is presence, not a repaint: it reuses Kate's existing amc-sig/amc-wordmark styling untouched (her de-gold restyle stays; the mark just shows up everywhere again).

Verification

ui + app typecheck clean; 68 ui tests green; built + relaunched, live in the dev host.

🤖 Generated with Claude Code

Rchari1and others added 2 commits July 10, 2026 15:03
…n the assistant-message flex column + text parts — the container chain had it, the message column was the gap); AMICO signature heads EVERY assistant turn, not only interview receipt cards (brand identity shouldn't vanish in plain chat) — reuses Kate's amc-sig restyle
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ery assistant turn
- assistant-message flex column + its text parts lacked min-width:0, so a long line pushed the message past the viewport and clipped (the 'overlapping transfers' cutoff). Add min-width:0 / max-width:100%.
- the AMICO mark+wordmark only appeared on interview receipt cards; it now heads plain-prose assistant turns too (suppressed when a turn already has an amicode_* card, which carries its own signature). Reuses Kate's restyle untouched — presence, not repaint.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Rchari1
Rchari1 merged commit 566e285 into local/amicodeJul 10, 2026
0 of 4 checks passed
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
jack-champagne added a commit that referenced this pull request Jul 28, 2026
Our base (sst/opencode v1.17.3, 2026-06-10) predates Sonnet 5 and Opus 5.
anthropicOpus47OrLater() required both a major and a minor version in the
model id, so claude-opus-5 and claude-sonnet-5 never matched and fell back
to legacy thinking:{type:"enabled",budgetTokens:16000} with only high/max
tiers instead of the 5-tier adaptive path.
Ports the end state of upstream's provider/model files rather than the 112
commits behind them, which would drag in the layer-node -> app-node refactor
and the @opencode-ai/schema extraction:
- provider/transform.ts + its test: replaced wholesale (fork never touched
either; 0 conflicts). Also brings prompt-cache keys by SDK and the
Grok/GLM/Bedrock-Mantle variant fixes.
- core/models-dev.ts: additive reasoning_options field the transform reads.
- session/llm/request.ts: 3-way merged, 0 conflicts; amicode patch #18
preserved. Brings strict:false on OpenAI Responses-family tools.
Measured over all 454 reasoning models in the live models.dev catalog:
418 identical, 36 changed, 0 errors. Claude 4.8/4.6/4.1 unchanged.
Verified: tsgo green on opencode + core; test/provider 503 pass / 0 fail;
test/session + test/server identical before and after (3 pre-existing
llm-native-recorded failures reproduce on the unported tree).
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Rchari1