@oratis/lisa 0.9.0 → 0.11.0
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 +123 -16
- package/README.zh-CN.md +101 -15
- package/completions/_lisa +56 -0
- package/completions/lisa.bash +35 -1
- package/completions/lisa.fish +18 -1
- package/dist/advisor/engine.d.ts +7 -0
- package/dist/advisor/engine.d.ts.map +1 -1
- package/dist/advisor/engine.js +12 -0
- package/dist/advisor/engine.js.map +1 -1
- package/dist/agent.d.ts +14 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +58 -7
- package/dist/agent.js.map +1 -1
- package/dist/agents/managed.d.ts +108 -0
- package/dist/agents/managed.d.ts.map +1 -0
- package/dist/agents/managed.js +241 -0
- package/dist/agents/managed.js.map +1 -0
- package/dist/agents/pty.d.ts +155 -0
- package/dist/agents/pty.d.ts.map +1 -0
- package/dist/agents/pty.js +299 -0
- package/dist/agents/pty.js.map +1 -0
- package/dist/approval.d.ts +13 -0
- package/dist/approval.d.ts.map +1 -1
- package/dist/approval.js +25 -2
- package/dist/approval.js.map +1 -1
- package/dist/autonomy/runs.d.ts +33 -0
- package/dist/autonomy/runs.d.ts.map +1 -0
- package/dist/autonomy/runs.js +106 -0
- package/dist/autonomy/runs.js.map +1 -0
- package/dist/channels/feishu.d.ts.map +1 -1
- package/dist/channels/feishu.js +65 -0
- package/dist/channels/feishu.js.map +1 -1
- package/dist/channels/router.d.ts +7 -0
- package/dist/channels/router.d.ts.map +1 -1
- package/dist/channels/router.js +1 -1
- package/dist/channels/router.js.map +1 -1
- package/dist/cli/agents-pty.d.ts +18 -0
- package/dist/cli/agents-pty.d.ts.map +1 -0
- package/dist/cli/agents-pty.js +182 -0
- package/dist/cli/agents-pty.js.map +1 -0
- package/dist/cli/agents.d.ts +2 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +65 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/consent.d.ts +2 -0
- package/dist/cli/consent.d.ts.map +1 -0
- package/dist/cli/consent.js +57 -0
- package/dist/cli/consent.js.map +1 -0
- package/dist/cli/model.d.ts +2 -0
- package/dist/cli/model.d.ts.map +1 -0
- package/dist/cli/model.js +121 -0
- package/dist/cli/model.js.map +1 -0
- package/dist/cli/sense.d.ts +2 -0
- package/dist/cli/sense.d.ts.map +1 -0
- package/dist/cli/sense.js +36 -0
- package/dist/cli/sense.js.map +1 -0
- package/dist/cli.js +117 -12
- package/dist/cli.js.map +1 -1
- package/dist/consent/blacklist.d.ts +28 -0
- package/dist/consent/blacklist.d.ts.map +1 -0
- package/dist/consent/blacklist.js +78 -0
- package/dist/consent/blacklist.js.map +1 -0
- package/dist/consent/store.d.ts +45 -0
- package/dist/consent/store.d.ts.map +1 -0
- package/dist/consent/store.js +126 -0
- package/dist/consent/store.js.map +1 -0
- package/dist/control/policy.d.ts +13 -0
- package/dist/control/policy.d.ts.map +1 -0
- package/dist/control/policy.js +57 -0
- package/dist/control/policy.js.map +1 -0
- package/dist/heartbeat/runner.d.ts.map +1 -1
- package/dist/heartbeat/runner.js +70 -14
- package/dist/heartbeat/runner.js.map +1 -1
- package/dist/idle/runner.d.ts.map +1 -1
- package/dist/idle/runner.js +87 -17
- package/dist/idle/runner.js.map +1 -1
- package/dist/integrations/aider/observer.d.ts +21 -1
- package/dist/integrations/aider/observer.d.ts.map +1 -1
- package/dist/integrations/aider/observer.js +110 -1
- package/dist/integrations/aider/observer.js.map +1 -1
- package/dist/integrations/claude-code/liveness.d.ts +10 -0
- package/dist/integrations/claude-code/liveness.d.ts.map +1 -0
- package/dist/integrations/claude-code/liveness.js +62 -0
- package/dist/integrations/claude-code/liveness.js.map +1 -0
- package/dist/integrations/claude-code/watcher.d.ts +39 -4
- package/dist/integrations/claude-code/watcher.d.ts.map +1 -1
- package/dist/integrations/claude-code/watcher.js +94 -57
- package/dist/integrations/claude-code/watcher.js.map +1 -1
- package/dist/integrations/codex/observer.d.ts +19 -6
- package/dist/integrations/codex/observer.d.ts.map +1 -1
- package/dist/integrations/codex/observer.js +228 -4
- package/dist/integrations/codex/observer.js.map +1 -1
- package/dist/integrations/dispatch-ledger.d.ts +30 -1
- package/dist/integrations/dispatch-ledger.d.ts.map +1 -1
- package/dist/integrations/dispatch-ledger.js +75 -9
- package/dist/integrations/dispatch-ledger.js.map +1 -1
- package/dist/integrations/git/branch.d.ts +11 -0
- package/dist/integrations/git/branch.d.ts.map +1 -0
- package/dist/integrations/git/branch.js +49 -0
- package/dist/integrations/git/branch.js.map +1 -0
- package/dist/integrations/git/observer.d.ts +39 -0
- package/dist/integrations/git/observer.d.ts.map +1 -0
- package/dist/integrations/git/observer.js +252 -0
- package/dist/integrations/git/observer.js.map +1 -0
- package/dist/integrations/github-pr/observer.d.ts.map +1 -1
- package/dist/integrations/github-pr/observer.js +7 -2
- package/dist/integrations/github-pr/observer.js.map +1 -1
- package/dist/integrations/hub.d.ts +8 -0
- package/dist/integrations/hub.d.ts.map +1 -1
- package/dist/integrations/hub.js +39 -1
- package/dist/integrations/hub.js.map +1 -1
- package/dist/integrations/managed/observer.d.ts +17 -0
- package/dist/integrations/managed/observer.d.ts.map +1 -0
- package/dist/integrations/managed/observer.js +46 -0
- package/dist/integrations/managed/observer.js.map +1 -0
- package/dist/integrations/opencode/observer.d.ts +53 -5
- package/dist/integrations/opencode/observer.d.ts.map +1 -1
- package/dist/integrations/opencode/observer.js +242 -20
- package/dist/integrations/opencode/observer.js.map +1 -1
- package/dist/integrations/pty/observer.d.ts +25 -0
- package/dist/integrations/pty/observer.d.ts.map +1 -0
- package/dist/integrations/pty/observer.js +48 -0
- package/dist/integrations/pty/observer.js.map +1 -0
- package/dist/integrations/registry.d.ts.map +1 -1
- package/dist/integrations/registry.js +5 -0
- package/dist/integrations/registry.js.map +1 -1
- package/dist/integrations/shell/observer.d.ts +33 -0
- package/dist/integrations/shell/observer.d.ts.map +1 -0
- package/dist/integrations/shell/observer.js +223 -0
- package/dist/integrations/shell/observer.js.map +1 -0
- package/dist/integrations/takoapi/a2a.d.ts +38 -0
- package/dist/integrations/takoapi/a2a.d.ts.map +1 -0
- package/dist/integrations/takoapi/a2a.js +70 -0
- package/dist/integrations/takoapi/a2a.js.map +1 -0
- package/dist/integrations/takoapi/ledger.d.ts +32 -0
- package/dist/integrations/takoapi/ledger.d.ts.map +1 -0
- package/dist/integrations/takoapi/ledger.js +96 -0
- package/dist/integrations/takoapi/ledger.js.map +1 -0
- package/dist/integrations/takoapi/observer.d.ts +39 -0
- package/dist/integrations/takoapi/observer.d.ts.map +1 -0
- package/dist/integrations/takoapi/observer.js +102 -0
- package/dist/integrations/takoapi/observer.js.map +1 -0
- package/dist/integrations/types.d.ts +17 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/mcp/client.d.ts +5 -0
- package/dist/mcp/client.d.ts.map +1 -1
- package/dist/mcp/client.js +1 -1
- package/dist/mcp/client.js.map +1 -1
- package/dist/memory/embedding.d.ts +45 -0
- package/dist/memory/embedding.d.ts.map +1 -0
- package/dist/memory/embedding.js +139 -0
- package/dist/memory/embedding.js.map +1 -0
- package/dist/memory/search_tool.d.ts.map +1 -1
- package/dist/memory/search_tool.js +6 -2
- package/dist/memory/search_tool.js.map +1 -1
- package/dist/memory/vector.d.ts +14 -3
- package/dist/memory/vector.d.ts.map +1 -1
- package/dist/memory/vector.js +50 -0
- package/dist/memory/vector.js.map +1 -1
- package/dist/model/local.d.ts +43 -0
- package/dist/model/local.d.ts.map +1 -0
- package/dist/model/local.js +118 -0
- package/dist/model/local.js.map +1 -0
- package/dist/model/plan-usage.d.ts +41 -0
- package/dist/model/plan-usage.d.ts.map +1 -0
- package/dist/model/plan-usage.js +168 -0
- package/dist/model/plan-usage.js.map +1 -0
- package/dist/model/plans.d.ts +73 -0
- package/dist/model/plans.d.ts.map +1 -0
- package/dist/model/plans.js +246 -0
- package/dist/model/plans.js.map +1 -0
- package/dist/orchestrator/recent-recap.d.ts +2 -0
- package/dist/orchestrator/recent-recap.d.ts.map +1 -0
- package/dist/orchestrator/recent-recap.js +20 -0
- package/dist/orchestrator/recent-recap.js.map +1 -0
- package/dist/providers/anthropic.d.ts +1 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +10 -2
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/fallback.d.ts +23 -0
- package/dist/providers/fallback.d.ts.map +1 -0
- package/dist/providers/fallback.js +29 -0
- package/dist/providers/fallback.js.map +1 -0
- package/dist/providers/gemini.d.ts +2 -0
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +24 -10
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +4 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/registry.d.ts +18 -2
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/providers/registry.js +56 -9
- package/dist/providers/registry.js.map +1 -1
- package/dist/reflect.d.ts +55 -0
- package/dist/reflect.d.ts.map +1 -1
- package/dist/reflect.js +148 -54
- package/dist/reflect.js.map +1 -1
- package/dist/sense/log.d.ts +9 -0
- package/dist/sense/log.d.ts.map +1 -0
- package/dist/sense/log.js +63 -0
- package/dist/sense/log.js.map +1 -0
- package/dist/sense/screen.d.ts +43 -0
- package/dist/sense/screen.d.ts.map +1 -0
- package/dist/sense/screen.js +107 -0
- package/dist/sense/screen.js.map +1 -0
- package/dist/sense/service.d.ts +16 -0
- package/dist/sense/service.d.ts.map +1 -0
- package/dist/sense/service.js +33 -0
- package/dist/sense/service.js.map +1 -0
- package/dist/sense/types.d.ts +35 -0
- package/dist/sense/types.d.ts.map +1 -0
- package/dist/sense/types.js +11 -0
- package/dist/sense/types.js.map +1 -0
- package/dist/sense/voice.d.ts +28 -0
- package/dist/sense/voice.d.ts.map +1 -0
- package/dist/sense/voice.js +64 -0
- package/dist/sense/voice.js.map +1 -0
- package/dist/soul/git.d.ts.map +1 -1
- package/dist/soul/git.js +35 -16
- package/dist/soul/git.js.map +1 -1
- package/dist/soul/store.d.ts +22 -0
- package/dist/soul/store.d.ts.map +1 -1
- package/dist/soul/store.js +69 -14
- package/dist/soul/store.js.map +1 -1
- package/dist/soul/summary.d.ts +10 -0
- package/dist/soul/summary.d.ts.map +1 -0
- package/dist/soul/summary.js +57 -0
- package/dist/soul/summary.js.map +1 -0
- package/dist/soul/tools.d.ts.map +1 -1
- package/dist/soul/tools.js +13 -24
- package/dist/soul/tools.js.map +1 -1
- package/dist/soul/types.d.ts +9 -0
- package/dist/soul/types.d.ts.map +1 -1
- package/dist/soul/types.js.map +1 -1
- package/dist/subagent.d.ts +7 -0
- package/dist/subagent.d.ts.map +1 -1
- package/dist/subagent.js +3 -1
- package/dist/subagent.js.map +1 -1
- package/dist/tools/dispatch_agent.d.ts +13 -1
- package/dist/tools/dispatch_agent.d.ts.map +1 -1
- package/dist/tools/dispatch_agent.js +56 -12
- package/dist/tools/dispatch_agent.js.map +1 -1
- package/dist/tools/dispatch_status.d.ts +22 -0
- package/dist/tools/dispatch_status.d.ts.map +1 -0
- package/dist/tools/dispatch_status.js +57 -0
- package/dist/tools/dispatch_status.js.map +1 -0
- package/dist/tools/registry.d.ts +29 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +67 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run_on_plan.d.ts +46 -0
- package/dist/tools/run_on_plan.d.ts.map +1 -0
- package/dist/tools/run_on_plan.js +89 -0
- package/dist/tools/run_on_plan.js.map +1 -0
- package/dist/tools/takoapi.d.ts +60 -0
- package/dist/tools/takoapi.d.ts.map +1 -0
- package/dist/tools/takoapi.js +181 -0
- package/dist/tools/takoapi.js.map +1 -0
- package/dist/tools/validate.d.ts +22 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +50 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/web/agent-roster.d.ts +56 -0
- package/dist/web/agent-roster.d.ts.map +1 -0
- package/dist/web/agent-roster.js +109 -0
- package/dist/web/agent-roster.js.map +1 -0
- package/dist/web/devices.d.ts +27 -0
- package/dist/web/devices.d.ts.map +1 -0
- package/dist/web/devices.js +113 -0
- package/dist/web/devices.js.map +1 -0
- package/dist/web/island.d.ts +5 -1
- package/dist/web/island.d.ts.map +1 -1
- package/dist/web/island.js +410 -63
- package/dist/web/island.js.map +1 -1
- package/dist/web/lisa-client.d.ts +20 -0
- package/dist/web/lisa-client.d.ts.map +1 -0
- package/dist/web/lisa-client.js +1323 -0
- package/dist/web/lisa-client.js.map +1 -0
- package/dist/web/lisa-css.d.ts +13 -0
- package/dist/web/lisa-css.d.ts.map +1 -0
- package/dist/web/lisa-css.js +1163 -0
- package/dist/web/lisa-css.js.map +1 -0
- package/dist/web/lisa-html.d.ts +1 -1
- package/dist/web/lisa-html.d.ts.map +1 -1
- package/dist/web/lisa-html.js +15 -2136
- package/dist/web/lisa-html.js.map +1 -1
- package/dist/web/push.d.ts +76 -0
- package/dist/web/push.d.ts.map +1 -0
- package/dist/web/push.js +163 -0
- package/dist/web/push.js.map +1 -0
- package/dist/web/server.d.ts +19 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +878 -64
- package/dist/web/server.js.map +1 -1
- package/package.json +5 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/integrations/aider/observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,iBAAiB,
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../../src/integrations/aider/observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,aAAa,CAAC;AAWrB,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7C,KAAK,EAAE,iBAAiB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,CAuBA;AA4BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAwCpE;AAyBD,+EAA+E;AAC/E,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkBzF;AA0BD,qBAAa,aAAc,SAAQ,YAAa,YAAW,aAAa;IACtE,QAAQ,CAAC,KAAK,WAAW;IACzB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAE9B,GAAG,EAAE,sBAAsB;IAYjC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,IAAI,IAAI,YAAY,EAAE;IAShB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,MAAM;YAyBA,MAAM;CAsBrB"}
|
|
@@ -60,6 +60,105 @@ export function parseAiderState(tail) {
|
|
|
60
60
|
? { state: "waiting", reason: "assistant" }
|
|
61
61
|
: { state: "working", reason: "user" };
|
|
62
62
|
}
|
|
63
|
+
const ACTIVITY_MAX_FILES = 10;
|
|
64
|
+
const ACTIVITY_ERROR_CAP = 80;
|
|
65
|
+
// aider's diff edit format writes the file path on the line just before the
|
|
66
|
+
// fenced code block, e.g.
|
|
67
|
+
// mathweb/flask/app.py
|
|
68
|
+
// ```python
|
|
69
|
+
// <<<<<<< SEARCH
|
|
70
|
+
// So a path "looks like" a bare token (no whitespace) that either contains a
|
|
71
|
+
// "/" or ends in a known source-file extension. This deliberately excludes
|
|
72
|
+
// prose, fence lines, and the diff markers themselves — we only ever surface
|
|
73
|
+
// the PATH, never a single byte of the SEARCH/REPLACE code body.
|
|
74
|
+
const PATHISH_RE = /^[\w.\-/@]+\.(?:ts|tsx|js|jsx|mjs|cjs|py|go|rs|md|json|ya?ml|toml|sh|c|h|cpp|hpp|java|rb|php|css|scss|html|sql)$|^[\w.\-/@]+\/[\w.\-/@]+$/;
|
|
75
|
+
// A line that opens/closes a fenced code block, optionally with a language tag.
|
|
76
|
+
const FENCE_RE = /^\s*(```|~~~)/;
|
|
77
|
+
// aider error lines — keep in sync with ERROR_RE but tuned for class extraction.
|
|
78
|
+
const ACTIVITY_ERROR_RE = /(litellm\.\w*error|\w*APIError|exception|error:)/i;
|
|
79
|
+
function looksLikePath(token) {
|
|
80
|
+
const t = token.trim().replace(/^`+|`+$/g, "").trim();
|
|
81
|
+
if (!t || /\s/.test(t))
|
|
82
|
+
return false;
|
|
83
|
+
return PATHISH_RE.test(t);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Tier-2 structural activity for an Aider transcript. PURE — the unit under
|
|
87
|
+
* test. Input is Markdown chat-history text (the observer feeds the same tail
|
|
88
|
+
* it already read for state derivation, so there is no extra IO).
|
|
89
|
+
*
|
|
90
|
+
* Aider is a Markdown agent with NO structured tool calls, so we only extract
|
|
91
|
+
* what's reliably present:
|
|
92
|
+
* - filesTouched: the path labels that precede SEARCH/REPLACE edit blocks.
|
|
93
|
+
* - turnCount: "#### " user-turn lines.
|
|
94
|
+
* - lastError: a short class summary of the last error line (capped).
|
|
95
|
+
* - lastTools: INTENTIONALLY [] — aider has no tool abstraction to read,
|
|
96
|
+
* so inventing tool names would be dishonest. See contract:
|
|
97
|
+
* SessionActivity.lastTools may be [].
|
|
98
|
+
* tokens / gitBranch / pendingPermission are unavailable here → undefined.
|
|
99
|
+
*
|
|
100
|
+
* PRIVACY: we surface only file PATHS, a turn count, and an error *class* — we
|
|
101
|
+
* never read prompt text, assistant prose, or the code inside an edit block.
|
|
102
|
+
*/
|
|
103
|
+
export function parseAiderActivity(markdown) {
|
|
104
|
+
const lines = markdown.split("\n");
|
|
105
|
+
let turnCount = 0;
|
|
106
|
+
const files = [];
|
|
107
|
+
let lastError;
|
|
108
|
+
for (let i = 0; i < lines.length; i++) {
|
|
109
|
+
const line = lines[i];
|
|
110
|
+
if (line.startsWith("#### "))
|
|
111
|
+
turnCount++;
|
|
112
|
+
// A SEARCH marker anchors an edit block. Walk backward past an optional
|
|
113
|
+
// fence line to the nearest non-empty line, and keep it iff it's path-ish.
|
|
114
|
+
// We read ONLY that path line — never the block body below the marker.
|
|
115
|
+
if (/^\s*<{5,}\s*SEARCH\b/.test(line)) {
|
|
116
|
+
let j = i - 1;
|
|
117
|
+
while (j >= 0 && lines[j].trim() === "")
|
|
118
|
+
j--;
|
|
119
|
+
if (j >= 0 && FENCE_RE.test(lines[j])) {
|
|
120
|
+
j--;
|
|
121
|
+
while (j >= 0 && lines[j].trim() === "")
|
|
122
|
+
j--;
|
|
123
|
+
}
|
|
124
|
+
if (j >= 0 && looksLikePath(lines[j])) {
|
|
125
|
+
files.push(lines[j].trim().replace(/^`+|`+$/g, "").trim());
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (ACTIVITY_ERROR_RE.test(line)) {
|
|
129
|
+
lastError = summarizeError(line);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
turnCount,
|
|
134
|
+
// Intentionally empty: aider exposes no tool calls (see doc above).
|
|
135
|
+
lastTools: [],
|
|
136
|
+
filesTouched: dedupeKeepRecent(files, ACTIVITY_MAX_FILES),
|
|
137
|
+
lastError,
|
|
138
|
+
// tokens / gitBranch / pendingPermission: not derivable from the transcript.
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/** Take just the error class/prefix from a noisy line; cap length, no stack. */
|
|
142
|
+
function summarizeError(line) {
|
|
143
|
+
// Strip aider's "> " info prefix, then keep up to the first sentence/segment
|
|
144
|
+
// boundary so we surface the error class, not a full message or traceback.
|
|
145
|
+
const stripped = line.replace(/^\s*>\s*/, "").trim();
|
|
146
|
+
const head = stripped.split(/[—–\-]{1,2}\s|[.{[]|,\s/)[0].trim() || stripped;
|
|
147
|
+
return head.slice(0, ACTIVITY_ERROR_CAP).trim();
|
|
148
|
+
}
|
|
149
|
+
/** Dedupe paths keeping each one's most-recent position; cap to `max`. */
|
|
150
|
+
function dedupeKeepRecent(items, max) {
|
|
151
|
+
const seen = new Set();
|
|
152
|
+
const out = [];
|
|
153
|
+
for (let i = items.length - 1; i >= 0; i--) {
|
|
154
|
+
const it = items[i];
|
|
155
|
+
if (!seen.has(it)) {
|
|
156
|
+
seen.add(it);
|
|
157
|
+
out.unshift(it);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return out.slice(-max);
|
|
161
|
+
}
|
|
63
162
|
/** Recursively collect .aider.chat.history.md under a root (bounded depth). */
|
|
64
163
|
export async function walkHistories(root, maxDepth = MAX_DEPTH) {
|
|
65
164
|
const out = [];
|
|
@@ -104,12 +203,17 @@ export class AiderObserver extends EventEmitter {
|
|
|
104
203
|
watchers = [];
|
|
105
204
|
pending = new Map();
|
|
106
205
|
emitFn = null;
|
|
206
|
+
computeActivity;
|
|
107
207
|
constructor(cfg) {
|
|
108
208
|
super();
|
|
109
209
|
const raw = Array.isArray(cfg.watchRoots) ? cfg.watchRoots : [];
|
|
110
210
|
this.roots = raw
|
|
111
211
|
.filter((r) => typeof r === "string")
|
|
112
212
|
.map((r) => r.replace(/^~/, os.homedir()));
|
|
213
|
+
// Tier 2: derive structural activity only at visibility "activity"/"intent".
|
|
214
|
+
// At "metadata"/"off" we stay metadata-only (the privacy-minimal default).
|
|
215
|
+
this.computeActivity =
|
|
216
|
+
cfg.visibility === "activity" || cfg.visibility === "intent";
|
|
113
217
|
}
|
|
114
218
|
async start(emit) {
|
|
115
219
|
this.emitFn = emit;
|
|
@@ -165,7 +269,10 @@ export class AiderObserver extends EventEmitter {
|
|
|
165
269
|
const st = await fsp.stat(full);
|
|
166
270
|
if (!st.isFile())
|
|
167
271
|
return;
|
|
168
|
-
|
|
272
|
+
// Single read: the same tail feeds both state derivation and (when the
|
|
273
|
+
// tier is high enough) Tier-2 activity — no duplicate IO.
|
|
274
|
+
const tail = await readTail(full);
|
|
275
|
+
const { state, reason } = parseAiderState(tail);
|
|
169
276
|
const cwd = path.dirname(full);
|
|
170
277
|
this.sessions.set(full, {
|
|
171
278
|
sessionId: full,
|
|
@@ -174,6 +281,7 @@ export class AiderObserver extends EventEmitter {
|
|
|
174
281
|
lastMtime: st.mtimeMs,
|
|
175
282
|
state,
|
|
176
283
|
stateReason: reason,
|
|
284
|
+
activity: this.computeActivity ? parseAiderActivity(tail) : undefined,
|
|
177
285
|
});
|
|
178
286
|
}
|
|
179
287
|
catch {
|
|
@@ -190,6 +298,7 @@ function toAgentSession(i) {
|
|
|
190
298
|
state: i.state,
|
|
191
299
|
stateReason: i.stateReason,
|
|
192
300
|
lastMtime: i.lastMtime,
|
|
301
|
+
activity: i.activity,
|
|
193
302
|
};
|
|
194
303
|
}
|
|
195
304
|
registerIntegration("aider", (cfg) => new AiderObserver(cfg));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/integrations/aider/observer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,MAAM,kBAAkB,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/integrations/aider/observer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function claudeSessionsDir(home?: string): string;
|
|
2
|
+
/** True if a pid is still running (EPERM = alive but not ours; ESRCH = gone). */
|
|
3
|
+
export declare function pidAlive(pid: number): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* sessionIds whose owning process is still alive — i.e. currently driven by the
|
|
6
|
+
* app/terminal and therefore UNSAFE to resume. Best-effort: unreadable or stale
|
|
7
|
+
* pid-files are skipped. Returns an empty set if the directory is absent.
|
|
8
|
+
*/
|
|
9
|
+
export declare function liveClaudeSessionIds(home?: string): Set<string>;
|
|
10
|
+
//# sourceMappingURL=liveness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liveness.d.ts","sourceRoot":"","sources":["../../../src/integrations/claude-code/liveness.ts"],"names":[],"mappings":"AAiBA,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,CAElE;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAQ7C;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAkB,GAAG,GAAG,CAAC,MAAM,CAAC,CAwB1E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude session liveness — which on-disk claude sessions are CURRENTLY running.
|
|
3
|
+
*
|
|
4
|
+
* Claude Code writes ~/.claude/sessions/<pid>.json for each running session:
|
|
5
|
+
* {"pid":43828,"sessionId":"f859…","cwd":"…","version":"2.1.177",
|
|
6
|
+
* "peerProtocol":1,"kind":"interactive","entrypoint":"claude-desktop"}
|
|
7
|
+
*
|
|
8
|
+
* We use it for one purpose: deciding whether a session is safe to ADOPT via
|
|
9
|
+
* `claude --resume <id>`. Resuming a session that's still live (open in the app
|
|
10
|
+
* or a terminal) would create a second writer to the same JSONL transcript and
|
|
11
|
+
* interleave/corrupt it — so the control plane only ever resumes IDLE sessions.
|
|
12
|
+
* (We never speak the undocumented peerProtocol; we only read pid + sessionId.)
|
|
13
|
+
*/
|
|
14
|
+
import { readdirSync, readFileSync } from "node:fs";
|
|
15
|
+
import { homedir } from "node:os";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
export function claudeSessionsDir(home = homedir()) {
|
|
18
|
+
return join(home, ".claude", "sessions");
|
|
19
|
+
}
|
|
20
|
+
/** True if a pid is still running (EPERM = alive but not ours; ESRCH = gone). */
|
|
21
|
+
export function pidAlive(pid) {
|
|
22
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
23
|
+
return false;
|
|
24
|
+
try {
|
|
25
|
+
process.kill(pid, 0);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
return e.code === "EPERM";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* sessionIds whose owning process is still alive — i.e. currently driven by the
|
|
34
|
+
* app/terminal and therefore UNSAFE to resume. Best-effort: unreadable or stale
|
|
35
|
+
* pid-files are skipped. Returns an empty set if the directory is absent.
|
|
36
|
+
*/
|
|
37
|
+
export function liveClaudeSessionIds(home = homedir()) {
|
|
38
|
+
const live = new Set();
|
|
39
|
+
const dir = claudeSessionsDir(home);
|
|
40
|
+
let files;
|
|
41
|
+
try {
|
|
42
|
+
files = readdirSync(dir);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return live;
|
|
46
|
+
}
|
|
47
|
+
for (const f of files) {
|
|
48
|
+
if (!f.endsWith(".json"))
|
|
49
|
+
continue;
|
|
50
|
+
try {
|
|
51
|
+
const meta = JSON.parse(readFileSync(join(dir, f), "utf8"));
|
|
52
|
+
if (typeof meta.sessionId === "string" && typeof meta.pid === "number" && pidAlive(meta.pid)) {
|
|
53
|
+
live.add(meta.sessionId);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
/* skip garbage / partial writes */
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return live;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=liveness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liveness.js","sourceRoot":"","sources":["../../../src/integrations/claude-code/liveness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,iBAAiB,CAAC,OAAe,OAAO,EAAE;IACxD,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC3C,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAQ,CAA2B,CAAC,IAAI,KAAK,OAAO,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,OAAO,EAAE;IAC3D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAGzD,CAAC;YACF,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7F,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
import { EventEmitter } from "node:events";
|
|
38
38
|
import { type ClaudeSessionState } from "./parser.js";
|
|
39
39
|
import type { SessionActivity } from "../types.js";
|
|
40
|
+
export declare const TOOL_STALL_THRESHOLD_MS = 60000;
|
|
40
41
|
/**
|
|
41
42
|
* One row in the in-memory session map. We hold mtime + size only —
|
|
42
43
|
* never any jsonl content.
|
|
@@ -114,16 +115,50 @@ export declare class ClaudeCodeWatcher extends EventEmitter {
|
|
|
114
115
|
/**
|
|
115
116
|
* Periodic re-evaluation of active sessions' state. The fs.watch
|
|
116
117
|
* stream only fires when the file changes — but the very condition
|
|
117
|
-
* we want to detect (
|
|
118
|
-
* STOPPED changing". So we sweep every few seconds: for each
|
|
119
|
-
* with a recent mtime, re-stat + re-parse + emit
|
|
120
|
-
* the derived state has flipped.
|
|
118
|
+
* we want to detect (a session going idle, a tool stalling) is "the
|
|
119
|
+
* file STOPPED changing". So we sweep every few seconds: for each
|
|
120
|
+
* session with a recent mtime, re-stat + re-parse + emit
|
|
121
|
+
* `state_changed` if the derived state has flipped.
|
|
121
122
|
*
|
|
122
123
|
* Cheap: stat is O(1), parser reads only the file's tail.
|
|
123
124
|
*/
|
|
124
125
|
private startRepollLoop;
|
|
125
126
|
private repollActive;
|
|
126
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Staleness heuristic, applied on top of the parsed (on-disk) state.
|
|
130
|
+
* Pure — the unit under test in watcher.test.ts.
|
|
131
|
+
*
|
|
132
|
+
* A "working" session whose jsonl has stopped growing means one of:
|
|
133
|
+
*
|
|
134
|
+
* - tool_use + stale → a tool call is in flight. Usually it's just a
|
|
135
|
+
* slow tool (npm test, a long Bash command) —
|
|
136
|
+
* and Claude Code writes nothing to the jsonl
|
|
137
|
+
* for permission prompts, so "still running"
|
|
138
|
+
* and "waiting for approval" look identical on
|
|
139
|
+
* disk. Short stalls stay "working"; only a
|
|
140
|
+
* markedly long one flips to a soft
|
|
141
|
+
* waiting/"stalled on <tool>" that detectStuck
|
|
142
|
+
* may later escalate to an ordinary notice —
|
|
143
|
+
* never the urgent "approve?" path.
|
|
144
|
+
* - assistant + stale → API stream stalled or Claude is mid-thinking
|
|
145
|
+
* on a hard turn
|
|
146
|
+
* - user + stale → tool result came back but Claude never wrote
|
|
147
|
+
* the follow-up — usually means the user
|
|
148
|
+
* cancelled Claude Code
|
|
149
|
+
*
|
|
150
|
+
* The last two flip to waiting/"idle" — honest about what we know.
|
|
151
|
+
*
|
|
152
|
+
* `pendingPermission` is attached ONLY when the parser saw an explicit
|
|
153
|
+
* permission entry (reason "permission") — never inferred from
|
|
154
|
+
* staleness. A pendingPermission baked into a carried-over activity
|
|
155
|
+
* snapshot is stripped once the reason no longer says permission.
|
|
156
|
+
*/
|
|
157
|
+
export declare function applyStaleness(state: ClaudeSessionState, stateReason: string, ageMs: number, activity?: SessionActivity): {
|
|
158
|
+
state: ClaudeSessionState;
|
|
159
|
+
stateReason: string;
|
|
160
|
+
activity?: SessionActivity;
|
|
161
|
+
};
|
|
127
162
|
/**
|
|
128
163
|
* `~/.claude/projects/-Users-oratis-Projects-Adex` → "Adex".
|
|
129
164
|
* Heuristic: strip a leading dash, replace remaining dashes with slashes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/integrations/claude-code/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAA2C,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkCnD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,eAAe,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjC,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;IAS/D,gFAAgF;IAC1E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,IAAI,IAAI,IAAI;IAWZ,kEAAkE;IAClE,UAAU,IAAI,iBAAiB,EAAE;YAUnB,WAAW;YA8BX,cAAc;YAgBd,aAAa;IA8B3B,OAAO,CAAC,aAAa;IAQrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;YAcP,IAAI;IAoClB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/integrations/claude-code/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAA2C,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkCnD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAU9C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,KAAK,EAAE,kBAAkB,CAAC;IAC1B,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,eAAe,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,kBAAkB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjC,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,GAAG,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO;IAS/D,gFAAgF;IAC1E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,IAAI,IAAI,IAAI;IAWZ,kEAAkE;IAClE,UAAU,IAAI,iBAAiB,EAAE;YAUnB,WAAW;YA8BX,cAAc;YAgBd,aAAa;IA8B3B,OAAO,CAAC,aAAa;IAQrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;YAcP,IAAI;IAoClB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,QAAQ;IAyBhB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;YAUT,YAAY;CA4B3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,eAAe,GACzB;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;CAAE,CA0BhF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED,eAAO,MAAM,mBAAmB,QAAe,CAAC"}
|
|
@@ -47,21 +47,31 @@ const ACTIVE_WINDOW_MS = 30 * 60_000;
|
|
|
47
47
|
const MAX_LISTED = 10;
|
|
48
48
|
/**
|
|
49
49
|
* After Claude Code writes an `assistant` line with stop_reason=tool_use
|
|
50
|
-
* the file stops growing until the tool returns.
|
|
51
|
-
*
|
|
52
|
-
*
|
|
50
|
+
* the file stops growing until the tool returns. Crucially, Claude Code
|
|
51
|
+
* does NOT log a system entry or subtype event for permission prompts —
|
|
52
|
+
* the prompt lives entirely in the TUI and never touches the jsonl. So
|
|
53
|
+
* on disk, a tool waiting for approval is INDISTINGUISHABLE from a tool
|
|
54
|
+
* that is simply still running (npm test, a long Bash command, a slow
|
|
55
|
+
* WebFetch).
|
|
53
56
|
*
|
|
54
|
-
*
|
|
55
|
-
* for
|
|
56
|
-
*
|
|
57
|
-
* waiting for the user" is: last line is tool_use AND the file hasn't
|
|
58
|
-
* grown in a while.
|
|
57
|
+
* Because we can't tell those apart, staleness is never reported as
|
|
58
|
+
* "waiting for permission" (doing so used to fire the advisor's urgent
|
|
59
|
+
* "approve?" alarm for every auto-approved tool that ran >5s). Instead:
|
|
59
60
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
61
|
+
* - working + tool_use, stale < TOOL_STALL_THRESHOLD_MS
|
|
62
|
+
* → stays "working" (the tool is presumably just running)
|
|
63
|
+
* - working + tool_use, stale ≥ TOOL_STALL_THRESHOLD_MS
|
|
64
|
+
* → waiting/"stalled on <tool>" — a soft hint only; the advisor's
|
|
65
|
+
* detectStuck escalates it to an ordinary notice after its own,
|
|
66
|
+
* much longer threshold, never to urgent
|
|
67
|
+
* - working + non-tool reason, stale ≥ IDLE_THRESHOLD_MS
|
|
68
|
+
* → waiting/"idle" (stream stalled, or the user cancelled)
|
|
69
|
+
*
|
|
70
|
+
* The "permission" reason survives only for the parser's EXPLICIT
|
|
71
|
+
* signal (a system entry with a permission subtype — see parser.ts).
|
|
63
72
|
*/
|
|
64
|
-
const
|
|
73
|
+
const IDLE_THRESHOLD_MS = 5_000;
|
|
74
|
+
export const TOOL_STALL_THRESHOLD_MS = 60_000;
|
|
65
75
|
/**
|
|
66
76
|
* Polling interval for the periodic re-evaluation that catches stale
|
|
67
77
|
* tool_use sessions. The fs.watch event stream alone is insufficient
|
|
@@ -269,61 +279,26 @@ export class ClaudeCodeWatcher extends EventEmitter {
|
|
|
269
279
|
makeInfo(filePath, mtimeMs, size, state, stateReason, cwd, activity) {
|
|
270
280
|
const sessionId = path.basename(filePath, ".jsonl");
|
|
271
281
|
const projectEncoded = path.basename(path.dirname(filePath));
|
|
272
|
-
|
|
273
|
-
// grown in TOOL_USE_PERMISSION_THRESHOLD_MS gets promoted to
|
|
274
|
-
// "waiting". Three real-world cases all map to this:
|
|
275
|
-
//
|
|
276
|
-
// - tool_use + stale → Claude is waiting for the user to
|
|
277
|
-
// approve a tool in the Claude Code TUI
|
|
278
|
-
// (the prompt lives in the TUI, never on
|
|
279
|
-
// disk — staleness is the only signal)
|
|
280
|
-
// - assistant + stale → API stream stalled or Claude is mid-
|
|
281
|
-
// thinking on a hard turn
|
|
282
|
-
// - user + stale → tool result came back but Claude never
|
|
283
|
-
// wrote the follow-up — usually means
|
|
284
|
-
// the user cancelled Claude Code
|
|
285
|
-
//
|
|
286
|
-
// For all three the user benefit is the same: solid orange dot in
|
|
287
|
-
// the island pill ("not making progress, check on it") instead of
|
|
288
|
-
// a pulsing one ("actively working"). Reason "idle" is honest about
|
|
289
|
-
// what we know — we can't actually distinguish these from on-disk
|
|
290
|
-
// metadata alone.
|
|
291
|
-
const ageMs = Date.now() - mtimeMs;
|
|
292
|
-
let finalState = state;
|
|
293
|
-
let finalReason = stateReason;
|
|
294
|
-
if (state === "working" && ageMs >= TOOL_USE_PERMISSION_THRESHOLD_MS) {
|
|
295
|
-
finalState = "waiting";
|
|
296
|
-
finalReason = stateReason === "tool_use" ? "permission" : "idle";
|
|
297
|
-
}
|
|
298
|
-
// When the session is blocked on a permission decision, surface which
|
|
299
|
-
// tool it's waiting on (the most recent tool name) — drives the advisor's
|
|
300
|
-
// "Codex wants to run X — approve?" prompts.
|
|
301
|
-
let finalActivity = activity;
|
|
302
|
-
if (finalActivity && finalReason === "permission" && finalActivity.lastTools.length) {
|
|
303
|
-
finalActivity = {
|
|
304
|
-
...finalActivity,
|
|
305
|
-
pendingPermission: finalActivity.lastTools[finalActivity.lastTools.length - 1],
|
|
306
|
-
};
|
|
307
|
-
}
|
|
282
|
+
const derived = applyStaleness(state, stateReason, Date.now() - mtimeMs, activity);
|
|
308
283
|
return {
|
|
309
284
|
projectEncoded,
|
|
310
285
|
projectLabel: decodeProjectLabel(projectEncoded),
|
|
311
286
|
sessionId,
|
|
312
287
|
lastMtime: mtimeMs,
|
|
313
288
|
size,
|
|
314
|
-
state:
|
|
315
|
-
stateReason:
|
|
289
|
+
state: derived.state,
|
|
290
|
+
stateReason: derived.stateReason,
|
|
316
291
|
cwd,
|
|
317
|
-
activity:
|
|
292
|
+
activity: derived.activity,
|
|
318
293
|
};
|
|
319
294
|
}
|
|
320
295
|
/**
|
|
321
296
|
* Periodic re-evaluation of active sessions' state. The fs.watch
|
|
322
297
|
* stream only fires when the file changes — but the very condition
|
|
323
|
-
* we want to detect (
|
|
324
|
-
* STOPPED changing". So we sweep every few seconds: for each
|
|
325
|
-
* with a recent mtime, re-stat + re-parse + emit
|
|
326
|
-
* the derived state has flipped.
|
|
298
|
+
* we want to detect (a session going idle, a tool stalling) is "the
|
|
299
|
+
* file STOPPED changing". So we sweep every few seconds: for each
|
|
300
|
+
* session with a recent mtime, re-stat + re-parse + emit
|
|
301
|
+
* `state_changed` if the derived state has flipped.
|
|
327
302
|
*
|
|
328
303
|
* Cheap: stat is O(1), parser reads only the file's tail.
|
|
329
304
|
*/
|
|
@@ -353,9 +328,13 @@ export class ClaudeCodeWatcher extends EventEmitter {
|
|
|
353
328
|
if (!st.isFile())
|
|
354
329
|
continue;
|
|
355
330
|
const parsed = await parseSessionState(filePath);
|
|
356
|
-
|
|
331
|
+
// Carry over the previously parsed activity: the file hasn't
|
|
332
|
+
// grown (that's why we're sweeping), so re-extracting would be
|
|
333
|
+
// wasted I/O — and dropping it would lose the tool names that
|
|
334
|
+
// label a stall ("stalled on <tool>").
|
|
335
|
+
const info = this.makeInfo(filePath, st.mtimeMs, st.size, parsed.state, parsed.reason, parsed.cwd, prev.activity);
|
|
357
336
|
// No file growth here — only re-emit when the DERIVED state
|
|
358
|
-
// changed (
|
|
337
|
+
// changed (working → waiting after staleness).
|
|
359
338
|
if (info.state !== prev.state || info.stateReason !== prev.stateReason) {
|
|
360
339
|
this.sessions.set(filePath, info);
|
|
361
340
|
this.emitUpdate("state_changed", info);
|
|
@@ -363,6 +342,64 @@ export class ClaudeCodeWatcher extends EventEmitter {
|
|
|
363
342
|
}
|
|
364
343
|
}
|
|
365
344
|
}
|
|
345
|
+
/**
|
|
346
|
+
* Staleness heuristic, applied on top of the parsed (on-disk) state.
|
|
347
|
+
* Pure — the unit under test in watcher.test.ts.
|
|
348
|
+
*
|
|
349
|
+
* A "working" session whose jsonl has stopped growing means one of:
|
|
350
|
+
*
|
|
351
|
+
* - tool_use + stale → a tool call is in flight. Usually it's just a
|
|
352
|
+
* slow tool (npm test, a long Bash command) —
|
|
353
|
+
* and Claude Code writes nothing to the jsonl
|
|
354
|
+
* for permission prompts, so "still running"
|
|
355
|
+
* and "waiting for approval" look identical on
|
|
356
|
+
* disk. Short stalls stay "working"; only a
|
|
357
|
+
* markedly long one flips to a soft
|
|
358
|
+
* waiting/"stalled on <tool>" that detectStuck
|
|
359
|
+
* may later escalate to an ordinary notice —
|
|
360
|
+
* never the urgent "approve?" path.
|
|
361
|
+
* - assistant + stale → API stream stalled or Claude is mid-thinking
|
|
362
|
+
* on a hard turn
|
|
363
|
+
* - user + stale → tool result came back but Claude never wrote
|
|
364
|
+
* the follow-up — usually means the user
|
|
365
|
+
* cancelled Claude Code
|
|
366
|
+
*
|
|
367
|
+
* The last two flip to waiting/"idle" — honest about what we know.
|
|
368
|
+
*
|
|
369
|
+
* `pendingPermission` is attached ONLY when the parser saw an explicit
|
|
370
|
+
* permission entry (reason "permission") — never inferred from
|
|
371
|
+
* staleness. A pendingPermission baked into a carried-over activity
|
|
372
|
+
* snapshot is stripped once the reason no longer says permission.
|
|
373
|
+
*/
|
|
374
|
+
export function applyStaleness(state, stateReason, ageMs, activity) {
|
|
375
|
+
let finalState = state;
|
|
376
|
+
let finalReason = stateReason;
|
|
377
|
+
if (state === "working" && stateReason === "tool_use") {
|
|
378
|
+
if (ageMs >= TOOL_STALL_THRESHOLD_MS) {
|
|
379
|
+
const tools = activity?.lastTools ?? [];
|
|
380
|
+
const lastTool = tools[tools.length - 1];
|
|
381
|
+
finalState = "waiting";
|
|
382
|
+
finalReason = lastTool ? `stalled on ${lastTool}` : "stalled";
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
else if (state === "working" && ageMs >= IDLE_THRESHOLD_MS) {
|
|
386
|
+
finalState = "waiting";
|
|
387
|
+
finalReason = "idle";
|
|
388
|
+
}
|
|
389
|
+
let finalActivity = activity;
|
|
390
|
+
if (finalActivity) {
|
|
391
|
+
if (finalReason === "permission" && finalActivity.lastTools.length) {
|
|
392
|
+
finalActivity = {
|
|
393
|
+
...finalActivity,
|
|
394
|
+
pendingPermission: finalActivity.lastTools[finalActivity.lastTools.length - 1],
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
else if (finalActivity.pendingPermission) {
|
|
398
|
+
finalActivity = { ...finalActivity, pendingPermission: undefined };
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return { state: finalState, stateReason: finalReason, activity: finalActivity };
|
|
402
|
+
}
|
|
366
403
|
/**
|
|
367
404
|
* `~/.claude/projects/-Users-oratis-Projects-Adex` → "Adex".
|
|
368
405
|
* Heuristic: strip a leading dash, replace remaining dashes with slashes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/integrations/claude-code/watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/integrations/claude-code/watcher.ts"],"names":[],"mappings":"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"}
|