@paths.design/caws-cli 11.1.6 → 11.1.8
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 +1 -1
- package/dist/index.js +55 -58
- package/dist/init/hook-packs/manifest-claude-code.d.ts +1 -1
- package/dist/init/hook-packs/manifest-claude-code.d.ts.map +1 -1
- package/dist/init/hook-packs/manifest-claude-code.js +317 -6
- package/dist/init/hook-packs/manifest-claude-code.js.map +1 -1
- package/dist/init/hook-packs/types.js +1 -1
- package/dist/init/hook-packs/types.js.map +1 -1
- package/dist/shell/binding/resolve-binding.d.ts.map +1 -1
- package/dist/shell/binding/resolve-binding.js +105 -1
- package/dist/shell/binding/resolve-binding.js.map +1 -1
- package/dist/shell/binding/types.d.ts +47 -3
- package/dist/shell/binding/types.d.ts.map +1 -1
- package/dist/shell/command-metadata.d.ts +93 -0
- package/dist/shell/command-metadata.d.ts.map +1 -0
- package/dist/shell/command-metadata.js +687 -0
- package/dist/shell/command-metadata.js.map +1 -0
- package/dist/shell/commands/agents.d.ts +48 -0
- package/dist/shell/commands/agents.d.ts.map +1 -0
- package/dist/shell/commands/agents.js +577 -0
- package/dist/shell/commands/agents.js.map +1 -0
- package/dist/shell/commands/claim.d.ts +16 -0
- package/dist/shell/commands/claim.d.ts.map +1 -1
- package/dist/shell/commands/claim.js +88 -30
- package/dist/shell/commands/claim.js.map +1 -1
- package/dist/shell/commands/events.d.ts +106 -0
- package/dist/shell/commands/events.d.ts.map +1 -0
- package/dist/shell/commands/events.js +510 -0
- package/dist/shell/commands/events.js.map +1 -0
- package/dist/shell/commands/gates.d.ts +2 -2
- package/dist/shell/commands/gates.d.ts.map +1 -1
- package/dist/shell/commands/gates.js +106 -25
- package/dist/shell/commands/gates.js.map +1 -1
- package/dist/shell/commands/init.d.ts.map +1 -1
- package/dist/shell/commands/init.js +26 -0
- package/dist/shell/commands/init.js.map +1 -1
- package/dist/shell/commands/prepush.d.ts +26 -0
- package/dist/shell/commands/prepush.d.ts.map +1 -0
- package/dist/shell/commands/prepush.js +373 -0
- package/dist/shell/commands/prepush.js.map +1 -0
- package/dist/shell/commands/scope.d.ts.map +1 -1
- package/dist/shell/commands/scope.js +31 -1
- package/dist/shell/commands/scope.js.map +1 -1
- package/dist/shell/commands/specs.d.ts +44 -3
- package/dist/shell/commands/specs.d.ts.map +1 -1
- package/dist/shell/commands/specs.js +411 -15
- package/dist/shell/commands/specs.js.map +1 -1
- package/dist/shell/commands/status.d.ts +12 -0
- package/dist/shell/commands/status.d.ts.map +1 -1
- package/dist/shell/commands/status.js +236 -21
- package/dist/shell/commands/status.js.map +1 -1
- package/dist/shell/commands/worktree.d.ts +9 -0
- package/dist/shell/commands/worktree.d.ts.map +1 -1
- package/dist/shell/commands/worktree.js +353 -1
- package/dist/shell/commands/worktree.js.map +1 -1
- package/dist/shell/gates/disposition.d.ts.map +1 -1
- package/dist/shell/gates/disposition.js +43 -2
- package/dist/shell/gates/disposition.js.map +1 -1
- package/dist/shell/index.d.ts +14 -6
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +32 -1
- package/dist/shell/index.js.map +1 -1
- package/dist/shell/legacy-command-map.js +832 -0
- package/dist/shell/push-range/classify-range.d.ts +99 -0
- package/dist/shell/push-range/classify-range.d.ts.map +1 -0
- package/dist/shell/push-range/classify-range.js +155 -0
- package/dist/shell/push-range/classify-range.js.map +1 -0
- package/dist/shell/push-range/scope-match.d.ts +13 -0
- package/dist/shell/push-range/scope-match.d.ts.map +1 -0
- package/dist/shell/push-range/scope-match.js +53 -0
- package/dist/shell/push-range/scope-match.js.map +1 -0
- package/dist/shell/register.d.ts.map +1 -1
- package/dist/shell/register.js +350 -165
- package/dist/shell/register.js.map +1 -1
- package/dist/shell/registered-command-groups.js +48 -0
- package/dist/shell/render/status.d.ts +7 -1
- package/dist/shell/render/status.d.ts.map +1 -1
- package/dist/shell/render/status.js +72 -0
- package/dist/shell/render/status.js.map +1 -1
- package/dist/shell/rules.d.ts +19 -0
- package/dist/shell/rules.d.ts.map +1 -1
- package/dist/shell/rules.js +27 -0
- package/dist/shell/rules.js.map +1 -1
- package/dist/shell/session/resolve-session.d.ts +29 -1
- package/dist/shell/session/resolve-session.d.ts.map +1 -1
- package/dist/shell/session/resolve-session.js +817 -11
- package/dist/shell/session/resolve-session.js.map +1 -1
- package/dist/shell/session/types.d.ts +127 -1
- package/dist/shell/session/types.d.ts.map +1 -1
- package/dist/shell/session/types.js +10 -4
- package/dist/shell/session/types.js.map +1 -1
- package/dist/store/agents-store.d.ts.map +1 -1
- package/dist/store/agents-store.js +9 -0
- package/dist/store/agents-store.js.map +1 -1
- package/dist/store/apply-patch.d.ts.map +1 -1
- package/dist/store/apply-patch.js +15 -0
- package/dist/store/apply-patch.js.map +1 -1
- package/dist/store/doctor-snapshot.d.ts.map +1 -1
- package/dist/store/doctor-snapshot.js +169 -3
- package/dist/store/doctor-snapshot.js.map +1 -1
- package/dist/store/events-migration.d.ts +207 -0
- package/dist/store/events-migration.d.ts.map +1 -0
- package/dist/store/events-migration.js +358 -0
- package/dist/store/events-migration.js.map +1 -0
- package/dist/store/events-store.d.ts +47 -1
- package/dist/store/events-store.d.ts.map +1 -1
- package/dist/store/events-store.js +278 -0
- package/dist/store/events-store.js.map +1 -1
- package/dist/store/git-autocommit.d.ts +46 -0
- package/dist/store/git-autocommit.d.ts.map +1 -0
- package/dist/store/git-autocommit.js +198 -0
- package/dist/store/git-autocommit.js.map +1 -0
- package/dist/store/git-sparse-checkout.d.ts +25 -0
- package/dist/store/git-sparse-checkout.d.ts.map +1 -0
- package/dist/store/git-sparse-checkout.js +101 -0
- package/dist/store/git-sparse-checkout.js.map +1 -0
- package/dist/store/index.d.ts +6 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +16 -1
- package/dist/store/index.js.map +1 -1
- package/dist/store/leases-store.d.ts +89 -0
- package/dist/store/leases-store.d.ts.map +1 -0
- package/dist/store/leases-store.js +427 -0
- package/dist/store/leases-store.js.map +1 -0
- package/dist/store/lifecycle-transaction.d.ts.map +1 -1
- package/dist/store/lifecycle-transaction.js +34 -1
- package/dist/store/lifecycle-transaction.js.map +1 -1
- package/dist/store/rules.d.ts +74 -1
- package/dist/store/rules.d.ts.map +1 -1
- package/dist/store/rules.js +76 -0
- package/dist/store/rules.js.map +1 -1
- package/dist/store/specs-migration.d.ts +128 -0
- package/dist/store/specs-migration.d.ts.map +1 -0
- package/dist/store/specs-migration.js +481 -0
- package/dist/store/specs-migration.js.map +1 -0
- package/dist/store/specs-store.d.ts.map +1 -1
- package/dist/store/specs-store.js +14 -2
- package/dist/store/specs-store.js.map +1 -1
- package/dist/store/specs-writer.d.ts +130 -3
- package/dist/store/specs-writer.d.ts.map +1 -1
- package/dist/store/specs-writer.js +941 -102
- package/dist/store/specs-writer.js.map +1 -1
- package/dist/store/types.d.ts +31 -1
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/waivers-store.d.ts.map +1 -1
- package/dist/store/waivers-store.js +8 -1
- package/dist/store/waivers-store.js.map +1 -1
- package/dist/store/worktrees-migration.d.ts +141 -0
- package/dist/store/worktrees-migration.d.ts.map +1 -0
- package/dist/store/worktrees-migration.js +356 -0
- package/dist/store/worktrees-migration.js.map +1 -0
- package/dist/store/worktrees-writer.d.ts +28 -0
- package/dist/store/worktrees-writer.d.ts.map +1 -1
- package/dist/store/worktrees-writer.js +147 -13
- package/dist/store/worktrees-writer.js.map +1 -1
- package/package.json +5 -2
- package/templates/hook-packs/claude-code/CLAUDE.md +11 -5
- package/templates/hook-packs/claude-code/agent-heartbeat.sh +131 -0
- package/templates/hook-packs/claude-code/agent-register.sh +62 -0
- package/templates/hook-packs/claude-code/agent-stop.sh +51 -0
- package/templates/hook-packs/claude-code/audit.sh +1 -1
- package/templates/hook-packs/claude-code/block-dangerous.sh +1 -1
- package/templates/hook-packs/claude-code/classify_command.py +1 -1
- package/templates/hook-packs/claude-code/cwd-guard.sh +30 -0
- package/templates/hook-packs/claude-code/dispatch/post_tool_use.sh +15 -4
- package/templates/hook-packs/claude-code/dispatch/pre_tool_use.sh +19 -2
- package/templates/hook-packs/claude-code/dispatch/session_start.sh +6 -2
- package/templates/hook-packs/claude-code/dispatch/stop.sh +7 -2
- package/templates/hook-packs/claude-code/duplicate-export-check.sh +156 -0
- package/templates/hook-packs/claude-code/god-object-check.sh +102 -0
- package/templates/hook-packs/claude-code/guard-strikes.sh +1 -1
- package/templates/hook-packs/claude-code/lib/parse-input.sh +115 -1
- package/templates/hook-packs/claude-code/lib/run-handlers.sh +1 -1
- package/templates/hook-packs/claude-code/loc-delta-check.sh +91 -0
- package/templates/hook-packs/claude-code/naming-check.sh +128 -0
- package/templates/hook-packs/claude-code/plan-transcript-finalize.sh +59 -0
- package/templates/hook-packs/claude-code/plan-transcript-snapshot.sh +86 -0
- package/templates/hook-packs/claude-code/protected-paths.sh +59 -0
- package/templates/hook-packs/claude-code/quiet-merge.sh +68 -0
- package/templates/hook-packs/claude-code/reset-danger-latch.sh +1 -1
- package/templates/hook-packs/claude-code/reset-strikes.sh +1 -1
- package/templates/hook-packs/claude-code/runtime-paths.sh +1 -1
- package/templates/hook-packs/claude-code/scan-secrets.sh +98 -0
- package/templates/hook-packs/claude-code/scope-guard.sh +47 -65
- package/templates/hook-packs/claude-code/session-caws-status.sh +7 -1
- package/templates/hook-packs/claude-code/session-log.sh +1 -1
- package/templates/hook-packs/claude-code/session_log_renderer.py +956 -0
- package/templates/hook-packs/claude-code/shortcut-language-check.sh +147 -0
- package/templates/hook-packs/claude-code/worktree-guard.sh +130 -4
- package/templates/hook-packs/claude-code/worktree-write-guard.sh +133 -18
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-metadata.js","sourceRoot":"","sources":["../../src/shell/command-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type LeaseReason } from '@paths.design/caws-kernel';
|
|
2
|
+
interface BaseAgentsOpts {
|
|
3
|
+
readonly cwd?: string;
|
|
4
|
+
readonly now?: () => Date;
|
|
5
|
+
readonly env?: NodeJS.ProcessEnv;
|
|
6
|
+
readonly out?: (line: string) => void;
|
|
7
|
+
readonly err?: (line: string) => void;
|
|
8
|
+
readonly showData?: boolean;
|
|
9
|
+
readonly json?: boolean;
|
|
10
|
+
/** Explicit session identity (overrides resolveSession). Hook-invoked
|
|
11
|
+
* commands MUST pass this; the value is validated as a safe filename
|
|
12
|
+
* BEFORE any I/O. */
|
|
13
|
+
readonly sessionId?: string;
|
|
14
|
+
readonly platform?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface RegisterOpts extends BaseAgentsOpts {
|
|
17
|
+
readonly reason?: LeaseReason;
|
|
18
|
+
readonly includeActiveSummary?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function runAgentsRegisterCommand(opts?: RegisterOpts): number;
|
|
21
|
+
export interface HeartbeatOpts extends BaseAgentsOpts {
|
|
22
|
+
readonly reason?: LeaseReason;
|
|
23
|
+
readonly throttleMs?: number;
|
|
24
|
+
readonly includeActiveSummary?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function runAgentsHeartbeatCommand(opts?: HeartbeatOpts): number;
|
|
27
|
+
export type StopOpts = BaseAgentsOpts;
|
|
28
|
+
export declare function runAgentsStopCommand(opts?: StopOpts): number;
|
|
29
|
+
export interface ListOpts extends BaseAgentsOpts {
|
|
30
|
+
readonly includeStale?: boolean;
|
|
31
|
+
readonly includeStopped?: boolean;
|
|
32
|
+
readonly activeOnly?: boolean;
|
|
33
|
+
readonly staleTtlMs?: number;
|
|
34
|
+
}
|
|
35
|
+
export declare function runAgentsListCommand(opts?: ListOpts): number;
|
|
36
|
+
export interface ShowOpts extends BaseAgentsOpts {
|
|
37
|
+
readonly id: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function runAgentsShowCommand(opts: ShowOpts): number;
|
|
40
|
+
export interface PruneOpts extends BaseAgentsOpts {
|
|
41
|
+
readonly status: 'stopped' | 'stale';
|
|
42
|
+
readonly olderThanMs: number;
|
|
43
|
+
readonly staleTtlMs?: number;
|
|
44
|
+
readonly apply?: boolean;
|
|
45
|
+
}
|
|
46
|
+
export declare function runAgentsPruneCommand(opts: PruneOpts): number;
|
|
47
|
+
export {};
|
|
48
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/shell/commands/agents.ts"],"names":[],"mappings":"AAqCA,OAAO,EASL,KAAK,WAAW,EAGjB,MAAM,2BAA2B,CAAC;AA+CnC,UAAU,cAAc;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB;;0BAEsB;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAkMD,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,wBAAgB,wBAAwB,CAAC,IAAI,GAAE,YAAiB,GAAG,MAAM,CAyExE;AAID,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAED,wBAAgB,yBAAyB,CAAC,IAAI,GAAE,aAAkB,GAAG,MAAM,CA4F1E;AAID,MAAM,MAAM,QAAQ,GAAG,cAAc,CAAC;AAEtC,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,QAAa,GAAG,MAAM,CAuDhE;AAID,MAAM,WAAW,QAAS,SAAQ,cAAc;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,QAAa,GAAG,MAAM,CAqEhE;AAID,MAAM,WAAW,QAAS,SAAQ,cAAc;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAwC3D;AAID,MAAM,WAAW,SAAU,SAAQ,cAAc;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAwC7D"}
|
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// `caws agents` command group — agent-liveness substrate operations.
|
|
3
|
+
//
|
|
4
|
+
// MULTI-AGENT-ACTIVITY-REGISTRY-001 acceptance A9–A10, A13.
|
|
5
|
+
//
|
|
6
|
+
// Subcommands:
|
|
7
|
+
// - caws agents register [--session-id <id>] [--platform <p>] [--reason <r>] [--json] [--include-active-summary]
|
|
8
|
+
// - caws agents heartbeat [--session-id <id>] [--platform <p>] [--reason <r>] [--throttle <ms>] [--json] [--include-active-summary]
|
|
9
|
+
// - caws agents stop [--session-id <id>] [--platform <p>] [--json]
|
|
10
|
+
// - caws agents list [--include-stale] [--include-stopped] [--active] [--json]
|
|
11
|
+
// - caws agents show <id> [--json]
|
|
12
|
+
// - caws agents prune [--status stopped|stale] [--older-than <ms>] [--dry-run] [--json]
|
|
13
|
+
//
|
|
14
|
+
// Hook IO boundary (load-bearing — spec invariant 5):
|
|
15
|
+
// The CLI emits CAWS-native JSON ONLY. It never emits Claude Code's
|
|
16
|
+
// `hookSpecificOutput` envelope, never emits `additionalContext` /
|
|
17
|
+
// `permissionDecision` / `hookEventName`. The hook script (agent-
|
|
18
|
+
// heartbeat.sh) is the SOLE composer of Claude Code's hook envelope.
|
|
19
|
+
// A future Cursor/Codex/terminal integration consumes the same CAWS
|
|
20
|
+
// JSON and emits its own envelope.
|
|
21
|
+
//
|
|
22
|
+
// Session identity resolution:
|
|
23
|
+
// - When `--session-id <id>` is provided, it overrides resolveSession's
|
|
24
|
+
// env-walking. The id is validated through safeLeaseFilename before
|
|
25
|
+
// any I/O; 'unknown', empty, or unsafe ids are refused.
|
|
26
|
+
// - When omitted, resolveSession is used (for human-invoked list/show/
|
|
27
|
+
// prune that need their own identity; read-only commands skip it).
|
|
28
|
+
// - Hook-invoked commands MUST pass --session-id explicitly.
|
|
29
|
+
//
|
|
30
|
+
// Read vs write semantics:
|
|
31
|
+
// - register / heartbeat / stop / prune: write paths through
|
|
32
|
+
// applyLeasePatch / applyLeasePatches.
|
|
33
|
+
// - list / show: read-only via loadLeases + summarizeActiveAgents.
|
|
34
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
35
|
+
if (k2 === undefined) k2 = k;
|
|
36
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
37
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
38
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
39
|
+
}
|
|
40
|
+
Object.defineProperty(o, k2, desc);
|
|
41
|
+
}) : (function(o, m, k, k2) {
|
|
42
|
+
if (k2 === undefined) k2 = k;
|
|
43
|
+
o[k2] = m[k];
|
|
44
|
+
}));
|
|
45
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
46
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
47
|
+
}) : function(o, v) {
|
|
48
|
+
o["default"] = v;
|
|
49
|
+
});
|
|
50
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
51
|
+
var ownKeys = function(o) {
|
|
52
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
53
|
+
var ar = [];
|
|
54
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
55
|
+
return ar;
|
|
56
|
+
};
|
|
57
|
+
return ownKeys(o);
|
|
58
|
+
};
|
|
59
|
+
return function (mod) {
|
|
60
|
+
if (mod && mod.__esModule) return mod;
|
|
61
|
+
var result = {};
|
|
62
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
63
|
+
__setModuleDefault(result, mod);
|
|
64
|
+
return result;
|
|
65
|
+
};
|
|
66
|
+
})();
|
|
67
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
68
|
+
exports.runAgentsRegisterCommand = runAgentsRegisterCommand;
|
|
69
|
+
exports.runAgentsHeartbeatCommand = runAgentsHeartbeatCommand;
|
|
70
|
+
exports.runAgentsStopCommand = runAgentsStopCommand;
|
|
71
|
+
exports.runAgentsListCommand = runAgentsListCommand;
|
|
72
|
+
exports.runAgentsShowCommand = runAgentsShowCommand;
|
|
73
|
+
exports.runAgentsPruneCommand = runAgentsPruneCommand;
|
|
74
|
+
const fs = __importStar(require("node:fs"));
|
|
75
|
+
const os = __importStar(require("node:os"));
|
|
76
|
+
const node_child_process_1 = require("node:child_process");
|
|
77
|
+
const caws_kernel_1 = require("@paths.design/caws-kernel");
|
|
78
|
+
const store_1 = require("../../store");
|
|
79
|
+
const diagnostic_1 = require("../render/diagnostic");
|
|
80
|
+
const resolve_session_1 = require("../session/resolve-session");
|
|
81
|
+
// ─── kernel feature-detect guard ──────────────────────────────────────────
|
|
82
|
+
//
|
|
83
|
+
// Defends against the case where the kernel does not export
|
|
84
|
+
// `summarizeActiveAgents` at runtime (Bug-001/002 from
|
|
85
|
+
// USER-E2E-SETUP-REHEARSAL-001). The cli dep range was tightened to
|
|
86
|
+
// `^1.1.0` in this slice; this guard is the second-half defense for
|
|
87
|
+
// future kernel revs or broken/partial installs. Returns null when the
|
|
88
|
+
// kernel symbol is unavailable so callers can fall back to an empty
|
|
89
|
+
// summary and emit a diagnostic.
|
|
90
|
+
function callSummarizeActiveAgentsSafe(leases, now, ttlMs) {
|
|
91
|
+
if (typeof caws_kernel_1.summarizeActiveAgents !== 'function') {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return (0, caws_kernel_1.summarizeActiveAgents)(leases, now, ttlMs);
|
|
95
|
+
}
|
|
96
|
+
const KERNEL_FEATURE_UNAVAILABLE_DIAGNOSTIC = 'caws agents: kernel does not export summarizeActiveAgents; agent activity unavailable. ' +
|
|
97
|
+
'This typically means caws-cli is paired with a pre-1.1.0 kernel. Reinstall: ' +
|
|
98
|
+
'npm install -g @paths.design/caws-cli@latest';
|
|
99
|
+
const EMPTY_ACTIVITY_SUMMARY = {
|
|
100
|
+
total: 0,
|
|
101
|
+
active: [],
|
|
102
|
+
stale: [],
|
|
103
|
+
stopped: [],
|
|
104
|
+
};
|
|
105
|
+
function setupIO(opts) {
|
|
106
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
107
|
+
const nowFn = opts.now ?? (() => new Date());
|
|
108
|
+
const env = opts.env ?? process.env;
|
|
109
|
+
const out = opts.out ?? ((s) => process.stdout.write(s + '\n'));
|
|
110
|
+
const err = opts.err ?? ((s) => process.stderr.write(s + '\n'));
|
|
111
|
+
const showData = opts.showData === true;
|
|
112
|
+
const json = opts.json === true;
|
|
113
|
+
return { cwd, nowFn, env, out, err, showData, json };
|
|
114
|
+
}
|
|
115
|
+
function emitJson(out, payload) {
|
|
116
|
+
out(JSON.stringify(payload, null, 2));
|
|
117
|
+
}
|
|
118
|
+
function readGitDirInfo(cwd) {
|
|
119
|
+
try {
|
|
120
|
+
const commonDir = (0, node_child_process_1.execFileSync)('git', ['rev-parse', '--path-format=absolute', '--git-common-dir'], {
|
|
121
|
+
cwd,
|
|
122
|
+
encoding: 'utf8',
|
|
123
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
124
|
+
}).trim();
|
|
125
|
+
const gitDir = (0, node_child_process_1.execFileSync)('git', ['rev-parse', '--path-format=absolute', '--git-dir'], {
|
|
126
|
+
cwd,
|
|
127
|
+
encoding: 'utf8',
|
|
128
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
129
|
+
}).trim();
|
|
130
|
+
const commonReal = realpathSafe(commonDir);
|
|
131
|
+
const gitReal = realpathSafe(gitDir);
|
|
132
|
+
let branch;
|
|
133
|
+
try {
|
|
134
|
+
branch = (0, node_child_process_1.execFileSync)('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
|
|
135
|
+
cwd,
|
|
136
|
+
encoding: 'utf8',
|
|
137
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
138
|
+
}).trim();
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Detached HEAD or other; leave branch undefined.
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
git_common_dir: commonReal,
|
|
145
|
+
git_dir: gitReal,
|
|
146
|
+
...(branch !== undefined && branch !== '' ? { branch } : {}),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function realpathSafe(p) {
|
|
154
|
+
try {
|
|
155
|
+
return fs.realpathSync(p);
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
return p;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
function resolveIdentityForCommand(opts, ctx, allowMint, err) {
|
|
162
|
+
if (opts.sessionId !== undefined) {
|
|
163
|
+
// Explicit flag → validate as a safe filename BEFORE any I/O.
|
|
164
|
+
const fnRes = (0, store_1.safeLeaseFilename)(opts.sessionId);
|
|
165
|
+
if (!(0, caws_kernel_1.isOk)(fnRes)) {
|
|
166
|
+
err(`caws agents: invalid --session-id "${opts.sessionId}".`);
|
|
167
|
+
err((0, diagnostic_1.renderDiagnostics)(fnRes.errors, { showData: opts.showData === true }));
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
identity: {
|
|
172
|
+
session_id: opts.sessionId,
|
|
173
|
+
platform: opts.platform ?? 'unknown',
|
|
174
|
+
},
|
|
175
|
+
source: 'flag',
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// No flag → fall through to resolveSession (env + capsule + optional mint).
|
|
179
|
+
const sessionResult = (0, resolve_session_1.resolveSession)({
|
|
180
|
+
cawsDir: ctx.cawsDir,
|
|
181
|
+
worktreeRoot: ctx.cwd,
|
|
182
|
+
env: ctx.env,
|
|
183
|
+
now: ctx.nowFn,
|
|
184
|
+
allowMint,
|
|
185
|
+
});
|
|
186
|
+
if (!(0, caws_kernel_1.isOk)(sessionResult)) {
|
|
187
|
+
err('caws agents: failed to resolve session identity.');
|
|
188
|
+
err((0, diagnostic_1.renderDiagnostics)(sessionResult.errors, { showData: opts.showData === true }));
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
return { identity: sessionResult.value.identity, source: 'env_capsule_mint' };
|
|
192
|
+
}
|
|
193
|
+
// ─── lease context composition ────────────────────────────────────────────
|
|
194
|
+
function buildLeaseContext(cwd, repoRoot, bound, env) {
|
|
195
|
+
const gitInfo = readGitDirInfo(cwd);
|
|
196
|
+
if (gitInfo === null)
|
|
197
|
+
return null;
|
|
198
|
+
const sessionLogPath = typeof env['HOOK_SESSION_LOG_PATH'] === 'string' && env['HOOK_SESSION_LOG_PATH'].length > 0
|
|
199
|
+
? env['HOOK_SESSION_LOG_PATH']
|
|
200
|
+
: undefined;
|
|
201
|
+
return {
|
|
202
|
+
repo_root: repoRoot,
|
|
203
|
+
cwd,
|
|
204
|
+
git_common_dir: gitInfo.git_common_dir,
|
|
205
|
+
git_dir: gitInfo.git_dir,
|
|
206
|
+
...(gitInfo.branch !== undefined ? { branch: gitInfo.branch } : {}),
|
|
207
|
+
...(bound?.worktree !== undefined ? { bound_worktree: bound.worktree } : {}),
|
|
208
|
+
...(bound?.spec_id !== undefined ? { bound_spec_id: bound.spec_id } : {}),
|
|
209
|
+
pid: process.pid,
|
|
210
|
+
hostname: os.hostname(),
|
|
211
|
+
...(sessionLogPath !== undefined ? { session_log_path: sessionLogPath } : {}),
|
|
212
|
+
// hook_pack_version is omitted here — caws init's hook pack version is
|
|
213
|
+
// baked into the installed managed-header at write time; the CLI does
|
|
214
|
+
// not interrogate it during a single command run.
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
const DEFAULT_STALE_TTL_MS = 30 * 60 * 1000; // 30m
|
|
218
|
+
function computeActiveSummary(registry, selfSessionId, now, ttlMs = DEFAULT_STALE_TTL_MS) {
|
|
219
|
+
// Defensive: kernel feature-detect. If summarizeActiveAgents is
|
|
220
|
+
// missing, fall back to an empty summary. Caller (register/heartbeat
|
|
221
|
+
// --include-active-summary) receives `active_agent_count: 0` and an
|
|
222
|
+
// empty active_agents array rather than a Node throw.
|
|
223
|
+
const summary = callSummarizeActiveAgentsSafe(registry, now, ttlMs)
|
|
224
|
+
?? EMPTY_ACTIVITY_SUMMARY;
|
|
225
|
+
const entries = summary.active.map((lease) => ({
|
|
226
|
+
session_id: lease.session_id,
|
|
227
|
+
bound_worktree: lease.bound_worktree ?? null,
|
|
228
|
+
bound_spec_id: lease.bound_spec_id ?? null,
|
|
229
|
+
branch: lease.branch ?? null,
|
|
230
|
+
git_dir_kind: lease.git_common_dir === lease.git_dir ? 'canonical' : 'worktree',
|
|
231
|
+
last_active_age_ms: Math.max(0, now.getTime() - Date.parse(lease.last_active)),
|
|
232
|
+
is_self: lease.session_id === selfSessionId,
|
|
233
|
+
}));
|
|
234
|
+
return {
|
|
235
|
+
active_agent_count: entries.length,
|
|
236
|
+
active_agents: entries,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function runAgentsRegisterCommand(opts = {}) {
|
|
240
|
+
const { cwd, nowFn, env, out, err, showData, json } = setupIO(opts);
|
|
241
|
+
const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
242
|
+
if (!(0, caws_kernel_1.isOk)(repoRootResult)) {
|
|
243
|
+
err('caws agents register: failed to resolve repo root.');
|
|
244
|
+
err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
|
|
245
|
+
return 2;
|
|
246
|
+
}
|
|
247
|
+
const { repoRoot, cawsDir } = repoRootResult.value;
|
|
248
|
+
const idRes = resolveIdentityForCommand(opts, { cawsDir, cwd, env, nowFn },
|
|
249
|
+
/* allowMint */ true, err);
|
|
250
|
+
if (idRes === null)
|
|
251
|
+
return 1;
|
|
252
|
+
const context = buildLeaseContext(cwd, repoRoot, null, env);
|
|
253
|
+
if (context === null) {
|
|
254
|
+
err('caws agents register: failed to read git_common_dir/git_dir (is this a git repo?).');
|
|
255
|
+
return 2;
|
|
256
|
+
}
|
|
257
|
+
const now = nowFn();
|
|
258
|
+
const reason = opts.reason ?? 'manual_register';
|
|
259
|
+
// Load existing registry for upsert semantics (preserves started_at).
|
|
260
|
+
const loadRes = (0, store_1.loadLeases)(cawsDir);
|
|
261
|
+
if (!(0, caws_kernel_1.isOk)(loadRes)) {
|
|
262
|
+
err('caws agents register: lease directory unreadable.');
|
|
263
|
+
err((0, diagnostic_1.renderDiagnostics)(loadRes.errors, { showData }));
|
|
264
|
+
return 2;
|
|
265
|
+
}
|
|
266
|
+
const leases = loadRes.value.leases;
|
|
267
|
+
const patchRes = (0, caws_kernel_1.registerAgentSession)(leases, idRes.identity, context, now, reason);
|
|
268
|
+
if (!(0, caws_kernel_1.isOk)(patchRes)) {
|
|
269
|
+
err('caws agents register: kernel refused.');
|
|
270
|
+
err((0, diagnostic_1.renderDiagnostics)(patchRes.errors, { showData }));
|
|
271
|
+
return 1;
|
|
272
|
+
}
|
|
273
|
+
const applyRes = (0, store_1.applyLeasePatch)(cawsDir, patchRes.value);
|
|
274
|
+
if (!(0, caws_kernel_1.isOk)(applyRes)) {
|
|
275
|
+
err('caws agents register: store write failed.');
|
|
276
|
+
err((0, diagnostic_1.renderDiagnostics)(applyRes.errors, { showData }));
|
|
277
|
+
return 1;
|
|
278
|
+
}
|
|
279
|
+
const fn = (0, store_1.safeLeaseFilename)(idRes.identity.session_id);
|
|
280
|
+
const leasePath = (0, caws_kernel_1.isOk)(fn) ? `.caws/leases/${fn.value}` : null;
|
|
281
|
+
if (json) {
|
|
282
|
+
const payload = {
|
|
283
|
+
ok: true,
|
|
284
|
+
session_id: idRes.identity.session_id,
|
|
285
|
+
lease_path: leasePath,
|
|
286
|
+
wrote: applyRes.value.wrote,
|
|
287
|
+
throttled: false,
|
|
288
|
+
};
|
|
289
|
+
if (opts.includeActiveSummary === true) {
|
|
290
|
+
// Re-load to pick up our own write.
|
|
291
|
+
const reload = (0, store_1.loadLeases)(cawsDir);
|
|
292
|
+
const registry = (0, caws_kernel_1.isOk)(reload) ? reload.value.leases : leases;
|
|
293
|
+
Object.assign(payload, computeActiveSummary(registry, idRes.identity.session_id, now));
|
|
294
|
+
}
|
|
295
|
+
emitJson(out, payload);
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
out(`registered ${idRes.identity.session_id} (lease: ${leasePath ?? '?'})`);
|
|
299
|
+
}
|
|
300
|
+
return 0;
|
|
301
|
+
}
|
|
302
|
+
function runAgentsHeartbeatCommand(opts = {}) {
|
|
303
|
+
const { cwd, nowFn, env, out, err, showData, json } = setupIO(opts);
|
|
304
|
+
const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
305
|
+
if (!(0, caws_kernel_1.isOk)(repoRootResult)) {
|
|
306
|
+
err('caws agents heartbeat: failed to resolve repo root.');
|
|
307
|
+
err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
|
|
308
|
+
return 2;
|
|
309
|
+
}
|
|
310
|
+
const { repoRoot, cawsDir } = repoRootResult.value;
|
|
311
|
+
const idRes = resolveIdentityForCommand(opts, { cawsDir, cwd, env, nowFn },
|
|
312
|
+
/* allowMint */ true, err);
|
|
313
|
+
if (idRes === null)
|
|
314
|
+
return 1;
|
|
315
|
+
const context = buildLeaseContext(cwd, repoRoot, null, env);
|
|
316
|
+
if (context === null) {
|
|
317
|
+
err('caws agents heartbeat: failed to read git_common_dir/git_dir.');
|
|
318
|
+
return 2;
|
|
319
|
+
}
|
|
320
|
+
const now = nowFn();
|
|
321
|
+
const reason = opts.reason ?? 'pre_tool_use';
|
|
322
|
+
const throttleMs = opts.throttleMs ?? 0;
|
|
323
|
+
const loadRes = (0, store_1.loadLeases)(cawsDir);
|
|
324
|
+
if (!(0, caws_kernel_1.isOk)(loadRes)) {
|
|
325
|
+
err('caws agents heartbeat: lease directory unreadable.');
|
|
326
|
+
err((0, diagnostic_1.renderDiagnostics)(loadRes.errors, { showData }));
|
|
327
|
+
return 2;
|
|
328
|
+
}
|
|
329
|
+
let leases = loadRes.value.leases;
|
|
330
|
+
// Throttle check: if existing lease's last_active is within throttleMs,
|
|
331
|
+
// skip the write. The active-summary is still computed and returned so
|
|
332
|
+
// the hook caller doesn't lose visibility during throttle windows.
|
|
333
|
+
const existing = leases[idRes.identity.session_id];
|
|
334
|
+
let throttled = false;
|
|
335
|
+
let wrote = false;
|
|
336
|
+
if (existing !== undefined && throttleMs > 0) {
|
|
337
|
+
const lastActiveMs = Date.parse(existing.last_active);
|
|
338
|
+
const age = now.getTime() - lastActiveMs;
|
|
339
|
+
if (Number.isFinite(lastActiveMs) && age < throttleMs) {
|
|
340
|
+
throttled = true;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (!throttled) {
|
|
344
|
+
const patchRes = (0, caws_kernel_1.heartbeatAgentSession)(leases, idRes.identity, context, now, reason);
|
|
345
|
+
if (!(0, caws_kernel_1.isOk)(patchRes)) {
|
|
346
|
+
err('caws agents heartbeat: kernel refused.');
|
|
347
|
+
err((0, diagnostic_1.renderDiagnostics)(patchRes.errors, { showData }));
|
|
348
|
+
return 1;
|
|
349
|
+
}
|
|
350
|
+
const applyRes = (0, store_1.applyLeasePatch)(cawsDir, patchRes.value);
|
|
351
|
+
if (!(0, caws_kernel_1.isOk)(applyRes)) {
|
|
352
|
+
err('caws agents heartbeat: store write failed.');
|
|
353
|
+
err((0, diagnostic_1.renderDiagnostics)(applyRes.errors, { showData }));
|
|
354
|
+
return 1;
|
|
355
|
+
}
|
|
356
|
+
wrote = applyRes.value.wrote;
|
|
357
|
+
// Re-load for active summary so we include our own fresh write.
|
|
358
|
+
const reload = (0, store_1.loadLeases)(cawsDir);
|
|
359
|
+
if ((0, caws_kernel_1.isOk)(reload))
|
|
360
|
+
leases = reload.value.leases;
|
|
361
|
+
}
|
|
362
|
+
const fn = (0, store_1.safeLeaseFilename)(idRes.identity.session_id);
|
|
363
|
+
const leasePath = (0, caws_kernel_1.isOk)(fn) ? `.caws/leases/${fn.value}` : null;
|
|
364
|
+
if (json) {
|
|
365
|
+
const payload = {
|
|
366
|
+
ok: true,
|
|
367
|
+
session_id: idRes.identity.session_id,
|
|
368
|
+
lease_path: leasePath,
|
|
369
|
+
wrote,
|
|
370
|
+
throttled,
|
|
371
|
+
};
|
|
372
|
+
if (opts.includeActiveSummary === true) {
|
|
373
|
+
Object.assign(payload, computeActiveSummary(leases, idRes.identity.session_id, now));
|
|
374
|
+
}
|
|
375
|
+
emitJson(out, payload);
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
out(`heartbeat ${idRes.identity.session_id} (${throttled ? 'throttled' : 'wrote'}, lease: ${leasePath ?? '?'})`);
|
|
379
|
+
}
|
|
380
|
+
return 0;
|
|
381
|
+
}
|
|
382
|
+
function runAgentsStopCommand(opts = {}) {
|
|
383
|
+
const { cwd, nowFn, env, out, err, showData, json } = setupIO(opts);
|
|
384
|
+
const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
385
|
+
if (!(0, caws_kernel_1.isOk)(repoRootResult)) {
|
|
386
|
+
err('caws agents stop: failed to resolve repo root.');
|
|
387
|
+
err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
|
|
388
|
+
return 2;
|
|
389
|
+
}
|
|
390
|
+
const { cawsDir } = repoRootResult.value;
|
|
391
|
+
const idRes = resolveIdentityForCommand(opts, { cawsDir, cwd, env, nowFn },
|
|
392
|
+
/* allowMint */ false, // stop on a never-existed session is best-effort, not mint
|
|
393
|
+
err);
|
|
394
|
+
if (idRes === null)
|
|
395
|
+
return 1;
|
|
396
|
+
const now = nowFn();
|
|
397
|
+
const loadRes = (0, store_1.loadLeases)(cawsDir);
|
|
398
|
+
if (!(0, caws_kernel_1.isOk)(loadRes)) {
|
|
399
|
+
err('caws agents stop: lease directory unreadable.');
|
|
400
|
+
err((0, diagnostic_1.renderDiagnostics)(loadRes.errors, { showData }));
|
|
401
|
+
return 2;
|
|
402
|
+
}
|
|
403
|
+
const patchRes = (0, caws_kernel_1.stopAgentSession)(loadRes.value.leases, idRes.identity, now);
|
|
404
|
+
if (!(0, caws_kernel_1.isOk)(patchRes)) {
|
|
405
|
+
err('caws agents stop: kernel refused.');
|
|
406
|
+
err((0, diagnostic_1.renderDiagnostics)(patchRes.errors, { showData }));
|
|
407
|
+
return 1;
|
|
408
|
+
}
|
|
409
|
+
const applyRes = (0, store_1.applyLeasePatch)(cawsDir, patchRes.value);
|
|
410
|
+
if (!(0, caws_kernel_1.isOk)(applyRes)) {
|
|
411
|
+
err('caws agents stop: store write failed.');
|
|
412
|
+
err((0, diagnostic_1.renderDiagnostics)(applyRes.errors, { showData }));
|
|
413
|
+
return 1;
|
|
414
|
+
}
|
|
415
|
+
if (json) {
|
|
416
|
+
emitJson(out, {
|
|
417
|
+
ok: true,
|
|
418
|
+
session_id: idRes.identity.session_id,
|
|
419
|
+
wrote: applyRes.value.wrote,
|
|
420
|
+
diagnostics: applyRes.value.diagnostics,
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
else if (applyRes.value.wrote) {
|
|
424
|
+
out(`stopped ${idRes.identity.session_id}`);
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
out(`no prior lease for ${idRes.identity.session_id} (no-op)`);
|
|
428
|
+
}
|
|
429
|
+
return 0;
|
|
430
|
+
}
|
|
431
|
+
function runAgentsListCommand(opts = {}) {
|
|
432
|
+
const { cwd, nowFn, out, err, showData, json } = setupIO(opts);
|
|
433
|
+
const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
434
|
+
if (!(0, caws_kernel_1.isOk)(repoRootResult)) {
|
|
435
|
+
err('caws agents list: failed to resolve repo root.');
|
|
436
|
+
err((0, diagnostic_1.renderDiagnostics)(repoRootResult.errors, { showData }));
|
|
437
|
+
return 2;
|
|
438
|
+
}
|
|
439
|
+
const { cawsDir } = repoRootResult.value;
|
|
440
|
+
const loadRes = (0, store_1.loadLeases)(cawsDir);
|
|
441
|
+
if (!(0, caws_kernel_1.isOk)(loadRes)) {
|
|
442
|
+
err('caws agents list: lease directory unreadable.');
|
|
443
|
+
err((0, diagnostic_1.renderDiagnostics)(loadRes.errors, { showData }));
|
|
444
|
+
return 2;
|
|
445
|
+
}
|
|
446
|
+
const now = nowFn();
|
|
447
|
+
const ttl = opts.staleTtlMs ?? DEFAULT_STALE_TTL_MS;
|
|
448
|
+
// Defensive: kernel feature-detect (Bug-001/002 from rehearsal). When
|
|
449
|
+
// summarizeActiveAgents is unavailable, emit a typed diagnostic and
|
|
450
|
+
// fall back to an empty summary so the command still renders "no
|
|
451
|
+
// agents to list" instead of crashing with "is not a function".
|
|
452
|
+
const summaryRes = callSummarizeActiveAgentsSafe(loadRes.value.leases, now, ttl);
|
|
453
|
+
if (summaryRes === null) {
|
|
454
|
+
err(KERNEL_FEATURE_UNAVAILABLE_DIAGNOSTIC);
|
|
455
|
+
}
|
|
456
|
+
const summary = summaryRes ?? EMPTY_ACTIVITY_SUMMARY;
|
|
457
|
+
// --active means TTL-classified active, NOT raw status field.
|
|
458
|
+
// Default surfacing rules: active is always shown; stale + stopped are
|
|
459
|
+
// gated by their flags. --active means active-only (overrides flags).
|
|
460
|
+
const wantsStale = opts.includeStale === true && !(opts.activeOnly === true);
|
|
461
|
+
const wantsStopped = opts.includeStopped === true && !(opts.activeOnly === true);
|
|
462
|
+
if (json) {
|
|
463
|
+
emitJson(out, {
|
|
464
|
+
ok: true,
|
|
465
|
+
now: now.toISOString(),
|
|
466
|
+
stale_ttl_ms: ttl,
|
|
467
|
+
active: summary.active,
|
|
468
|
+
...(wantsStale ? { stale: summary.stale } : {}),
|
|
469
|
+
...(wantsStopped ? { stopped: summary.stopped } : {}),
|
|
470
|
+
counts: {
|
|
471
|
+
active: summary.active.length,
|
|
472
|
+
stale: summary.stale.length,
|
|
473
|
+
stopped: summary.stopped.length,
|
|
474
|
+
total: summary.total,
|
|
475
|
+
},
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
else {
|
|
479
|
+
out(`active: ${summary.active.length}`);
|
|
480
|
+
for (const l of summary.active) {
|
|
481
|
+
out(` ${l.session_id} ${l.bound_worktree ?? '(no worktree)'} ${l.bound_spec_id ?? '(no spec)'}`);
|
|
482
|
+
}
|
|
483
|
+
if (wantsStale) {
|
|
484
|
+
out(`stale: ${summary.stale.length}`);
|
|
485
|
+
for (const l of summary.stale)
|
|
486
|
+
out(` ${l.session_id}`);
|
|
487
|
+
}
|
|
488
|
+
if (wantsStopped) {
|
|
489
|
+
out(`stopped: ${summary.stopped.length}`);
|
|
490
|
+
for (const l of summary.stopped)
|
|
491
|
+
out(` ${l.session_id}`);
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
if (loadRes.value.diagnostics.length > 0 && showData) {
|
|
495
|
+
err((0, diagnostic_1.renderDiagnostics)(loadRes.value.diagnostics, { showData }));
|
|
496
|
+
}
|
|
497
|
+
return 0;
|
|
498
|
+
}
|
|
499
|
+
function runAgentsShowCommand(opts) {
|
|
500
|
+
const { cwd, out, err, showData, json } = setupIO(opts);
|
|
501
|
+
const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
502
|
+
if (!(0, caws_kernel_1.isOk)(repoRootResult)) {
|
|
503
|
+
err('caws agents show: failed to resolve repo root.');
|
|
504
|
+
return 2;
|
|
505
|
+
}
|
|
506
|
+
const { cawsDir } = repoRootResult.value;
|
|
507
|
+
// Validate filename safety even for read — gives a clear error if the
|
|
508
|
+
// user typed an unsafe id.
|
|
509
|
+
const fn = (0, store_1.safeLeaseFilename)(opts.id);
|
|
510
|
+
if (!(0, caws_kernel_1.isOk)(fn)) {
|
|
511
|
+
err(`caws agents show: invalid session id "${opts.id}".`);
|
|
512
|
+
err((0, diagnostic_1.renderDiagnostics)(fn.errors, { showData }));
|
|
513
|
+
return 1;
|
|
514
|
+
}
|
|
515
|
+
const loadRes = (0, store_1.loadLeases)(cawsDir);
|
|
516
|
+
if (!(0, caws_kernel_1.isOk)(loadRes)) {
|
|
517
|
+
err('caws agents show: lease directory unreadable.');
|
|
518
|
+
return 2;
|
|
519
|
+
}
|
|
520
|
+
const lease = loadRes.value.leases[opts.id];
|
|
521
|
+
if (lease === undefined) {
|
|
522
|
+
if (json) {
|
|
523
|
+
emitJson(out, { ok: false, error: 'not_found', session_id: opts.id });
|
|
524
|
+
}
|
|
525
|
+
else {
|
|
526
|
+
err(`caws agents show: no lease for "${opts.id}".`);
|
|
527
|
+
}
|
|
528
|
+
return 1;
|
|
529
|
+
}
|
|
530
|
+
if (json) {
|
|
531
|
+
emitJson(out, { ok: true, lease });
|
|
532
|
+
}
|
|
533
|
+
else {
|
|
534
|
+
out(JSON.stringify(lease, null, 2));
|
|
535
|
+
}
|
|
536
|
+
return 0;
|
|
537
|
+
}
|
|
538
|
+
function runAgentsPruneCommand(opts) {
|
|
539
|
+
const { cwd, nowFn, out, err, showData, json } = setupIO(opts);
|
|
540
|
+
const repoRootResult = (0, store_1.resolveRepoRoot)(cwd);
|
|
541
|
+
if (!(0, caws_kernel_1.isOk)(repoRootResult)) {
|
|
542
|
+
err('caws agents prune: failed to resolve repo root.');
|
|
543
|
+
return 2;
|
|
544
|
+
}
|
|
545
|
+
const { cawsDir } = repoRootResult.value;
|
|
546
|
+
const r = (0, store_1.pruneLeasesByStatus)(cawsDir, {
|
|
547
|
+
status: opts.status,
|
|
548
|
+
retentionMs: opts.olderThanMs,
|
|
549
|
+
...(opts.staleTtlMs !== undefined ? { staleTtlMs: opts.staleTtlMs } : {}),
|
|
550
|
+
now: nowFn(),
|
|
551
|
+
dryRun: !(opts.apply === true),
|
|
552
|
+
});
|
|
553
|
+
if (!(0, caws_kernel_1.isOk)(r)) {
|
|
554
|
+
err('caws agents prune: failed.');
|
|
555
|
+
err((0, diagnostic_1.renderDiagnostics)(r.errors, { showData }));
|
|
556
|
+
return 1;
|
|
557
|
+
}
|
|
558
|
+
if (json) {
|
|
559
|
+
emitJson(out, {
|
|
560
|
+
ok: true,
|
|
561
|
+
dry_run: !(opts.apply === true),
|
|
562
|
+
status: opts.status,
|
|
563
|
+
candidates: r.value.candidates,
|
|
564
|
+
deleted: r.value.deleted,
|
|
565
|
+
diagnostics: r.value.diagnostics,
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
out(`prune (${opts.apply === true ? 'apply' : 'dry-run'}): ${r.value.candidates.length} candidate(s)`);
|
|
570
|
+
for (const id of r.value.candidates) {
|
|
571
|
+
const tag = r.value.deleted.includes(id) ? 'DELETED' : 'would-delete';
|
|
572
|
+
out(` ${tag} ${id}`);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
return 0;
|
|
576
|
+
}
|
|
577
|
+
//# sourceMappingURL=agents.js.map
|