harnery 0.45.1 → 0.46.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 +13 -0
- package/dist/commander.d.ts.map +1 -1
- package/dist/commands/admission.d.ts.map +1 -1
- package/dist/commands/admission.js +214 -27
- package/dist/commands/agents.d.ts +4 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +102 -25
- package/dist/commands/browse.d.ts +3 -0
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +172 -8
- package/dist/commands/fetch.js +1 -0
- package/dist/commands/ledger-v3.d.ts.map +1 -1
- package/dist/commands/ledger-v3.js +8 -2
- package/dist/commands/presence.d.ts.map +1 -1
- package/dist/commands/presence.js +40 -0
- package/dist/commands/qa-run.d.ts.map +1 -1
- package/dist/commands/qa-run.js +4 -3
- package/dist/commands/review-pack.d.ts.map +1 -1
- package/dist/commands/review-pack.js +33 -6
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +6 -45
- package/dist/core/agents/coord-client.d.ts.map +1 -1
- package/dist/core/agents/coord-client.js +0 -18
- package/dist/core/agents/index.d.ts +1 -0
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +1 -0
- package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
- package/dist/core/agents/live-authority-v3.js +11 -4
- package/dist/core/agents/render/session-context.d.ts +0 -6
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +1 -6
- package/dist/core/agents/session-events.d.ts.map +1 -1
- package/dist/core/agents/session-events.js +12 -4
- package/dist/core/agents/state/heartbeat-reader.d.ts +3 -0
- package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.d.ts +3 -1
- package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
- package/dist/core/agents/state/live-coordination-view.js +6 -2
- package/dist/core/agents/state/parent-reference-contract.d.ts +16 -0
- package/dist/core/agents/state/parent-reference-contract.d.ts.map +1 -0
- package/dist/core/agents/state/parent-reference-contract.js +1 -0
- package/dist/core/agents/state/parent-reference.d.ts +18 -0
- package/dist/core/agents/state/parent-reference.d.ts.map +1 -0
- package/dist/core/agents/state/parent-reference.js +119 -0
- package/dist/core/agents/state/pidmap.js +2 -2
- package/dist/core/agents/state/proc-start.d.ts +20 -31
- package/dist/core/agents/state/proc-start.d.ts.map +1 -1
- package/dist/core/agents/state/proc-start.js +37 -70
- package/dist/core/agents/state/service-process.d.ts +61 -0
- package/dist/core/agents/state/service-process.d.ts.map +1 -0
- package/dist/core/agents/state/service-process.js +143 -0
- package/dist/core/config.d.ts +39 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +63 -0
- package/dist/core/context/index.d.ts +6 -4
- package/dist/core/context/index.d.ts.map +1 -1
- package/dist/core/context/index.js +194 -256
- package/dist/core/context/observation.d.ts +9 -9
- package/dist/core/context/observation.d.ts.map +1 -1
- package/dist/core/context/observation.js +37 -6
- package/dist/core/diagnostics/path-identity.d.ts +1 -1
- package/dist/core/diagnostics/path-identity.d.ts.map +1 -1
- package/dist/core/diagnostics/path-identity.js +51 -6
- package/dist/core/events/v3/canonical.js +43 -14
- package/dist/core/events/v3/index.d.ts +1 -1
- package/dist/core/events/v3/index.d.ts.map +1 -1
- package/dist/core/events/v3/index.js +1 -1
- package/dist/core/events/v3/producers/recorder.d.ts +34 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +117 -13
- package/dist/core/events/v3/reader.d.ts.map +1 -1
- package/dist/core/events/v3/reader.js +53 -13
- package/dist/core/events/v3/runtime-build.d.ts +14 -0
- package/dist/core/events/v3/runtime-build.d.ts.map +1 -1
- package/dist/core/events/v3/runtime-build.js +44 -0
- package/dist/core/events/v3/validate.d.ts.map +1 -1
- package/dist/core/events/v3/validate.js +36 -1
- package/dist/core/governor/index.d.ts +2 -1
- package/dist/core/governor/index.d.ts.map +1 -1
- package/dist/core/governor/index.js +2 -1
- package/dist/core/governor/service-read.d.ts +3 -10
- package/dist/core/governor/service-read.d.ts.map +1 -1
- package/dist/core/governor/service-read.js +10 -94
- package/dist/core/governor/service.d.ts +3 -7
- package/dist/core/governor/service.d.ts.map +1 -1
- package/dist/core/governor/service.js +17 -182
- package/dist/core/hooks/adapter/native-parent.d.ts +23 -0
- package/dist/core/hooks/adapter/native-parent.d.ts.map +1 -0
- package/dist/core/hooks/adapter/native-parent.js +91 -0
- package/dist/core/hooks/cli.js +79 -4
- package/dist/core/hooks/resolve/owner.d.ts +0 -11
- package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
- package/dist/core/hooks/resolve/owner.js +2 -25
- package/dist/core/hooks/shell-admission.d.ts +84 -0
- package/dist/core/hooks/shell-admission.d.ts.map +1 -0
- package/dist/core/hooks/shell-admission.js +622 -0
- package/dist/core/hooks/shell-commit-tree.d.ts +2 -0
- package/dist/core/hooks/shell-commit-tree.d.ts.map +1 -0
- package/dist/core/hooks/shell-commit-tree.js +104 -0
- package/dist/core/inbox/contract.d.ts +12 -0
- package/dist/core/inbox/contract.d.ts.map +1 -1
- package/dist/core/inbox/contract.js +16 -0
- package/dist/core/inbox/peer-messages.d.ts +41 -16
- package/dist/core/inbox/peer-messages.d.ts.map +1 -1
- package/dist/core/inbox/peer-messages.js +372 -15
- 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 +83 -3
- package/dist/core/inbox/targets.d.ts +17 -3
- package/dist/core/inbox/targets.d.ts.map +1 -1
- package/dist/core/inbox/targets.js +77 -2
- package/dist/core/presence/git.d.ts +18 -12
- package/dist/core/presence/git.d.ts.map +1 -1
- package/dist/core/presence/git.js +32 -38
- package/dist/core/presence/index.d.ts +2 -2
- package/dist/core/presence/index.d.ts.map +1 -1
- package/dist/core/presence/index.js +8 -6
- package/dist/core/presence/mail.d.ts +133 -0
- package/dist/core/presence/mail.d.ts.map +1 -0
- package/dist/core/presence/mail.js +464 -0
- package/dist/core/resources/sampler.js +2 -2
- package/dist/core/resources/service-status.d.ts +2 -14
- package/dist/core/resources/service-status.d.ts.map +1 -1
- package/dist/core/resources/service-status.js +3 -23
- package/dist/core/resources/service.d.ts +3 -7
- package/dist/core/resources/service.d.ts.map +1 -1
- package/dist/core/resources/service.js +12 -101
- package/dist/core/resources/status.d.ts.map +1 -1
- package/dist/core/resources/status.js +3 -2
- package/dist/core/semantic/contract.d.ts +5 -5
- package/dist/core/semantic/service.d.ts.map +1 -1
- package/dist/core/semantic/service.js +9 -2
- package/dist/core/servers/index.d.ts +0 -2
- package/dist/core/servers/index.d.ts.map +1 -1
- package/dist/core/servers/index.js +3 -18
- package/dist/core/storage/modes.d.ts +4 -0
- package/dist/core/storage/modes.d.ts.map +1 -1
- package/dist/core/storage/modes.js +4 -0
- package/dist/core/storage/segments.d.ts.map +1 -1
- package/dist/core/storage/segments.js +5 -4
- package/dist/core/supervisor/service.d.ts +4 -7
- package/dist/core/supervisor/service.d.ts.map +1 -1
- package/dist/core/supervisor/service.js +23 -122
- package/dist/core/supervisor/services.js +2 -2
- package/dist/core/supervisor/status.d.ts +3 -17
- package/dist/core/supervisor/status.d.ts.map +1 -1
- package/dist/core/supervisor/status.js +7 -70
- package/dist/core/workflow/engine.js +2 -1
- package/dist/core/workflow/index.d.ts +3 -4
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +2 -2
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +30 -74
- package/dist/core/workflow/resume-lock.d.ts +17 -0
- package/dist/core/workflow/resume-lock.d.ts.map +1 -0
- package/dist/core/workflow/resume-lock.js +158 -0
- package/dist/core/workflow/run-state.d.ts +0 -21
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +3 -174
- package/dist/core/workflow/workspaces/leases.d.ts +4 -0
- package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/leases.js +1 -1
- package/dist/core/workflow/workspaces/local-git.js +91 -210
- package/dist/core/workflow/workspaces/ownership.d.ts +0 -7
- package/dist/core/workflow/workspaces/ownership.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/ownership.js +3 -130
- package/dist/core/workflow/workspaces/reclaim.d.ts +4 -7
- package/dist/core/workflow/workspaces/reclaim.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/reclaim.js +0 -4
- package/dist/core/workflow/workspaces/recovery.d.ts +1 -1
- package/dist/core/workflow/workspaces/recovery.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/recovery.js +1 -1
- package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
- package/dist/core/workflow/workspaces/state.js +1 -4
- package/dist/lib/admission-history.d.ts +96 -0
- package/dist/lib/admission-history.d.ts.map +1 -0
- package/dist/lib/admission-history.js +196 -0
- package/dist/lib/admission.d.ts +56 -7
- package/dist/lib/admission.d.ts.map +1 -1
- package/dist/lib/admission.js +161 -19
- package/dist/lib/browser/client.d.ts +18 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +100 -12
- package/dist/lib/browser/content-checks.d.ts +3 -1
- package/dist/lib/browser/content-checks.d.ts.map +1 -1
- package/dist/lib/browser/content-checks.js +10 -2
- package/dist/lib/browser/critique.d.ts +32 -0
- package/dist/lib/browser/critique.d.ts.map +1 -1
- package/dist/lib/browser/critique.js +72 -3
- package/dist/lib/browser/geometry.d.ts +2 -0
- package/dist/lib/browser/geometry.d.ts.map +1 -1
- package/dist/lib/browser/geometry.js +61 -15
- package/dist/lib/browser/index.d.ts +1 -1
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +1 -1
- package/dist/lib/browser/page-review-contracts.d.ts +6 -1
- package/dist/lib/browser/page-review-contracts.d.ts.map +1 -1
- package/dist/lib/browser/page-review-contracts.js +6 -1
- package/dist/lib/browser/page-review-judge.d.ts +3 -1
- package/dist/lib/browser/page-review-judge.d.ts.map +1 -1
- package/dist/lib/browser/page-review-judge.js +41 -11
- package/dist/lib/browser/page-review-pack.d.ts +3 -0
- package/dist/lib/browser/page-review-pack.d.ts.map +1 -1
- package/dist/lib/browser/page-review-pack.js +5 -2
- package/dist/lib/browser/qa-run-contracts.d.ts +11 -0
- package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -1
- package/dist/lib/browser/qa-run-contracts.js +11 -4
- package/dist/lib/browser/qa-run.d.ts.map +1 -1
- package/dist/lib/browser/qa-run.js +73 -16
- package/dist/lib/browser/runts.d.ts +4 -2
- package/dist/lib/browser/runts.d.ts.map +1 -1
- package/dist/lib/browser/runts.js +84 -33
- package/dist/lib/browser/windows-chrome.d.ts +14 -0
- package/dist/lib/browser/windows-chrome.d.ts.map +1 -1
- package/dist/lib/browser/windows-chrome.js +42 -0
- package/dist/lib/browser/windows-login-sync.d.ts +110 -0
- package/dist/lib/browser/windows-login-sync.d.ts.map +1 -0
- package/dist/lib/browser/windows-login-sync.js +171 -0
- package/dist/lib/cookies/client.d.ts +30 -5
- package/dist/lib/cookies/client.d.ts.map +1 -1
- package/dist/lib/cookies/client.js +55 -10
- package/dist/lib/cookies/index.d.ts +1 -1
- package/dist/lib/cookies/index.d.ts.map +1 -1
- package/dist/lib/cookies/index.js +1 -1
- package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
- package/dist/lib/docs-metadata-sync.js +41 -2
- package/dist/lib/durable-job.d.ts +8 -0
- package/dist/lib/durable-job.d.ts.map +1 -1
- package/dist/lib/durable-job.js +10 -0
- package/dist/lib/http/client.d.ts +9 -8
- package/dist/lib/http/client.d.ts.map +1 -1
- package/dist/lib/http/client.js +44 -2
- package/dist/lib/instructions/templates.js +4 -4
- package/package.json +2 -2
- package/src/commander.ts +13 -0
- package/src/commands/admission.ts +272 -29
- package/src/commands/agents.ts +132 -27
- package/src/commands/browse.ts +208 -6
- package/src/commands/fetch.ts +1 -0
- package/src/commands/ledger-v3.ts +8 -2
- package/src/commands/presence.ts +49 -0
- package/src/commands/qa-run.ts +4 -3
- package/src/commands/review-pack.ts +41 -5
- package/src/commands/workflow.ts +8 -58
- package/src/core/agents/coord-client.ts +0 -20
- package/src/core/agents/index.ts +6 -0
- package/src/core/agents/live-authority-v3.ts +11 -4
- package/src/core/agents/render/session-context.ts +1 -7
- package/src/core/agents/session-events.ts +18 -3
- package/src/core/agents/state/heartbeat-reader.ts +3 -0
- package/src/core/agents/state/live-coordination-view.ts +13 -6
- package/src/core/agents/state/parent-reference-contract.ts +14 -0
- package/src/core/agents/state/parent-reference.ts +179 -0
- package/src/core/agents/state/pidmap.ts +2 -2
- package/src/core/agents/state/proc-start.ts +41 -69
- package/src/core/agents/state/service-process.ts +217 -0
- package/src/core/config.ts +85 -0
- package/src/core/context/index.ts +207 -272
- package/src/core/context/observation.ts +40 -9
- package/src/core/diagnostics/path-identity.ts +52 -6
- package/src/core/events/v3/canonical.ts +46 -13
- package/src/core/events/v3/index.ts +3 -0
- package/src/core/events/v3/producers/recorder.ts +151 -13
- package/src/core/events/v3/reader.ts +55 -11
- package/src/core/events/v3/runtime-build.ts +62 -0
- package/src/core/events/v3/validate.ts +42 -1
- package/src/core/governor/index.ts +1 -2
- package/src/core/governor/service-read.ts +15 -114
- package/src/core/governor/service.ts +36 -220
- package/src/core/hooks/adapter/native-parent.ts +109 -0
- package/src/core/hooks/cli.ts +83 -4
- package/src/core/hooks/resolve/owner.ts +2 -25
- package/src/core/hooks/shell-admission.ts +634 -0
- package/src/core/hooks/shell-commit-tree.ts +102 -0
- package/src/core/inbox/contract.ts +18 -0
- package/src/core/inbox/peer-messages.ts +501 -15
- package/src/core/inbox/service.ts +108 -3
- package/src/core/inbox/targets.ts +94 -3
- package/src/core/presence/git.ts +45 -37
- package/src/core/presence/index.ts +16 -8
- package/src/core/presence/mail.ts +620 -0
- package/src/core/resources/sampler.ts +3 -2
- package/src/core/resources/service-status.ts +6 -35
- package/src/core/resources/service.ts +23 -133
- package/src/core/resources/status.ts +3 -2
- package/src/core/semantic/service.ts +8 -2
- package/src/core/servers/index.ts +3 -23
- package/src/core/storage/modes.ts +6 -0
- package/src/core/storage/segments.ts +5 -4
- package/src/core/supervisor/service.ts +33 -155
- package/src/core/supervisor/services.ts +2 -2
- package/src/core/supervisor/status.ts +10 -85
- package/src/core/workflow/engine.ts +1 -1
- package/src/core/workflow/index.ts +2 -13
- package/src/core/workflow/proof.ts +35 -83
- package/src/core/workflow/resume-lock.ts +179 -0
- package/src/core/workflow/run-state.ts +3 -207
- package/src/core/workflow/workspaces/leases.ts +1 -1
- package/src/core/workflow/workspaces/local-git.ts +120 -239
- package/src/core/workflow/workspaces/ownership.ts +3 -158
- package/src/core/workflow/workspaces/reclaim.ts +3 -9
- package/src/core/workflow/workspaces/recovery.ts +1 -1
- package/src/core/workflow/workspaces/state.ts +1 -5
- package/src/lib/admission-history.ts +267 -0
- package/src/lib/admission.ts +217 -19
- package/src/lib/browser/client.ts +147 -35
- package/src/lib/browser/content-checks.ts +14 -3
- package/src/lib/browser/critique.ts +113 -3
- package/src/lib/browser/geometry.ts +63 -14
- package/src/lib/browser/index.ts +5 -0
- package/src/lib/browser/page-review-contracts.ts +6 -1
- package/src/lib/browser/page-review-judge.ts +58 -13
- package/src/lib/browser/page-review-pack.ts +13 -2
- package/src/lib/browser/qa-run-contracts.ts +30 -4
- package/src/lib/browser/qa-run.ts +78 -17
- package/src/lib/browser/runts.ts +85 -37
- package/src/lib/browser/windows-chrome.ts +50 -0
- package/src/lib/browser/windows-login-sync.ts +275 -0
- package/src/lib/cookies/client.ts +62 -10
- package/src/lib/cookies/index.ts +3 -0
- package/src/lib/docs-metadata-sync.ts +44 -2
- package/src/lib/durable-job.ts +15 -0
- package/src/lib/http/client.ts +63 -1
- package/src/lib/instructions/templates.ts +4 -4
- package/dist/core/agents/state/process-handle.d.ts +0 -26
- package/dist/core/agents/state/process-handle.d.ts.map +0 -1
- package/dist/core/agents/state/process-handle.js +0 -121
- package/dist/core/workflow/recovery-audit.d.ts +0 -30
- package/dist/core/workflow/recovery-audit.d.ts.map +0 -1
- package/dist/core/workflow/recovery-audit.js +0 -116
- package/src/core/agents/state/process-handle.ts +0 -165
- package/src/core/workflow/recovery-audit.ts +0 -181
package/dist/commander.d.ts
CHANGED
|
@@ -105,6 +105,19 @@ export interface HarneryProgramContext {
|
|
|
105
105
|
* harn standalone skips the callback entirely.
|
|
106
106
|
*/
|
|
107
107
|
extraCookies?: import("./lib/cookies/index.js").ExtraCookies;
|
|
108
|
+
/**
|
|
109
|
+
* When it returns true for a run, `fetch` follows redirects itself so the
|
|
110
|
+
* cookie header, `extraHeaders`, and Set-Cookie persistence apply to every
|
|
111
|
+
* hop instead of only the first request.
|
|
112
|
+
*/
|
|
113
|
+
clientRedirects?: () => boolean;
|
|
114
|
+
/**
|
|
115
|
+
* Called once per `browse` run. Returns the guard that inspects that
|
|
116
|
+
* session's live cookies before each request, after each response, and at
|
|
117
|
+
* close (throwing stops the session and fails the run), or undefined for no
|
|
118
|
+
* guard.
|
|
119
|
+
*/
|
|
120
|
+
cookieGuard?: () => import("./lib/browser/client.js").CookieGuard | undefined;
|
|
108
121
|
/**
|
|
109
122
|
* Host-injected vision-model call for `browse --check-critique`. harnery
|
|
110
123
|
* ships no model client or API key; a consumer wires this to its own
|
package/dist/commander.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commander.d.ts","sourceRoot":"","sources":["../src/commander.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commander.d.ts","sourceRoot":"","sources":["../src/commander.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../src/commands/admission.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"admission.d.ts","sourceRoot":"","sources":["../../src/commands/admission.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAqDnD,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA0BD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AA0JD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA0alF;AAoHD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuIjG"}
|
|
@@ -13,8 +13,9 @@ import { randomUUID } from "node:crypto";
|
|
|
13
13
|
import { closeSync, openSync } from "node:fs";
|
|
14
14
|
import { join } from "node:path";
|
|
15
15
|
import { Option } from "commander";
|
|
16
|
-
import { resolveBinName } from "../core/config.js";
|
|
17
|
-
import { AdmissionTimeoutError, acquireAdmission, admissionBaseDir, admissionStatus, listAdmissionResources, } from "../lib/admission.js";
|
|
16
|
+
import { readAdmissionConfig, resolveBinName } from "../core/config.js";
|
|
17
|
+
import { AdmissionTimeoutError, acquireAdmission, admissionBaseDir, admissionStatus, listAdmissionResources, waitForMemoryPressure, } from "../lib/admission.js";
|
|
18
|
+
import { readAdmissionHistory, resolveAdmissionHistoryDir, summarizeAdmissionHistory, } from "../lib/admission-history.js";
|
|
18
19
|
import { classifyJob, createJobDir, DURABLE_JOB_HEARTBEAT_MS, DURABLE_JOB_LOG_FILENAME, DURABLE_JOB_SCHEMA_VERSION, formatJobAge, jobExitCode, listJobs, readJobDocument, writeJobDocument, writeJobStatus, } from "../lib/durable-job.js";
|
|
19
20
|
import { coordEnv } from "../lib/env.js";
|
|
20
21
|
const LABEL_MAX_CHARS = 80;
|
|
@@ -29,6 +30,82 @@ const DEFAULT_JOBS_LIMIT = 20;
|
|
|
29
30
|
export function jobsBaseDir() {
|
|
30
31
|
return coordEnv("JOBS_DIR") ?? `${admissionBaseDir()}-jobs`;
|
|
31
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Resources this process tree already holds, set on every child that
|
|
35
|
+
* `admission run` starts. A nested run on one of them runs directly.
|
|
36
|
+
*/
|
|
37
|
+
const HELD_ENV = "HARNERY_ADMISSION_HELD";
|
|
38
|
+
function heldResources() {
|
|
39
|
+
return (coordEnv("ADMISSION_HELD") ?? "")
|
|
40
|
+
.split(",")
|
|
41
|
+
.map((name) => name.trim())
|
|
42
|
+
.filter(Boolean);
|
|
43
|
+
}
|
|
44
|
+
/** Run a command with inherited stdio and report how it ended. Never throws. */
|
|
45
|
+
async function runChild(emit, commandArgs, env) {
|
|
46
|
+
const [executable, ...childArgs] = commandArgs;
|
|
47
|
+
try {
|
|
48
|
+
const outcome = await new Promise((resolvePromise, rejectPromise) => {
|
|
49
|
+
const child = spawn(executable, childArgs, {
|
|
50
|
+
stdio: "inherit",
|
|
51
|
+
shell: false,
|
|
52
|
+
env,
|
|
53
|
+
});
|
|
54
|
+
child.on("error", rejectPromise);
|
|
55
|
+
child.on("exit", (code, signal) => resolvePromise({ code, signal }));
|
|
56
|
+
});
|
|
57
|
+
if (outcome.signal !== null) {
|
|
58
|
+
emit.error({
|
|
59
|
+
code: "admission_child_signal",
|
|
60
|
+
message: `${executable} was terminated by signal ${outcome.signal}`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return { exitCode: outcome.code, signal: outcome.signal };
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
emit.error({
|
|
67
|
+
code: "admission_spawn_error",
|
|
68
|
+
message: `cannot run ${executable}: ${describeError(err)}`,
|
|
69
|
+
});
|
|
70
|
+
return { exitCode: 1 };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** Parse "30m", "24h", or "7d" into milliseconds; undefined means invalid. */
|
|
74
|
+
function parseLookback(raw) {
|
|
75
|
+
const match = /^(\d+)([mhd])$/.exec(raw.trim());
|
|
76
|
+
if (!match)
|
|
77
|
+
return undefined;
|
|
78
|
+
const amount = Number(match[1]);
|
|
79
|
+
const unitMs = match[2] === "m" ? 60_000 : match[2] === "h" ? 3_600_000 : 86_400_000;
|
|
80
|
+
return amount > 0 ? amount * unitMs : undefined;
|
|
81
|
+
}
|
|
82
|
+
function describeHistoryGroup(group) {
|
|
83
|
+
const outcomes = Object.entries(group.outcomes)
|
|
84
|
+
.filter(([outcome]) => outcome !== "released")
|
|
85
|
+
.map(([outcome, count]) => `${count} ${outcome}`);
|
|
86
|
+
const hold = group.hold_ms !== null
|
|
87
|
+
? `held p50 ${formatJobAge(group.hold_ms.p50)}, p90 ${formatJobAge(group.hold_ms.p90)}`
|
|
88
|
+
: "no completed holds";
|
|
89
|
+
return (` ${group.label || "(no label)"}: ${group.count} run(s), ${group.queued} queued; ` +
|
|
90
|
+
`waited p50 ${formatJobAge(group.wait_ms.p50)}, p90 ${formatJobAge(group.wait_ms.p90)}, ` +
|
|
91
|
+
`max ${formatJobAge(group.wait_ms.max)}, total ${formatJobAge(group.wait_ms.total)}; ${hold}` +
|
|
92
|
+
(outcomes.length > 0 ? `; ${outcomes.join(", ")}` : ""));
|
|
93
|
+
}
|
|
94
|
+
function describeHistoryRecord(record) {
|
|
95
|
+
const bits = [
|
|
96
|
+
record.outcome,
|
|
97
|
+
`waited ${formatJobAge(record.wait_ms)}`,
|
|
98
|
+
...(record.hold_ms !== undefined ? [`held ${formatJobAge(record.hold_ms)}`] : []),
|
|
99
|
+
...(record.exit_code !== undefined && record.exit_code !== null
|
|
100
|
+
? [`exit ${record.exit_code}`]
|
|
101
|
+
: []),
|
|
102
|
+
...(record.signal ? [`signal ${record.signal}`] : []),
|
|
103
|
+
];
|
|
104
|
+
const behind = record.waited_behind?.length
|
|
105
|
+
? ` (behind: ${record.waited_behind.join(", ")})`
|
|
106
|
+
: "";
|
|
107
|
+
return ` ${record.ended_at} ${record.resource} ${record.label || "(no label)"}: ${bits.join(", ")}${behind}`;
|
|
108
|
+
}
|
|
32
109
|
/** Parse an integer flag with a bounded range; undefined means invalid. */
|
|
33
110
|
function parseBoundedInt(raw, fallback, min, max) {
|
|
34
111
|
if (raw === undefined)
|
|
@@ -147,6 +224,8 @@ export function registerAdmissionCommand(program, emit) {
|
|
|
147
224
|
.option("--capacity <n>", "Concurrent holders this machine should allow (1-32; default 1).")
|
|
148
225
|
.option("--timeout <minutes>", "Maximum admission wait before giving up (1-1440; default 60).")
|
|
149
226
|
.option("--label <text>", "Holder description shown in status listings (default: the command itself).")
|
|
227
|
+
.option("--project-root <dir>", "Read admission settings from this project's .harnery/config.jsonc instead of " +
|
|
228
|
+
"the nearest one (for callers inside a nested checkout).")
|
|
150
229
|
.option("--detach", "Launch the command as a durable job: a detached supervisor holds the slot, " +
|
|
151
230
|
"runs the command, and records the outcome on disk. Prints the job id and " +
|
|
152
231
|
"job directory and returns immediately; losing the client no longer kills " +
|
|
@@ -158,7 +237,8 @@ export function registerAdmissionCommand(program, emit) {
|
|
|
158
237
|
"\nExit codes (--detach): 0 once the job is launched · 1 usage error or " +
|
|
159
238
|
"launch failure. The job's own outcome comes from admission wait.")
|
|
160
239
|
.action(async (commandArgs, opts) => {
|
|
161
|
-
const
|
|
240
|
+
const resourceConfig = readAdmissionConfig(opts.projectRoot)?.resources[opts.resource];
|
|
241
|
+
const capacity = parseBoundedInt(opts.capacity, resourceConfig?.capacity ?? 1, 1, 32);
|
|
162
242
|
if (capacity === undefined) {
|
|
163
243
|
emit.error({
|
|
164
244
|
code: "admission_usage",
|
|
@@ -167,7 +247,7 @@ export function registerAdmissionCommand(program, emit) {
|
|
|
167
247
|
process.exitCode = 1;
|
|
168
248
|
return;
|
|
169
249
|
}
|
|
170
|
-
const timeoutMinutes = parseBoundedInt(opts.timeout, 60, 1, 1440);
|
|
250
|
+
const timeoutMinutes = parseBoundedInt(opts.timeout, resourceConfig?.timeout_minutes ?? 60, 1, 1440);
|
|
171
251
|
if (timeoutMinutes === undefined) {
|
|
172
252
|
emit.error({
|
|
173
253
|
code: "admission_usage",
|
|
@@ -179,6 +259,15 @@ export function registerAdmissionCommand(program, emit) {
|
|
|
179
259
|
const joined = commandArgs.join(" ");
|
|
180
260
|
const label = opts.label ??
|
|
181
261
|
(joined.length > LABEL_MAX_CHARS ? `${joined.slice(0, LABEL_MAX_CHARS - 3)}...` : joined);
|
|
262
|
+
// A nested run on a resource this process tree already holds would wait
|
|
263
|
+
// on its own parent forever, and HARNERY_ADMISSION_SKIP=1 opts one
|
|
264
|
+
// command out on purpose. Both run the command directly.
|
|
265
|
+
const held = heldResources();
|
|
266
|
+
if (coordEnv("ADMISSION_SKIP") === "1" || held.includes(opts.resource)) {
|
|
267
|
+
const result = await runChild(emit, commandArgs, process.env);
|
|
268
|
+
process.exitCode = result.exitCode ?? 1;
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
182
271
|
if (opts.detach) {
|
|
183
272
|
launchDetachedJob(emit, {
|
|
184
273
|
commandArgs,
|
|
@@ -187,9 +276,23 @@ export function registerAdmissionCommand(program, emit) {
|
|
|
187
276
|
label,
|
|
188
277
|
timeoutMinutes,
|
|
189
278
|
json: opts.json === true,
|
|
279
|
+
...(resourceConfig?.defer_on_pressure
|
|
280
|
+
? { deferOnPressure: resourceConfig.defer_on_pressure }
|
|
281
|
+
: {}),
|
|
190
282
|
});
|
|
191
283
|
return;
|
|
192
284
|
}
|
|
285
|
+
let pressureWaitMs = 0;
|
|
286
|
+
const pressure = resourceConfig?.defer_on_pressure;
|
|
287
|
+
if (pressure) {
|
|
288
|
+
pressureWaitMs = await waitForMemoryPressure({
|
|
289
|
+
threshold: pressure.psi_full_avg10,
|
|
290
|
+
maxWaitMs: pressure.max_wait_seconds * 1000,
|
|
291
|
+
onWait: (event) => emit.log(event.gaveUp
|
|
292
|
+
? `memory pressure still ${event.pressure} after ${formatJobAge(event.waitedMs)}; starting anyway: ${label}`
|
|
293
|
+
: `memory pressure ${event.pressure} > ${pressure.psi_full_avg10}; waiting before: ${label}`, "info"),
|
|
294
|
+
});
|
|
295
|
+
}
|
|
193
296
|
const dir = admissionBaseDir();
|
|
194
297
|
let lastWaitMessage = "";
|
|
195
298
|
let handle;
|
|
@@ -197,6 +300,7 @@ export function registerAdmissionCommand(program, emit) {
|
|
|
197
300
|
handle = await acquireAdmission({ dir, resource: opts.resource, capacity }, {
|
|
198
301
|
label,
|
|
199
302
|
timeoutMs: timeoutMinutes * 60_000,
|
|
303
|
+
...(pressureWaitMs > 0 ? { pressureWaitMs } : {}),
|
|
200
304
|
onWait: (info) => {
|
|
201
305
|
const holders = info.holders.map((holder) => holder.label).join(", ") || "none";
|
|
202
306
|
const message = `queued for a ${opts.resource} slot: position ${info.position}, ` +
|
|
@@ -220,35 +324,96 @@ export function registerAdmissionCommand(program, emit) {
|
|
|
220
324
|
}
|
|
221
325
|
throw err;
|
|
222
326
|
}
|
|
223
|
-
const
|
|
327
|
+
const childEnv = {
|
|
328
|
+
...process.env,
|
|
329
|
+
[HELD_ENV]: [...held, opts.resource].join(","),
|
|
330
|
+
};
|
|
331
|
+
let result = {};
|
|
224
332
|
try {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
333
|
+
result = await runChild(emit, commandArgs, childEnv);
|
|
334
|
+
process.exitCode = result.signal ? 1 : (result.exitCode ?? 1);
|
|
335
|
+
}
|
|
336
|
+
finally {
|
|
337
|
+
handle.release(result);
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
// ----------------------------------------------------------------- history
|
|
341
|
+
admission
|
|
342
|
+
.command("history")
|
|
343
|
+
.description("Report finished slot use: how long work queued for each resource, what it " +
|
|
344
|
+
"waited behind, how long holders kept their slots, and which tickets timed " +
|
|
345
|
+
"out or were abandoned by a process that died. Grouped by resource and " +
|
|
346
|
+
"label, most total wait first; --list shows individual records.")
|
|
347
|
+
.option("--resource <name>", "Report one resource instead of all of them.")
|
|
348
|
+
.option("--since <window>", "Look back this far: 30m, 24h, 7d (default 24h).")
|
|
349
|
+
.option("--label <text>", "Keep records whose label contains this text.")
|
|
350
|
+
.option("--list", "List individual records, newest first, after the summary.")
|
|
351
|
+
.option("--limit <n>", "With --list, how many records to show (1-500; default 20).")
|
|
352
|
+
.option("--json", "Emit { history_dir, since, groups: [...], records: [...] } as JSON.")
|
|
353
|
+
.addHelpText("after", "\nHistory is written to $XDG_STATE_HOME/harnery/admission-history (default " +
|
|
354
|
+
"~/.local/state/harnery/admission-history); HARNERY_ADMISSION_HISTORY_DIR " +
|
|
355
|
+
"moves it and HARNERY_ADMISSION_HISTORY=off stops recording." +
|
|
356
|
+
"\nExit codes: 0 always (reporting only) · 1 usage error.")
|
|
357
|
+
.action((opts) => {
|
|
358
|
+
const lookbackMs = parseLookback(opts.since ?? "24h");
|
|
359
|
+
if (lookbackMs === undefined) {
|
|
360
|
+
emit.error({
|
|
361
|
+
code: "admission_usage",
|
|
362
|
+
message: "--since must look like 30m, 24h, or 7d",
|
|
232
363
|
});
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
code: "admission_child_signal",
|
|
236
|
-
message: `${executable} was terminated by signal ${outcome.signal}`,
|
|
237
|
-
});
|
|
238
|
-
process.exitCode = 1;
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
process.exitCode = outcome.code ?? 1;
|
|
364
|
+
process.exitCode = 1;
|
|
365
|
+
return;
|
|
242
366
|
}
|
|
243
|
-
|
|
367
|
+
const limit = parseBoundedInt(opts.limit, 20, 1, 500);
|
|
368
|
+
if (limit === undefined) {
|
|
244
369
|
emit.error({
|
|
245
|
-
code: "
|
|
246
|
-
message:
|
|
370
|
+
code: "admission_usage",
|
|
371
|
+
message: "--limit must be an integer between 1 and 500",
|
|
247
372
|
});
|
|
248
373
|
process.exitCode = 1;
|
|
374
|
+
return;
|
|
249
375
|
}
|
|
250
|
-
|
|
251
|
-
|
|
376
|
+
const historyDir = resolveAdmissionHistoryDir(admissionBaseDir());
|
|
377
|
+
const sinceMs = Date.now() - lookbackMs;
|
|
378
|
+
const records = readAdmissionHistory(historyDir, {
|
|
379
|
+
...(opts.resource !== undefined ? { resource: opts.resource } : {}),
|
|
380
|
+
...(opts.label !== undefined ? { labelContains: opts.label } : {}),
|
|
381
|
+
sinceMs,
|
|
382
|
+
});
|
|
383
|
+
const groups = summarizeAdmissionHistory(records);
|
|
384
|
+
const newest = [...records].reverse().slice(0, limit);
|
|
385
|
+
if (opts.json) {
|
|
386
|
+
emit.data({
|
|
387
|
+
history_dir: historyDir,
|
|
388
|
+
since: new Date(sinceMs).toISOString(),
|
|
389
|
+
groups,
|
|
390
|
+
records: opts.list ? newest : [],
|
|
391
|
+
});
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
if (historyDir === null) {
|
|
395
|
+
emit.log("admission history recording is off (HARNERY_ADMISSION_HISTORY=off)", "info");
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
if (records.length === 0) {
|
|
399
|
+
emit.log(`no admission history since ${new Date(sinceMs).toISOString()}`, "info");
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
let resource = "";
|
|
403
|
+
for (const group of groups.sort((a, b) => a.resource.localeCompare(b.resource))) {
|
|
404
|
+
if (group.resource !== resource) {
|
|
405
|
+
resource = group.resource;
|
|
406
|
+
const inResource = groups.filter((candidate) => candidate.resource === resource);
|
|
407
|
+
const total = inResource.reduce((sum, candidate) => sum + candidate.wait_ms.total, 0);
|
|
408
|
+
emit.log(`${resource}: ${inResource.reduce((sum, candidate) => sum + candidate.count, 0)} ` +
|
|
409
|
+
`run(s), ${formatJobAge(total)} total queue wait`, "info");
|
|
410
|
+
}
|
|
411
|
+
emit.log(describeHistoryGroup(group), "info");
|
|
412
|
+
}
|
|
413
|
+
if (opts.list) {
|
|
414
|
+
emit.log(`latest ${newest.length} record(s):`, "info");
|
|
415
|
+
for (const record of newest)
|
|
416
|
+
emit.log(describeHistoryRecord(record), "info");
|
|
252
417
|
}
|
|
253
418
|
});
|
|
254
419
|
// --------------------------------------------------------------- supervise
|
|
@@ -385,6 +550,7 @@ function launchDetachedJob(emit, options) {
|
|
|
385
550
|
argv: options.commandArgs,
|
|
386
551
|
cwd: process.cwd(),
|
|
387
552
|
created_at: nowIso(),
|
|
553
|
+
...(options.deferOnPressure ? { defer_on_pressure: options.deferOnPressure } : {}),
|
|
388
554
|
};
|
|
389
555
|
writeJobDocument(jobDir, document);
|
|
390
556
|
logFd = openSync(join(jobDir, DURABLE_JOB_LOG_FILENAME), "a");
|
|
@@ -492,6 +658,21 @@ export async function superviseJob(emit, opts) {
|
|
|
492
658
|
signal: state.signal,
|
|
493
659
|
});
|
|
494
660
|
};
|
|
661
|
+
// Defer before queueing, holding no slot, exactly as a foreground run does.
|
|
662
|
+
let pressureWaitMs = 0;
|
|
663
|
+
const pressure = document.defer_on_pressure;
|
|
664
|
+
if (pressure) {
|
|
665
|
+
pressureWaitMs = await waitForMemoryPressure({
|
|
666
|
+
threshold: pressure.psi_full_avg10,
|
|
667
|
+
maxWaitMs: pressure.max_wait_seconds * 1000,
|
|
668
|
+
onWait: (event) => {
|
|
669
|
+
writeJobStatus(jobDir, { ...status, updated_at: nowIso() });
|
|
670
|
+
emit.log(event.gaveUp
|
|
671
|
+
? `memory pressure still ${event.pressure} after ${formatJobAge(event.waitedMs)}; queueing anyway`
|
|
672
|
+
: `memory pressure ${event.pressure} > ${pressure.psi_full_avg10}; waiting before queueing`, "info");
|
|
673
|
+
},
|
|
674
|
+
});
|
|
675
|
+
}
|
|
495
676
|
let handle;
|
|
496
677
|
try {
|
|
497
678
|
handle = await acquireAdmission({
|
|
@@ -501,6 +682,7 @@ export async function superviseJob(emit, opts) {
|
|
|
501
682
|
}, {
|
|
502
683
|
label: document.label,
|
|
503
684
|
timeoutMs: timeoutMinutes * 60_000,
|
|
685
|
+
...(pressureWaitMs > 0 ? { pressureWaitMs } : {}),
|
|
504
686
|
onWait: () => {
|
|
505
687
|
writeJobStatus(jobDir, { ...status, updated_at: nowIso() });
|
|
506
688
|
},
|
|
@@ -533,6 +715,7 @@ export async function superviseJob(emit, opts) {
|
|
|
533
715
|
}, DURABLE_JOB_HEARTBEAT_MS);
|
|
534
716
|
heartbeat.unref?.();
|
|
535
717
|
const [executable, ...childArgs] = document.argv;
|
|
718
|
+
const result = {};
|
|
536
719
|
let logFd;
|
|
537
720
|
try {
|
|
538
721
|
logFd = openSync(join(jobDir, DURABLE_JOB_LOG_FILENAME), "a");
|
|
@@ -540,11 +723,14 @@ export async function superviseJob(emit, opts) {
|
|
|
540
723
|
const child = spawn(executable, childArgs, {
|
|
541
724
|
stdio: ["ignore", logFd, logFd],
|
|
542
725
|
shell: false,
|
|
726
|
+
env: { ...process.env, [HELD_ENV]: [...heldResources(), document.resource].join(",") },
|
|
543
727
|
...(document.cwd ? { cwd: document.cwd } : {}),
|
|
544
728
|
});
|
|
545
729
|
child.on("error", rejectPromise);
|
|
546
730
|
child.on("exit", (code, signal) => resolvePromise({ code, signal }));
|
|
547
731
|
});
|
|
732
|
+
result.exitCode = outcome.code;
|
|
733
|
+
result.signal = outcome.signal;
|
|
548
734
|
finish({ exitCode: outcome.code, signal: outcome.signal });
|
|
549
735
|
process.exitCode = outcome.signal !== null ? 1 : (outcome.code ?? 1);
|
|
550
736
|
}
|
|
@@ -554,12 +740,13 @@ export async function superviseJob(emit, opts) {
|
|
|
554
740
|
message: `cannot run ${executable}: ${describeError(err)}`,
|
|
555
741
|
});
|
|
556
742
|
finish({ exitCode: 1, signal: null });
|
|
743
|
+
result.exitCode = 1;
|
|
557
744
|
process.exitCode = 1;
|
|
558
745
|
}
|
|
559
746
|
finally {
|
|
560
747
|
clearInterval(heartbeat);
|
|
561
748
|
if (logFd !== undefined)
|
|
562
749
|
closeSync(logFd);
|
|
563
|
-
handle.release();
|
|
750
|
+
handle.release(result);
|
|
564
751
|
}
|
|
565
752
|
}
|
|
@@ -17,7 +17,9 @@ import type { EmitContext, HarneryProgramContext } from "../commander.js";
|
|
|
17
17
|
import { nativeSessionIdentity } from "../core/agents/index.js";
|
|
18
18
|
import { type SessionFinalizationRequestV3 } from "../core/agents/session-finalizer-v3.js";
|
|
19
19
|
import { type Heartbeat } from "../core/agents/state/heartbeat-writer.js";
|
|
20
|
+
import { type AgentParentReference } from "../core/agents/state/parent-reference.js";
|
|
20
21
|
import type { EventTypeV3 } from "../core/events/v3/contract.js";
|
|
22
|
+
import { type PeerRecipientResult } from "../core/inbox/peer-messages.js";
|
|
21
23
|
/**
|
|
22
24
|
* Spawn options for agent-coord child processes: pin the coord root the
|
|
23
25
|
* command already resolved (git-superproject-aware via `monorepoRoot()`), so
|
|
@@ -212,4 +214,6 @@ export declare function collectActiveAgentHealth(root: string, nowMs?: number, r
|
|
|
212
214
|
export type HeartbeatCacheIssue = "no-name" | "invalid-heartbeat" | "stale-age";
|
|
213
215
|
/** Classify a parseable heartbeat cache file without conflating age with corruption. */
|
|
214
216
|
export declare function classifyHeartbeatCacheIssue(heartbeat: Pick<Heartbeat, "name" | "last_heartbeat">, nowMs: number, staleAgeMs: number): HeartbeatCacheIssue | null;
|
|
217
|
+
export declare function describeParentReference(reference: AgentParentReference): string;
|
|
218
|
+
export declare function formatPeerRecipientReceipt(recipient: PeerRecipientResult): string;
|
|
215
219
|
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAS1E,OAAO,EAGL,qBAAqB,EAMtB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAKL,KAAK,4BAA4B,EAClC,MAAM,wCAAwC,CAAC;AAMhD,OAAO,EAGL,KAAK,SAAS,EAEf,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAS1E,OAAO,EAGL,qBAAqB,EAMtB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAKL,KAAK,4BAA4B,EAClC,MAAM,wCAAwC,CAAC;AAMhD,OAAO,EAGL,KAAK,SAAS,EAEf,MAAM,0CAA0C,CAAC;AASlD,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,0CAA0C,CAAC;AAkBlD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AA8BjE,OAAO,EACL,KAAK,mBAAmB,EAGzB,MAAM,gCAAgC,CAAC;AAqExC;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,CAErF;AAgFD,OAAO,EAAE,qBAAqB,EAAE,CAAC;AASjC,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,EACtB,cAAc,CAAC,EAAE,qBAAqB,EACtC,OAAO,SAAmB,GACzB,IAAI,CA2YN;AA0ZD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAyO7D;AA23CD,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,SAAa,EAClB,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,mBAAmB,EAA6B,EAC5E,gBAAgB,SAAwB,GACvC;IAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAkBrD;AA0ED,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,WAAW,CAAC;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,IAAI,CAAC;IACb,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,0CAA0C;AAC1C,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,wBAAwB,CAyC1B;AAgUD,MAAM,MAAM,mBAAmB,GAC3B;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACxC;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC7B,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,KAAK,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;YACpB,aAAa,EAAE,MAAM,CAAC;YACtB,OAAO,EAAE,MAAM,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;YACnB;qEACyD;YACzD,SAAS,EAAE,OAAO,CAAC;SACpB,CAAC,CAAC;KACJ,CAAC;IACF,qBAAqB,EAAE,KAAK,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,uBAAuB,EAAE,MAAM,CAAC;KACjC,CAAC,CAAC;IACH,YAAY,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzE,CAAC;IACF,iBAAiB,EAAE;QACjB,sEAAsE;QACtE,KAAK,EAAE,MAAM,CAAC;QACd,uCAAuC;QACvC,WAAW,EAAE,MAAM,CAAC;QACpB,mEAAmE;QACnE,gBAAgB,EAAE,MAAM,CAAC;QACzB,yDAAyD;QACzD,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACjE,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,CAAC,CAAC;QAClF,kEAAkE;QAClE,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC;IACF,sBAAsB,EAAE;QACtB,IAAI,EAAE,OAAO,CAAC;QACd,kBAAkB,EAAE,MAAM,CAAC;QAC3B,oBAAoB,EAAE,MAAM,CAAC;QAC7B,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,aAAa,EAAE,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzF,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAMN;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,mBAAmB,CAyPhG;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA+BhE;AAED;;4DAE4D;AAC5D,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,SAAa,GACjB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,GAAG,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClE,eAAe,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzE,CAqFA;AAeD,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,8BAA8B,CAC5C,iBAAiB,EAAE,SAAS,MAAM,EAAE,EACpC,MAAM,EAAE,IAAI,GACX,MAAM,EAAE,CAGV;AAED,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAiHlF;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,SAAS,4BAA4B,EAAE,EACjD,UAAU,EAAE,MAAM,GACjB,UAAU,EAAE,CAQd;AA8KD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,KAAK,qBAAqB,GAAG;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,KAAK,SAAa,EAClB,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,qBAAqB,EAA6B,EAC9E,gBAAgB,SAAwB,GACvC,wBAAwB,CA0C1B;AAED,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,mBAAmB,GAAG,WAAW,CAAC;AAEhF,wFAAwF;AACxF,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC,EACrD,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,mBAAmB,GAAG,IAAI,CAO5B;AA4xBD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,oBAAoB,GAAG,MAAM,CAI/E;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CAiBjF"}
|