@synap-core/cli 1.12.2 → 1.13.1-next.20261102.246dc73
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/LICENSE +21 -0
- package/README.md +38 -11
- package/dist/build-info.json +2 -3
- package/dist/commands/agents.d.ts +0 -1
- package/dist/commands/agents.js +13 -3
- package/dist/commands/agents.js.map +1 -1
- package/dist/commands/app.js +2 -1
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/automation.js +46 -41
- package/dist/commands/automation.js.map +1 -1
- package/dist/commands/box.d.ts +42 -0
- package/dist/commands/box.js +89 -0
- package/dist/commands/box.js.map +1 -0
- package/dist/commands/bridge-setup.js +3 -1
- package/dist/commands/bridge-setup.js.map +1 -1
- package/dist/commands/capability.d.ts +87 -1
- package/dist/commands/capability.js +174 -64
- package/dist/commands/capability.js.map +1 -1
- package/dist/commands/close-questions.d.ts +27 -0
- package/dist/commands/close-questions.js +49 -0
- package/dist/commands/close-questions.js.map +1 -0
- package/dist/commands/close-questions.test.d.ts +1 -0
- package/dist/commands/close-questions.test.js +52 -0
- package/dist/commands/close-questions.test.js.map +1 -0
- package/dist/commands/connect.d.ts +1 -3
- package/dist/commands/connect.js +2 -2
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/context.js +74 -44
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/data-extra.d.ts +13 -0
- package/dist/commands/data-extra.js +35 -6
- package/dist/commands/data-extra.js.map +1 -1
- package/dist/commands/data.js +2 -1
- package/dist/commands/data.js.map +1 -1
- package/dist/commands/doctor.d.ts +39 -0
- package/dist/commands/doctor.js +136 -14
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/hooks.d.ts +19 -0
- package/dist/commands/hooks.js +70 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/import.d.ts +25 -0
- package/dist/commands/import.js +98 -12
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/init.d.ts +14 -0
- package/dist/commands/init.js +63 -21
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys-request.d.ts +48 -0
- package/dist/commands/keys-request.js +236 -0
- package/dist/commands/keys-request.js.map +1 -0
- package/dist/commands/keys-request.test.d.ts +1 -0
- package/dist/commands/keys-request.test.js +176 -0
- package/dist/commands/keys-request.test.js.map +1 -0
- package/dist/commands/knowledge.d.ts +42 -5
- package/dist/commands/knowledge.js +94 -29
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/lens.js +2 -1
- package/dist/commands/lens.js.map +1 -1
- package/dist/commands/market-authoring.js +1 -1
- package/dist/commands/market-authoring.js.map +1 -1
- package/dist/commands/market.d.ts +89 -31
- package/dist/commands/market.js +215 -222
- package/dist/commands/market.js.map +1 -1
- package/dist/commands/mcp.d.ts +1 -1
- package/dist/commands/mcp.js +14 -9
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/observe.category.test.d.ts +1 -0
- package/dist/commands/observe.category.test.js +59 -0
- package/dist/commands/observe.category.test.js.map +1 -0
- package/dist/commands/observe.d.ts +3 -0
- package/dist/commands/observe.js +7 -5
- package/dist/commands/observe.js.map +1 -1
- package/dist/commands/observe.title.test.d.ts +1 -0
- package/dist/commands/observe.title.test.js +37 -0
- package/dist/commands/observe.title.test.js.map +1 -0
- package/dist/commands/playbook.js +9 -0
- package/dist/commands/playbook.js.map +1 -1
- package/dist/commands/pods.d.ts +6 -1
- package/dist/commands/pods.js +38 -17
- package/dist/commands/pods.js.map +1 -1
- package/dist/commands/proposals-actions.js +7 -1
- package/dist/commands/proposals-actions.js.map +1 -1
- package/dist/commands/proton-setup.js +3 -1
- package/dist/commands/proton-setup.js.map +1 -1
- package/dist/commands/providers.d.ts +22 -6
- package/dist/commands/providers.js +39 -32
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/raycast.d.ts +15 -0
- package/dist/commands/raycast.js +36 -10
- package/dist/commands/raycast.js.map +1 -1
- package/dist/commands/session-feed-wait.d.ts +48 -0
- package/dist/commands/session-feed-wait.js +261 -0
- package/dist/commands/session-feed-wait.js.map +1 -0
- package/dist/commands/session-post.d.ts +40 -0
- package/dist/commands/session-post.js +96 -0
- package/dist/commands/session-post.js.map +1 -0
- package/dist/commands/session-wait.d.ts +9 -4
- package/dist/commands/session-wait.js +20 -5
- package/dist/commands/session-wait.js.map +1 -1
- package/dist/commands/sessions.d.ts +2 -0
- package/dist/commands/sessions.js +23 -0
- package/dist/commands/sessions.js.map +1 -1
- package/dist/commands/skills-commands.d.ts +2 -0
- package/dist/commands/skills-commands.js +9 -1
- package/dist/commands/skills-commands.js.map +1 -1
- package/dist/commands/skills-commands.test.d.ts +1 -0
- package/dist/commands/skills-commands.test.js +57 -0
- package/dist/commands/skills-commands.test.js.map +1 -0
- package/dist/commands/status.js +13 -7
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/statusline.backoff.test.js +13 -3
- package/dist/commands/statusline.backoff.test.js.map +1 -1
- package/dist/commands/statusline.d.ts +104 -9
- package/dist/commands/statusline.js +392 -148
- package/dist/commands/statusline.js.map +1 -1
- package/dist/commands/statusline.line2.test.d.ts +15 -0
- package/dist/commands/statusline.line2.test.js +226 -0
- package/dist/commands/statusline.line2.test.js.map +1 -0
- package/dist/commands/statusline.needs-you.test.d.ts +1 -0
- package/dist/commands/statusline.needs-you.test.js +17 -0
- package/dist/commands/statusline.needs-you.test.js.map +1 -0
- package/dist/commands/statusline.now.test.d.ts +10 -0
- package/dist/commands/statusline.now.test.js +250 -0
- package/dist/commands/statusline.now.test.js.map +1 -0
- package/dist/commands/tracks.d.ts +68 -6
- package/dist/commands/tracks.js +272 -16
- package/dist/commands/tracks.js.map +1 -1
- package/dist/commands/upload.js +12 -0
- package/dist/commands/upload.js.map +1 -1
- package/dist/commands/wait.d.ts +124 -0
- package/dist/commands/wait.js +384 -0
- package/dist/commands/wait.js.map +1 -0
- package/dist/commands/wait.test.d.ts +8 -0
- package/dist/commands/wait.test.js +308 -0
- package/dist/commands/wait.test.js.map +1 -0
- package/dist/commands/whoami.d.ts +7 -0
- package/dist/commands/whoami.js +17 -0
- package/dist/commands/whoami.js.map +1 -1
- package/dist/commands/worker-accounts.d.ts +149 -0
- package/dist/commands/worker-accounts.js +339 -0
- package/dist/commands/worker-accounts.js.map +1 -0
- package/dist/commands/worker-accounts.test.d.ts +1 -0
- package/dist/commands/worker-accounts.test.js +224 -0
- package/dist/commands/worker-accounts.test.js.map +1 -0
- package/dist/commands/worker-github-app.d.ts +63 -0
- package/dist/commands/worker-github-app.js +161 -0
- package/dist/commands/worker-github-app.js.map +1 -0
- package/dist/commands/worker-github-app.test.d.ts +1 -0
- package/dist/commands/worker-github-app.test.js +102 -0
- package/dist/commands/worker-github-app.test.js.map +1 -0
- package/dist/commands/worker-github-broker.d.ts +39 -0
- package/dist/commands/worker-github-broker.js +106 -0
- package/dist/commands/worker-github-broker.js.map +1 -0
- package/dist/commands/worker-github-broker.test.d.ts +1 -0
- package/dist/commands/worker-github-broker.test.js +90 -0
- package/dist/commands/worker-github-broker.test.js.map +1 -0
- package/dist/commands/worker-runs.test.d.ts +1 -0
- package/dist/commands/worker-runs.test.js +150 -0
- package/dist/commands/worker-runs.test.js.map +1 -0
- package/dist/commands/worker-worktrees.d.ts +34 -0
- package/dist/commands/worker-worktrees.js +87 -0
- package/dist/commands/worker-worktrees.js.map +1 -0
- package/dist/commands/worker.d.ts +406 -10
- package/dist/commands/worker.js +1180 -126
- package/dist/commands/worker.js.map +1 -1
- package/dist/commands/worker.test.js +588 -11
- package/dist/commands/worker.test.js.map +1 -1
- package/dist/index.js +220 -28
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-door.d.ts +1 -3
- package/dist/lib/agent-door.js +10 -7
- package/dist/lib/agent-door.js.map +1 -1
- package/dist/lib/agents-config.d.ts +9 -0
- package/dist/lib/agents-config.js +20 -0
- package/dist/lib/agents-config.js.map +1 -1
- package/dist/lib/atomic-file.d.ts +20 -1
- package/dist/lib/atomic-file.js +100 -2
- package/dist/lib/atomic-file.js.map +1 -1
- package/dist/lib/auth.d.ts +28 -2
- package/dist/lib/auth.js +52 -12
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/box/egress.d.ts +82 -0
- package/dist/lib/box/egress.js +264 -0
- package/dist/lib/box/egress.js.map +1 -0
- package/dist/lib/box/evidence.d.ts +86 -0
- package/dist/lib/box/evidence.js +121 -0
- package/dist/lib/box/evidence.js.map +1 -0
- package/dist/lib/box/job-server.d.ts +72 -0
- package/dist/lib/box/job-server.js +250 -0
- package/dist/lib/box/job-server.js.map +1 -0
- package/dist/lib/box/provisioner.d.ts +83 -0
- package/dist/lib/box/provisioner.js +312 -0
- package/dist/lib/box/provisioner.js.map +1 -0
- package/dist/lib/box/proxmox.d.ts +112 -0
- package/dist/lib/box/proxmox.js +211 -0
- package/dist/lib/box/proxmox.js.map +1 -0
- package/dist/lib/box/wire.d.ts +98 -0
- package/dist/lib/box/wire.js +70 -0
- package/dist/lib/box/wire.js.map +1 -0
- package/dist/lib/bridge-invocation.test.d.ts +1 -0
- package/dist/lib/bridge-invocation.test.js +75 -0
- package/dist/lib/bridge-invocation.test.js.map +1 -0
- package/dist/lib/bridge-status.d.ts +144 -0
- package/dist/lib/bridge-status.js +227 -0
- package/dist/lib/bridge-status.js.map +1 -0
- package/dist/lib/bridge-status.test.d.ts +6 -0
- package/dist/lib/bridge-status.test.js +197 -0
- package/dist/lib/bridge-status.test.js.map +1 -0
- package/dist/lib/client-header.test.d.ts +1 -0
- package/dist/lib/client-header.test.js +103 -0
- package/dist/lib/client-header.test.js.map +1 -0
- package/dist/lib/conversation-headers.d.ts +89 -9
- package/dist/lib/conversation-headers.js +156 -3
- package/dist/lib/conversation-headers.js.map +1 -1
- package/dist/lib/conversation-headers.test.d.ts +1 -0
- package/dist/lib/conversation-headers.test.js +78 -0
- package/dist/lib/conversation-headers.test.js.map +1 -0
- package/dist/lib/credential-class.d.ts +40 -2
- package/dist/lib/credential-class.js +48 -6
- package/dist/lib/credential-class.js.map +1 -1
- package/dist/lib/device-connect.d.ts +45 -0
- package/dist/lib/device-connect.js +60 -0
- package/dist/lib/device-connect.js.map +1 -1
- package/dist/lib/exporter-coverage.d.ts +1 -1
- package/dist/lib/exporter-coverage.js +1 -1
- package/dist/lib/goal-words.d.ts +38 -0
- package/dist/lib/goal-words.js +115 -0
- package/dist/lib/goal-words.js.map +1 -0
- package/dist/lib/hub-client.d.ts +87 -8
- package/dist/lib/hub-client.js +205 -70
- package/dist/lib/hub-client.js.map +1 -1
- package/dist/lib/init-handoff.d.ts +8 -0
- package/dist/lib/init-handoff.js +9 -2
- package/dist/lib/init-handoff.js.map +1 -1
- package/dist/lib/key-locations.d.ts +3 -3
- package/dist/lib/key-locations.js +3 -39
- package/dist/lib/key-locations.js.map +1 -1
- package/dist/lib/key-source.d.ts +3 -1
- package/dist/lib/key-source.js +7 -4
- package/dist/lib/key-source.js.map +1 -1
- package/dist/lib/knowledge-title.d.ts +3 -2
- package/dist/lib/knowledge-title.js +3 -2
- package/dist/lib/knowledge-title.js.map +1 -1
- package/dist/lib/machine-instance.d.ts +7 -5
- package/dist/lib/machine-instance.js +7 -5
- package/dist/lib/machine-instance.js.map +1 -1
- package/dist/lib/mcp-bridge.d.ts +50 -0
- package/dist/lib/mcp-bridge.js +232 -11
- package/dist/lib/mcp-bridge.js.map +1 -1
- package/dist/lib/mcp-bridge.test.js +224 -4
- package/dist/lib/mcp-bridge.test.js.map +1 -1
- package/dist/lib/mcp-call.d.ts +5 -1
- package/dist/lib/mcp-call.js +7 -6
- package/dist/lib/mcp-call.js.map +1 -1
- package/dist/lib/mcp-connector-url.test.d.ts +1 -0
- package/dist/lib/mcp-connector-url.test.js +13 -0
- package/dist/lib/mcp-connector-url.test.js.map +1 -0
- package/dist/lib/mcp-snippets.d.ts +16 -0
- package/dist/lib/mcp-snippets.js +20 -2
- package/dist/lib/mcp-snippets.js.map +1 -1
- package/dist/lib/now-line.d.ts +66 -0
- package/dist/lib/now-line.js +193 -0
- package/dist/lib/now-line.js.map +1 -0
- package/dist/lib/now-line.test.d.ts +5 -0
- package/dist/lib/now-line.test.js +177 -0
- package/dist/lib/now-line.test.js.map +1 -0
- package/dist/lib/package-updates.d.ts +66 -0
- package/dist/lib/package-updates.js +76 -0
- package/dist/lib/package-updates.js.map +1 -0
- package/dist/lib/pod-moved.d.ts +70 -0
- package/dist/lib/pod-moved.js +146 -0
- package/dist/lib/pod-moved.js.map +1 -0
- package/dist/lib/pod-reach.d.ts +39 -0
- package/dist/lib/pod-reach.js +117 -0
- package/dist/lib/pod-reach.js.map +1 -0
- package/dist/lib/pod-reach.test.d.ts +1 -0
- package/dist/lib/pod-reach.test.js +67 -0
- package/dist/lib/pod-reach.test.js.map +1 -0
- package/dist/lib/pod.d.ts +8 -4
- package/dist/lib/pod.js +12 -10
- package/dist/lib/pod.js.map +1 -1
- package/dist/lib/register-claude-code-mcp.test.d.ts +1 -0
- package/dist/lib/register-claude-code-mcp.test.js +97 -0
- package/dist/lib/register-claude-code-mcp.test.js.map +1 -0
- package/dist/lib/review-credential.js +3 -1
- package/dist/lib/review-credential.js.map +1 -1
- package/dist/lib/safe-open.d.ts +5 -3
- package/dist/lib/safe-open.js +9 -8
- package/dist/lib/safe-open.js.map +1 -1
- package/dist/lib/self-host.d.ts +17 -0
- package/dist/lib/self-host.js +24 -0
- package/dist/lib/self-host.js.map +1 -0
- package/dist/lib/session-feed.d.ts +185 -0
- package/dist/lib/session-feed.js +257 -0
- package/dist/lib/session-feed.js.map +1 -0
- package/dist/lib/targets.d.ts +52 -3
- package/dist/lib/targets.js +150 -209
- package/dist/lib/targets.js.map +1 -1
- package/dist/lib/template-lifecycle.d.ts +0 -31
- package/dist/lib/template-lifecycle.js +0 -74
- package/dist/lib/template-lifecycle.js.map +1 -1
- package/dist/lib/term.d.ts +24 -0
- package/dist/lib/term.js +52 -0
- package/dist/lib/term.js.map +1 -0
- package/dist/lib/term.test.d.ts +1 -0
- package/dist/lib/term.test.js +29 -0
- package/dist/lib/term.test.js.map +1 -0
- package/dist/lib/transcript-index.d.ts +94 -0
- package/dist/lib/transcript-index.js +321 -0
- package/dist/lib/transcript-index.js.map +1 -0
- package/dist/lib/transcript-index.test.d.ts +10 -0
- package/dist/lib/transcript-index.test.js +200 -0
- package/dist/lib/transcript-index.test.js.map +1 -0
- package/dist/lib/wait-help.d.ts +11 -0
- package/dist/lib/wait-help.js +25 -0
- package/dist/lib/wait-help.js.map +1 -0
- package/dist/lib/wait-state.d.ts +57 -0
- package/dist/lib/wait-state.js +114 -0
- package/dist/lib/wait-state.js.map +1 -0
- package/dist/lib/wake-hook-settings.d.ts +57 -0
- package/dist/lib/wake-hook-settings.js +153 -0
- package/dist/lib/wake-hook-settings.js.map +1 -0
- package/dist/lib/wake-state.d.ts +65 -0
- package/dist/lib/wake-state.js +122 -0
- package/dist/lib/wake-state.js.map +1 -0
- package/package.json +5 -2
- package/skills/README.md +1 -1
- package/skills/agent-os/SKILL.md +8 -8
- package/skills/synap/SKILL.md +188 -94
- package/skills/synap/code-skills.md +84 -0
- package/skills/synap/concepts.md +38 -20
- package/skills/synap/creative-loop.md +1 -1
- package/skills/synap/document-embeds.md +17 -1
- package/skills/synap/focus-sessions.md +17 -8
- package/skills/synap/from-intent.md +33 -17
- package/skills/synap/governance-rules.md +3 -1
- package/skills/synap/hand-off.md +10 -6
- package/skills/synap/lenses.md +4 -4
- package/skills/synap/linking.md +2 -2
- package/skills/synap/mental-model.md +1 -1
- package/skills/synap/operating-mode-rules.md +1 -1
- package/skills/synap/quick-reference.md +2 -1
- package/skills/synap/reflexes.md +8 -8
- package/skills/synap/viewframe-cells.md +1 -1
- package/skills/synap/work-model.md +24 -10
- package/skills/synap/workspace-design.md +5 -5
- package/skills/synap/writes.md +16 -9
- package/skills/synap/writing-titles.md +7 -0
- package/skills/synap-app/SKILL.md +148 -66
- package/skills/synap-app/creating-the-base-app.md +12 -7
- package/skills/synap-app/governance.md +27 -16
- package/skills/synap-app/install-commands.md +18 -9
- package/skills/synap-app/overview.md +16 -9
- package/skills/synap-app/using-the-sdk.md +75 -25
- package/skills/synap-market/SKILL.md +1 -1
- package/skills/synap-market/governance-and-catalog.md +1 -1
- package/skills/synap-schema/SKILL.md +24 -21
- package/skills/synap-schema/intent-vocabulary-ssot.md +24 -21
- package/templates/box/runner.py +206 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The statusline's per-conversation pod cache and its 4th ("now") line,
|
|
3
|
+
* driven through the REAL exported `statusline()`.
|
|
4
|
+
*
|
|
5
|
+
* The `/tmp/synap-statusline-*` caches live in an in-memory map (a test must
|
|
6
|
+
* never read or write the person's real cache); every other path is the real
|
|
7
|
+
* fs under the throwaway HOME of test/setup/temp-home.ts. fd 0 (stdin) returns
|
|
8
|
+
* the Claude Code JSON fixture.
|
|
9
|
+
*/
|
|
10
|
+
import fs from "node:fs";
|
|
11
|
+
import os from "node:os";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
14
|
+
const tmpFiles = new Map();
|
|
15
|
+
let stdin = "";
|
|
16
|
+
const isTmp = (p) => typeof p === "string" && p.startsWith("/tmp/synap-statusline");
|
|
17
|
+
vi.mock("node:fs", async () => {
|
|
18
|
+
const real = await vi.importActual("node:fs");
|
|
19
|
+
const fs = {
|
|
20
|
+
...real,
|
|
21
|
+
readFileSync: ((p, ...rest) => {
|
|
22
|
+
if (p === 0)
|
|
23
|
+
return stdin;
|
|
24
|
+
if (isTmp(p)) {
|
|
25
|
+
if (!tmpFiles.has(p))
|
|
26
|
+
throw new Error(`ENOENT ${String(p)}`);
|
|
27
|
+
return tmpFiles.get(p);
|
|
28
|
+
}
|
|
29
|
+
return real.readFileSync(p, ...rest);
|
|
30
|
+
}),
|
|
31
|
+
writeFileSync: ((p, data, ...rest) => {
|
|
32
|
+
if (isTmp(p))
|
|
33
|
+
return void tmpFiles.set(p, String(data));
|
|
34
|
+
return real.writeFileSync(p, data, ...rest);
|
|
35
|
+
}),
|
|
36
|
+
unlinkSync: ((p) => {
|
|
37
|
+
if (isTmp(p))
|
|
38
|
+
return void tmpFiles.delete(p);
|
|
39
|
+
return real.unlinkSync(p);
|
|
40
|
+
}),
|
|
41
|
+
statSync: ((p, ...rest) => {
|
|
42
|
+
if (isTmp(p)) {
|
|
43
|
+
if (!tmpFiles.has(p))
|
|
44
|
+
throw new Error(`ENOENT ${String(p)}`);
|
|
45
|
+
return { mtimeMs: Date.now(), size: tmpFiles.get(p).length };
|
|
46
|
+
}
|
|
47
|
+
return real.statSync(p, ...rest);
|
|
48
|
+
}),
|
|
49
|
+
};
|
|
50
|
+
// `default` last: `real` carries its own `default`, which must not win.
|
|
51
|
+
return { ...fs, default: fs };
|
|
52
|
+
});
|
|
53
|
+
// Every way out of the process throws: render must never need one.
|
|
54
|
+
const spawn = vi.fn((_cmd, _args) => {
|
|
55
|
+
throw new Error("render must not spawn into the network");
|
|
56
|
+
});
|
|
57
|
+
const forbidden = (name) => () => {
|
|
58
|
+
throw new Error(`render must not call child_process.${name}`);
|
|
59
|
+
};
|
|
60
|
+
vi.mock("node:child_process", () => ({
|
|
61
|
+
spawn: (cmd, args) => spawn(cmd, args),
|
|
62
|
+
exec: forbidden("exec"),
|
|
63
|
+
execSync: forbidden("execSync"),
|
|
64
|
+
execFile: forbidden("execFile"),
|
|
65
|
+
execFileSync: forbidden("execFileSync"),
|
|
66
|
+
}));
|
|
67
|
+
const hubGet = vi.fn();
|
|
68
|
+
vi.mock("../lib/hub-client.js", async () => {
|
|
69
|
+
const real = await vi.importActual("../lib/hub-client.js");
|
|
70
|
+
return {
|
|
71
|
+
...real,
|
|
72
|
+
resolveHubConfig: async () => ({ podUrl: "https://pod.test", apiKey: "k", workspaceId: `ws-${process.env.SYNAP_LENS_SESSION}` }),
|
|
73
|
+
hubGet: (...args) => hubGet(...args),
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
vi.mock("../lib/session-lens.js", () => ({
|
|
77
|
+
resolveActiveLens: () => ({ focusSessionId: `fs-${process.env.SYNAP_LENS_SESSION}` }),
|
|
78
|
+
}));
|
|
79
|
+
vi.mock("../lib/pod.js", () => ({ getSurfaceAgentKey: () => null, SURFACE_NAMES: [] }));
|
|
80
|
+
const { statusline, convCacheFile } = await import("./statusline.js");
|
|
81
|
+
const SHARED = "/tmp/synap-statusline-cache.json";
|
|
82
|
+
// eslint-disable-next-line no-control-regex
|
|
83
|
+
const plain = (s) => s.replace(/\x1b\[[0-9;]*m|\x1b\]8;;[^\x1b]*\x1b\\/g, "");
|
|
84
|
+
function podAnswers() {
|
|
85
|
+
hubGet.mockImplementation(async (p) => {
|
|
86
|
+
if (p === "/workspaces")
|
|
87
|
+
return { workspaces: [{ id: "ws-A", name: "Alpha", entityCount: 3 }, { id: "ws-B", name: "Beta", entityCount: 4 }] };
|
|
88
|
+
if (p.startsWith("/agent-skills"))
|
|
89
|
+
return { total: 7 };
|
|
90
|
+
if (p === "/needs-you")
|
|
91
|
+
return { count: { needsYou: 0, truncated: false } };
|
|
92
|
+
const m = /^\/focus-sessions\/fs-(\w+)$/.exec(p);
|
|
93
|
+
if (m)
|
|
94
|
+
return { id: `fs-${m[1]}`, goal: `goal of ${m[1]}` };
|
|
95
|
+
return null;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function refreshAs(conv) {
|
|
99
|
+
vi.stubEnv("SYNAP_LENS_SESSION", conv);
|
|
100
|
+
await statusline({ refresh: true });
|
|
101
|
+
}
|
|
102
|
+
async function renderAs(conv, extra = {}) {
|
|
103
|
+
stdin = JSON.stringify({ session_id: conv, model: { display_name: "Opus" }, context_window: { used_percentage: 12 }, cost: { total_cost_usd: 1.5 }, ...extra });
|
|
104
|
+
const out = [];
|
|
105
|
+
const log = vi.spyOn(console, "log").mockImplementation((s) => void out.push(plain(String(s))));
|
|
106
|
+
try {
|
|
107
|
+
await statusline();
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
log.mockRestore();
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
beforeEach(() => {
|
|
115
|
+
tmpFiles.clear();
|
|
116
|
+
spawn.mockClear();
|
|
117
|
+
hubGet.mockReset();
|
|
118
|
+
vi.stubEnv("CLAUDE_CODE_SESSION_ID", "");
|
|
119
|
+
vi.stubEnv("SYNAP_STATUSLINE_TRANSCRIPT", "");
|
|
120
|
+
vi.stubEnv("COLUMNS", "");
|
|
121
|
+
});
|
|
122
|
+
afterEach(() => vi.unstubAllEnvs());
|
|
123
|
+
describe("per-conversation pod cache", () => {
|
|
124
|
+
it("each conversation's session lives in its own file; the pod-wide burst runs once for both", async () => {
|
|
125
|
+
podAnswers();
|
|
126
|
+
await refreshAs("A");
|
|
127
|
+
await refreshAs("B");
|
|
128
|
+
expect(JSON.parse(tmpFiles.get(convCacheFile("A")))).toMatchObject({ sessionGoal: "goal of A", activeWorkspaceId: "ws-A" });
|
|
129
|
+
expect(JSON.parse(tmpFiles.get(convCacheFile("B")))).toMatchObject({ sessionGoal: "goal of B", activeWorkspaceId: "ws-B" });
|
|
130
|
+
// N conversations never multiply the pod-wide burst: B found the shared cache fresh.
|
|
131
|
+
expect(hubGet.mock.calls.filter(([p]) => p === "/workspaces")).toHaveLength(1);
|
|
132
|
+
expect(JSON.parse(tmpFiles.get(SHARED))).not.toHaveProperty("sessionGoal");
|
|
133
|
+
const a = await renderAs("A");
|
|
134
|
+
const b = await renderAs("B");
|
|
135
|
+
expect(a[1]).toContain("goal of A");
|
|
136
|
+
expect(a[1]).toContain("Alpha");
|
|
137
|
+
expect(a[1]).not.toContain("goal of B");
|
|
138
|
+
expect(b[1]).toContain("goal of B");
|
|
139
|
+
expect(b[1]).toContain("Beta");
|
|
140
|
+
});
|
|
141
|
+
it("a conversation with no cache of its own never shows the session another conversation left in an old shared cache", async () => {
|
|
142
|
+
tmpFiles.set(SHARED, JSON.stringify({ ts: Date.now(), attemptedTs: Date.now(), ok: true, workspaces: [], sessionGoal: "someone else's goal", sessionId: "x" }));
|
|
143
|
+
const out = await renderAs("C");
|
|
144
|
+
expect(out.join("\n")).not.toContain("someone else's goal");
|
|
145
|
+
});
|
|
146
|
+
it("a failing pod keeps the conversation's last good values and stamps its attempt", async () => {
|
|
147
|
+
podAnswers();
|
|
148
|
+
await refreshAs("A");
|
|
149
|
+
const before = JSON.parse(tmpFiles.get(convCacheFile("A")));
|
|
150
|
+
hubGet.mockRejectedValue(new Error("429"));
|
|
151
|
+
tmpFiles.set(convCacheFile("A"), JSON.stringify({ ...before, attemptedTs: 0 })); // due again
|
|
152
|
+
await refreshAs("A");
|
|
153
|
+
const after = JSON.parse(tmpFiles.get(convCacheFile("A")));
|
|
154
|
+
expect(after).toMatchObject({ ok: false, sessionGoal: "goal of A", ts: before.ts }); // a 429 keeps the last good value
|
|
155
|
+
expect(Date.now() - after.attemptedTs).toBeLessThan(5_000); // …and stamps the attempt (no storm)
|
|
156
|
+
});
|
|
157
|
+
it("render refreshes only when a cache is due, and a refresh of one conversation does not refetch the other's", async () => {
|
|
158
|
+
const fresh = { ts: Date.now(), attemptedTs: Date.now(), ok: true };
|
|
159
|
+
tmpFiles.set(SHARED, JSON.stringify({ ...fresh, workspaces: [] }));
|
|
160
|
+
tmpFiles.set(convCacheFile("A"), JSON.stringify(fresh));
|
|
161
|
+
await renderAs("A");
|
|
162
|
+
expect(spawn).not.toHaveBeenCalled();
|
|
163
|
+
await renderAs("B"); // B has no cache yet → a refresh is wanted (spawn throws; render goes on)
|
|
164
|
+
expect(spawn).toHaveBeenCalledTimes(1);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe("render touches no network", () => {
|
|
168
|
+
it("prints all 4 lines from local files with fetch and every child_process call throwing", async () => {
|
|
169
|
+
const fetchSpy = vi.fn(() => {
|
|
170
|
+
throw new Error("render must not fetch");
|
|
171
|
+
});
|
|
172
|
+
vi.stubGlobal("fetch", fetchSpy);
|
|
173
|
+
try {
|
|
174
|
+
const home = os.homedir();
|
|
175
|
+
const conv = "11111111-2222-3333-4444-555555555555";
|
|
176
|
+
// Claude Code's registry: this conversation is idle (its turn ended).
|
|
177
|
+
fs.mkdirSync(path.join(home, ".claude", "sessions"), { recursive: true });
|
|
178
|
+
fs.writeFileSync(path.join(home, ".claude", "sessions", "999.json"), JSON.stringify({ pid: 999, sessionId: conv, status: "shell", statusUpdatedAt: Date.now() - 60_000, startedAt: Date.now() - 3_600_000 }));
|
|
179
|
+
// The transcript: one background agent, still running.
|
|
180
|
+
const transcript = path.join(home, "t.jsonl");
|
|
181
|
+
const ts = new Date(Date.now() - 5 * 60_000).toISOString();
|
|
182
|
+
fs.writeFileSync(transcript, [
|
|
183
|
+
JSON.stringify({ type: "assistant", timestamp: ts, message: { content: [{ type: "tool_use", id: "toolu_a", name: "Agent", input: { description: "Review the diff" } }] } }),
|
|
184
|
+
JSON.stringify({ type: "user", timestamp: ts, message: { content: [{ type: "tool_result", tool_use_id: "toolu_a", content: "ok" }] }, toolUseResult: { status: "async_launched", agentId: "a1" } }),
|
|
185
|
+
].join("\n") + "\n");
|
|
186
|
+
// A typed wait, running.
|
|
187
|
+
const wdir = path.join(home, ".synap", "waits", conv);
|
|
188
|
+
fs.mkdirSync(wdir, { recursive: true });
|
|
189
|
+
fs.writeFileSync(path.join(wdir, "w.json"), JSON.stringify({ id: "w", kind: "devbox", ref: "w7", label: "", pid: process.pid, startedAt: Date.now() - 120_000, probedAt: Date.now(), changedAt: Date.now(), state: "running", detail: "be-file · 1/2 done", attempt: 1, probeErrors: 0 }));
|
|
190
|
+
const out = await renderAs(conv, { transcript_path: transcript, cwd: home, rate_limits: { five_hour: { used_percentage: 10 } } });
|
|
191
|
+
expect(fetchSpy).not.toHaveBeenCalled();
|
|
192
|
+
expect(out).toHaveLength(4);
|
|
193
|
+
expect(out[3]).toBe("⏳ waiting on 2 · devbox w7 running (be-file · 1/2 done) 2m · Review the diff 5m");
|
|
194
|
+
// The index it built is on disk for the next render.
|
|
195
|
+
expect(JSON.parse(fs.readFileSync(path.join(home, ".synap", "statusline", `${conv}.json`), "utf-8")).open.a1).toBeDefined();
|
|
196
|
+
}
|
|
197
|
+
finally {
|
|
198
|
+
vi.unstubAllGlobals();
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe("line 4 from the bridge's status file", () => {
|
|
203
|
+
/** This conversation's registry (idle, its process started an hour ago) and, when given, its status file. */
|
|
204
|
+
function conversation(conv, statusFile) {
|
|
205
|
+
const home = os.homedir();
|
|
206
|
+
fs.mkdirSync(path.join(home, ".claude", "sessions"), { recursive: true });
|
|
207
|
+
fs.writeFileSync(path.join(home, ".claude", "sessions", `${conv.slice(0, 4)}.json`), JSON.stringify({ pid: 4321, sessionId: conv, status: "idle", statusUpdatedAt: Date.now() - 60_000, startedAt: Date.now() - 3_600_000 }));
|
|
208
|
+
if (statusFile === undefined)
|
|
209
|
+
return;
|
|
210
|
+
const dir = path.join(home, ".synap", "bridge", "status");
|
|
211
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
212
|
+
fs.writeFileSync(path.join(dir, `${conv}.json`), statusFile);
|
|
213
|
+
}
|
|
214
|
+
const bridgeFile = (writtenAt) => JSON.stringify({
|
|
215
|
+
v: 1,
|
|
216
|
+
writtenAt: new Date(writtenAt).toISOString(),
|
|
217
|
+
sessionId: "54436c32-783f-4a9d-9322-16ff18f448f7",
|
|
218
|
+
title: "Lane cli-statusfile",
|
|
219
|
+
live: null,
|
|
220
|
+
nextMove: { kind: "agent_slot", actor: "ai", label: "Open the PR", reason: "" },
|
|
221
|
+
waitingOn: [{ reason: "approval", count: 2 }],
|
|
222
|
+
workUnits: [],
|
|
223
|
+
});
|
|
224
|
+
it("a fresh file is drawn: what the pod says the conversation waits on", async () => {
|
|
225
|
+
const conv = "aaaa1111-2222-3333-4444-555555555555";
|
|
226
|
+
conversation(conv, bridgeFile(Date.now() - 30_000));
|
|
227
|
+
const out = await renderAs(conv);
|
|
228
|
+
expect(out[3]).toBe("⏳ waiting on 2 · approval (2) · next: Open the PR");
|
|
229
|
+
});
|
|
230
|
+
it("no file: the transcript index line, as before", async () => {
|
|
231
|
+
const conv = "bbbb1111-2222-3333-4444-555555555555";
|
|
232
|
+
conversation(conv);
|
|
233
|
+
const out = await renderAs(conv);
|
|
234
|
+
expect(out[3]).toBe("■ stopped · nothing running · 1m");
|
|
235
|
+
});
|
|
236
|
+
it("a file an earlier Claude Code process wrote is stale: the transcript index line", async () => {
|
|
237
|
+
const conv = "cccc1111-2222-3333-4444-555555555555";
|
|
238
|
+
conversation(conv, bridgeFile(Date.now() - 2 * 3_600_000));
|
|
239
|
+
const out = await renderAs(conv);
|
|
240
|
+
expect(out[3]).toBe("■ stopped · nothing running · 1m");
|
|
241
|
+
});
|
|
242
|
+
it("a malformed file falls back, never throws, and is marked as a failed read", async () => {
|
|
243
|
+
const conv = "dddd1111-2222-3333-4444-555555555555";
|
|
244
|
+
conversation(conv, '{"v":1,"writ');
|
|
245
|
+
const out = await renderAs(conv);
|
|
246
|
+
expect(out).toHaveLength(4);
|
|
247
|
+
expect(out[3]).toBe("■ stopped · nothing running · 1m · ⚑ bridge status not JSON");
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
//# sourceMappingURL=statusline.now.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline.now.test.js","sourceRoot":"","sources":["../../src/commands/statusline.now.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `synap track` — a
|
|
3
|
-
* Work in it = `synap session start --track <id>`. A
|
|
2
|
+
* `synap track` — a goal inside a project (Hub `/api/hub/tracks`).
|
|
3
|
+
* Work in it = `synap session start --track <id>`. A goal stays open as long as
|
|
4
|
+
* it matters, or a person closes it with a verdict. A legacy track also runs a
|
|
4
5
|
* method (a project-scoped playbook) with steps; a new one needs none.
|
|
5
6
|
*
|
|
6
|
-
* list a project's tracks (
|
|
7
|
+
* list a project's tracks (the active project lens, else every goal on the pod)
|
|
7
8
|
* show one track, its steps and where it stands
|
|
8
|
-
* start start a track on a project (--name; --
|
|
9
|
+
* start start a track on a project (--name; --end-state, --criterion, … say what done is)
|
|
10
|
+
* update set a goal's direction, KPI and content
|
|
11
|
+
* accept the goal's judge accepts / sends back / rejects a claimed criterion
|
|
9
12
|
* advance move a track to a step — returns the step's session OFFER
|
|
10
|
-
* status
|
|
13
|
+
* status move it through its lifecycle; close (completed) and drop
|
|
14
|
+
* (archived) carry --verdict
|
|
15
|
+
* reopen a closed or dropped goal comes back as a NEW version
|
|
16
|
+
* convert (`synap goal convert`) make a goal / objective / OKR entity a goal
|
|
11
17
|
* params answer the method's params (merged; `key=null` clears)
|
|
12
18
|
* start-step start the work session of one step (default: current step)
|
|
13
19
|
*
|
|
@@ -19,14 +25,45 @@
|
|
|
19
25
|
*/
|
|
20
26
|
import { type BaseOpts } from "./data.js";
|
|
21
27
|
type Json = Record<string, unknown>;
|
|
28
|
+
/** The kinds of check a person can name for a criterion (`--criterion "judged: …"`). */
|
|
29
|
+
export declare const CRITERION_KINDS: readonly ["measured", "judged", "handed_over", "learning", "decided_outside", "certified"];
|
|
30
|
+
/**
|
|
31
|
+
* The stored evaluator a typed line gets for each kind — one the pod's
|
|
32
|
+
* `CHECK_MEANING_EVALUATORS` allows for it (a person typing a line cannot
|
|
33
|
+
* post evidence, so the person's grade wherever the meaning allows one);
|
|
34
|
+
* `test/goal-criterion-parity.test.ts` holds both tables to the pod's.
|
|
35
|
+
*/
|
|
36
|
+
/** The pod's criterion key length (`sessionCriterionSchema` `key` `.max`). */
|
|
37
|
+
export declare const CRITERION_KEY_MAX = 80;
|
|
38
|
+
export declare const CRITERION_EVALUATOR: Record<(typeof CRITERION_KINDS)[number], string>;
|
|
39
|
+
/**
|
|
40
|
+
* `--criterion "[kind:] statement"` → a goal criterion. Kind defaults to
|
|
41
|
+
* `judged` (a person checks it); the key is a slug of the statement, made
|
|
42
|
+
* unique among `taken`. A `learning` criterion is about the method.
|
|
43
|
+
*/
|
|
44
|
+
export declare function parseCriterion(line: string, taken: Set<string>): Json;
|
|
45
|
+
/** The goal-content flags shared by `track start` and `track update`. */
|
|
46
|
+
interface GoalContentOpts {
|
|
47
|
+
endState?: string;
|
|
48
|
+
criterion?: string[];
|
|
49
|
+
dropCondition?: string[];
|
|
50
|
+
kind?: string;
|
|
51
|
+
uncertainty?: string;
|
|
52
|
+
loop?: string;
|
|
53
|
+
}
|
|
54
|
+
/** Goal-content flags → the body fields the pod reads (only what was typed). */
|
|
55
|
+
export declare function goalContentBody(opts: GoalContentOpts): Json;
|
|
22
56
|
/** `key=value` pairs → params. Values parse as JSON when they can (`null`, numbers, lists). */
|
|
23
57
|
export declare function parseParamPairs(pairs: string[]): Json;
|
|
24
58
|
export declare function listTracks(opts: BaseOpts & {
|
|
25
59
|
project?: string;
|
|
26
60
|
all?: boolean;
|
|
61
|
+
everywhere?: boolean;
|
|
62
|
+
limit?: string;
|
|
63
|
+
cursor?: string;
|
|
27
64
|
}): Promise<void>;
|
|
28
65
|
export declare function showTrack(id: string, opts: BaseOpts): Promise<void>;
|
|
29
|
-
export declare function startTrack(opts: BaseOpts & {
|
|
66
|
+
export declare function startTrack(opts: BaseOpts & GoalContentOpts & {
|
|
30
67
|
playbook?: string;
|
|
31
68
|
project?: string;
|
|
32
69
|
name?: string;
|
|
@@ -39,6 +76,14 @@ export declare function advanceTrack(id: string, toStage: string, opts: BaseOpts
|
|
|
39
76
|
}): Promise<void>;
|
|
40
77
|
export declare function setTrackStatus(id: string, status: string, opts: BaseOpts & {
|
|
41
78
|
reason?: string;
|
|
79
|
+
verdict?: string;
|
|
80
|
+
verdictReason?: string;
|
|
81
|
+
expected?: string;
|
|
82
|
+
}): Promise<void>;
|
|
83
|
+
/** A closed or dropped goal comes back as a NEW version — never moved back. */
|
|
84
|
+
export declare function reopenTrack(id: string, opts: BaseOpts & {
|
|
85
|
+
name?: string;
|
|
86
|
+
reason?: string;
|
|
42
87
|
}): Promise<void>;
|
|
43
88
|
export declare function setTrackParams(id: string, pairs: string[], opts: BaseOpts & {
|
|
44
89
|
reason?: string;
|
|
@@ -48,4 +93,21 @@ export declare function startStep(id: string, opts: BaseOpts & {
|
|
|
48
93
|
title?: string;
|
|
49
94
|
goal?: string;
|
|
50
95
|
}): Promise<void>;
|
|
96
|
+
/** Set where a goal is heading, its KPI and what it holds (PATCH /tracks/:id/direction). */
|
|
97
|
+
export declare function updateTrack(id: string, opts: BaseOpts & GoalContentOpts & {
|
|
98
|
+
direction?: string;
|
|
99
|
+
kpiCurrent?: string;
|
|
100
|
+
kpiTarget?: string;
|
|
101
|
+
reason?: string;
|
|
102
|
+
}): Promise<void>;
|
|
103
|
+
/** The goal's JUDGE decides a claimed criterion (a person's act — an agent key is refused). */
|
|
104
|
+
export declare function acceptCriterion(id: string, key: string, decision: string, opts: BaseOpts & {
|
|
105
|
+
note?: string;
|
|
106
|
+
}): Promise<void>;
|
|
107
|
+
/** "Make it a goal" — a goal / objective / okr entity becomes a goal, once. */
|
|
108
|
+
export declare function convertToGoal(entityId: string, opts: BaseOpts & {
|
|
109
|
+
project?: string;
|
|
110
|
+
name?: string;
|
|
111
|
+
reason?: string;
|
|
112
|
+
}): Promise<void>;
|
|
51
113
|
export {};
|