harnery 0.41.0 → 0.42.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.js +3 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +9 -1
- 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.map +1 -1
- package/dist/commands/tunnel.js +82 -2
- 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/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +2 -0
- 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/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/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 +45 -6
- 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/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/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/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 +20 -1
- 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/state.d.ts +5 -0
- package/dist/lib/tunnel/state.d.ts.map +1 -1
- package/dist/lib/tunnel/state.js +17 -3
- package/package.json +6 -1
- package/schemas/config.schema.json +91 -0
- package/src/commander.ts +19 -0
- package/src/commands/agents.ts +14 -0
- 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 +102 -2
- 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/session-context.ts +1 -0
- package/src/core/agents/state/live-coordination-view.ts +73 -0
- 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/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 +47 -6
- package/src/core/hooks/run-markers.ts +132 -0
- 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/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/error-page.ts +25 -9
- package/src/lib/tunnel/gate.ts +22 -1
- package/src/lib/tunnel/path-scope.ts +73 -0
- package/src/lib/tunnel/state.ts +20 -3
|
@@ -41,6 +41,18 @@ export const BUILTIN_ADAPTER_PROFILES = {
|
|
|
41
41
|
modelFamily: "claude",
|
|
42
42
|
effortValues: ["low", "medium", "high", "xhigh", "max"],
|
|
43
43
|
verified: { date: "2026-08-18", version: "2.1.233 (Claude Code)" },
|
|
44
|
+
// Checked against 2.1.283 (ADR 0192). Claude Code has no sandbox mode flag;
|
|
45
|
+
// its permission mode and its optional Bash sandbox are separate, so full
|
|
46
|
+
// access needs both: bypass permissions, and a settings layer that turns
|
|
47
|
+
// the Bash sandbox off in case a user or project settings file enabled it.
|
|
48
|
+
fullAccess: {
|
|
49
|
+
argv: [
|
|
50
|
+
"--permission-mode",
|
|
51
|
+
"bypassPermissions",
|
|
52
|
+
"--settings",
|
|
53
|
+
'{"sandbox":{"enabled":false}}',
|
|
54
|
+
],
|
|
55
|
+
},
|
|
44
56
|
capabilities: capabilities({
|
|
45
57
|
effortSelection: supported("Mapped to `--effort <level>`."),
|
|
46
58
|
maxTurns: supported("Mapped to `--max-turns <n>`."),
|
|
@@ -70,6 +82,9 @@ export const BUILTIN_ADAPTER_PROFILES = {
|
|
|
70
82
|
modes: { "read-only": "read-only", "workspace-write": "workspace-write" },
|
|
71
83
|
writableRoots: true,
|
|
72
84
|
},
|
|
85
|
+
// Checked against codex-cli 0.155.1 (ADR 0192): `--sandbox` accepts
|
|
86
|
+
// danger-full-access, and `codex exec` never prompts for approval.
|
|
87
|
+
fullAccess: { argv: ["--sandbox", "danger-full-access"] },
|
|
73
88
|
capabilities: capabilities({
|
|
74
89
|
effortSelection: supported('Mapped to `-c model_reasoning_effort="<level>"`.'),
|
|
75
90
|
filesystemPolicyProjection: supported("Mode renders to --sandbox; writable roots to sandbox_workspace_write.writable_roots."),
|
|
@@ -93,6 +108,10 @@ export const BUILTIN_ADAPTER_PROFILES = {
|
|
|
93
108
|
modelFamily: "multi",
|
|
94
109
|
effortValues: [],
|
|
95
110
|
verified: { date: "2026-09-20", version: "2026.09.18-9a7762b" },
|
|
111
|
+
// Checked against 2026.09.26-dd393fe (ADR 0192): `--sandbox disabled`
|
|
112
|
+
// overrides the configured sandbox. Cursor carries effort inside the model
|
|
113
|
+
// id, so a full-access floor for it names exact model ids.
|
|
114
|
+
fullAccess: { argv: ["--sandbox", "disabled"] },
|
|
96
115
|
capabilities: capabilities({
|
|
97
116
|
effortSelection: unsupported("Cursor embeds effort in some parameterized model ids; Harnery does not rewrite model ids."),
|
|
98
117
|
maxTurns: unsupported("cursor-agent exposes no turn-ceiling flag."),
|
|
@@ -118,7 +137,9 @@ export const BUILTIN_ADAPTER_PROFILES = {
|
|
|
118
137
|
authModel: "own-auth",
|
|
119
138
|
modelFamily: "multi",
|
|
120
139
|
// Model reasoning is selected through the `provider/model#variant` id;
|
|
121
|
-
// OpenCode exposes no separate effort dial for Harnery to map.
|
|
140
|
+
// OpenCode exposes no separate effort dial for Harnery to map. It also has
|
|
141
|
+
// no vendor sandbox to remove, so it declares no full-access rendering and
|
|
142
|
+
// a worker on it is never granted one (ADR 0192).
|
|
122
143
|
effortValues: [],
|
|
123
144
|
verified: { date: "2026-09-20", version: "opencode v2.0.11" },
|
|
124
145
|
capabilities: capabilities({
|
|
@@ -42,6 +42,15 @@ export interface AdapterProfile {
|
|
|
42
42
|
/** How this adapter projects host filesystem policy into the vendor's own
|
|
43
43
|
* sandbox (ADR 0039). Absent means it cannot project any of it. */
|
|
44
44
|
sandboxProjection?: AdapterSandboxProjection;
|
|
45
|
+
/** Vendor-native arguments that launch a worker with no vendor sandbox
|
|
46
|
+
* (ADR 0192). Absent means the adapter has no distinguishable full-access
|
|
47
|
+
* mode, so a worker on it never qualifies for one. */
|
|
48
|
+
fullAccess?: AdapterFullAccessRendering;
|
|
49
|
+
}
|
|
50
|
+
/** How an adapter renders an unsandboxed launch (ADR 0192). The spawner emits
|
|
51
|
+
* exactly these arguments, so the declaration and the argv cannot drift. */
|
|
52
|
+
export interface AdapterFullAccessRendering {
|
|
53
|
+
argv: readonly string[];
|
|
45
54
|
}
|
|
46
55
|
/** Fully planned child invocation. `resultFile` is used by adapters such as
|
|
47
56
|
* Codex that deliver the authoritative final answer out-of-band. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE/E;uDACuD;AACvD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpF,eAAO,MAAM,6BAA6B,2TAoBhC,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,iBAAiB,CAAC;IAC3B;iFAC6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAC;AAEtF;;;0DAG0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9D,iEAAiE;IACjE,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,SAAS,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,EAAE,UAAU,CAAC;IACtB,WAAW,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;IACxC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,YAAY,EAAE,mBAAmB,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C;uEACmE;IACnE,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/agents/cli.js
CHANGED
|
@@ -279,12 +279,19 @@ async function handleStateAction(root, action, rest) {
|
|
|
279
279
|
}
|
|
280
280
|
catch (error) {
|
|
281
281
|
const detail = error instanceof Error ? error.message : String(error);
|
|
282
|
-
// A missing heartbeat
|
|
283
|
-
// while its process lived on
|
|
284
|
-
//
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
282
|
+
// A missing heartbeat usually means the session's generation ended
|
|
283
|
+
// while its process lived on, so name the reopen command (ADR 0088).
|
|
284
|
+
// A still-live generation whose authority the ledger withholds looks
|
|
285
|
+
// the same here; name its diagnostics instead, since reopen cannot apply.
|
|
286
|
+
const { describeLiveAuthorityBlockV3, liveAuthorityBlockHintV3, liveAuthorityBlockV3 } = await import("./state/live-coordination-view.js");
|
|
287
|
+
const block = detail.includes("heartbeat_missing:")
|
|
288
|
+
? liveAuthorityBlockV3(root, owner)
|
|
289
|
+
: null;
|
|
290
|
+
const hint = block
|
|
291
|
+
? `; ${describeLiveAuthorityBlockV3(block)}; ${liveAuthorityBlockHintV3(resolveBinName(root))}`
|
|
292
|
+
: detail.includes("heartbeat_missing:")
|
|
293
|
+
? `; run \`${resolveBinName(root)} agents lifecycle active\` to open a fresh generation for this continuing session`
|
|
294
|
+
: "";
|
|
288
295
|
process.stderr.write(`agent-coord set-task: V3 authority refused (${detail})${hint}\n`);
|
|
289
296
|
return 1;
|
|
290
297
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAyC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAM1E,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAoB3F,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;+BAC2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAyC,QAAQ,EAAE,MAAM,SAAS,CAAC;AAM1E,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAoB3F,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;+BAC2B;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAyF7D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACpC,IAAI,CAUN;AAkID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBvD;AA0DD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAiDlF;AAED;;;GAGG;AACH,eAAO,MAAM,uBAAuB,iBAAW,CAAC"}
|
|
@@ -93,6 +93,8 @@ export function renderSessionContext(opts) {
|
|
|
93
93
|
bits.push(`missing: ${d.missing.map((m) => m.subcommand).join(", ")}`);
|
|
94
94
|
if (d.orphans.length > 0)
|
|
95
95
|
bits.push(`orphaned: ${d.orphans.join(", ")}`);
|
|
96
|
+
if (d.stale.length > 0)
|
|
97
|
+
bits.push(`outdated: ${d.stale.map((m) => m.subcommand).join(", ")}`);
|
|
96
98
|
return ` - ${d.settingsFile} — ${bits.join("; ")}`;
|
|
97
99
|
});
|
|
98
100
|
messages.push(`Harnery hook wiring is out of date${verPart}: an upgrade changed the hook set but the adapter ` +
|
|
@@ -26,4 +26,24 @@ export declare function isCurrentV3HeartbeatCache(cache: Heartbeat | null | unde
|
|
|
26
26
|
export declare function projectHeartbeatV3(coordRoot: string, generation: CoordinationGenerationViewV3, cache: Heartbeat | undefined, nativeInstanceId: string | undefined, parent?: CoordinationGenerationViewV3): V3HeartbeatMaterialization;
|
|
27
27
|
export declare function observedAdapterV3(generation: CoordinationGenerationViewV3): string | undefined;
|
|
28
28
|
export declare function isAdapterV3(value: string | undefined): value is EventAdapterIdV3;
|
|
29
|
+
/** Why a still-live V3 generation has lost coordination authority. */
|
|
30
|
+
export interface LiveAuthorityBlockV3 {
|
|
31
|
+
generation_id: string;
|
|
32
|
+
scope: "generation" | "ledger";
|
|
33
|
+
diagnostics: {
|
|
34
|
+
code: string;
|
|
35
|
+
event_id?: string;
|
|
36
|
+
}[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Explain an authority refusal for a generation that is still live. Callers
|
|
40
|
+
* reach this after a lookup came back empty; without it the caller sees only
|
|
41
|
+
* "missing", which reads like an ended session and points at a reopen that
|
|
42
|
+
* cannot apply. Returns null when no live generation exists or nothing blocks.
|
|
43
|
+
*/
|
|
44
|
+
export declare function liveAuthorityBlockV3(coordRoot: string, nativeInstanceId: string): LiveAuthorityBlockV3 | null;
|
|
45
|
+
/** One-line description of a live authority block, naming codes and events. */
|
|
46
|
+
export declare function describeLiveAuthorityBlockV3(block: LiveAuthorityBlockV3): string;
|
|
47
|
+
/** Recovery pointer for a live authority block, in place of the reopen hint. */
|
|
48
|
+
export declare function liveAuthorityBlockHintV3(binName: string): string;
|
|
29
49
|
//# sourceMappingURL=live-coordination-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-coordination-view.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/live-coordination-view.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EACL,KAAK,4BAA4B,EAIlC,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,uBAAuB,CAAC;AAGtE;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,SAAS;IAC3D,cAAc,EAAE,CAAC,CAAC;IAClB,cAAc,EAAE,QAAQ,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,OAAO,MAAM,EAAE,CAAC;IAClC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;CAClC;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,EAAE,CA2BxF;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,0BAA0B,GAAG,IAAI,CAuBnC;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,gBAAgB,GAAG,IAAI,CAWzB;AA8BD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EACnC,UAAU,EAAE,4BAA4B,GACvC,KAAK,IAAI,SAAS,CAMpB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,4BAA4B,EACxC,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,MAAM,CAAC,EAAE,4BAA4B,GACpC,0BAA0B,CAuD5B;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,4BAA4B,GAAG,MAAM,GAAG,SAAS,CAG9F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,gBAAgB,CAEhF"}
|
|
1
|
+
{"version":3,"file":"live-coordination-view.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/live-coordination-view.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EACL,KAAK,4BAA4B,EAIlC,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,uBAAuB,CAAC;AAGtE;;;GAGG;AACH,MAAM,WAAW,0BAA2B,SAAQ,SAAS;IAC3D,cAAc,EAAE,CAAC,CAAC;IAClB,cAAc,EAAE,QAAQ,MAAM,EAAE,CAAC;IACjC,gBAAgB,EAAE,OAAO,MAAM,EAAE,CAAC;IAClC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;CAClC;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,EAAE,CA2BxF;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,0BAA0B,GAAG,IAAI,CAuBnC;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,gBAAgB,GAAG,IAAI,CAWzB;AA8BD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EACnC,UAAU,EAAE,4BAA4B,GACvC,KAAK,IAAI,SAAS,CAMpB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,4BAA4B,EACxC,KAAK,EAAE,SAAS,GAAG,SAAS,EAC5B,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,MAAM,CAAC,EAAE,4BAA4B,GACpC,0BAA0B,CAuD5B;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,4BAA4B,GAAG,MAAM,GAAG,SAAS,CAG9F;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,gBAAgB,CAEhF;AAWD,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAC;IAC/B,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,oBAAoB,GAAG,IAAI,CA2B7B;AAED,+EAA+E;AAC/E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAiBhF;AAED,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKhE"}
|
|
@@ -159,3 +159,63 @@ function observedModel(generation) {
|
|
|
159
159
|
function isLifecycleState(value) {
|
|
160
160
|
return value === "active" || value === "blocked" || value === "done";
|
|
161
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Explain an authority refusal for a generation that is still live. Callers
|
|
164
|
+
* reach this after a lookup came back empty; without it the caller sees only
|
|
165
|
+
* "missing", which reads like an ended session and points at a reopen that
|
|
166
|
+
* cannot apply. Returns null when no live generation exists or nothing blocks.
|
|
167
|
+
*/
|
|
168
|
+
export function liveAuthorityBlockV3(coordRoot, nativeInstanceId) {
|
|
169
|
+
let view;
|
|
170
|
+
try {
|
|
171
|
+
if (observeLiveEventLedgerRouteV3(coordRoot).state === "blocked")
|
|
172
|
+
return null;
|
|
173
|
+
view = readCoordinationViewV3(coordRoot);
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
const generation = view.instances[liveInstanceIdV3(nativeInstanceId)];
|
|
179
|
+
if (generation?.phase !== "live" || generation.authority_eligible)
|
|
180
|
+
return null;
|
|
181
|
+
const own = (view.diagnostics_by_generation[generation.generation_id] ?? []).filter((diagnostic) => diagnostic.authority_blocking);
|
|
182
|
+
const blocking = own.length
|
|
183
|
+
? own
|
|
184
|
+
: view.global_diagnostics.filter((diagnostic) => diagnostic.authority_blocking);
|
|
185
|
+
if (!blocking.length)
|
|
186
|
+
return null;
|
|
187
|
+
return {
|
|
188
|
+
generation_id: generation.generation_id,
|
|
189
|
+
scope: own.length ? "generation" : "ledger",
|
|
190
|
+
diagnostics: blocking.map((diagnostic) => ({
|
|
191
|
+
code: diagnostic.source_code
|
|
192
|
+
? `${diagnostic.code}:${diagnostic.source_code}`
|
|
193
|
+
: diagnostic.code,
|
|
194
|
+
...(diagnostic.event_id ? { event_id: diagnostic.event_id } : {}),
|
|
195
|
+
})),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/** One-line description of a live authority block, naming codes and events. */
|
|
199
|
+
export function describeLiveAuthorityBlockV3(block) {
|
|
200
|
+
const byCode = new Map();
|
|
201
|
+
for (const { code, event_id } of block.diagnostics) {
|
|
202
|
+
const events = byCode.get(code) ?? [];
|
|
203
|
+
if (event_id)
|
|
204
|
+
events.push(event_id);
|
|
205
|
+
byCode.set(code, events);
|
|
206
|
+
}
|
|
207
|
+
const parts = [...byCode].map(([code, events]) => {
|
|
208
|
+
const shown = events.slice(0, 2).join(", ");
|
|
209
|
+
const more = events.length > 2 ? `, +${events.length - 2} more` : "";
|
|
210
|
+
return events.length ? `${code} ×${events.length} (${shown}${more})` : code;
|
|
211
|
+
});
|
|
212
|
+
const where = block.scope === "generation"
|
|
213
|
+
? `the event ledger holds ${block.diagnostics.length} authority-blocking diagnostic(s) for it`
|
|
214
|
+
: "the event ledger holds authority-blocking diagnostics that block every generation";
|
|
215
|
+
return `generation ${block.generation_id} is still live, but ${where}: ${parts.join("; ")}`;
|
|
216
|
+
}
|
|
217
|
+
/** Recovery pointer for a live authority block, in place of the reopen hint. */
|
|
218
|
+
export function liveAuthorityBlockHintV3(binName) {
|
|
219
|
+
return (`\`${binName} agents lifecycle active\` cannot help because it only reopens an ended ` +
|
|
220
|
+
`generation; \`${binName} agents health\` lists the diagnostics`);
|
|
221
|
+
}
|
|
@@ -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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"}
|