harnery 0.41.0 → 0.43.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/dist/commander.d.ts +16 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +21 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +63 -5
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +113 -12
- package/dist/commands/browse.d.ts +164 -0
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +263 -51
- package/dist/commands/claude-desktop.d.ts.map +1 -1
- package/dist/commands/claude-desktop.js +52 -0
- package/dist/commands/disk.d.ts +6 -0
- package/dist/commands/disk.d.ts.map +1 -0
- package/dist/commands/disk.js +80 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +48 -1
- package/dist/commands/files.d.ts +16 -0
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +54 -2
- package/dist/commands/init.d.ts +2 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +43 -9
- package/dist/commands/rm.d.ts +4 -0
- package/dist/commands/rm.d.ts.map +1 -0
- package/dist/commands/rm.js +87 -0
- package/dist/commands/servers.d.ts +7 -0
- package/dist/commands/servers.d.ts.map +1 -0
- package/dist/commands/servers.js +394 -0
- package/dist/commands/tunnel.d.ts +65 -0
- package/dist/commands/tunnel.d.ts.map +1 -1
- package/dist/commands/tunnel.js +372 -103
- package/dist/commands/web-fetch.d.ts +3 -2
- package/dist/commands/web-fetch.d.ts.map +1 -1
- package/dist/commands/web-fetch.js +25 -19
- package/dist/commands/web.d.ts +7 -1
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +9 -3
- package/dist/core/adapters/profiles.d.ts +9 -0
- package/dist/core/adapters/profiles.d.ts.map +1 -1
- package/dist/core/adapters/profiles.js +22 -1
- package/dist/core/adapters/types.d.ts +9 -0
- package/dist/core/adapters/types.d.ts.map +1 -1
- package/dist/core/agents/cli.js +13 -6
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +11 -5
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +59 -13
- package/dist/core/agents/state/live-coordination-view.d.ts +20 -0
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +60 -0
- package/dist/core/agents/state/names.d.ts +43 -3
- package/dist/core/agents/state/names.d.ts.map +1 -1
- package/dist/core/agents/state/names.js +87 -3
- package/dist/core/artifacts/delivery-card.js +9 -2
- package/dist/core/artifacts/index.d.ts +140 -4
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +522 -49
- package/dist/core/config.d.ts +68 -11
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +128 -3
- package/dist/core/diagnostics/bundle.d.ts.map +1 -1
- package/dist/core/diagnostics/bundle.js +2 -2
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +16 -0
- package/dist/core/events/v3/projection.js +9 -1
- package/dist/core/events/v3/support-storage/pack-reader.d.ts.map +1 -1
- package/dist/core/events/v3/support-storage/pack-reader.js +42 -16
- package/dist/core/hooks/adapter/events.d.ts +17 -0
- package/dist/core/hooks/adapter/events.d.ts.map +1 -1
- package/dist/core/hooks/adapter/events.js +5 -0
- package/dist/core/hooks/adapter/runtime-telemetry.js +3 -1
- package/dist/core/hooks/adapter/wiring.d.ts +37 -7
- package/dist/core/hooks/adapter/wiring.d.ts.map +1 -1
- package/dist/core/hooks/adapter/wiring.js +62 -4
- package/dist/core/hooks/cli.js +131 -23
- package/dist/core/hooks/fork-lineage.d.ts +40 -0
- package/dist/core/hooks/fork-lineage.d.ts.map +1 -0
- package/dist/core/hooks/fork-lineage.js +62 -0
- package/dist/core/hooks/resolve/transcript.d.ts +16 -0
- package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
- package/dist/core/hooks/resolve/transcript.js +84 -0
- package/dist/core/hooks/run-markers.d.ts +37 -0
- package/dist/core/hooks/run-markers.d.ts.map +1 -0
- package/dist/core/hooks/run-markers.js +109 -0
- package/dist/core/hooks/shell-rm.d.ts +2 -0
- package/dist/core/hooks/shell-rm.d.ts.map +1 -0
- package/dist/core/hooks/shell-rm.js +105 -0
- package/dist/core/hooks/shell-tokens.d.ts +12 -0
- package/dist/core/hooks/shell-tokens.d.ts.map +1 -0
- package/dist/core/hooks/shell-tokens.js +97 -0
- package/dist/core/hooks/shell-waiter.d.ts.map +1 -1
- package/dist/core/hooks/shell-waiter.js +3 -93
- package/dist/core/semantic/contract.d.ts +5 -5
- package/dist/core/servers/index.d.ts +211 -0
- package/dist/core/servers/index.d.ts.map +1 -0
- package/dist/core/servers/index.js +560 -0
- package/dist/core/servers/net.d.ts +58 -0
- package/dist/core/servers/net.d.ts.map +1 -0
- package/dist/core/servers/net.js +270 -0
- package/dist/core/servers/tunnels.d.ts +14 -0
- package/dist/core/servers/tunnels.d.ts.map +1 -0
- package/dist/core/servers/tunnels.js +33 -0
- package/dist/core/storage/builtins.js +1 -0
- package/dist/core/storage/process-log.d.ts +12 -0
- package/dist/core/storage/process-log.d.ts.map +1 -1
- package/dist/core/storage/process-log.js +10 -2
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +30 -1
- package/dist/core/workflow/sandbox-projection.d.ts +13 -2
- package/dist/core/workflow/sandbox-projection.d.ts.map +1 -1
- package/dist/core/workflow/sandbox-projection.js +23 -0
- package/dist/core/workflow/spawn-claude.d.ts.map +1 -1
- package/dist/core/workflow/spawn-claude.js +6 -1
- package/dist/core/workflow/spawn-codex.d.ts +2 -0
- package/dist/core/workflow/spawn-codex.d.ts.map +1 -1
- package/dist/core/workflow/spawn-codex.js +20 -1
- package/dist/core/workflow/spawn-cursor.d.ts.map +1 -1
- package/dist/core/workflow/spawn-cursor.js +6 -1
- package/dist/core/workflow/spawn-opencode.d.ts.map +1 -1
- package/dist/core/workflow/spawn-opencode.js +4 -1
- package/dist/core/workflow/types.d.ts +47 -2
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/worker-access.d.ts +92 -0
- package/dist/core/workflow/worker-access.d.ts.map +1 -0
- package/dist/core/workflow/worker-access.js +450 -0
- package/dist/lib/browser/batch-steps.d.ts +18 -0
- package/dist/lib/browser/batch-steps.d.ts.map +1 -0
- package/dist/lib/browser/batch-steps.js +82 -0
- package/dist/lib/browser/collect/collector.d.ts +99 -0
- package/dist/lib/browser/collect/collector.d.ts.map +1 -0
- package/dist/lib/browser/collect/collector.js +202 -0
- package/dist/lib/browser/collect/fields.d.ts +31 -0
- package/dist/lib/browser/collect/fields.d.ts.map +1 -0
- package/dist/lib/browser/collect/fields.js +75 -0
- package/dist/lib/browser/collect/index.d.ts +6 -0
- package/dist/lib/browser/collect/index.d.ts.map +1 -0
- package/dist/lib/browser/collect/index.js +5 -0
- package/dist/lib/browser/collect/page-driver.d.ts +14 -0
- package/dist/lib/browser/collect/page-driver.d.ts.map +1 -0
- package/dist/lib/browser/collect/page-driver.js +306 -0
- package/dist/lib/browser/collect/presets.d.ts +52 -0
- package/dist/lib/browser/collect/presets.d.ts.map +1 -0
- package/dist/lib/browser/collect/presets.js +176 -0
- package/dist/lib/browser/collect/scroll-plan.d.ts +85 -0
- package/dist/lib/browser/collect/scroll-plan.d.ts.map +1 -0
- package/dist/lib/browser/collect/scroll-plan.js +118 -0
- package/dist/lib/browser/index.d.ts +1 -1
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/page-review-judge.d.ts +2 -0
- package/dist/lib/browser/page-review-judge.d.ts.map +1 -1
- package/dist/lib/browser/page-review-judge.js +13 -0
- package/dist/lib/browser/qa-run-contracts.d.ts +10 -0
- package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -1
- package/dist/lib/browser/qa-run.d.ts.map +1 -1
- package/dist/lib/browser/qa-run.js +1 -0
- package/dist/lib/browser/windows-chrome.d.ts +59 -0
- package/dist/lib/browser/windows-chrome.d.ts.map +1 -0
- package/dist/lib/browser/windows-chrome.js +179 -0
- package/dist/lib/claude-desktop-share.d.ts +136 -0
- package/dist/lib/claude-desktop-share.d.ts.map +1 -0
- package/dist/lib/claude-desktop-share.js +394 -0
- package/dist/lib/disk-usage.d.ts +50 -0
- package/dist/lib/disk-usage.d.ts.map +1 -0
- package/dist/lib/disk-usage.js +303 -0
- package/dist/lib/docs-lint.d.ts +6 -0
- package/dist/lib/docs-lint.d.ts.map +1 -1
- package/dist/lib/docs-lint.js +8 -3
- package/dist/lib/guarded-remove.d.ts +34 -0
- package/dist/lib/guarded-remove.d.ts.map +1 -0
- package/dist/lib/guarded-remove.js +310 -0
- package/dist/lib/instructions/templates.js +8 -8
- package/dist/lib/tunnel/allowlist.d.ts +44 -0
- package/dist/lib/tunnel/allowlist.d.ts.map +1 -0
- package/dist/lib/tunnel/allowlist.js +204 -0
- package/dist/lib/tunnel/current-address.d.ts +41 -0
- package/dist/lib/tunnel/current-address.d.ts.map +1 -0
- package/dist/lib/tunnel/current-address.js +123 -0
- package/dist/lib/tunnel/error-page.d.ts +1 -1
- package/dist/lib/tunnel/error-page.d.ts.map +1 -1
- package/dist/lib/tunnel/error-page.js +19 -8
- package/dist/lib/tunnel/gate.js +33 -7
- package/dist/lib/tunnel/path-scope.d.ts +22 -0
- package/dist/lib/tunnel/path-scope.d.ts.map +1 -0
- package/dist/lib/tunnel/path-scope.js +62 -0
- package/dist/lib/tunnel/processes.d.ts +39 -0
- package/dist/lib/tunnel/processes.d.ts.map +1 -0
- package/dist/lib/tunnel/processes.js +121 -0
- package/dist/lib/tunnel/state.d.ts +33 -3
- package/dist/lib/tunnel/state.d.ts.map +1 -1
- package/dist/lib/tunnel/state.js +115 -30
- package/package.json +7 -1
- package/schemas/config.schema.json +91 -0
- package/src/commander.ts +51 -0
- package/src/commands/agents.ts +111 -11
- package/src/commands/artifacts.ts +171 -19
- package/src/commands/browse.ts +400 -57
- package/src/commands/claude-desktop.ts +61 -0
- package/src/commands/disk.ts +114 -0
- package/src/commands/doctor.ts +52 -1
- package/src/commands/files.ts +93 -2
- package/src/commands/init.ts +55 -5
- package/src/commands/rm.ts +115 -0
- package/src/commands/servers.ts +506 -0
- package/src/commands/tunnel.ts +494 -116
- package/src/commands/web-fetch.ts +30 -19
- package/src/commands/web.ts +9 -3
- package/src/core/adapters/profiles.ts +22 -1
- package/src/core/adapters/types.ts +10 -0
- package/src/core/agents/cli.ts +14 -6
- package/src/core/agents/render/prompt-context.ts +25 -8
- package/src/core/agents/render/session-context.ts +84 -16
- package/src/core/agents/state/live-coordination-view.ts +73 -0
- package/src/core/agents/state/names.ts +117 -6
- package/src/core/artifacts/delivery-card.ts +10 -2
- package/src/core/artifacts/index.ts +697 -44
- package/src/core/config.ts +183 -4
- package/src/core/diagnostics/bundle.ts +2 -1
- package/src/core/events/v3/producers/recorder.ts +16 -0
- package/src/core/events/v3/projection.ts +11 -1
- package/src/core/events/v3/support-storage/pack-reader.ts +45 -19
- package/src/core/hooks/adapter/events.ts +19 -0
- package/src/core/hooks/adapter/runtime-telemetry.ts +3 -1
- package/src/core/hooks/adapter/wiring.ts +116 -8
- package/src/core/hooks/cli.ts +152 -22
- package/src/core/hooks/fork-lineage.ts +82 -0
- package/src/core/hooks/resolve/transcript.ts +88 -0
- package/src/core/hooks/run-markers.ts +132 -0
- package/src/core/hooks/shell-rm.ts +103 -0
- package/src/core/hooks/shell-tokens.ts +96 -0
- package/src/core/hooks/shell-waiter.ts +4 -91
- package/src/core/servers/index.ts +712 -0
- package/src/core/servers/net.ts +283 -0
- package/src/core/servers/tunnels.ts +39 -0
- package/src/core/storage/builtins.ts +1 -0
- package/src/core/storage/process-log.ts +17 -2
- package/src/core/workflow/engine.ts +38 -1
- package/src/core/workflow/sandbox-projection.ts +38 -2
- package/src/core/workflow/spawn-claude.ts +5 -1
- package/src/core/workflow/spawn-codex.ts +18 -1
- package/src/core/workflow/spawn-cursor.ts +5 -1
- package/src/core/workflow/spawn-opencode.ts +4 -1
- package/src/core/workflow/types.ts +62 -2
- package/src/core/workflow/worker-access.ts +525 -0
- package/src/lib/browser/batch-steps.ts +79 -0
- package/src/lib/browser/collect/collector.ts +306 -0
- package/src/lib/browser/collect/fields.ts +87 -0
- package/src/lib/browser/collect/index.ts +47 -0
- package/src/lib/browser/collect/page-driver.ts +327 -0
- package/src/lib/browser/collect/presets.ts +237 -0
- package/src/lib/browser/collect/scroll-plan.ts +179 -0
- package/src/lib/browser/index.ts +1 -0
- package/src/lib/browser/page-review-judge.ts +16 -0
- package/src/lib/browser/qa-run-contracts.ts +11 -0
- package/src/lib/browser/qa-run.ts +1 -0
- package/src/lib/browser/windows-chrome.ts +227 -0
- package/src/lib/claude-desktop-share.ts +511 -0
- package/src/lib/disk-usage.ts +347 -0
- package/src/lib/docs-lint.ts +8 -3
- package/src/lib/guarded-remove.ts +376 -0
- package/src/lib/instructions/templates.ts +8 -8
- package/src/lib/tunnel/allowlist.ts +208 -0
- package/src/lib/tunnel/current-address.ts +158 -0
- package/src/lib/tunnel/error-page.ts +25 -9
- package/src/lib/tunnel/gate.ts +38 -9
- package/src/lib/tunnel/path-scope.ts +73 -0
- package/src/lib/tunnel/processes.ts +149 -0
- package/src/lib/tunnel/state.ts +143 -30
|
@@ -43,13 +43,20 @@ export interface NameHistoryRow {
|
|
|
43
43
|
ts: string;
|
|
44
44
|
/** Durable persona UUID. Present after `agents identity assume`. */
|
|
45
45
|
agent_id?: string;
|
|
46
|
-
/** Audit marker distinguishing an explicit role adoption from pool assignment
|
|
47
|
-
|
|
46
|
+
/** Audit marker distinguishing an explicit role adoption from pool assignment,
|
|
47
|
+
* and a lineage row appended after the name was already assigned. */
|
|
48
|
+
source?: "pool" | "identity.assume" | "fork.detected";
|
|
48
49
|
previous_name?: string;
|
|
49
50
|
/** Instance this session was forked/branched from (recorded fork lineage).
|
|
50
51
|
* Stamped only on the row that first assigns this instance, when the adapter
|
|
51
52
|
* layer detected or supplied a parent conversation. */
|
|
52
53
|
forked_from?: string;
|
|
54
|
+
/** The adapter declared or inherited-history proved this instance is a fork,
|
|
55
|
+
* even when its parent could not be resolved yet. */
|
|
56
|
+
fork?: true;
|
|
57
|
+
/** Fork detection has run against this instance's transcript; the tool-path
|
|
58
|
+
* heal skips instances carrying it so the scan runs once per instance. */
|
|
59
|
+
fork_checked?: true;
|
|
53
60
|
}
|
|
54
61
|
/**
|
|
55
62
|
* Resolve (name, kind) for an existing owner without consuming a counter
|
|
@@ -112,10 +119,43 @@ export declare function readLiveNames(coordRoot: string, opts: {
|
|
|
112
119
|
export declare function assignName(coordRoot: string, instanceId: string, kind: NameKind, opts: {
|
|
113
120
|
freshnessSecs: number;
|
|
114
121
|
forkedFrom?: string;
|
|
122
|
+
fork?: boolean;
|
|
123
|
+
forkChecked?: boolean;
|
|
115
124
|
nowMs?: number;
|
|
116
125
|
}): string;
|
|
126
|
+
export interface ForkState {
|
|
127
|
+
/** True when the instance is a recorded fork, parent known or not. */
|
|
128
|
+
fork: boolean;
|
|
129
|
+
/** Detection already ran for this instance. */
|
|
130
|
+
checked: boolean;
|
|
131
|
+
parent: {
|
|
132
|
+
instance_id: string;
|
|
133
|
+
name: string | null;
|
|
134
|
+
} | null;
|
|
135
|
+
}
|
|
136
|
+
/** Recorded fork state for <instanceId>, or null when it has no history row. */
|
|
137
|
+
export declare function readForkState(coordRoot: string, instanceId: string): ForkState | null;
|
|
138
|
+
/**
|
|
139
|
+
* Record fork detection that ran after the instance was already named (the
|
|
140
|
+
* tool-path heal). Appends a copy of the latest identity row, so the name,
|
|
141
|
+
* kind, and persona are unchanged, plus `fork_checked` and any lineage found.
|
|
142
|
+
* A no-op for an instance with no history row or one already checked.
|
|
143
|
+
*/
|
|
144
|
+
export declare function recordForkDetection(coordRoot: string, instanceId: string, detection: {
|
|
145
|
+
fork: boolean;
|
|
146
|
+
forkedFrom?: string;
|
|
147
|
+
}): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Peer labels for recorded fork relations, keyed by instance id: this
|
|
150
|
+
* session's fork parent and its direct forks. `liveIds` marks which of them
|
|
151
|
+
* are running, so a fork can tell its live parent from its own earlier self.
|
|
152
|
+
*/
|
|
153
|
+
export declare function forkRelationLabels(coordRoot: string, instanceId: string, liveIds: Set<string>): Map<string, string>;
|
|
154
|
+
/** Instance ids recorded as direct forks of <instanceId>. */
|
|
155
|
+
export declare function readForkChildren(coordRoot: string, instanceId: string): Set<string>;
|
|
117
156
|
/** One step of recorded fork lineage: the latest row for <instanceId> that
|
|
118
|
-
* carries `forked_from
|
|
157
|
+
* carries `forked_from`. Later rows without lineage (an identity assumption)
|
|
158
|
+
* do not erase it: a session never stops being a fork. */
|
|
119
159
|
export declare function readForkParent(coordRoot: string, instanceId: string): {
|
|
120
160
|
instance_id: string;
|
|
121
161
|
name: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/names.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAYH,qBAAqB;AACrB,eAAO,MAAM,WAAW,85EA+Qd,CAAC;AAMX,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/names.ts"],"names":[],"mappings":"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"}
|
|
@@ -496,19 +496,103 @@ export function assignName(coordRoot, instanceId, kind, opts) {
|
|
|
496
496
|
kind,
|
|
497
497
|
source: "pool",
|
|
498
498
|
...(forkedFrom && forkedFrom !== instanceId ? { forked_from: forkedFrom } : {}),
|
|
499
|
+
...(opts.fork || (forkedFrom && forkedFrom !== instanceId) ? { fork: true } : {}),
|
|
500
|
+
...(opts.forkChecked ? { fork_checked: true } : {}),
|
|
499
501
|
ts: new Date().toISOString().replace(/\.\d{3}Z$/, "Z"),
|
|
500
502
|
});
|
|
501
503
|
return name;
|
|
502
504
|
}
|
|
505
|
+
/** Recorded fork state for <instanceId>, or null when it has no history row. */
|
|
506
|
+
export function readForkState(coordRoot, instanceId) {
|
|
507
|
+
const history = readHistory(coordRoot);
|
|
508
|
+
let seen = false;
|
|
509
|
+
let fork = false;
|
|
510
|
+
let checked = false;
|
|
511
|
+
let parentId;
|
|
512
|
+
for (const row of history) {
|
|
513
|
+
if (row.instance_id !== instanceId)
|
|
514
|
+
continue;
|
|
515
|
+
seen = true;
|
|
516
|
+
if (row.fork || row.forked_from)
|
|
517
|
+
fork = true;
|
|
518
|
+
if (row.fork_checked)
|
|
519
|
+
checked = true;
|
|
520
|
+
if (row.forked_from && row.forked_from !== instanceId)
|
|
521
|
+
parentId = row.forked_from;
|
|
522
|
+
}
|
|
523
|
+
if (!seen)
|
|
524
|
+
return null;
|
|
525
|
+
const parent = parentId
|
|
526
|
+
? { instance_id: parentId, name: resolveName(coordRoot, parentId)?.name ?? null }
|
|
527
|
+
: null;
|
|
528
|
+
return { fork, checked, parent };
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Record fork detection that ran after the instance was already named (the
|
|
532
|
+
* tool-path heal). Appends a copy of the latest identity row, so the name,
|
|
533
|
+
* kind, and persona are unchanged, plus `fork_checked` and any lineage found.
|
|
534
|
+
* A no-op for an instance with no history row or one already checked.
|
|
535
|
+
*/
|
|
536
|
+
export function recordForkDetection(coordRoot, instanceId, detection) {
|
|
537
|
+
const history = readHistory(coordRoot);
|
|
538
|
+
let latest;
|
|
539
|
+
for (const row of history) {
|
|
540
|
+
if (row.instance_id !== instanceId)
|
|
541
|
+
continue;
|
|
542
|
+
if (row.fork_checked)
|
|
543
|
+
return false;
|
|
544
|
+
latest = row;
|
|
545
|
+
}
|
|
546
|
+
if (!latest)
|
|
547
|
+
return false;
|
|
548
|
+
const forkedFrom = detection.forkedFrom && detection.forkedFrom !== instanceId ? detection.forkedFrom : undefined;
|
|
549
|
+
appendHistory(coordRoot, {
|
|
550
|
+
instance_id: instanceId,
|
|
551
|
+
name: latest.name,
|
|
552
|
+
kind: latest.kind,
|
|
553
|
+
...(latest.agent_id ? { agent_id: latest.agent_id } : {}),
|
|
554
|
+
source: "fork.detected",
|
|
555
|
+
...(forkedFrom ? { forked_from: forkedFrom } : {}),
|
|
556
|
+
...(detection.fork || forkedFrom || latest.fork ? { fork: true } : {}),
|
|
557
|
+
fork_checked: true,
|
|
558
|
+
ts: new Date().toISOString().replace(/\.\d{3}Z$/, "Z"),
|
|
559
|
+
});
|
|
560
|
+
return true;
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Peer labels for recorded fork relations, keyed by instance id: this
|
|
564
|
+
* session's fork parent and its direct forks. `liveIds` marks which of them
|
|
565
|
+
* are running, so a fork can tell its live parent from its own earlier self.
|
|
566
|
+
*/
|
|
567
|
+
export function forkRelationLabels(coordRoot, instanceId, liveIds) {
|
|
568
|
+
const out = new Map();
|
|
569
|
+
const parent = readForkParent(coordRoot, instanceId);
|
|
570
|
+
if (parent) {
|
|
571
|
+
out.set(parent.instance_id, liveIds.has(parent.instance_id) ? "your fork parent, live" : "your fork parent");
|
|
572
|
+
}
|
|
573
|
+
for (const child of readForkChildren(coordRoot, instanceId))
|
|
574
|
+
out.set(child, "your fork");
|
|
575
|
+
return out;
|
|
576
|
+
}
|
|
577
|
+
/** Instance ids recorded as direct forks of <instanceId>. */
|
|
578
|
+
export function readForkChildren(coordRoot, instanceId) {
|
|
579
|
+
const out = new Set();
|
|
580
|
+
for (const row of readHistory(coordRoot)) {
|
|
581
|
+
if (row.forked_from === instanceId && row.instance_id !== instanceId)
|
|
582
|
+
out.add(row.instance_id);
|
|
583
|
+
}
|
|
584
|
+
return out;
|
|
585
|
+
}
|
|
503
586
|
/** One step of recorded fork lineage: the latest row for <instanceId> that
|
|
504
|
-
* carries `forked_from
|
|
587
|
+
* carries `forked_from`. Later rows without lineage (an identity assumption)
|
|
588
|
+
* do not erase it: a session never stops being a fork. */
|
|
505
589
|
export function readForkParent(coordRoot, instanceId) {
|
|
506
590
|
const history = readHistory(coordRoot);
|
|
507
591
|
for (let i = history.length - 1; i >= 0; i--) {
|
|
508
592
|
const row = history[i];
|
|
509
|
-
if (row.instance_id !== instanceId)
|
|
593
|
+
if (row.instance_id !== instanceId || !row.forked_from)
|
|
510
594
|
continue;
|
|
511
|
-
if (
|
|
595
|
+
if (row.forked_from === instanceId)
|
|
512
596
|
return null;
|
|
513
597
|
const parent = resolveName(coordRoot, row.forked_from);
|
|
514
598
|
return { instance_id: row.forked_from, name: parent?.name ?? null };
|
|
@@ -3,7 +3,7 @@ import { randomUUID } from "node:crypto";
|
|
|
3
3
|
import { existsSync, lstatSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
4
4
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { encodeLinkSafeComponent } from "../../lib/local-file-url.js";
|
|
6
|
-
import { findLiveTunnelForOrigin } from "../../lib/tunnel/state.js";
|
|
6
|
+
import { findLiveTunnelForOrigin, tunnelServesPaths } from "../../lib/tunnel/state.js";
|
|
7
7
|
import { resolveWebPort } from "../config.js";
|
|
8
8
|
import { stateFileMode } from "../storage/modes.js";
|
|
9
9
|
import { ARTIFACT_MANIFEST } from "./constants.js";
|
|
@@ -240,8 +240,15 @@ function deliveryLinkBase(repoRoot, environment) {
|
|
|
240
240
|
// dashboard's own origin will answer them. A tunnel sharing this upstream
|
|
241
241
|
// port under another Host serves a different site and would 400 on /browse
|
|
242
242
|
// and /files, so fall back to the local URL rather than publish that host.
|
|
243
|
+
// The same holds for a dashboard tunnel whose path scope leaves out either
|
|
244
|
+
// route: its gate would refuse every link on the card.
|
|
245
|
+
const tunnel = environment.tunnelUrl === undefined
|
|
246
|
+
? findLiveTunnelForOrigin(webPort, `localhost:${webPort}`, repoRoot)
|
|
247
|
+
: null;
|
|
243
248
|
const tunnelUrl = environment.tunnelUrl === undefined
|
|
244
|
-
?
|
|
249
|
+
? tunnel && tunnelServesPaths(tunnel, ["/browse", "/files"])
|
|
250
|
+
? tunnel.url
|
|
251
|
+
: undefined
|
|
245
252
|
: environment.tunnelUrl;
|
|
246
253
|
return (tunnelUrl ?? `http://localhost:${webPort}`).replace(/\/+$/, "");
|
|
247
254
|
}
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* become project records: screenshots, exports, audit dumps, rollback inputs,
|
|
6
6
|
* and similar material. Each direct child of `.harnery/artifacts/` is one
|
|
7
7
|
* managed unit with a small manifest. Cleanup fails closed: only a valid,
|
|
8
|
-
*
|
|
8
|
+
* unheld, inactive, untracked managed unit is deletable, and only when its
|
|
9
|
+
* retention expired or a size rule applies after its idle grace. Explicit
|
|
10
|
+
* removal lets a creating owner delete its reviewed, unheld workspace sooner.
|
|
9
11
|
*/
|
|
10
12
|
import { type ArtifactActivity } from "./activity.js";
|
|
11
13
|
import { ARTIFACT_SCHEMA_VERSION } from "./constants.js";
|
|
@@ -40,10 +42,22 @@ export interface ArtifactHold {
|
|
|
40
42
|
reason: string;
|
|
41
43
|
set_by: ArtifactActor;
|
|
42
44
|
set_at: string;
|
|
45
|
+
/** When the hold lapses unless renewed. Absent only on a persistent hold or
|
|
46
|
+
* a hold recorded before holds expired; the latter stays in force. */
|
|
47
|
+
expires_at?: string;
|
|
48
|
+
/** Set by embedding hosts whose hold mirrors an external lease. Never lapses. */
|
|
49
|
+
persistent?: true;
|
|
43
50
|
}
|
|
44
51
|
export interface ArtifactHoldInput {
|
|
45
52
|
id: string;
|
|
46
53
|
reason: string;
|
|
54
|
+
/** Hold lifetime in days (1 to 365); defaults to `artifacts.hold_days`. */
|
|
55
|
+
days?: number;
|
|
56
|
+
/** Hold lifetime in minutes (1 to 525,600); replaces `days`. */
|
|
57
|
+
minutes?: number;
|
|
58
|
+
/** For a hold that mirrors an external lease, such as an open checkout with
|
|
59
|
+
* unsynchronized work. The hold never lapses; its owner must remove it. */
|
|
60
|
+
persistent?: boolean;
|
|
47
61
|
}
|
|
48
62
|
export declare function artifactCapabilities(): {
|
|
49
63
|
readonly schema_version: 2;
|
|
@@ -53,6 +67,12 @@ export declare function artifactCapabilities(): {
|
|
|
53
67
|
readonly explicit_v1_migration: true;
|
|
54
68
|
readonly minute_retention: true;
|
|
55
69
|
readonly discard_after_review: true;
|
|
70
|
+
readonly owner_scoped_remove: true;
|
|
71
|
+
readonly allow_big_after_create: true;
|
|
72
|
+
readonly hold_expiry: true;
|
|
73
|
+
readonly persistent_holds: true;
|
|
74
|
+
readonly held_budget: true;
|
|
75
|
+
readonly disk_free_report: true;
|
|
56
76
|
};
|
|
57
77
|
export type ArtifactClassification = "managed-held" | "managed-active" | "managed-current" | "managed-expired" | "managed-oversize" | "managed-over-budget" | "managed-tracked" | "invalid-manifest" | "unmanaged" | "symlink" | "unknown";
|
|
58
78
|
export interface ArtifactInventoryEntry {
|
|
@@ -62,7 +82,11 @@ export interface ArtifactInventoryEntry {
|
|
|
62
82
|
classification: ArtifactClassification;
|
|
63
83
|
reason: string;
|
|
64
84
|
action: "keep" | "would-delete" | "deleted";
|
|
85
|
+
/** Disk use: allocated blocks, each hard-linked file counted once. Every
|
|
86
|
+
* size rule reads this figure. */
|
|
65
87
|
bytes: number | null;
|
|
88
|
+
/** Sum of file lengths. A sparse file makes this larger than `bytes`. */
|
|
89
|
+
apparent_bytes: number | null;
|
|
66
90
|
artifact_id: string | null;
|
|
67
91
|
slug: string | null;
|
|
68
92
|
created_at: string | null;
|
|
@@ -70,6 +94,11 @@ export interface ArtifactInventoryEntry {
|
|
|
70
94
|
expires_at: string | null;
|
|
71
95
|
owner_instance_id: string | null;
|
|
72
96
|
oversize_acknowledged: boolean;
|
|
97
|
+
/** Latest file change, owner heartbeat, renewal, or release. Size rules wait
|
|
98
|
+
* `artifacts.idle_grace_hours` past this before they may delete. */
|
|
99
|
+
idle_since: string | null;
|
|
100
|
+
/** Advice for a unit that a size rule will delete once its grace ends. */
|
|
101
|
+
warning: string | null;
|
|
73
102
|
}
|
|
74
103
|
export interface ArtifactCreateInput {
|
|
75
104
|
slug: string;
|
|
@@ -131,11 +160,26 @@ export declare function showArtifact(repoRoot: string, ref: string, opts?: {
|
|
|
131
160
|
export declare function renewArtifact(repoRoot: string, ref: string, days: number | {
|
|
132
161
|
minutes: number;
|
|
133
162
|
}, reason: string, input?: ArtifactMutationInput): ArtifactManifestV2;
|
|
163
|
+
/**
|
|
164
|
+
* Record the `--big` acknowledgement on an existing workspace, for work that
|
|
165
|
+
* turns out larger than expected. Unlike a hold, it leaves expiry in force and
|
|
166
|
+
* exempts the unit only from the per-bundle ceiling. Idempotent.
|
|
167
|
+
*/
|
|
168
|
+
export declare function allowBigArtifact(repoRoot: string, ref: string, input?: ArtifactMutationInput): ArtifactManifestV2;
|
|
134
169
|
export declare function releaseArtifact(repoRoot: string, ref: string, input?: ArtifactMutationInput): ArtifactManifestV2;
|
|
135
170
|
/** Retire reviewed evidence without deleting it or extending an earlier deadline. */
|
|
136
171
|
export declare function discardArtifact(repoRoot: string, ref: string, reason: string, input?: ArtifactMutationInput & {
|
|
137
172
|
minutes?: number;
|
|
138
173
|
}): ArtifactManifestV2;
|
|
174
|
+
export interface ArtifactRemovalResult {
|
|
175
|
+
entry: ArtifactInventoryEntry;
|
|
176
|
+
reason: string;
|
|
177
|
+
deleted: boolean;
|
|
178
|
+
}
|
|
179
|
+
/** Preview or immediately remove one reviewed workspace belonging to this actor. */
|
|
180
|
+
export declare function removeArtifact(repoRoot: string, ref: string, reason: string, input?: ArtifactMutationInput & {
|
|
181
|
+
yes?: boolean;
|
|
182
|
+
}): ArtifactRemovalResult;
|
|
139
183
|
/** Advice only: a successful check does not establish that its evidence is disposable. */
|
|
140
184
|
export declare function artifactReviewGuidance(repoRoot: string, ref: string): string;
|
|
141
185
|
export declare function holdArtifact(repoRoot: string, ref: string, input: ArtifactHoldInput & {
|
|
@@ -160,6 +204,87 @@ export declare function cleanArtifacts(repoRoot: string, opts?: {
|
|
|
160
204
|
now?: Date;
|
|
161
205
|
freshnessSeconds?: number;
|
|
162
206
|
}): ArtifactInventoryEntry[];
|
|
207
|
+
export interface ArtifactDeletionRecord {
|
|
208
|
+
deleted_at: string;
|
|
209
|
+
name: string;
|
|
210
|
+
relative_path: string;
|
|
211
|
+
artifact_id: string | null;
|
|
212
|
+
slug: string | null;
|
|
213
|
+
owner_instance_id: string | null;
|
|
214
|
+
classification: ArtifactClassification;
|
|
215
|
+
reason: string;
|
|
216
|
+
bytes: number | null;
|
|
217
|
+
apparent_bytes: number | null;
|
|
218
|
+
expires_at: string | null;
|
|
219
|
+
idle_since: string | null;
|
|
220
|
+
removed_by?: ArtifactActor;
|
|
221
|
+
}
|
|
222
|
+
/** Deletions the cleanup recorded, oldest first. Unreadable lines are skipped. */
|
|
223
|
+
export declare function readArtifactDeletions(repoRoot: string, opts?: {
|
|
224
|
+
since?: Date;
|
|
225
|
+
}): ArtifactDeletionRecord[];
|
|
226
|
+
export interface ArtifactHeldSummary {
|
|
227
|
+
name: string;
|
|
228
|
+
bytes: number;
|
|
229
|
+
holds: Array<{
|
|
230
|
+
id: string;
|
|
231
|
+
/** The hold owner's name when recorded, otherwise its instance id. */
|
|
232
|
+
set_by: string;
|
|
233
|
+
expires_at: string | null;
|
|
234
|
+
persistent: boolean;
|
|
235
|
+
}>;
|
|
236
|
+
}
|
|
237
|
+
/** Last full-inventory measurement, read by commands that must not walk the store. */
|
|
238
|
+
export interface ArtifactUsageCache {
|
|
239
|
+
measured_at: string;
|
|
240
|
+
bytes: number;
|
|
241
|
+
held_bytes: number;
|
|
242
|
+
free_bytes: number | null;
|
|
243
|
+
largest_holds: ArtifactHeldSummary[];
|
|
244
|
+
}
|
|
245
|
+
export interface ArtifactUsageReport {
|
|
246
|
+
held_bytes: number;
|
|
247
|
+
max_held_bytes: number;
|
|
248
|
+
held_over_budget: boolean;
|
|
249
|
+
largest_holds: ArtifactHeldSummary[];
|
|
250
|
+
free_bytes: number | null;
|
|
251
|
+
min_free_bytes: number;
|
|
252
|
+
low_disk: boolean;
|
|
253
|
+
/** Plain sentences for a human; empty when nothing needs attention. */
|
|
254
|
+
warnings: string[];
|
|
255
|
+
}
|
|
256
|
+
/** Bytes available to this user on the artifact store's filesystem, or null. */
|
|
257
|
+
export declare function artifactFreeBytes(repoRoot: string): number | null;
|
|
258
|
+
/**
|
|
259
|
+
* Held bytes, free disk, and warnings for one full inventory. Held work is
|
|
260
|
+
* never deleted: the held budget and the disk floor only report. Records the
|
|
261
|
+
* measurement in `.harnery/artifact-usage.json` so `create` and `hold` can
|
|
262
|
+
* warn without walking the store.
|
|
263
|
+
*/
|
|
264
|
+
export declare function artifactUsageReport(repoRoot: string, rows: ArtifactInventoryEntry[], opts?: {
|
|
265
|
+
now?: Date;
|
|
266
|
+
}): ArtifactUsageReport;
|
|
267
|
+
/** The cached measurement, or null when none was recorded or it is unreadable. */
|
|
268
|
+
export declare function readArtifactUsageCache(repoRoot: string): ArtifactUsageCache | null;
|
|
269
|
+
/**
|
|
270
|
+
* Usage for commands that must stay cheap (`create`, `hold`): held bytes from
|
|
271
|
+
* the last full inventory, free disk measured now. Never walks the store.
|
|
272
|
+
*/
|
|
273
|
+
export declare function artifactQuickUsage(repoRoot: string): {
|
|
274
|
+
usage: {
|
|
275
|
+
held_bytes: number | null;
|
|
276
|
+
held_measured_at: string | null;
|
|
277
|
+
free_bytes: number | null;
|
|
278
|
+
};
|
|
279
|
+
low_disk: boolean;
|
|
280
|
+
min_free_bytes: number;
|
|
281
|
+
warnings: string[];
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Refuse new large work when the artifact store's disk is below its floor.
|
|
285
|
+
* `create --big` calls this; `--allow-low-disk` is the deliberate override.
|
|
286
|
+
*/
|
|
287
|
+
export declare function assertArtifactDiskFloor(repoRoot: string): void;
|
|
163
288
|
export interface ArtifactAutoCleanResult {
|
|
164
289
|
ran: boolean;
|
|
165
290
|
reason: "swept" | "partial" | "failed" | "disabled" | "fresh" | "no-root";
|
|
@@ -171,9 +296,11 @@ export interface ArtifactAutoCleanResult {
|
|
|
171
296
|
*
|
|
172
297
|
* Retention was previously enforced only when someone remembered to run
|
|
173
298
|
* `artifacts clean --yes`, so expired workspaces accumulated indefinitely on
|
|
174
|
-
* busy hosts. This runs the exact same guarded deletion
|
|
175
|
-
*
|
|
176
|
-
*
|
|
299
|
+
* busy hosts. This runs the exact same guarded deletion as `artifacts clean
|
|
300
|
+
* --yes` (expired entries, plus oversize or over-budget entries idle past
|
|
301
|
+
* `artifacts.idle_grace_hours`, each re-classified immediately before removal
|
|
302
|
+
* and recorded in the deletion log; unmanaged and legacy directories are never
|
|
303
|
+
* touched) at most once per
|
|
177
304
|
* interval (default 1h after completion, 1m between partial/failed slices).
|
|
178
305
|
* The owner-aware lock serializes callers; interrupted attempts can retry.
|
|
179
306
|
* Disable with `artifacts.auto_clean: false` or
|
|
@@ -215,4 +342,13 @@ export declare function repairArtifactActivity(repoRoot: string, opts?: {
|
|
|
215
342
|
yes?: boolean;
|
|
216
343
|
now?: Date;
|
|
217
344
|
}): ArtifactActivityRepairEntry[];
|
|
345
|
+
/**
|
|
346
|
+
* Split holds into those still in force and those that lapsed. A persistent
|
|
347
|
+
* hold never lapses. A hold recorded before holds expired has no `expires_at`
|
|
348
|
+
* and stays in force until its owner removes or renews it.
|
|
349
|
+
*/
|
|
350
|
+
export declare function artifactHoldState(manifest: Pick<ArtifactManifestV2, "holds">, now?: Date): {
|
|
351
|
+
active: ArtifactHold[];
|
|
352
|
+
lapsed: ArtifactHold[];
|
|
353
|
+
};
|
|
218
354
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/artifacts/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/artifacts/index.ts"],"names":[],"mappings":"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"}
|