codehere 1.0.1 → 1.0.2

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.
Files changed (163) hide show
  1. package/README.md +36 -192
  2. package/dist/application/use-cases/check-claimed-tests.js +81 -0
  3. package/dist/application/use-cases/detect-test-weakening.js +237 -0
  4. package/dist/application/use-cases/rerun-tests.js +110 -7
  5. package/dist/index.js +38 -1212
  6. package/dist/infrastructure/orchestration/artifacts-extractor.js +2 -323
  7. package/dist/presentation/cli/commands/check-command.js +178 -23
  8. package/dist/presentation/cli/commands/help-command.js +21 -285
  9. package/dist/ui.js +5 -236
  10. package/dist/utils/version.js +0 -6
  11. package/package.json +9 -38
  12. package/dist/application/services/verdict-service.js +0 -154
  13. package/dist/application/use-cases/assess-cross-vendor.js +0 -126
  14. package/dist/application/use-cases/build-cross-vendor-verdict.js +0 -118
  15. package/dist/application/use-cases/domain-trust.js +0 -110
  16. package/dist/application/use-cases/export-aat.js +0 -107
  17. package/dist/application/use-cases/generate-acceptance-criteria.js +0 -223
  18. package/dist/application/use-cases/generate-final-report.js +0 -259
  19. package/dist/application/use-cases/generate-narration.js +0 -130
  20. package/dist/application/use-cases/generate-thread-title.js +0 -181
  21. package/dist/application/use-cases/narrator-prompt-template.js +0 -158
  22. package/dist/application/use-cases/plan-auto-review.js +0 -57
  23. package/dist/application/use-cases/reconcile-audit.js +0 -100
  24. package/dist/application/use-cases/search-sessions.js +0 -70
  25. package/dist/application/use-cases/should-auto-review.js +0 -71
  26. package/dist/application/use-cases/thread-export.js +0 -245
  27. package/dist/application/use-cases/verify-claim.js +0 -456
  28. package/dist/application/use-cases/write-pass.js +0 -277
  29. package/dist/domain/audit.js +0 -11
  30. package/dist/domain/services/codebase-detector.js +0 -85
  31. package/dist/domain/task.js +0 -91
  32. package/dist/error-handler.js +0 -139
  33. package/dist/infrastructure/completion/bash-completion.js +0 -29
  34. package/dist/infrastructure/completion/fish-completion.js +0 -17
  35. package/dist/infrastructure/completion/zsh-completion.js +0 -25
  36. package/dist/infrastructure/config/config-manager.js +0 -174
  37. package/dist/infrastructure/config/product-context.js +0 -49
  38. package/dist/infrastructure/context/adapters/drawio-source.js +0 -157
  39. package/dist/infrastructure/context/adapters/figma-source.js +0 -198
  40. package/dist/infrastructure/context/adapters/github-issue-source.js +0 -160
  41. package/dist/infrastructure/context/adapters/linear-source.js +0 -190
  42. package/dist/infrastructure/context/context-resolver.js +0 -144
  43. package/dist/infrastructure/context/context-source.js +0 -114
  44. package/dist/infrastructure/context/github-api.js +0 -110
  45. package/dist/infrastructure/context/github-device-flow.js +0 -65
  46. package/dist/infrastructure/context/oauth-flow.js +0 -207
  47. package/dist/infrastructure/context/oauth-store.js +0 -122
  48. package/dist/infrastructure/context/registry-bootstrap.js +0 -95
  49. package/dist/infrastructure/context/write-pass-resolver.js +0 -106
  50. package/dist/infrastructure/cost/budget-config.js +0 -114
  51. package/dist/infrastructure/cost/cost-router.js +0 -97
  52. package/dist/infrastructure/cost/spend-aggregator.js +0 -222
  53. package/dist/infrastructure/cost/team-ledger.js +0 -355
  54. package/dist/infrastructure/discovery/discovery-log.js +0 -85
  55. package/dist/infrastructure/hooks/audit-tip-signature.js +0 -336
  56. package/dist/infrastructure/hooks/claude-sdk-hook.js +0 -1018
  57. package/dist/infrastructure/hooks/hook-mode.js +0 -87
  58. package/dist/infrastructure/hooks/mirror-tool-call-to-audit.js +0 -49
  59. package/dist/infrastructure/hooks/pre-prompt-scan.js +0 -122
  60. package/dist/infrastructure/hooks/session-analyzer.js +0 -177
  61. package/dist/infrastructure/observability/execution-tracer.js +0 -227
  62. package/dist/infrastructure/orchestration/agent-adapter.js +0 -13
  63. package/dist/infrastructure/orchestration/agent-installer.js +0 -101
  64. package/dist/infrastructure/orchestration/agents-config-seed.js +0 -68
  65. package/dist/infrastructure/orchestration/aider-adapter.js +0 -611
  66. package/dist/infrastructure/orchestration/cassette-recorder.js +0 -120
  67. package/dist/infrastructure/orchestration/claude-code-adapter.js +0 -592
  68. package/dist/infrastructure/orchestration/codex-adapter.js +0 -574
  69. package/dist/infrastructure/orchestration/conductor-adapter.js +0 -416
  70. package/dist/infrastructure/orchestration/context-handoff.js +0 -162
  71. package/dist/infrastructure/orchestration/control/codex-control-surface.js +0 -99
  72. package/dist/infrastructure/orchestration/control/control-surface.js +0 -15
  73. package/dist/infrastructure/orchestration/detect-ollama.js +0 -75
  74. package/dist/infrastructure/orchestration/failover-classifier.js +0 -151
  75. package/dist/infrastructure/orchestration/failover-config.js +0 -67
  76. package/dist/infrastructure/orchestration/failover-policy.js +0 -106
  77. package/dist/infrastructure/orchestration/gemini-adapter.js +0 -663
  78. package/dist/infrastructure/orchestration/generic-cli-adapter.js +0 -689
  79. package/dist/infrastructure/orchestration/graphify-context.js +0 -209
  80. package/dist/infrastructure/orchestration/memory-injector.js +0 -380
  81. package/dist/infrastructure/orchestration/mocks/mock-agent-repl.js +0 -388
  82. package/dist/infrastructure/orchestration/mocks/mock-codex-app-server.js +0 -73
  83. package/dist/infrastructure/orchestration/mocks/mock-synthesis.js +0 -83
  84. package/dist/infrastructure/orchestration/mocks/resolve-agent-spawn.js +0 -37
  85. package/dist/infrastructure/orchestration/opencode-adapter.js +0 -580
  86. package/dist/infrastructure/orchestration/progress-aggregator.js +0 -906
  87. package/dist/infrastructure/orchestration/readiness.js +0 -103
  88. package/dist/infrastructure/orchestration/session-manager.js +0 -1590
  89. package/dist/infrastructure/orchestration/session-persistence.js +0 -394
  90. package/dist/infrastructure/orchestration/thread-key-store.js +0 -127
  91. package/dist/infrastructure/orchestration/write-pass-store.js +0 -38
  92. package/dist/infrastructure/protocols/cloud-sync.js +0 -207
  93. package/dist/infrastructure/protocols/mcp-helpers.js +0 -25
  94. package/dist/infrastructure/protocols/mcp-server-impl.js +0 -3935
  95. package/dist/infrastructure/protocols/mcp-tools.js +0 -401
  96. package/dist/infrastructure/protocols/probe-port.js +0 -36
  97. package/dist/infrastructure/protocols/thread-phase.js +0 -105
  98. package/dist/infrastructure/protocols/ui/app-script-artifacts.js +0 -121
  99. package/dist/infrastructure/protocols/ui/app-script-audit-footer.js +0 -44
  100. package/dist/infrastructure/protocols/ui/app-script-audit-verify.js +0 -56
  101. package/dist/infrastructure/protocols/ui/app-script-composer-cost.js +0 -588
  102. package/dist/infrastructure/protocols/ui/app-script-context-sources.js +0 -168
  103. package/dist/infrastructure/protocols/ui/app-script-conversation.js +0 -67
  104. package/dist/infrastructure/protocols/ui/app-script-drawer.js +0 -115
  105. package/dist/infrastructure/protocols/ui/app-script-failover.js +0 -133
  106. package/dist/infrastructure/protocols/ui/app-script-github.js +0 -113
  107. package/dist/infrastructure/protocols/ui/app-script-observer.js +0 -104
  108. package/dist/infrastructure/protocols/ui/app-script-onboarding.js +0 -80
  109. package/dist/infrastructure/protocols/ui/app-script-overlay.js +0 -203
  110. package/dist/infrastructure/protocols/ui/app-script-recovery.js +0 -136
  111. package/dist/infrastructure/protocols/ui/app-script-render.js +0 -166
  112. package/dist/infrastructure/protocols/ui/app-script-share.js +0 -78
  113. package/dist/infrastructure/protocols/ui/app-script-sidebar.js +0 -194
  114. package/dist/infrastructure/protocols/ui/app-script-tour.js +0 -78
  115. package/dist/infrastructure/protocols/ui/app-script-wpass.js +0 -312
  116. package/dist/infrastructure/protocols/ui/app-script.js +0 -2998
  117. package/dist/infrastructure/protocols/ui/font-faces.js +0 -7
  118. package/dist/infrastructure/protocols/ui/styles.js +0 -2147
  119. package/dist/infrastructure/protocols/ui/tokens.js +0 -96
  120. package/dist/infrastructure/protocols/ui-page-v2.js +0 -320
  121. package/dist/infrastructure/protocols/verify-page.js +0 -1677
  122. package/dist/infrastructure/security/file-collection.js +0 -118
  123. package/dist/infrastructure/security/fix-code.js +0 -144
  124. package/dist/infrastructure/security/fix-secret.js +0 -89
  125. package/dist/infrastructure/security/permissions-config.js +0 -235
  126. package/dist/infrastructure/security/scan-types.js +0 -10
  127. package/dist/infrastructure/security/ship-scan.js +0 -195
  128. package/dist/infrastructure/security/trust-scorer.js +0 -724
  129. package/dist/infrastructure/security/vibe-checks.js +0 -99
  130. package/dist/infrastructure/storage/atomic-write.js +0 -86
  131. package/dist/infrastructure/storage/cross-tool-agents.js +0 -268
  132. package/dist/infrastructure/storage/project-thread-migration.js +0 -237
  133. package/dist/infrastructure/storage/project-thread-mirror.js +0 -671
  134. package/dist/infrastructure/storage/project-thread-reader.js +0 -409
  135. package/dist/infrastructure/storage/project-thread-title-backfill.js +0 -214
  136. package/dist/monitoring.js +0 -212
  137. package/dist/presentation/cli/commands/audit-command.js +0 -201
  138. package/dist/presentation/cli/commands/budget-command.js +0 -79
  139. package/dist/presentation/cli/commands/config-command.js +0 -125
  140. package/dist/presentation/cli/commands/context-source-command.js +0 -217
  141. package/dist/presentation/cli/commands/hook-command.js +0 -265
  142. package/dist/presentation/cli/commands/init-command.js +0 -590
  143. package/dist/presentation/cli/commands/memory-command.js +0 -1031
  144. package/dist/presentation/cli/commands/narrator-command.js +0 -101
  145. package/dist/presentation/cli/commands/permission-command.js +0 -105
  146. package/dist/presentation/cli/commands/protocols-builder.js +0 -254
  147. package/dist/presentation/cli/commands/protocols-command.js +0 -84
  148. package/dist/presentation/cli/commands/repo-map-builder.js +0 -247
  149. package/dist/presentation/cli/commands/report-command.js +0 -403
  150. package/dist/presentation/cli/commands/scan-command.js +0 -52
  151. package/dist/presentation/cli/commands/scan-tool-command.js +0 -110
  152. package/dist/presentation/cli/commands/search-command.js +0 -51
  153. package/dist/presentation/cli/commands/setup-command.js +0 -330
  154. package/dist/presentation/cli/commands/status-command.js +0 -614
  155. package/dist/presentation/cli/commands/team-command.js +0 -256
  156. package/dist/presentation/cli/commands/thread-command.js +0 -370
  157. package/dist/presentation/cli/commands/trust-command.js +0 -328
  158. package/dist/presentation/cli/commands/verify-command.js +0 -298
  159. package/dist/presentation/cli/error-display.js +0 -328
  160. package/dist/presentation/cli/repl.js +0 -805
  161. package/dist/presentation/cli/task-deliverable.js +0 -153
  162. package/dist/testing/cassette.js +0 -125
  163. package/dist/testing/replay-adapter.js +0 -147
@@ -1,96 +0,0 @@
1
- /**
2
- * The design tokens, in one place, for every page the daemon serves.
3
- *
4
- * Values AND names are DESIGN.md "Instrument" (2026-08-07). Change a token here
5
- * and every surface moves together — which is the whole reason this file exists.
6
- *
7
- * Why this file exists: the product shipped three different "verified" greens.
8
- * styles.ts said --allow:#84b594, verify-page.ts said #28c840 (a macOS traffic
9
- * light), and DESIGN.md ratified a third. For a product whose claim is "green
10
- * only when independently verified", one surface's green did not mean the same
11
- * thing as another's.
12
- *
13
- * The semantic tokens say what they mean now: --verified / --caught, renamed
14
- * from --allow / --block across 158 call sites. The aliases are deleted rather
15
- * than left kind, because an undeclared token resolves to nothing instead of
16
- * failing, so a resurrected --allow would silently drop the colour off a verdict.
17
- * ui-token-gate.mjs carries a `retired-token` rule so it cannot come back.
18
- *
19
- * NOT DONE, do not read this file as "DESIGN.md is fully implemented":
20
- * - --accent is still named --accent, not --ember (109 call sites, its own
21
- * increment). The VALUE is right; only the name lags.
22
- * - --blue survives in the wordmark gradient only. That is the logotype and it
23
- * is synced with codehere-landing, so changing it is a cross-repo brand call
24
- * and Ega's. Every other use was deleted; the gate enforces the carve-out.
25
- */
26
- export const DESIGN_TOKENS = `
27
- :root {
28
- /* ── surfaces · graphite, TRUE neutral (DESIGN.md §5) ──────────────────
29
- Deliberately not the old warm ramp: every peer reviewed on 2026-08-07
30
- (Linear, Vercel, Sentry, Depot) is cool or neutral, and neutral reads as
31
- instrument rather than either cosy room or blue console. */
32
- --bg: #0e0f10; --bg-1: #16181a; --bg-2: #1e2124; --bg-3: #282c30;
33
- --glass-1: rgba(232,234,236,0.025); --glass-2: rgba(232,234,236,0.03);
34
- --glass-3: rgba(232,234,236,0.06); --glass-4: rgba(232,234,236,0.12);
35
- --glass-5: rgba(232,234,236,0.15);
36
- --fg: #e8eaec; --fg-90: rgba(232,234,236,0.90);
37
- --fg-80: rgba(232,234,236,0.80); --fg-70: rgba(232,234,236,0.70);
38
- --fg-50: rgba(232,234,236,0.50); --fg-40: rgba(232,234,236,0.45);
39
- --fg-30: rgba(232,234,236,0.28); --fg-20: rgba(232,234,236,0.20);
40
- --border: rgba(232,234,236,0.09); --border-soft: rgba(232,234,236,0.055);
41
-
42
- /* ── the accent · the human, and the only warm colour in the product ──
43
- The named risk of an instrument aesthetic is that it goes cold. This is
44
- the fix. Never decorative, never a status. */
45
- --accent: #ff9a76; --accent-soft: #f5c6b0; --accent-wash: rgba(255,154,118,0.10);
46
-
47
- /* ── semantic state (DESIGN.md §1 · the trust rule) ────────────────────
48
- --verified is reachable ONLY from MEASURED evidence: something codehere
49
- re-executed and can machine-check. An LLM judgement may never render in
50
- it. --warn carries JUDGED as well as budget/partial. */
51
- --verified: #7fc39a; --caught: #e2827f;
52
- --warn: #d9a441;
53
- --info: #8ab8ee;
54
-
55
- /* DEPRECATED · DESIGN.md §5 bans a second accent. 16 var refs + 23 raw
56
- #4a90e2 across ui.ts, mcp-server-impl.ts, styles.ts, app-script.ts and
57
- verify-page.ts. Deleting it is its own increment; it is kept here so the
58
- product does not render invalid CSS in the meantime. */
59
- --blue: #4a90e2; --blue-soft: #8ab8ee; --blue-wash: rgba(74,144,226,0.08);
60
-
61
- /* ── type scale · CLOSED at six values (DESIGN.md §6) ──────────────────
62
- Closed is what makes it enforceable. scripts/ui-token-gate.mjs allows
63
- exactly this set and nothing else. */
64
- --fs-reading: 40px; /* the one measured fact per card */
65
- --fs-title: 20px; /* room and section titles */
66
- --fs-body: 14.5px; /* anything said */
67
- --fs-ui: 13px; /* controls, rail, cards */
68
- --fs-fact: 12px; /* costs, counts, hashes */
69
- --fs-label: 10.5px; /* instrument marks, column heads */
70
-
71
- /* ── spacing · 4px base, 9 steps ── */
72
- --sp-0: 2px; --sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px;
73
- --sp-5: 24px; --sp-6: 32px; --sp-7: 48px; --sp-8: 64px;
74
-
75
- /* ── radius · tight corners are instrument corners ── */
76
- --r-sm: 2px; --r-md: 4px;
77
- --radius: 4px; --radius-chip: 2px;
78
-
79
- /* ── motion · 200ms default, 300ms max, one canonical ease ── */
80
- --dur: 200ms; --dur-max: 300ms;
81
- --ease: cubic-bezier(0.16, 1, 0.3, 1);
82
-
83
- /* ── typefaces · DESIGN.md §6, one superfamily, three jobs ────────────
84
- IBM Plex was drawn for an engineering company: machine authority without
85
- costume, and absent from this category where everything is Inter or a
86
- Geist-shaped substitute. Self-hosted base64 via FONT_FACES, zero external
87
- fetch — that constraint never changes.
88
- The load-bearing rule: anything SAID is sans, anything a machine RECORDED
89
- is mono. --display is Mono because the biggest thing on a surface is a
90
- measured fact, never a heading (DESIGN.md §0). */
91
- --sans: var(--voice);
92
- --mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
93
- --voice: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
94
- --display: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
95
- }`;
96
- //# sourceMappingURL=tokens.js.map
@@ -1,320 +0,0 @@
1
- import { SHARED_STYLES } from './ui/styles.js';
2
- import { FONT_FACES } from './ui/font-faces.js';
3
- import { APP_SCRIPT } from './ui/app-script.js';
4
- export const TASK_HTML_V2 = `<!doctype html>
5
- <html lang="en">
6
- <head>
7
- <meta charset="utf-8" />
8
- <meta name="viewport" content="width=device-width,initial-scale=1" />
9
- <!-- S16 · one brand everywhere · favicon = the landing's gradient-C (served
10
- locally from /icon.svg, never hotlinked) · title follows the landing's
11
- 'codehere · <context>' pattern with an honest local context. -->
12
- <link rel="icon" type="image/svg+xml" href="/icon.svg" />
13
- <title>codehere · alpha · local</title>
14
- <style>${FONT_FACES}${SHARED_STYLES}</style>
15
- </head>
16
- <body>
17
- <div class="app">
18
- <!-- S13 · header 9->3: wordmark · ONE live context pill (local + spend) ·
19
- ⌘K hint. Beta chip, budget chip, lenses, density, reshape,
20
- share, gear all live INSIDE the ⌘K palette now — same functions,
21
- one keystroke away (rule 1 + rule 9). -->
22
- <div class="header">
23
- <span class="logo" onclick="goHome()" style="cursor:pointer" title="Home"><span class="name">codehere</span><span class="prerelease" title="pre-release · v0.9 · not yet validated with real users">alpha</span></span>
24
- <span class="local-pill" title="Running locally · no telemetry · state on disk at ~/.codehere">
25
- <span class="dot"></span>Local<span class="budget safe" id="budget"></span>
26
- </span>
27
- <!-- Spend & Audit moved into the sidebar rail (nav option B, 2026-07-07) — the rail is THE navigator. -->
28
- <button class="cmdk-hint" id="cmdk-open" title="Commands &amp; search · ⌘K" aria-label="Open the command palette"><span class="kbd">&#8984;K</span></button>
29
- </div>
30
-
31
- <!-- v0.8 S3 · Custom-view banner · appears when reshape is active -->
32
- <div class="custom-view-banner" id="custom-view-banner">
33
- <span class="lbl">custom view</span>
34
- <span class="prompt" id="custom-view-prompt"></span>
35
- <span class="reset" onclick="resetShape()">reset</span>
36
- </div>
37
-
38
- <!-- Failover banner · ported from v1 on /v1 kill 2026-05-23 -->
39
- <div class="failover-banner" id="failover-banner"></div>
40
-
41
- <!-- C-01 · first-run indexing banner · auto-hides once you have ≥ 3 sessions -->
42
- <div class="indexing-banner" id="indexing-banner">
43
- <span class="what">first run</span>
44
- <span>codehere indexed your repo locally · zero telemetry · all state at <code>~/.codehere/</code></span>
45
- </div>
46
-
47
- <!-- F-01 · budget threshold warning · only renders when daily spend &gt;= 80% of cap -->
48
- <div class="budget-banner" id="budget-banner">
49
- <span class="what" id="budget-banner-what"></span>
50
- <span id="budget-banner-msg"></span>
51
- <span class="hint">subscription &amp; free-tier agents (e.g. Cursor) still run</span>
52
- </div>
53
-
54
- <!-- Cockpit shell (Phase-1 S1): a persistent Projects sidebar beside the main
55
- pane. The main pane reuses the existing list/room/detail views unchanged. -->
56
- <div class="shell">
57
- <aside class="sidebar" id="sidebar" aria-label="Projects"></aside>
58
- <div class="content">
59
- <div id="task-list-view" class="content-inner">
60
- <!-- First-run: a non-blocking, dismissible value-first welcome card (renderWelcomeCard),
61
- NOT a full-screen overlay. Sits above the workspace, which stays usable underneath. -->
62
- <div id="home-welcome" style="display:none"></div>
63
- <!-- S13 · "NEEDS YOUR DECISION" — the FIRST thing on the page and the
64
- ONLY orange. Rendered by renderDecisions() from REAL state only
65
- (pending write-passes + verifier-broken verdicts today + failed
66
- runs with retry available today). Empty -> does not render AT ALL
67
- (data-verify-unit removed so H14 can pin absent <=> N===0). -->
68
- <div id="decision-queue" style="display:none"></div>
69
- <!-- F-02 · cross-worktree alert · only visible when any out-of-cwd session has run > 5m -->
70
- <span class="worktree-alert" id="worktree-alert" onclick="if(window._wkTarget)showD(window._wkTarget)">
71
- <span class="pulse-dot"></span><span id="worktree-alert-text" data-user-content>other worktree</span>
72
- </span>
73
- <!-- Observer (Thariq loop-2): at rest a calm ONE-LINE row above TODAY
74
- ("● watching N terminal sessions · M live"), expandable to the
75
- full rail; first-run keeps the teach state. -->
76
- <div id="observer-rail" style="display:none"></div>
77
- <!-- S12->S13 · the hero element. With tasks today it renders the TODAY
78
- day-line ("TODAY · N AGENTS · N CLAIMS CHECKED · $X.XX") and keeps
79
- carrying the data-verify-hero-* stamps (H13, derivations unchanged
80
- via heroCounts). Zero tasks today -> the first-run hero with its
81
- teach copy, ordered to the top via body.first-run. -->
82
- <div class="home-hero" id="home-hero" style="display:none" data-verify-unit="home-hero" data-verify-hero-mode="first-run"></div>
83
- <!-- S13 · active-filter token · filters live in ⌘K; the applied filter
84
- shows as ONE removable token, not a tab bar. -->
85
- <div id="filter-token" style="display:none"></div>
86
- <div id="task-list">
87
- <div class="skeleton" id="skeleton">
88
- <div class="skeleton-card"><span class="sk-sweep"></span></div>
89
- <div class="skeleton-card"><span class="sk-sweep"></span></div>
90
- <div class="skeleton-card"><span class="sk-sweep"></span></div>
91
- <div class="skeleton-card"><span class="sk-sweep"></span></div>
92
- </div>
93
- </div>
94
- </div>
95
- <div id="task-detail-view" style="display:none" class="content-inner">
96
- <div id="detail-view"></div>
97
- <div class="input-area" style="border-top:none;padding:12px 0">
98
- <div class="input-bar" style="max-width:100%">
99
- <textarea class="input-ta composer-bar" id="detail-ta" placeholder="Request changes or ask a question..." rows="1" disabled></textarea>
100
- <div class="input-meta composer-meta"><span class="pick-agent" title="Auto-pick · best agent for this task">› Auto</span><span class="cost-est" id="cost-est-detail" data-verify-unit="cost-est" title="Estimated cost">&#8230;</span></div>
101
- <button class="send-btn composer-send" id="detail-btn" disabled aria-label="Send follow-up">&#8593;</button>
102
- </div>
103
- <div class="send-fail" id="detail-send-fail" style="display:none"></div>
104
- </div>
105
- </div>
106
- <!-- Spend & Audit: the team cost + audit ledger as its own page (nav tab), not a banner on the workspace. -->
107
- <div id="spend-view" style="display:none" class="content-inner">
108
- <div id="team-cost-hero"></div>
109
- </div>
110
- </div>
111
- </div>
112
-
113
- <div class="input-area">
114
- <!-- GitHub import row · populated by initGhImport(): a Connect button when
115
- disconnected, or a repo field + issue PICKER when connected. -->
116
- <div id="gh-import" class="gh-import"></div>
117
- <div class="input-bar">
118
- <textarea class="input-ta composer-bar" id="main-ta" placeholder="Describe a task or ask a question..." rows="1"></textarea>
119
- <div class="input-meta composer-meta"><span class="agentpick-wrap"><input type="hidden" id="agent-pick" value="auto"><button type="button" class="agentpick" id="agentpick-btn" aria-haspopup="listbox" aria-expanded="false" title="Who runs this task · Auto picks the best fit" onclick="toggleAgentMenu(event)"><span id="agentpick-cur" class="agentpick-cur"></span><svg class="agentpick-car" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg></button><div class="agentpick-menu" id="agentpick-menu" role="listbox" aria-label="Pick the agent for this task" hidden></div></span><span class="cost-est" id="cost-est-main" data-verify-unit="cost-est" title="Estimated cost">&#8230;</span></div>
120
- <button class="send-btn composer-send" id="main-btn" aria-label="Send task">&#8593;</button>
121
- </div>
122
- <div class="send-fail" id="main-send-fail" style="display:none"></div>
123
- <div class="kbd-hint">
124
- <span class="item"><span class="kbd">&#9166;</span> send</span>
125
- <span class="item"><span class="kbd">shift &#9166;</span> newline</span>
126
- <span class="item"><span class="kbd">&#8984;K</span> commands</span>
127
- <span class="item"><span class="kbd">Esc</span> close modal</span>
128
- </div>
129
- </div>
130
-
131
- <!-- v0.8 S3 · Reshape modal · ported from demo v12 lines 1142-1176 -->
132
- <div class="reshape-modal" id="reshape-modal">
133
- <div class="reshape-card">
134
- <button class="close-x" id="reshape-close" aria-label="Close">×</button>
135
- <div class="k">reshape this view</div>
136
- <h2>Describe the view you want.</h2>
137
- <p class="sub">Your agent composes the layout from codehere's shared primitives. Software ships building blocks · the final interface is yours to author.</p>
138
- <div class="reshape-input">
139
- <input id="reshape-input" placeholder="e.g. just show me what shipped + cost · no code"/>
140
- <button id="reshape-submit">Compose</button>
141
- </div>
142
- <div class="reshape-suggestions prims">
143
- <div class="lbl">or pick a quick start</div>
144
- <button class="pill" data-shape="ship-only" data-prompt="just show me what shipped and the cost · hide everything else">just show me what shipped + cost <span class="what">— Final Report + file chips only</span></button>
145
- <button class="pill" data-shape="velocity" data-prompt="velocity view · outcomes + duration + agent allocation · hide audit and code">velocity view <span class="what">— outcomes + time + cost · for daily check-in</span></button>
146
- <button class="pill" data-shape="security" data-prompt="security view · highlight hook blocks, overrides, trust grades · hide narrative">security view <span class="what">— blocks / overrides / trust amplified</span></button>
147
- </div>
148
- <div class="agent-compose recomposing" id="agent-compose">
149
- <div class="agent-line"><span style="font-family:var(--mono); color:var(--fg-90); font-weight:600">claude-code</span><span style="color:var(--fg-40)">· composing your view from shared primitives</span></div>
150
- <div style="margin-top: 8px;">
151
- <div class="line">read <span class="info">user prompt</span> · "<span id="compose-prompt-echo"></span>"</div>
152
- <div class="line">analyze · <span class="kw">5 primitives in scope</span>: <code style="background:var(--bg-2);padding:0 4px;border-radius:2px">turn</code> · <code style="background:var(--bg-2);padding:0 4px;border-radius:2px">panel</code> · <code style="background:var(--bg-2);padding:0 4px;border-radius:2px">artifact</code> · <code style="background:var(--bg-2);padding:0 4px;border-radius:2px">audit-line</code> · <code style="background:var(--bg-2);padding:0 4px;border-radius:2px">tool-card</code></div>
153
- <div class="line">compose <span class="kw">view-config</span> · <span id="compose-config" style="color:var(--fg-90)"></span></div>
154
- <div class="line">apply · <span class="ok">view ready · 0.4s</span></div>
155
- <div class="line"><span class="ok">&check;</span> custom view active · <span style="color:var(--fg-50)">re-shape any time by clicking the button</span></div>
156
- </div>
157
- </div>
158
- <div class="primitives-note">
159
- <b>codehere ships primitives, not screens.</b> Your agent composes the layout from these building blocks · you author the final view in plain English.
160
- <div class="prims">
161
- <span class="p">turn</span>
162
- <span class="p">panel</span>
163
- <span class="p">artifact</span>
164
- <span class="p">audit-line</span>
165
- <span class="p">tool-card</span>
166
- <span class="p">verified-block</span>
167
- <span class="p">file-chip</span>
168
- <span class="p">write-pass</span>
169
- </div>
170
- </div>
171
- </div>
172
- </div>
173
-
174
- <!-- Connect a project from a GitHub URL · clone locally, open as a project -->
175
- <div class="clone-modal" id="clone-modal" role="dialog" aria-modal="true" aria-labelledby="clone-title">
176
- <div class="clone-card">
177
- <button class="close-x" id="clone-close" aria-label="Close" onclick="closeClone()">&#215;</button>
178
- <div class="head" id="clone-title">Open a project from GitHub</div>
179
- <p class="blurb">Paste a repo URL. codehere clones it to <code>~/codehere-projects/</code> on this machine and opens it &#8212; using your existing git access. Private repos work if your git is already set up.</p>
180
- <div class="clone-input">
181
- <input id="clone-url" placeholder="github.com/org/repo &#183; or org/repo" autocomplete="off" spellcheck="false" onkeydown="if(event.key==='Enter')doClone()"/>
182
- <button id="clone-submit" onclick="doClone()">Clone</button>
183
- </div>
184
- <div class="clone-status" id="clone-status" style="display:none"></div>
185
- </div>
186
- </div>
187
-
188
- <!-- v0.8 S4 · share-thread modal · ported from demo v12 lines 1126-1139 -->
189
- <div class="share-modal" id="share-modal" role="dialog" aria-modal="true" aria-labelledby="share-title">
190
- <div class="share-card">
191
- <div class="head" id="share-title">Share this thread <span class="tag">· still local-first</span></div>
192
- <p class="blurb">Codehere generates a signed payload (steps · artifacts · Final Report · audit chain) you can paste into Slack, an email, a PR description. Your code never leaves your machine. Only the synthesized record does.</p>
193
- <div class="share-link-box" id="share-link-box">codehere://thread/<span id="share-link-id">…</span>?signed=ed25519:<span id="share-link-fp">…</span></div>
194
- <div class="share-actions">
195
- <button class="share-btn-primary" id="share-copy-link">Copy link</button>
196
- <button class="share-btn-secondary" id="share-download">Download bundle (.json)</button>
197
- <button class="share-btn-secondary" id="share-close">Close</button>
198
- </div>
199
- <p class="share-foot">Link contains a signed payload · not source code · recipient verifies chain integrity locally before trusting.</p>
200
- </div>
201
- </div>
202
- <div class="share-toast" id="share-toast">Link copied</div>
203
-
204
- <!-- v0.9 S7 · overlay-renderer · inspect-and-act for ctx-source URLs -->
205
- <div class="or-overlay overlay-render" id="or-overlay" role="dialog" aria-modal="true">
206
- <div class="or-card or-content">
207
- <div class="or-head">
208
- <span class="src" id="or-src">linear</span>
209
- <span class="meta" id="or-meta">…</span>
210
- <span class="audit"><b>● audit</b> · captured locally</span>
211
- <button class="or-close" id="or-close" aria-label="Close">×</button>
212
- </div>
213
- <div class="or-body" id="or-body">
214
- <div class="preview-loading">fetching…</div>
215
- </div>
216
- <div class="or-composer or-agent-reply">
217
- <span class="hint" id="or-hint">Ask the agent about this · all interaction captured in audit chain</span>
218
- <div class="row">
219
- <input id="or-input" placeholder="e.g. summarize the blocker · or what's the priority?"/>
220
- <button id="or-ask" disabled title="Composer ships in S7 Part D">Ask agent</button>
221
- </div>
222
- </div>
223
- </div>
224
- </div>
225
-
226
- <!-- v0.9 S6 · W-PASS approval modal · demo v12 lines 2030-2050 -->
227
- <button class="wp-pending-badge" id="wp-pending-badge" title="An agent wants to make a write · click to review">write awaits ›</button>
228
- <div class="wp-modal" id="wp-modal" role="dialog" aria-modal="true" aria-labelledby="wp-title">
229
- <div class="wp-card">
230
- <div class="wp-banner"><span class="dot"></span><span>write-pass · agent action · awaits your approval</span></div>
231
- <h3 class="wp-title" id="wp-title" data-user-content>…</h3>
232
- <p class="wp-reason" id="wp-reason" data-user-content>…</p>
233
- <div class="wp-meta">
234
- tool · <b id="wp-target" data-user-content>…</b> · third-party API · <span style="color:var(--accent)">gated by codehere</span>
235
- </div>
236
- <div class="wp-meta">
237
- agent · <b id="wp-emitter">…</b> · session <span id="wp-session">…</span>
238
- </div>
239
- <div class="wp-meta" id="wp-trust-row" style="display:none">
240
- domain · <b id="wp-trust-host">…</b> · trust grade
241
- <span class="wp-trust-grade" id="wp-trust-grade">?</span>
242
- <span id="wp-trust-reason" style="color:var(--fg-50)"></span>
243
- </div>
244
- <div class="wp-payload-wrap" id="wp-payload-wrap">
245
- <div class="wp-payload-head">
246
- <span class="method" id="wp-method">PATCH</span>
247
- <span id="wp-targetline" data-user-content>…</span>
248
- </div>
249
- <div class="wp-payload" id="wp-payload" data-user-content>…</div>
250
- </div>
251
- <textarea class="wp-payload-edit" id="wp-payload-edit" style="display:none" spellcheck="false"></textarea>
252
- <div class="wp-actions" id="wp-actions">
253
- <button class="wp-btn-approve" id="wp-approve">Approve + send</button>
254
- <button class="wp-btn-edit" id="wp-edit">Edit payload</button>
255
- <button class="wp-btn-cancel" id="wp-cancel">Cancel</button>
256
- </div>
257
- <div class="wp-actions" id="wp-actions-editing" style="display:none">
258
- <button class="wp-btn-save" id="wp-save">Save + send</button>
259
- <button class="wp-btn-cancel" id="wp-edit-cancel">Discard edit</button>
260
- </div>
261
- <p class="wp-foot">codehere gates this write to a third-party tool · audit chain captures URL · payload · approval · response · signed timestamp · one verifiable thread instead of scattered tool logs</p>
262
- <div class="wp-result" id="wp-result" style="display:none"></div>
263
- </div>
264
- </div>
265
-
266
- <!-- S13 · the ⌘K command palette — THE control surface. Every control that
267
- left the header is a command here; each label names its visible
268
- consequence and Enter actually runs the existing function. -->
269
- <div class="palette-scrim" id="palette-scrim" data-verify-unit="palette">
270
- <div class="palette" role="dialog" aria-modal="true" aria-label="Command palette">
271
- <div class="pin"><input id="palette-input" placeholder="Type a command · every control lives here…" autocomplete="off" spellcheck="false" aria-label="Filter commands"/></div>
272
- <div class="plist" id="palette-list"></div>
273
- <div class="pfoot"><span>arrow keys navigate</span><span>&#9166; run</span><span>esc close</span></div>
274
- </div>
275
- </div>
276
-
277
- <!-- Settings drawer (A-09) · holds Context Sources + future toggles -->
278
- <div class="drawer-overlay" id="drawer-overlay"></div>
279
- <aside class="drawer" id="settings-drawer" aria-hidden="true">
280
- <button class="drawer-close" id="settings-close" aria-label="Close settings">×</button>
281
- <div class="drawer-title">Settings</div>
282
-
283
- <h3>Integrations</h3>
284
- <p class="sub">Working context sources appear here. Use their URL chips in prompts.</p>
285
- <div id="cs-list">
286
- <div style="color:var(--fg-40); font-size:12px">loading...</div>
287
- </div>
288
- </aside>
289
-
290
- <div id="offline-banner" class="offline-banner" style="display:none">You're offline. Actions will resume when connected.</div>
291
- <div id="toast" style="display:none;position:fixed;bottom:80px;left:50%;transform:translateX(-50%);background:var(--bg-2);border:1px solid var(--border);border-radius:8px;padding:8px 16px;font-size:12px;color:var(--fg-70);z-index:100"></div>
292
-
293
- <!-- RADICAL bottom-chrome collapse (2026-05-24) · audit-chain panel
294
- inlined into the OSS-footer status bar · ~115px -> ~28px ·
295
- all load-bearing info preserved (dots · stats · Verify button) ·
296
- only the redundant subtitle + panel-card chrome removed. -->
297
- <div class="oss-footer">
298
- <span class="brand">codehere</span>
299
- <span class="sep">&middot;</span>
300
- <span id="oss-version">v0.6.x</span>
301
- <span class="sep">&middot;</span>
302
- <a href="https://github.com/muhammadegaa/codehere" target="_blank" rel="noopener">github</a>
303
- <span class="sep">&middot;</span>
304
- <span>MIT</span>
305
- <span class="sep">&middot;</span>
306
- <span class="audit-chain-panel">
307
- <button id="audit-verify-btn" class="audit-chain-btn" onclick="verifyAuditChain()" title="Check your local activity log hasn't been edited">verify log</button>
308
- <span id="audit-result" class="audit-chain-result" style="color:var(--fg-50)"></span>
309
- </span>
310
- <span class="right">built locally</span>
311
- </div>
312
- </div>
313
- <!-- First-run: welcome splash + first-time setup (JS-rendered), then the tour. -->
314
- <div id="ob-welcome" class="ob-welcome" hidden></div>
315
- <!-- Interactive onboarding walkthrough — spotlight coachmarks over the real UI. -->
316
- <div id="ob-tour" class="ob-tour" hidden><div class="ob-spot" id="ob-spot"></div><div class="ob-pop" id="ob-pop"></div></div>
317
- <script>${APP_SCRIPT}</script>
318
- </body>
319
- </html>`;
320
- //# sourceMappingURL=ui-page-v2.js.map