@volter-ai-dev/supercode-ui 0.1.61 → 0.1.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -159,7 +159,11 @@ join, branch, reduction, or export so a host can explain ownership and destinati
159
159
 
160
160
  Harness inventory also retains normalized auth, runtime, protocol, repair, and action-capability
161
161
  evidence. The new-chat view renders unavailable harnesses in a compact `HarnessReadiness` section;
162
- hosts can replace that component while continuing to consume the same readiness contract.
162
+ hosts can replace that component while continuing to consume the same readiness contract. For an
163
+ installed Claude Code or Codex that needs authentication, the default component emits the single
164
+ `authenticateHarness` intent. A trusted host handles it through `onAuthenticateHarness`, launches
165
+ the plan returned by the harness SDK in a visible terminal, and refreshes inventory after native
166
+ verification. The browser-only UI never spawns a local process or handles credentials itself.
163
167
 
164
168
  When a controlled runtime truthfully advertises native steering, the composer sends a plain-text
165
169
  message into the active turn and keeps a separate secondary action for queueing a follow-up. With
package/components.mjs CHANGED
@@ -2662,7 +2662,7 @@ function HarnessReadiness({ harnesses, adapter }) {
2662
2662
  item.runtime
2663
2663
  ] }) : null
2664
2664
  ] }),
2665
- item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2665
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2666
2666
  ] }, item.id)) })
2667
2667
  ] });
2668
2668
  }
@@ -2733,7 +2733,7 @@ function HarnessPicker({ harnesses, value, disabled = false, adapter, onChange,
2733
2733
  /* @__PURE__ */ jsx10("strong", { children: item.label }),
2734
2734
  /* @__PURE__ */ jsx10("small", { children: item.reason || (item.auth === "required" ? "Authentication required" : "Unavailable") })
2735
2735
  ] }),
2736
- item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2736
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter?.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2737
2737
  ] }, item.id)) })
2738
2738
  ] }) : null
2739
2739
  ] }) : null
package/controller.d.ts CHANGED
@@ -128,6 +128,8 @@ export interface ControllerBindingOptions {
128
128
  onCloseSubagents?: () => void | Promise<void>;
129
129
  onStartTerminal?: (intent: Extract<SupercodeUiIntent, { action: 'new' }>) => void | Promise<void>;
130
130
  onResumeTerminal?: (intent: Extract<SupercodeUiIntent, { action: 'resume' }>) => void | Promise<void>;
131
+ /** Launch the native harness-owned sign-in flow. The host owns the process and terminal. */
132
+ onAuthenticateHarness?: (intent: Extract<SupercodeUiIntent, { action: 'authenticateHarness' }>) => void | Promise<void>;
131
133
  copyText?: UiAdapter['copyText'];
132
134
  resolveImage?: UiAdapter['resolveImage'];
133
135
  confirmIntent?: UiAdapter['confirmIntent'];
package/controller.mjs CHANGED
@@ -669,6 +669,11 @@ export async function dispatchControllerIntent(controller, intent, options = {})
669
669
  if (intent.action === 'terminal') return controller.dispatch({ type: 'openTerminal' });
670
670
  if (intent.action === 'interrupt') return controller.dispatch({ type: 'interrupt' });
671
671
  if (intent.action === 'respond') return controller.dispatch({ type: 'respond', requestId: intent.requestId, optionId: intent.optionId });
672
+ if (intent.action === 'authenticateHarness') {
673
+ return options.onAuthenticateHarness
674
+ ? options.onAuthenticateHarness(intent)
675
+ : options.onUnsupported?.(intent);
676
+ }
672
677
  if (intent.action === 'configureHarness') return controller.dispatch({
673
678
  type: 'configureHarness',
674
679
  harness: intent.harness,
package/core.mjs CHANGED
@@ -1165,6 +1165,11 @@ export function parseSupercodeUiIntent(value) {
1165
1165
  ? { action: 'respond', requestId: intent.requestId, optionId: intent.optionId }
1166
1166
  : null;
1167
1167
  }
1168
+ if (intent.action === 'authenticateHarness') {
1169
+ return exact('harness') && typeof intent.harness === 'string' && intent.harness.trim() && intent.harness.length <= 100
1170
+ ? { action: 'authenticateHarness', harness: intent.harness.trim() }
1171
+ : null;
1172
+ }
1168
1173
  if (intent.action === 'configureHarness') {
1169
1174
  if (!exact('harness', 'changes', 'expectedRevision')) return null;
1170
1175
  if (typeof intent.harness !== 'string' || !intent.harness || intent.harness.length > 100) return null;
package/embed.mjs CHANGED
@@ -2579,7 +2579,7 @@ function HarnessReadiness({ harnesses, adapter }) {
2579
2579
  item.runtime
2580
2580
  ] }) : null
2581
2581
  ] }),
2582
- item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2582
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2583
2583
  ] }, item.id)) })
2584
2584
  ] });
2585
2585
  }
@@ -2650,7 +2650,7 @@ function HarnessPicker({ harnesses, value, disabled = false, adapter, onChange,
2650
2650
  /* @__PURE__ */ jsx9("strong", { children: item.label }),
2651
2651
  /* @__PURE__ */ jsx9("small", { children: item.reason || (item.auth === "required" ? "Authentication required" : "Unavailable") })
2652
2652
  ] }),
2653
- item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2653
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2654
2654
  ] }, item.id)) })
2655
2655
  ] }) : null
2656
2656
  ] }) : null
package/index.d.ts CHANGED
@@ -355,6 +355,7 @@ export type SupercodeUiIntent =
355
355
  | { action: 'export'; targetHarness: HarnessId }
356
356
  | { action: 'interrupt' }
357
357
  | { action: 'respond'; requestId: unknown; optionId: string | null }
358
+ | { action: 'authenticateHarness'; harness: HarnessId }
358
359
  | { action: 'configureHarness'; harness: HarnessId; changes: HarnessSettingChangeModel[]; expectedRevision: string }
359
360
  | { action: 'refresh' }
360
361
  | { action: 'release' };
@@ -469,7 +470,7 @@ export interface HarnessPickerProps {
469
470
  harnesses: HarnessOption[];
470
471
  value: HarnessId;
471
472
  disabled?: boolean;
472
- adapter?: Pick<UiAdapter, 'copyText'>;
473
+ adapter?: Pick<UiAdapter, 'copyText' | 'onIntent'>;
473
474
  onChange(harness: HarnessId): void;
474
475
  logo?: ComponentType<{ id: HarnessId; activity?: SessionActivity; size?: number }>;
475
476
  }
package/messenger.mjs CHANGED
@@ -2576,7 +2576,7 @@ function HarnessReadiness({ harnesses, adapter }) {
2576
2576
  item.runtime
2577
2577
  ] }) : null
2578
2578
  ] }),
2579
- item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2579
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2580
2580
  ] }, item.id)) })
2581
2581
  ] });
2582
2582
  }
@@ -2647,7 +2647,7 @@ function HarnessPicker({ harnesses, value, disabled = false, adapter, onChange,
2647
2647
  /* @__PURE__ */ jsx9("strong", { children: item.label }),
2648
2648
  /* @__PURE__ */ jsx9("small", { children: item.reason || (item.auth === "required" ? "Authentication required" : "Unavailable") })
2649
2649
  ] }),
2650
- item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2650
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2651
2651
  ] }, item.id)) })
2652
2652
  ] }) : null
2653
2653
  ] }) : null
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@volter-ai-dev/supercode-ui",
3
- "version": "0.1.61",
3
+ "version": "0.1.62",
4
4
  "type": "module",
5
5
  "description": "Composable default UI kit for Supercode-powered coding-agent experiences",
6
6
  "exports": {
@@ -2662,7 +2662,7 @@ function HarnessReadiness({ harnesses, adapter }) {
2662
2662
  item.runtime
2663
2663
  ] }) : null
2664
2664
  ] }),
2665
- item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2665
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2666
2666
  ] }, item.id)) })
2667
2667
  ] });
2668
2668
  }
@@ -2733,7 +2733,7 @@ function HarnessPicker({ harnesses, value, disabled = false, adapter, onChange,
2733
2733
  /* @__PURE__ */ jsx10("strong", { children: item.label }),
2734
2734
  /* @__PURE__ */ jsx10("small", { children: item.reason || (item.auth === "required" ? "Authentication required" : "Unavailable") })
2735
2735
  ] }),
2736
- item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2736
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter?.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx10("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2737
2737
  ] }, item.id)) })
2738
2738
  ] }) : null
2739
2739
  ] }) : null
@@ -2576,7 +2576,7 @@ function HarnessReadiness({ harnesses, adapter }) {
2576
2576
  item.runtime
2577
2577
  ] }) : null
2578
2578
  ] }),
2579
- item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2579
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
2580
2580
  ] }, item.id)) })
2581
2581
  ] });
2582
2582
  }
@@ -2647,7 +2647,7 @@ function HarnessPicker({ harnesses, value, disabled = false, adapter, onChange,
2647
2647
  /* @__PURE__ */ jsx9("strong", { children: item.label }),
2648
2648
  /* @__PURE__ */ jsx9("small", { children: item.reason || (item.auth === "required" ? "Authentication required" : "Unavailable") })
2649
2649
  ] }),
2650
- item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2650
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx9("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
2651
2651
  ] }, item.id)) })
2652
2652
  ] }) : null
2653
2653
  ] }) : null
@@ -318,7 +318,7 @@ function HarnessReadiness({ harnesses, adapter }) {
318
318
  item.runtime
319
319
  ] }) : null
320
320
  ] }),
321
- item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
321
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
322
322
  ] }, item.id)) })
323
323
  ] });
324
324
  }
@@ -389,7 +389,7 @@ function HarnessPicker({ harnesses, value, disabled = false, adapter, onChange,
389
389
  /* @__PURE__ */ jsx3("strong", { children: item.label }),
390
390
  /* @__PURE__ */ jsx3("small", { children: item.reason || (item.auth === "required" ? "Authentication required" : "Unavailable") })
391
391
  ] }),
392
- item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
392
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter?.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
393
393
  ] }, item.id)) })
394
394
  ] }) : null
395
395
  ] }) : null
package/settings.mjs CHANGED
@@ -318,7 +318,7 @@ function HarnessReadiness({ harnesses, adapter }) {
318
318
  item.runtime
319
319
  ] }) : null
320
320
  ] }),
321
- item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
321
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter.copyText?.(item.repair), children: "Copy fix" }) : null
322
322
  ] }, item.id)) })
323
323
  ] });
324
324
  }
@@ -389,7 +389,7 @@ function HarnessPicker({ harnesses, value, disabled = false, adapter, onChange,
389
389
  /* @__PURE__ */ jsx3("strong", { children: item.label }),
390
390
  /* @__PURE__ */ jsx3("small", { children: item.reason || (item.auth === "required" ? "Authentication required" : "Unavailable") })
391
391
  ] }),
392
- item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
392
+ item.installed && ["claude-code", "codex"].includes(item.id) && !["ready", "configured"].includes(item.auth) ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter?.onIntent({ action: "authenticateHarness", harness: item.id }), children: "Sign in" }) : item.repair ? /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => adapter?.copyText?.(item.repair), children: "Copy fix" }) : null
393
393
  ] }, item.id)) })
394
394
  ] }) : null
395
395
  ] }) : null