harnery 0.43.0 → 0.45.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 +3 -3
- package/dist/commander.js +1 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +41 -48
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +38 -11
- package/dist/commands/diagnostics.d.ts.map +1 -1
- package/dist/commands/diagnostics.js +10 -0
- package/dist/commands/doctor.d.ts +12 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +22 -7
- package/dist/commands/files.d.ts +2 -2
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +7 -4
- package/dist/commands/governor.js +22 -10
- package/dist/commands/inbox.d.ts +1 -1
- package/dist/commands/inbox.d.ts.map +1 -1
- package/dist/commands/inbox.js +55 -2
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +28 -4
- package/dist/commands/servers.d.ts.map +1 -1
- package/dist/commands/servers.js +26 -17
- package/dist/commands/supervisor.d.ts.map +1 -1
- package/dist/commands/supervisor.js +7 -2
- package/dist/commands/toc.d.ts +14 -0
- package/dist/commands/toc.d.ts.map +1 -1
- package/dist/commands/toc.js +7 -4
- package/dist/commands/tunnel.d.ts +15 -0
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +453 -153
- package/dist/commands/turn-rollback.d.ts +5 -0
- package/dist/commands/turn-rollback.d.ts.map +1 -0
- package/dist/commands/turn-rollback.js +76 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +68 -30
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +18 -0
- package/dist/core/agents/live-authority-v3.d.ts +1 -0
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
- package/dist/core/agents/live-authority-v3.js +11 -0
- package/dist/core/agents/live-lifecycle-v3.d.ts +4 -2
- package/dist/core/agents/live-lifecycle-v3.d.ts.map +1 -1
- package/dist/core/agents/live-lifecycle-v3.js +28 -7
- package/dist/core/agents/mailbox.d.ts +9 -8
- package/dist/core/agents/mailbox.d.ts.map +1 -1
- package/dist/core/agents/mailbox.js +24 -17
- package/dist/core/agents/render/prompt-context.d.ts +2 -0
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +8 -12
- package/dist/core/agents/render/session-context.d.ts +2 -8
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +7 -30
- package/dist/core/agents/rules/stop-hook.js +3 -3
- package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
- package/dist/core/agents/state/heartbeat-writer.js +25 -14
- package/dist/core/agents/state/live-coordination-writer.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-writer.js +5 -0
- package/dist/core/agents/state/pidmap.d.ts.map +1 -1
- package/dist/core/agents/state/pidmap.js +5 -0
- package/dist/core/agents/state/proc-start.d.ts +19 -1
- package/dist/core/agents/state/proc-start.d.ts.map +1 -1
- package/dist/core/agents/state/proc-start.js +46 -1
- package/dist/core/agents/state/process-handle.d.ts +26 -0
- package/dist/core/agents/state/process-handle.d.ts.map +1 -0
- package/dist/core/agents/state/process-handle.js +121 -0
- package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
- package/dist/core/agents/state/stale-sweep.js +180 -70
- package/dist/core/agents/state/unchanged-file.d.ts +44 -0
- package/dist/core/agents/state/unchanged-file.d.ts.map +1 -0
- package/dist/core/agents/state/unchanged-file.js +390 -0
- package/dist/core/artifacts/delivery-card.d.ts.map +1 -1
- package/dist/core/artifacts/delivery-card.js +2 -1
- package/dist/core/context/index.d.ts +22 -10
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +381 -119
- package/dist/core/context/observation.d.ts +26 -0
- package/dist/core/context/observation.d.ts.map +1 -0
- package/dist/core/context/observation.js +11 -0
- package/dist/core/diagnostics/bundle.d.ts.map +1 -1
- package/dist/core/diagnostics/bundle.js +25 -14
- package/dist/core/diagnostics/path-identity.d.ts +3 -0
- package/dist/core/diagnostics/path-identity.d.ts.map +1 -0
- package/dist/core/diagnostics/path-identity.js +12 -0
- package/dist/core/diagnostics/sanitize.d.ts.map +1 -1
- package/dist/core/diagnostics/sanitize.js +4 -3
- package/dist/core/events/v3/authority-outbox.d.ts.map +1 -1
- package/dist/core/events/v3/authority-outbox.js +29 -0
- package/dist/core/events/v3/generation-custody.d.ts +5 -0
- package/dist/core/events/v3/generation-custody.d.ts.map +1 -0
- package/dist/core/events/v3/generation-custody.js +50 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts +1 -0
- package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/coordination-recorder.js +7 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +77 -64
- package/dist/core/governor/planning.d.ts.map +1 -1
- package/dist/core/governor/planning.js +14 -1
- package/dist/core/governor/service-read.d.ts +10 -2
- package/dist/core/governor/service-read.d.ts.map +1 -1
- package/dist/core/governor/service-read.js +105 -22
- package/dist/core/governor/service.d.ts +20 -2
- package/dist/core/governor/service.d.ts.map +1 -1
- package/dist/core/governor/service.js +72 -47
- package/dist/core/hooks/cli.js +33 -5
- package/dist/core/inbox/contract.d.ts +2 -1
- package/dist/core/inbox/contract.d.ts.map +1 -1
- package/dist/core/inbox/index.d.ts +2 -0
- package/dist/core/inbox/index.d.ts.map +1 -1
- package/dist/core/inbox/index.js +2 -0
- package/dist/core/inbox/peer-messages.d.ts +37 -0
- package/dist/core/inbox/peer-messages.d.ts.map +1 -0
- package/dist/core/inbox/peer-messages.js +72 -0
- package/dist/core/inbox/service.d.ts +8 -1
- package/dist/core/inbox/service.d.ts.map +1 -1
- package/dist/core/inbox/service.js +67 -21
- package/dist/core/inbox/targets.d.ts +22 -0
- package/dist/core/inbox/targets.d.ts.map +1 -0
- package/dist/core/inbox/targets.js +108 -0
- package/dist/core/inbox/watcher.js +7 -3
- package/dist/core/journal/index.d.ts.map +1 -1
- package/dist/core/journal/index.js +17 -2
- package/dist/core/resources/contract.d.ts +3 -0
- package/dist/core/resources/contract.d.ts.map +1 -1
- package/dist/core/resources/service-status.d.ts +14 -1
- package/dist/core/resources/service-status.d.ts.map +1 -1
- package/dist/core/resources/service-status.js +23 -13
- package/dist/core/resources/service.d.ts +7 -13
- package/dist/core/resources/service.d.ts.map +1 -1
- package/dist/core/resources/service.js +34 -91
- package/dist/core/resources/status.d.ts +2 -5
- package/dist/core/resources/status.d.ts.map +1 -1
- package/dist/core/resources/status.js +36 -7
- package/dist/core/semantic/service.d.ts.map +1 -1
- package/dist/core/semantic/service.js +2 -9
- package/dist/core/servers/index.d.ts +34 -22
- package/dist/core/servers/index.d.ts.map +1 -1
- package/dist/core/servers/index.js +297 -144
- package/dist/core/servers/tunnels.d.ts +7 -7
- package/dist/core/servers/tunnels.d.ts.map +1 -1
- package/dist/core/servers/tunnels.js +47 -10
- package/dist/core/supervisor/contract.d.ts +12 -0
- package/dist/core/supervisor/contract.d.ts.map +1 -1
- package/dist/core/supervisor/explanations.d.ts.map +1 -1
- package/dist/core/supervisor/explanations.js +2 -1
- package/dist/core/supervisor/findings.d.ts.map +1 -1
- package/dist/core/supervisor/findings.js +54 -9
- package/dist/core/supervisor/service.d.ts +7 -1
- package/dist/core/supervisor/service.d.ts.map +1 -1
- package/dist/core/supervisor/service.js +59 -29
- package/dist/core/supervisor/services.d.ts.map +1 -1
- package/dist/core/supervisor/services.js +22 -1
- package/dist/core/supervisor/status.d.ts +17 -2
- package/dist/core/supervisor/status.d.ts.map +1 -1
- package/dist/core/supervisor/status.js +70 -12
- package/dist/core/supervisor/timeline.d.ts.map +1 -1
- package/dist/core/supervisor/timeline.js +2 -1
- package/dist/core/turn-rollback/content.d.ts +53 -0
- package/dist/core/turn-rollback/content.d.ts.map +1 -0
- package/dist/core/turn-rollback/content.js +396 -0
- package/dist/core/turn-rollback/index.d.ts +72 -0
- package/dist/core/turn-rollback/index.d.ts.map +1 -0
- package/dist/core/turn-rollback/index.js +443 -0
- package/dist/core/work/state.js +7 -7
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +105 -32
- package/dist/core/workflow/failure-evidence.d.ts +16 -0
- package/dist/core/workflow/failure-evidence.d.ts.map +1 -0
- package/dist/core/workflow/failure-evidence.js +114 -0
- package/dist/core/workflow/index.d.ts +5 -3
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +3 -2
- package/dist/core/workflow/live-session-v3.d.ts +6 -0
- package/dist/core/workflow/live-session-v3.d.ts.map +1 -1
- package/dist/core/workflow/live-session-v3.js +126 -5
- package/dist/core/workflow/proof.d.ts +5 -5
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +115 -20
- package/dist/core/workflow/recovery-audit.d.ts +30 -0
- package/dist/core/workflow/recovery-audit.d.ts.map +1 -0
- package/dist/core/workflow/recovery-audit.js +116 -0
- package/dist/core/workflow/run-state.d.ts +20 -1
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +141 -32
- package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
- package/dist/core/workflow/spawn-claude.js +19 -0
- package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
- package/dist/core/workflow/spawn-codex.js +13 -0
- package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
- package/dist/core/workflow/spawn-cursor.js +19 -0
- package/dist/core/workflow/spawn-opencode.d.ts.map +1 -1
- package/dist/core/workflow/spawn-opencode.js +14 -0
- package/dist/core/workflow/types.d.ts +64 -17
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/index.d.ts +0 -1
- package/dist/core/workflow/workspaces/index.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/index.js +0 -1
- package/dist/core/workflow/workspaces/leases.d.ts +3 -1
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +30 -16
- package/dist/core/workflow/workspaces/local-git.d.ts +6 -2
- package/dist/core/workflow/workspaces/local-git.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/local-git.js +328 -8
- package/dist/core/workflow/workspaces/ownership.d.ts +11 -0
- package/dist/core/workflow/workspaces/ownership.d.ts.map +1 -0
- package/dist/core/workflow/workspaces/ownership.js +194 -0
- package/dist/core/workflow/workspaces/reclaim.d.ts +40 -0
- package/dist/core/workflow/workspaces/reclaim.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/reclaim.js +14 -0
- package/dist/core/workflow/workspaces/recovery.d.ts +2 -0
- package/dist/core/workflow/workspaces/recovery.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/recovery.js +42 -10
- package/dist/core/workflow/workspaces/state.d.ts +1 -0
- package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/state.js +21 -1
- package/dist/lib/browser/windows-chrome.d.ts +100 -12
- package/dist/lib/browser/windows-chrome.d.ts.map +1 -1
- package/dist/lib/browser/windows-chrome.js +262 -73
- package/dist/lib/docs-links.d.ts.map +1 -1
- package/dist/lib/docs-links.js +45 -2
- package/dist/lib/guarded-remove.d.ts +7 -0
- package/dist/lib/guarded-remove.d.ts.map +1 -1
- package/dist/lib/guarded-remove.js +106 -12
- package/dist/lib/identities/assume.d.ts.map +1 -1
- package/dist/lib/identities/assume.js +4 -0
- package/dist/lib/tunnel/state.d.ts +13 -6
- package/dist/lib/tunnel/state.d.ts.map +1 -1
- package/dist/lib/tunnel/state.js +58 -12
- package/dist/lib/zip/index.d.ts +41 -0
- package/dist/lib/zip/index.d.ts.map +1 -0
- package/dist/lib/zip/index.js +398 -0
- package/package.json +12 -1
- package/src/commander.ts +10 -0
- package/src/commands/agents.ts +54 -63
- package/src/commands/browse.ts +50 -14
- package/src/commands/diagnostics.ts +10 -0
- package/src/commands/doctor.ts +26 -7
- package/src/commands/files.ts +13 -5
- package/src/commands/governor.ts +23 -10
- package/src/commands/inbox.ts +52 -2
- package/src/commands/rm.ts +43 -4
- package/src/commands/servers.ts +27 -26
- package/src/commands/supervisor.ts +7 -2
- package/src/commands/toc.ts +14 -6
- package/src/commands/tunnel.ts +533 -166
- package/src/commands/turn-rollback.ts +111 -0
- package/src/commands/workflow.ts +89 -30
- package/src/core/agents/coord-client.ts +20 -0
- package/src/core/agents/live-authority-v3.ts +17 -0
- package/src/core/agents/live-lifecycle-v3.ts +52 -14
- package/src/core/agents/mailbox.ts +26 -17
- package/src/core/agents/render/prompt-context.ts +10 -12
- package/src/core/agents/render/session-context.ts +9 -32
- package/src/core/agents/rules/stop-hook.ts +3 -3
- package/src/core/agents/state/heartbeat-writer.ts +29 -12
- package/src/core/agents/state/live-coordination-writer.ts +29 -0
- package/src/core/agents/state/pidmap.ts +13 -0
- package/src/core/agents/state/proc-start.ts +62 -2
- package/src/core/agents/state/process-handle.ts +165 -0
- package/src/core/agents/state/stale-sweep.ts +247 -82
- package/src/core/agents/state/unchanged-file.ts +456 -0
- package/src/core/artifacts/delivery-card.ts +7 -1
- package/src/core/context/index.ts +446 -136
- package/src/core/context/observation.ts +29 -0
- package/src/core/diagnostics/bundle.ts +23 -18
- package/src/core/diagnostics/path-identity.ts +15 -0
- package/src/core/diagnostics/sanitize.ts +4 -3
- package/src/core/events/v3/authority-outbox.ts +56 -0
- package/src/core/events/v3/generation-custody.ts +59 -0
- package/src/core/events/v3/producers/coordination-recorder.ts +15 -0
- package/src/core/events/v3/producers/recorder.ts +94 -68
- package/src/core/governor/planning.ts +20 -8
- package/src/core/governor/service-read.ts +128 -20
- package/src/core/governor/service.ts +119 -42
- package/src/core/hooks/cli.ts +33 -5
- package/src/core/inbox/contract.ts +2 -1
- package/src/core/inbox/index.ts +2 -0
- package/src/core/inbox/peer-messages.ts +94 -0
- package/src/core/inbox/service.ts +88 -22
- package/src/core/inbox/targets.ts +148 -0
- package/src/core/inbox/watcher.ts +8 -9
- package/src/core/journal/index.ts +19 -2
- package/src/core/resources/contract.ts +4 -0
- package/src/core/resources/service-status.ts +35 -12
- package/src/core/resources/service.ts +57 -95
- package/src/core/resources/status.ts +57 -8
- package/src/core/semantic/service.ts +2 -8
- package/src/core/servers/index.ts +376 -141
- package/src/core/servers/tunnels.ts +57 -13
- package/src/core/supervisor/contract.ts +13 -0
- package/src/core/supervisor/explanations.ts +4 -1
- package/src/core/supervisor/findings.ts +68 -10
- package/src/core/supervisor/service.ts +87 -26
- package/src/core/supervisor/services.ts +26 -8
- package/src/core/supervisor/status.ts +89 -12
- package/src/core/supervisor/timeline.ts +2 -1
- package/src/core/turn-rollback/content.ts +499 -0
- package/src/core/turn-rollback/index.ts +580 -0
- package/src/core/work/state.ts +7 -7
- package/src/core/workflow/engine.ts +131 -49
- package/src/core/workflow/failure-evidence.ts +141 -0
- package/src/core/workflow/index.ts +12 -2
- package/src/core/workflow/live-session-v3.ts +146 -5
- package/src/core/workflow/proof.ts +134 -26
- package/src/core/workflow/recovery-audit.ts +181 -0
- package/src/core/workflow/run-state.ts +165 -34
- package/src/core/workflow/spawn-claude.ts +18 -0
- package/src/core/workflow/spawn-codex.ts +13 -0
- package/src/core/workflow/spawn-cursor.ts +18 -0
- package/src/core/workflow/spawn-opencode.ts +14 -0
- package/src/core/workflow/types.ts +51 -17
- package/src/core/workflow/workspaces/index.ts +0 -1
- package/src/core/workflow/workspaces/leases.ts +48 -17
- package/src/core/workflow/workspaces/local-git.ts +388 -7
- package/src/core/workflow/workspaces/ownership.ts +232 -0
- package/src/core/workflow/workspaces/reclaim.ts +62 -0
- package/src/core/workflow/workspaces/recovery.ts +45 -10
- package/src/core/workflow/workspaces/state.ts +20 -0
- package/src/lib/browser/windows-chrome.ts +346 -86
- package/src/lib/docs-links.ts +49 -2
- package/src/lib/guarded-remove.ts +132 -14
- package/src/lib/identities/assume.ts +4 -0
- package/src/lib/tunnel/state.ts +70 -15
- package/src/lib/zip/index.ts +483 -0
package/dist/commands/inbox.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { watchInbox } from "../core/inbox/watcher.js";
|
|
2
|
+
export function registerInboxCommand(program, emit, service, defaultRecipient) {
|
|
2
3
|
const inbox = program.command("inbox").description("Inspect private coordination inbox state");
|
|
3
4
|
inbox
|
|
4
|
-
.command("list
|
|
5
|
+
.command("list [recipient]")
|
|
5
6
|
.option("--json", "Emit stable JSON")
|
|
6
7
|
.action((recipient, options) => {
|
|
7
8
|
run(emit, () => {
|
|
9
|
+
recipient = requireRecipient(recipient, defaultRecipient);
|
|
8
10
|
const rows = requireInboxService(service)
|
|
9
11
|
.pending(recipient)
|
|
10
12
|
.map((record) => ({
|
|
@@ -14,6 +16,7 @@ export function registerInboxCommand(program, emit, service) {
|
|
|
14
16
|
created_at: record.created_at,
|
|
15
17
|
body_bytes: record.body_bytes,
|
|
16
18
|
body: record.body,
|
|
19
|
+
state: "pending",
|
|
17
20
|
}));
|
|
18
21
|
if (options.json) {
|
|
19
22
|
emit.config({ format: "json" });
|
|
@@ -37,6 +40,56 @@ export function registerInboxCommand(program, emit, service) {
|
|
|
37
40
|
emit.rows([status]);
|
|
38
41
|
});
|
|
39
42
|
});
|
|
43
|
+
inbox
|
|
44
|
+
.command("watch [recipient]")
|
|
45
|
+
.description("Surface pending messages for this instance; poll history until timeout")
|
|
46
|
+
.option("--timeout <seconds>", "Stop after this many seconds", "60")
|
|
47
|
+
.option("--json", "Emit one JSON record per surfaced message")
|
|
48
|
+
.action(async (recipient, options) => {
|
|
49
|
+
let controller;
|
|
50
|
+
let timer;
|
|
51
|
+
try {
|
|
52
|
+
const instanceId = requireRecipient(recipient, defaultRecipient);
|
|
53
|
+
const inboxService = requireInboxService(service);
|
|
54
|
+
const seconds = Number(options.timeout);
|
|
55
|
+
if (!Number.isFinite(seconds) || seconds <= 0 || seconds > 3600)
|
|
56
|
+
throw new Error("--timeout must be greater than 0 and at most 3600 seconds");
|
|
57
|
+
controller = new AbortController();
|
|
58
|
+
timer = setTimeout(() => controller.abort(), seconds * 1000);
|
|
59
|
+
if (options.json)
|
|
60
|
+
emit.config({ format: "json" });
|
|
61
|
+
for await (const message of watchInbox(inboxService, instanceId, {
|
|
62
|
+
signal: controller.signal,
|
|
63
|
+
})) {
|
|
64
|
+
const row = { ...message, state: "surfaced" };
|
|
65
|
+
if (options.json)
|
|
66
|
+
emit.data(row);
|
|
67
|
+
else
|
|
68
|
+
emit.rows([row]);
|
|
69
|
+
// An output error leaves this ID pending for prompt recovery.
|
|
70
|
+
await new Promise((resolve, reject) => process.stdout.write("", (error) => (error ? reject(error) : resolve())));
|
|
71
|
+
inboxService.acknowledgeSurface(instanceId, [message.message_id]);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
emit.error({
|
|
76
|
+
code: "inbox_failed",
|
|
77
|
+
message: error instanceof Error ? error.message : String(error),
|
|
78
|
+
});
|
|
79
|
+
emit.setExitCode(1);
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
if (timer)
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
controller?.abort();
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function requireRecipient(recipient, fallback) {
|
|
89
|
+
const resolved = recipient ?? fallback?.();
|
|
90
|
+
if (!resolved)
|
|
91
|
+
throw new Error("recipient instance is required outside an agent session");
|
|
92
|
+
return resolved;
|
|
40
93
|
}
|
|
41
94
|
function requireInboxService(service) {
|
|
42
95
|
if (!service)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../src/commands/rm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"rm.d.ts","sourceRoot":"","sources":["../../src/commands/rm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAW1E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAsHN"}
|
package/dist/commands/rm.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
-
import { existsSync } from "node:fs";
|
|
3
|
-
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
2
|
+
import { existsSync, lstatSync, readFileSync, realpathSync } from "node:fs";
|
|
3
|
+
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
4
4
|
import { resolveCoordRoot } from "../core/agents/coord-client.js";
|
|
5
|
+
import { artifactsRoot, parseArtifactManifest } from "../core/artifacts/index.js";
|
|
5
6
|
import { readCoordinationViewV3, requireAuthoritySafeCoordinationViewV3, } from "../core/events/v3/coordination-view.js";
|
|
6
7
|
import { liveInstanceIdV3 } from "../core/events/v3/live-route-observer.js";
|
|
7
8
|
import { resolveOwner } from "../core/hooks/resolve/owner.js";
|
|
@@ -12,6 +13,8 @@ export function registerRmCommand(program, emit, context) {
|
|
|
12
13
|
.description("Preview guarded removal of untracked files; --yes applies permanent deletion")
|
|
13
14
|
.requiredOption("--root <directory>", "Allowed directory; each target must be strictly inside it")
|
|
14
15
|
.option("-r, --recursive", "Permit directory removal after inspecting its complete contents")
|
|
16
|
+
.option("--clean-clone", "Remove only clean standalone clones inside one owned artifact; refuse local-only commits and worktrees")
|
|
17
|
+
.option("--entry-limit <n>", "Maximum inspected entries, 1-100000 (default 10000); larger limits require one current caller-owned managed artifact as --root", (value) => Number(value))
|
|
15
18
|
.option("--allow-protected <path>", "Remove this one protected path (Git metadata, credentials, Harnery state, keys) inside a target; repeat per path", (value, previous = []) => [...previous, value])
|
|
16
19
|
.option("--yes", "Permanently remove validated targets")
|
|
17
20
|
.option("--dry-run", "Preview only, even with --yes")
|
|
@@ -43,7 +46,26 @@ export function registerRmCommand(program, emit, context) {
|
|
|
43
46
|
// The workspace this command coordinates, and the checkout it runs in:
|
|
44
47
|
// their own .git and .harnery can never be allowed.
|
|
45
48
|
const liveRoots = [coordRoot, gitTopLevel(process.cwd())].filter((dir) => Boolean(dir));
|
|
46
|
-
const
|
|
49
|
+
const assertOwnedArtifact = (root) => {
|
|
50
|
+
if (!coordRoot || dirname(root) !== realpathSync(artifactsRoot(coordRoot)))
|
|
51
|
+
throw new Error("Copied state requires --root to name one owned managed artifact");
|
|
52
|
+
const view = requireAuthoritySafeCoordinationViewV3(readCoordinationViewV3(coordRoot));
|
|
53
|
+
const owner = resolveOwner({ payload: null, coordRoot });
|
|
54
|
+
const ownId = owner ? liveInstanceIdV3(owner.instance_id) : undefined;
|
|
55
|
+
if (!ownId || !view.instances[ownId]?.authority_eligible)
|
|
56
|
+
throw new Error("Copied state requires an authenticated current artifact owner");
|
|
57
|
+
const record = resolve(root, ".harnery-artifact.json");
|
|
58
|
+
const stat = lstatSync(record);
|
|
59
|
+
if (!stat.isFile() || stat.isSymbolicLink())
|
|
60
|
+
throw new Error("An owned artifact requires a regular manifest file");
|
|
61
|
+
const parsed = parseArtifactManifest(JSON.parse(readFileSync(record, "utf8")));
|
|
62
|
+
if (!parsed.ok ||
|
|
63
|
+
parsed.manifest.released_at ||
|
|
64
|
+
!parsed.manifest.created_by?.instance_id ||
|
|
65
|
+
liveInstanceIdV3(parsed.manifest.created_by.instance_id) !== ownId)
|
|
66
|
+
throw new Error("Copied state requires a valid unreleased artifact owned by the caller");
|
|
67
|
+
};
|
|
68
|
+
const report = guardedRemove(paths, { ...options, liveRoots, assertOwnedArtifact }, checkClaims);
|
|
47
69
|
if (options.json) {
|
|
48
70
|
emit.config({ format: "json" });
|
|
49
71
|
emit.data(report);
|
|
@@ -54,7 +76,9 @@ export function registerRmCommand(program, emit, context) {
|
|
|
54
76
|
...report.targets,
|
|
55
77
|
];
|
|
56
78
|
if (report.protected.length)
|
|
57
|
-
lines.push(
|
|
79
|
+
lines.push(options.cleanClone
|
|
80
|
+
? "Verified clone metadata:"
|
|
81
|
+
: "Protected paths named with --allow-protected:", ...report.protected.map((path) => ` ${path}`));
|
|
58
82
|
if (report.links.length)
|
|
59
83
|
lines.push("Links removed as links (their targets are untouched):", ...report.links.map((link) => ` ${link.path} -> ${link.target}`));
|
|
60
84
|
if (!report.applied)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/commands/servers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../src/commands/servers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAG1E,OAAO,EAWL,KAAK,aAAa,EAMnB,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA4YN;AA8BD,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAmDvE"}
|
package/dist/commands/servers.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
2
|
-
import { hostname } from "node:os";
|
|
3
2
|
import { resolveCoordRoot } from "../core/agents/coord-client.js";
|
|
4
3
|
import { resolveBinName, serverGcConfig } from "../core/config.js";
|
|
5
4
|
import { adoptServer, allocateServerPort, isValidServerId, listServers, planServerGc, readServer, registerServer, SERVER_DEFAULT_IDLE_HOURS, SERVER_DEFAULT_OWNER_STALE_HOURS, stopServer, touchServer, unregisterServer, } from "../core/servers/index.js";
|
|
@@ -74,17 +73,13 @@ export function registerServersCommand(program, emit, context) {
|
|
|
74
73
|
const preview = Boolean(options.type) && !options.yes;
|
|
75
74
|
const results = [];
|
|
76
75
|
for (const stray of strays) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
id: `pid-${stray.pid}`,
|
|
80
|
-
kind: "session",
|
|
76
|
+
const receipt = adoptServer(stray.pid, {
|
|
77
|
+
coordRoot,
|
|
81
78
|
type: "unregistered",
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
registered_at: new Date().toISOString(),
|
|
87
|
-
}, { coordRoot }));
|
|
79
|
+
owner: "none",
|
|
80
|
+
dependencies: { listServers: () => report },
|
|
81
|
+
});
|
|
82
|
+
results.push(await stopServer(receipt, { coordRoot }));
|
|
88
83
|
}
|
|
89
84
|
for (const view of selected) {
|
|
90
85
|
if (preview && !ids.includes(view.record.id))
|
|
@@ -141,7 +136,19 @@ export function registerServersCommand(program, emit, context) {
|
|
|
141
136
|
emit.data({ applied: Boolean(options.yes), pruned: report.pruned, decisions, results });
|
|
142
137
|
}
|
|
143
138
|
else {
|
|
144
|
-
const lines = decisions.map((
|
|
139
|
+
const lines = decisions.map((decision) => {
|
|
140
|
+
const result = results.find((item) => item.id === decision.id);
|
|
141
|
+
const action = decision.action === "keep"
|
|
142
|
+
? "keep"
|
|
143
|
+
: !options.yes
|
|
144
|
+
? "would stop"
|
|
145
|
+
: result?.stopped
|
|
146
|
+
? "stopped"
|
|
147
|
+
: result?.method === "not-running"
|
|
148
|
+
? "already stopped"
|
|
149
|
+
: "could not stop";
|
|
150
|
+
return `${action} ${decision.id} ${result?.detail ?? decision.reason}`;
|
|
151
|
+
});
|
|
145
152
|
if (report.pruned.length)
|
|
146
153
|
lines.push(`Removed records of exited servers: ${report.pruned.join(", ")}`);
|
|
147
154
|
if (!decisions.length)
|
|
@@ -150,6 +157,8 @@ export function registerServersCommand(program, emit, context) {
|
|
|
150
157
|
lines.push("Preview only. Re-run with --yes to stop.");
|
|
151
158
|
emit.text(lines.join("\n"));
|
|
152
159
|
}
|
|
160
|
+
if (results.some((result) => result.method === "refused"))
|
|
161
|
+
emit.setExitCode(1);
|
|
153
162
|
}
|
|
154
163
|
catch (error) {
|
|
155
164
|
fail(error);
|
|
@@ -290,14 +299,14 @@ export function registerServersCommand(program, emit, context) {
|
|
|
290
299
|
});
|
|
291
300
|
cmd
|
|
292
301
|
.command("unregister <id>")
|
|
293
|
-
.description("Remove
|
|
302
|
+
.description("Remove the exact observed server registration (optionally require --pid)")
|
|
294
303
|
.option("--pid <pid>", "Only remove when the record names this pid")
|
|
295
304
|
.action((id, options) => {
|
|
296
305
|
try {
|
|
297
|
-
const
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
});
|
|
306
|
+
const coordRoot = root();
|
|
307
|
+
const record = readServer(id, { coordRoot });
|
|
308
|
+
const matchesPid = !options.pid || record?.pid === integer(options.pid, "--pid");
|
|
309
|
+
const removed = !!record && matchesPid && unregisterServer(record, { coordRoot });
|
|
301
310
|
emit.config({ format: "json" });
|
|
302
311
|
emit.data({ id, removed });
|
|
303
312
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/commands/supervisor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAe1E,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/commands/supervisor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAe1E,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA6GN"}
|
|
@@ -53,11 +53,16 @@ export function registerSupervisorCommand(program, emit, context) {
|
|
|
53
53
|
.action(async (options) => {
|
|
54
54
|
try {
|
|
55
55
|
const root = resolve(options.root ?? coordRoot(context));
|
|
56
|
-
|
|
56
|
+
const requested = requestSupervisorStop(root);
|
|
57
|
+
let status = requested;
|
|
57
58
|
const deadline = Date.now() + 5_000;
|
|
58
59
|
while (status.running && Date.now() < deadline) {
|
|
59
60
|
await new Promise((done) => setTimeout(done, 50));
|
|
60
|
-
status =
|
|
61
|
+
status = {
|
|
62
|
+
...readSupervisorStatus(root),
|
|
63
|
+
signal_sent: requested.signal_sent,
|
|
64
|
+
signal_verdict: requested.signal_verdict,
|
|
65
|
+
};
|
|
61
66
|
}
|
|
62
67
|
emit.data(status);
|
|
63
68
|
}
|
package/dist/commands/toc.d.ts
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
import type { EmitContext } from "../commander.js";
|
|
3
|
+
interface SectionOpts {
|
|
4
|
+
json?: boolean;
|
|
5
|
+
caseSensitive?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface SectionResult {
|
|
8
|
+
file: string;
|
|
9
|
+
matched_header: string;
|
|
10
|
+
matched_level: number;
|
|
11
|
+
line_start: number;
|
|
12
|
+
line_end: number;
|
|
13
|
+
content: string;
|
|
14
|
+
}
|
|
3
15
|
export declare function registerTocCommand(program: Command, emit: EmitContext): void;
|
|
4
16
|
export declare function registerSectionCommand(program: Command, emit: EmitContext): void;
|
|
17
|
+
export declare function runSection(file: string, query: string, opts: SectionOpts): Promise<SectionResult>;
|
|
18
|
+
export {};
|
|
5
19
|
//# sourceMappingURL=toc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/commands/toc.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["../../src/commands/toc.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiBnD,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAeD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAqB5E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA0BhF;AA8ED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CA+CxB"}
|
package/dist/commands/toc.js
CHANGED
|
@@ -116,15 +116,18 @@ function renderToc(r) {
|
|
|
116
116
|
}
|
|
117
117
|
return lines.join("\n");
|
|
118
118
|
}
|
|
119
|
-
async function runSection(file, query, opts) {
|
|
119
|
+
export async function runSection(file, query, opts) {
|
|
120
120
|
if (!query.trim())
|
|
121
121
|
throw new Error("header query required");
|
|
122
122
|
const tocResult = await runToc(file, {});
|
|
123
123
|
const absPath = resolve(file);
|
|
124
124
|
const lines = readFileSync(absPath, "utf8").split("\n");
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
125
|
+
const same = (a, b) => opts.caseSensitive ? a === b : a.toLowerCase() === b.toLowerCase();
|
|
126
|
+
const contains = (a, b) => opts.caseSensitive ? a.includes(b) : a.toLowerCase().includes(b.toLowerCase());
|
|
127
|
+
// A header that equals the query wins over headers that merely contain it,
|
|
128
|
+
// so "Media" can still select "## Media" beside "## Media recipes".
|
|
129
|
+
const exact = tocResult.headers.filter((h) => same(h.text, query.trim()));
|
|
130
|
+
const matches = exact.length > 0 ? exact : tocResult.headers.filter((h) => contains(h.text, query));
|
|
128
131
|
if (matches.length === 0) {
|
|
129
132
|
throw new Error(`no header matching "${query}". Run \`${resolveBinName()} toc ${file}\` to list available headers.`);
|
|
130
133
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Command } from "commander";
|
|
2
2
|
import type { EmitContext, HarneryProgramContext } from "../commander.js";
|
|
3
|
+
import { type ServerRecord } from "../core/servers/index.js";
|
|
3
4
|
import { type DetectOptions, detectPublicAddresses } from "../lib/tunnel/current-address.js";
|
|
4
5
|
import { type TunnelProvider, type TunnelState } from "../lib/tunnel/state.js";
|
|
5
6
|
export declare function tunnelLogDestinations(name: string, provider: TunnelProvider, env?: NodeJS.ProcessEnv, root?: string): {
|
|
@@ -42,6 +43,20 @@ export declare function resolveGateLaunch(i: GateLaunchInputs): GateLaunch | nul
|
|
|
42
43
|
* `tunnel log-worker` task instead.
|
|
43
44
|
*/
|
|
44
45
|
export declare function resolveWorkerLaunch(i: GateLaunchInputs): GateLaunch | undefined;
|
|
46
|
+
export interface TunnelRoute {
|
|
47
|
+
path: string;
|
|
48
|
+
httpsPort: number;
|
|
49
|
+
}
|
|
50
|
+
/** Serialize the instance and every shared provider route before any external effect. */
|
|
51
|
+
export declare function withTunnelLifecycleCustody<T>(name: string, requested: TunnelRoute | null, effect: () => PromiseLike<T>): Promise<T>;
|
|
52
|
+
export declare function withTunnelLifecycleCustody<T>(name: string, requested: TunnelRoute | null, effect: () => T): T;
|
|
53
|
+
/** Retain a refused launch without overwriting another launch's canonical state. */
|
|
54
|
+
export declare function recordRefusedTunnelLaunch(state: TunnelState): string;
|
|
55
|
+
/** A canonical state frame may be published only by its current registration. */
|
|
56
|
+
export declare function publishTunnelState(state: TunnelState, receipt: ServerRecord): void;
|
|
57
|
+
/** Retain pending route intent before asking the provider to change external state. */
|
|
58
|
+
export declare function beginTailscaleRoute<T>(state: TunnelState, receipt: ServerRecord, effect: () => T): T;
|
|
59
|
+
/** Unknown saved identities retain state and never authorize a signal. */
|
|
45
60
|
export declare function downOne(name: string, killed: Set<number>): number;
|
|
46
61
|
/**
|
|
47
62
|
* Restart ONE instance's gate in place, deliberately leaving the provider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tunnel.d.ts","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
|