@phenx-inc/ctlsurf 0.17.1 → 0.17.3
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 +25 -2
- package/bin/ctlsurf-worker.js +24 -0
- package/out/headless/index.mjs +1033 -128
- package/out/headless/index.mjs.map +4 -4
- package/out/main/index.js +929 -17
- package/out/preload/index.js +15 -0
- package/out/renderer/assets/{cssMode-BtQxI2Eb.js → cssMode-BJfoToLX.js} +3 -3
- package/out/renderer/assets/{freemarker2-DRW5dmY5.js → freemarker2-T0eMtP1Z.js} +1 -1
- package/out/renderer/assets/{handlebars-CFLF3cP7.js → handlebars-Dbbib8fi.js} +1 -1
- package/out/renderer/assets/{html-DtnBOkwp.js → html-BRHT_oxc.js} +1 -1
- package/out/renderer/assets/{htmlMode-DMVysDCg.js → htmlMode-BRlZTxME.js} +3 -3
- package/out/renderer/assets/{index-CEjwKjtd.css → index-CBWAeUYW.css} +91 -0
- package/out/renderer/assets/{index-Dm70hk5s.js → index-RCAeuJTr.js} +476 -411
- package/out/renderer/assets/{javascript-ChlyA1sf.js → javascript-BbOZOxq9.js} +2 -2
- package/out/renderer/assets/{jsonMode-D1_oHzeN.js → jsonMode-CUvAeYcT.js} +3 -3
- package/out/renderer/assets/{liquid-D4ftdy1G.js → liquid-DRIACo_s.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-Ckqu5ubG.js → lspLanguageFeatures-Ds-3nH9p.js} +1 -1
- package/out/renderer/assets/{mdx-B9wsVYSC.js → mdx-D76jlpLO.js} +1 -1
- package/out/renderer/assets/{python-e23tD6IS.js → python-CMuRPKJi.js} +1 -1
- package/out/renderer/assets/{razor-CrDyXj3d.js → razor-DRoH5mal.js} +1 -1
- package/out/renderer/assets/{tsMode-BwGC5o4O.js → tsMode-dPJzgFD7.js} +1 -1
- package/out/renderer/assets/{typescript-Do-98d_O.js → typescript-D5USKnLj.js} +1 -1
- package/out/renderer/assets/{xml-Dpdu5R3m.js → xml-qYg1wt2P.js} +1 -1
- package/out/renderer/assets/{yaml-B0Zt7LCJ.js → yaml-Uc-CvnvL.js} +1 -1
- package/out/renderer/index.html +2 -2
- package/package.json +4 -2
- package/scripts/check-work-map-gpu.cjs +62 -0
- package/scripts/check-work-map-gpu.d.cts +13 -0
- package/scripts/postinstall.cjs +15 -0
- package/scripts/prepare-work-map.py +37 -0
- package/scripts/test-work-map-capability.cjs +45 -0
- package/scripts/test-work-map-ui.cjs +130 -0
- package/scripts/test-work-map.cjs +352 -0
- package/scripts/work-map-clef.py +81 -0
- package/src/main/index.ts +35 -1
- package/src/main/observer/observer.ts +2 -0
- package/src/main/orchestrator.ts +39 -4
- package/src/main/transcripts.ts +35 -16
- package/src/main/workMap/clef.ts +156 -0
- package/src/main/workMap/normalize.ts +172 -0
- package/src/main/workMap/source.ts +28 -0
- package/src/main/workMap/tree.ts +199 -0
- package/src/main/workMap/workMap.ts +244 -0
- package/src/preload/index.ts +17 -0
- package/src/renderer/App.tsx +15 -16
- package/src/renderer/components/ObserverPanel.tsx +3 -0
- package/src/renderer/components/SettingsDialog.tsx +0 -104
- package/src/renderer/components/WorkMapPanel.tsx +235 -0
- package/src/renderer/components/WorkMapToggle.tsx +50 -0
- package/src/renderer/lib/workMapHighlights.ts +41 -0
- package/src/renderer/styles.css +91 -0
- package/src/shared/workMap.d.ts +70 -0
package/out/preload/index.js
CHANGED
|
@@ -85,6 +85,21 @@ const api = {
|
|
|
85
85
|
// Speak agent replies (global, Electron-only)
|
|
86
86
|
getSpeakReplies: () => electron.ipcRenderer.invoke("speak:get"),
|
|
87
87
|
setSpeakReplies: (enabled) => electron.ipcRenderer.invoke("speak:set", enabled),
|
|
88
|
+
getWorkMap: (tabId) => electron.ipcRenderer.invoke("workmap:get", tabId),
|
|
89
|
+
getWorkMapCapability: () => electron.ipcRenderer.invoke("workmap:capability"),
|
|
90
|
+
onWorkMapCapability: (callback) => {
|
|
91
|
+
const listener = (_event, capability) => callback(capability);
|
|
92
|
+
electron.ipcRenderer.on("workmap:capability", listener);
|
|
93
|
+
return () => electron.ipcRenderer.removeListener("workmap:capability", listener);
|
|
94
|
+
},
|
|
95
|
+
getWorkMapSource: (tabId, eventId) => electron.ipcRenderer.invoke("workmap:source", tabId, eventId),
|
|
96
|
+
setWorkMap: (tabId, settings) => electron.ipcRenderer.invoke("workmap:set", tabId, settings),
|
|
97
|
+
clearWorkMap: (tabId) => electron.ipcRenderer.invoke("workmap:clear", tabId),
|
|
98
|
+
onWorkMapUpdate: (callback) => {
|
|
99
|
+
const listener = (_event, snapshot) => callback(snapshot);
|
|
100
|
+
electron.ipcRenderer.on("workmap:update", listener);
|
|
101
|
+
return () => electron.ipcRenderer.removeListener("workmap:update", listener);
|
|
102
|
+
},
|
|
88
103
|
// Observer supervision layer (global). The API key is write-only over IPC:
|
|
89
104
|
// the getter reports only whether one is configured and from where.
|
|
90
105
|
getObserverSettings: () => electron.ipcRenderer.invoke("observer:get"),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages } from "./index-
|
|
2
|
-
import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-
|
|
3
|
-
import { h, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages } from "./index-RCAeuJTr.js";
|
|
2
|
+
import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-Ds-3nH9p.js";
|
|
3
|
+
import { h, i, j, t, k } from "./lspLanguageFeatures-Ds-3nH9p.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages } from "./index-
|
|
2
|
-
import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-
|
|
3
|
-
import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages } from "./index-RCAeuJTr.js";
|
|
2
|
+
import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-Ds-3nH9p.js";
|
|
3
|
+
import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-Ds-3nH9p.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|
|
@@ -7403,6 +7403,97 @@
|
|
|
7403
7403
|
flipped mechanically.
|
|
7404
7404
|
───────────────────────────────────────────────────────────── */
|
|
7405
7405
|
|
|
7406
|
+
/* Live work map */
|
|
7407
|
+
.work-map-panel { position: relative; display: flex; flex-direction: column; height: 100%; min-width: 0; overflow: hidden; background: var(--bg-app); color: var(--text); font-size: 12px; }
|
|
7408
|
+
.work-map-controls { padding: 20px 18px 12px; flex-shrink: 0; border-bottom: 1px solid var(--border-subtle); background: var(--bg-chrome); max-height: 55%; overflow-y: auto; }
|
|
7409
|
+
.work-map-kicker { display: block; color: var(--text-muted); font-size: 9px; font-weight: 700; letter-spacing: 1.6px; line-height: 1.8; }
|
|
7410
|
+
.work-map-heading-row { display: flex; justify-content: space-between; align-items: center; gap: 8px; margin: 4px 0 10px; }
|
|
7411
|
+
.work-map-heading h2 { margin: 0; color: var(--text-bright); font-size: 21px; font-weight: 550; letter-spacing: -0.7px; }
|
|
7412
|
+
.work-map-panel button, .work-map-panel select, .work-map-panel input { font: inherit; }
|
|
7413
|
+
.work-map-panel button { cursor: pointer; }
|
|
7414
|
+
.work-map-panel button:disabled { opacity: .45; cursor: default; }
|
|
7415
|
+
.work-map-panel button:focus-visible, .work-map-panel summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
7416
|
+
.work-map-switch { display: flex; align-items: center; gap: 6px; flex-shrink: 0; padding: 4px 7px; border: 1px solid var(--border); border-radius: 20px; background: var(--bg-surface); color: var(--text-muted); }
|
|
7417
|
+
.work-map-switch span { width: 11px; height: 11px; border-radius: 50%; background: var(--text-muted); }
|
|
7418
|
+
.work-map-switch b { font-size: 10px; font-weight: 600; }
|
|
7419
|
+
.work-map-switch.on { color: var(--success); border-color: var(--success); background: var(--bg-chip-soft); }
|
|
7420
|
+
.work-map-switch.on span { background: var(--success); }
|
|
7421
|
+
.work-map-engine-row { display: flex; gap: 12px; align-items: center; }
|
|
7422
|
+
.work-map-engine-row label { color: var(--text-soft); font-size: 11px; }
|
|
7423
|
+
.work-map-engine-row select { flex: 1; min-width: 0; padding: 6px 8px; color: var(--text-bright); background: var(--bg-well); border: 1px solid var(--border-subtle); border-radius: 6px; }
|
|
7424
|
+
.work-map-live { display: flex; align-items: center; gap: 6px; padding-top: 12px; font-size: 10px; color: var(--text-soft); }
|
|
7425
|
+
.work-map-live-dot { width: 5px; height: 5px; flex-shrink: 0; background: var(--text-muted); border-radius: 50%; }
|
|
7426
|
+
.work-map-live-dot.on { background: var(--success); box-shadow: 0 0 7px color-mix(in srgb, var(--success) 30%, transparent); }
|
|
7427
|
+
.work-map-agent { margin-left: auto; color: var(--text-muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
7428
|
+
.work-map-error { padding: 10px; margin-top: 12px; border: 1px solid var(--danger); border-radius: 6px; color: var(--danger); font-size: 11px; line-height: 1.5; overflow-wrap: anywhere; }
|
|
7429
|
+
.work-map-error button, .work-map-setup button { display: block; background: var(--bg-surface); border: 1px solid var(--border); color: var(--text-bright); border-radius: 4px; padding: 4px 9px; margin-top: 8px; }
|
|
7430
|
+
.work-map-setup { margin-top: 10px; font-size: 10px; color: var(--text-muted); }
|
|
7431
|
+
.work-map-setup summary { cursor: pointer; width: fit-content; }
|
|
7432
|
+
.work-map-setup p { color: var(--text-soft); line-height: 1.6; }
|
|
7433
|
+
.work-map-setup label { display: block; margin-top: 8px; color: var(--text-soft); }
|
|
7434
|
+
.work-map-setup input { display: block; width: 100%; box-sizing: border-box; margin-top: 4px; padding: 6px; background: var(--bg-well); color: var(--text); border: 1px solid var(--border); border-radius: 4px; font-size: 10px; }
|
|
7435
|
+
.work-map-scroll { flex: 1; min-height: 0; overflow: auto; padding: 20px 14px 40px; scrollbar-gutter: stable; overflow-anchor: none; }
|
|
7436
|
+
.work-map-empty { padding: 24px 14px; max-width: 280px; margin: auto; }
|
|
7437
|
+
.work-map-empty-tree { display: flex; flex-direction: column; color: var(--accent); font: 22px/1.7 ui-monospace, monospace; margin: 0 0 20px 10px; }
|
|
7438
|
+
.work-map-empty-tree span { color: var(--text-muted); padding-left: 5px; }
|
|
7439
|
+
.work-map-empty h3 { font-size: 16px; font-weight: 500; line-height: 1.5; color: var(--text-bright); margin: 0 0 10px; }
|
|
7440
|
+
.work-map-empty p { color: var(--text-soft); font-size: 12px; line-height: 1.8; margin: 0; }
|
|
7441
|
+
.work-map-goal + .work-map-goal { margin-top: 28px; }
|
|
7442
|
+
.work-map-goal-heading { display: flex; align-items: flex-start; gap: 9px; width: 100%; border: 0; padding: 0; background: transparent; text-align: left; color: var(--text-bright); }
|
|
7443
|
+
.work-map-goal-icon { font-size: 22px; line-height: 1.5; color: var(--accent); flex-shrink: 0; }
|
|
7444
|
+
.work-map-goal-heading strong { display: block; line-height: 1.5; font-size: 13px; font-weight: 550; overflow-wrap: anywhere; }
|
|
7445
|
+
.work-map-caret { margin-left: auto; color: var(--text-muted); flex-shrink: 0; font-size: 12px; }
|
|
7446
|
+
.work-map-branches { margin: 12px 0 0 10px; padding-left: 17px; border-left: 1px solid var(--border-dim); }
|
|
7447
|
+
.work-map-branch { position: relative; padding: 0 0 17px; }
|
|
7448
|
+
.work-map-branch:last-child { padding-bottom: 0; }
|
|
7449
|
+
.work-map-branch::before { content: ''; position: absolute; left: -18px; top: 12px; width: 15px; height: 1px; background: var(--border-dim); }
|
|
7450
|
+
.work-map-branch-heading { display: flex; align-items: center; gap: 7px; width: 100%; padding: 5px 0; border: 0; background: transparent; text-align: left; color: var(--text-bright); }
|
|
7451
|
+
.work-map-branch-point { width: 6px; height: 6px; flex-shrink: 0; border-radius: 2px; background: var(--accent); }
|
|
7452
|
+
.work-map-branch-point.failed { background: var(--danger); }
|
|
7453
|
+
.work-map-branch-label { min-width: 0; overflow-wrap: anywhere; font-size: 11px; font-weight: 600; }
|
|
7454
|
+
.work-map-count { padding: 1px 5px; border-radius: 4px; background: var(--bg-chip); color: var(--text-soft); font-size: 9px; }
|
|
7455
|
+
.work-map-steps { list-style: none; margin: 5px 0 0 2px; padding: 0 0 0 8px; border-left: 1px solid var(--border-subtle); }
|
|
7456
|
+
.work-map-step { margin: 5px 0; border: 1px solid var(--border-well); background: var(--bg-well); border-radius: 7px; overflow: hidden; }
|
|
7457
|
+
.work-map-step.failed { border-color: color-mix(in srgb, var(--danger) 45%, var(--border-well)); }
|
|
7458
|
+
.work-map-step-button { display: flex; align-items: flex-start; gap: 8px; padding: 10px 9px; width: 100%; border: 0; background: transparent; color: var(--text); text-align: left; }
|
|
7459
|
+
.work-map-step-button:hover { background: var(--bg-inset-hi); }
|
|
7460
|
+
.work-map-activity { display: grid; place-items: center; width: 22px; height: 22px; flex-shrink: 0; border-radius: 5px; background: var(--bg-chip); color: var(--accent); font-size: 17px; }
|
|
7461
|
+
.work-map-activity.editing { color: var(--warning); }
|
|
7462
|
+
.work-map-activity.testing { color: var(--success); }
|
|
7463
|
+
.work-map-activity.planning { color: var(--sev-digest); }
|
|
7464
|
+
.work-map-activity.thinking { color: var(--sev-digest); }
|
|
7465
|
+
.work-map-step.follows-intent { margin-left: 12px; border-left: 2px solid var(--border-dim); }
|
|
7466
|
+
.work-map-link { color: var(--text-soft); }
|
|
7467
|
+
.work-map-reason { display: block; border-left: 2px solid var(--border-dim); padding-left: 7px; margin-top: 7px; color: var(--text-soft); font-size: 10px; line-height: 1.7; overflow-wrap: anywhere; }
|
|
7468
|
+
.work-map-reason b { color: var(--text-bright); font-size: 9px; margin-right: 3px; }
|
|
7469
|
+
.work-map-receipt .work-map-source-text { max-height: 310px; line-height: 1.8; }
|
|
7470
|
+
.work-map-highlight { color: var(--text-bright); background: color-mix(in srgb, var(--warning) 25%, transparent); border-radius: 2px; padding: 1px 0; }
|
|
7471
|
+
.work-map-highlight.reason { background: color-mix(in srgb, var(--accent) 25%, transparent); }
|
|
7472
|
+
.work-map-highlight-key { display: flex !important; flex-wrap: wrap; gap: 10px; }
|
|
7473
|
+
.work-map-highlight-key span:first-child { color: var(--warning); }
|
|
7474
|
+
.work-map-highlight-key span + span { color: var(--accent); }
|
|
7475
|
+
.work-map-thinking-status { color: var(--text-muted); font-size: 10px; line-height: 1.5; margin: 8px 0 0; }
|
|
7476
|
+
.work-map-intent { color: var(--sev-digest); }
|
|
7477
|
+
.work-map-intent.hypothesis { color: var(--warning); }
|
|
7478
|
+
.work-map-intent.decision { color: var(--accent); }
|
|
7479
|
+
.work-map-step-copy { min-width: 0; flex: 1; }
|
|
7480
|
+
.work-map-step-title { display: block; overflow-wrap: anywhere; line-height: 1.6; font-size: 11px; }
|
|
7481
|
+
.work-map-step-meta { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 5px; font-size: 9px; color: var(--text-muted); }
|
|
7482
|
+
.work-map-status.running { color: var(--accent); }
|
|
7483
|
+
.work-map-status.succeeded { color: var(--success); }
|
|
7484
|
+
.work-map-status.failed { color: var(--danger); }
|
|
7485
|
+
.work-map-receipt-caret { color: var(--text-muted); line-height: 1.6; font-size: 12px; }
|
|
7486
|
+
.work-map-evidence { padding: 0 10px 10px; font-size: 10px; line-height: 1.6; }
|
|
7487
|
+
.work-map-evidence-heading { border-top: 1px solid var(--border-subtle); padding-top: 10px; color: var(--text-bright); font-weight: 600; }
|
|
7488
|
+
.work-map-receipt { margin-top: 10px; color: var(--text-soft); }
|
|
7489
|
+
.work-map-receipt pre { font: 10px/1.6 ui-monospace, monospace; color: var(--text); background: var(--bg-app); white-space: pre-wrap; overflow-wrap: anywhere; padding: 8px; border-radius: 4px; max-height: 170px; overflow: auto; }
|
|
7490
|
+
.work-map-receipt code { display: block; color: var(--text-muted); font-size: 9px; overflow-wrap: anywhere; }
|
|
7491
|
+
.work-map-evidence small { display: block; margin-top: 10px; color: var(--text-muted); font-size: 9px; }
|
|
7492
|
+
.work-map-retained { color: var(--text-muted); font-size: 10px; padding: 12px 0; text-align: center; }
|
|
7493
|
+
.work-map-jump { position: absolute; bottom: 45px; left: 50%; transform: translateX(-50%); white-space: nowrap; border: 1px solid var(--border-strong); border-radius: 20px; padding: 7px 13px; background: var(--bg-raised); color: var(--accent); box-shadow: 0 3px 12px var(--shadow-color); }
|
|
7494
|
+
.work-map-footer { display: flex; align-items: center; justify-content: space-between; padding: 9px 14px; gap: 8px; border-top: 1px solid var(--border-subtle); background: var(--bg-chrome); color: var(--text-muted); font-size: 9px; }
|
|
7495
|
+
.work-map-footer button { border: 0; background: transparent; color: var(--text-soft); padding: 2px; font-size: 10px; }
|
|
7496
|
+
|
|
7406
7497
|
:root,
|
|
7407
7498
|
:root[data-theme='tokyo-night'] {
|
|
7408
7499
|
color-scheme: dark;
|