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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA6BnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA6NjF"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { monorepoRoot } from "../core/agents/coord-client.js";
|
|
2
2
|
import { emitEventV3, nativeSessionIdentity, normalizeAdapter, resolveOwner, } from "../core/agents/index.js";
|
|
3
3
|
import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
|
|
4
|
+
import { peerInbox } from "../core/inbox/peer-messages.js";
|
|
4
5
|
import { fetchPresence, publishPresence, readRemoteMachines, relayDaemonStatus, runRelayDaemon, } from "../core/presence/index.js";
|
|
6
|
+
import { importMail, mailStatus, publishMail } from "../core/presence/mail.js";
|
|
5
7
|
import { ageSeconds, applyDetection, clearPresence, formatAge, presenceFilePath, readPresence, writePresence, } from "../lib/presence.js";
|
|
6
8
|
/**
|
|
7
9
|
* `presence`: two related surfaces under one name.
|
|
@@ -98,6 +100,44 @@ export function registerPresenceCommand(program, emit) {
|
|
|
98
100
|
}
|
|
99
101
|
emit.data(r);
|
|
100
102
|
});
|
|
103
|
+
cmd
|
|
104
|
+
.command("mail")
|
|
105
|
+
.description("Show cross-machine peer messages (ADR 0222): this machine's unacknowledged outbox, " +
|
|
106
|
+
"acknowledgements it is publishing, and delivered/expired counts. --sync fetches, " +
|
|
107
|
+
"imports, and publishes first (synchronous; errors report).")
|
|
108
|
+
.option("--sync", "Fetch peers' refs, import mail addressed here, and publish this machine's ref")
|
|
109
|
+
.option("--json", "JSON output")
|
|
110
|
+
.action((opts) => {
|
|
111
|
+
const root = requireRoot(emit);
|
|
112
|
+
let sync;
|
|
113
|
+
if (opts.sync) {
|
|
114
|
+
const fetched = fetchPresence(root, { force: true, sync: true });
|
|
115
|
+
if (fetched.status === "error") {
|
|
116
|
+
emit.error({ code: "fetch_failed", message: fetched.error });
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
const imported = importMail(root, peerInbox(root), { publish: false });
|
|
120
|
+
const published = publishMail(root, { sync: true });
|
|
121
|
+
if (published.status === "error") {
|
|
122
|
+
emit.error({ code: "publish_failed", message: published.error });
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
sync = { imported, published };
|
|
126
|
+
}
|
|
127
|
+
const status = mailStatus(root);
|
|
128
|
+
if (opts.json)
|
|
129
|
+
emit.config({ format: "json" });
|
|
130
|
+
if (opts.json || !process.stdout.isTTY) {
|
|
131
|
+
emit.data({ ...status, ...(sync ? { sync } : {}) });
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
emit.text(`${status.machine}: ${status.outbox.length} waiting for acknowledgement, ` +
|
|
135
|
+
`${status.acks} acknowledgements published, ${status.delivered} delivered, ` +
|
|
136
|
+
`${status.expired} expired\n`);
|
|
137
|
+
for (const m of status.outbox) {
|
|
138
|
+
emit.text(` ${m.message_id} to agent-${m.recipient} on ${m.to_machine} (queued ${m.queued_at})\n`);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
101
141
|
cmd
|
|
102
142
|
.command("relay-daemon")
|
|
103
143
|
.description("Run the relay client daemon in the foreground (normally spawned detached by the hooks " +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qa-run.d.ts","sourceRoot":"","sources":["../../src/commands/qa-run.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"qa-run.d.ts","sourceRoot":"","sources":["../../src/commands/qa-run.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,OAAO,EAAU,MAAM,WAAW,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AA+B1E,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAElD,sDAAsD;AACtD,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAqB/C,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAodN"}
|
package/dist/commands/qa-run.js
CHANGED
|
@@ -11,6 +11,7 @@ import { artifactsRoot } from "../core/artifacts/index.js";
|
|
|
11
11
|
import { resolveBinName, reviewPackAutoCleanEnabled } from "../core/config.js";
|
|
12
12
|
import { createManagedQaOutParent, managedQaReviewGuidance, resolveQaRepoRoot, } from "../core/qa-artifacts.js";
|
|
13
13
|
import { acquireAdmission, admissionBaseDir, admissionStatus } from "../lib/admission.js";
|
|
14
|
+
import { PAGE_REVIEW_MAX_TILE_BUDGET } from "../lib/browser/page-review-contracts.js";
|
|
14
15
|
import { deleteExpiredPacks, PAGE_REVIEW_DEFAULT_RETENTION_MINUTES, } from "../lib/browser/page-review-pack.js";
|
|
15
16
|
import { QA_RUN_JOB_FILENAME, QA_RUN_RESULT_FILENAME, QA_RUN_STATUS_FILENAME, runQaMatrix, } from "../lib/browser/qa-run.js";
|
|
16
17
|
import { QA_RUN_JOB_SCHEMA_VERSION, QA_RUN_STATUS_SCHEMA_VERSION, validateQaRunJob, } from "../lib/browser/qa-run-contracts.js";
|
|
@@ -35,7 +36,7 @@ export function registerQaRunCommand(program, emit, context) {
|
|
|
35
36
|
"always run serially; the judge pool is policy.critique_pool / --pool.")
|
|
36
37
|
.option("--pool <n>", "Vision calls in flight during the judge stage, across every context (1-16; default: " +
|
|
37
38
|
"the provider's own concurrency). Sets policy.critique_pool.")
|
|
38
|
-
.option("--tile-budget <n>",
|
|
39
|
+
.option("--tile-budget <n>", `Maximum native tiles across the complete review pack (8-${PAGE_REVIEW_MAX_TILE_BUDGET}; default 96).`)
|
|
39
40
|
.option("--accept-dispositions", "Apply fully reviewed prior decisions only to identical findings on identical native tiles.")
|
|
40
41
|
.option("--allow-metered", "Permit the critique provider's metered-API fallback. Default: subscription-backed " +
|
|
41
42
|
"headless harnesses only — exhaustion becomes an incomplete blocker, never a metered call.")
|
|
@@ -129,10 +130,10 @@ export function registerQaRunCommand(program, emit, context) {
|
|
|
129
130
|
const policy = { ...validation.job.policy };
|
|
130
131
|
if (opts.tileBudget !== undefined) {
|
|
131
132
|
const n = Number(opts.tileBudget);
|
|
132
|
-
if (!Number.isInteger(n) || n < 8 || n >
|
|
133
|
+
if (!Number.isInteger(n) || n < 8 || n > PAGE_REVIEW_MAX_TILE_BUDGET) {
|
|
133
134
|
emit.error({
|
|
134
135
|
code: "qa_run_invalid_tile_budget",
|
|
135
|
-
message:
|
|
136
|
+
message: `--tile-budget must be an integer between 8 and ${PAGE_REVIEW_MAX_TILE_BUDGET}`,
|
|
136
137
|
});
|
|
137
138
|
process.exitCode = 1;
|
|
138
139
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-pack.d.ts","sourceRoot":"","sources":["../../src/commands/review-pack.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"review-pack.d.ts","sourceRoot":"","sources":["../../src/commands/review-pack.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAmV1E,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA0iCN"}
|
|
@@ -11,7 +11,8 @@ import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-
|
|
|
11
11
|
import { artifactsRoot } from "../core/artifacts/index.js";
|
|
12
12
|
import { resolveBinName, reviewPackAutoCleanEnabled } from "../core/config.js";
|
|
13
13
|
import { createManagedQaOutParent, resolveQaRepoRoot } from "../core/qa-artifacts.js";
|
|
14
|
-
import { DEFAULT_CRITIQUE_RUBRIC } from "../lib/browser/critique.js";
|
|
14
|
+
import { DEFAULT_CRITIQUE_RUBRIC, formatCritiqueUsage } from "../lib/browser/critique.js";
|
|
15
|
+
import { PAGE_REVIEW_MAX_TILE_BUDGET } from "../lib/browser/page-review-contracts.js";
|
|
15
16
|
import { persistPackReviewDecisions } from "../lib/browser/page-review-evidence.js";
|
|
16
17
|
import { judgePageReviewPack, toCritiqueRecords } from "../lib/browser/page-review-judge.js";
|
|
17
18
|
import { aggregateMachineOutcome, deleteExpiredPacks, expandedTileFilename, finalizePageReviewPack, findPackTile, findPageReviewPacks, isPackDeletable, listPackContexts, machineFindingTargets, PAGE_REVIEW_DEFAULT_RETENTION_MINUTES, PAGE_REVIEW_DISPOSITIONS, PAGE_REVIEW_FINDING_CATEGORIES, PAGE_REVIEW_FINDING_SEVERITIES, PAGE_REVIEW_SUBAGENT_MODELS, PAGE_REVIEW_VERDICT_SCHEMA, packPaths, readPackContext, readPackFindings, readPackInspectionPlan, readPackManifest, readPackVerdict, resolvePackVerdict, validateFindingsDocument, writePackFindings, } from "../lib/browser/page-review-pack.js";
|
|
@@ -205,7 +206,9 @@ export function registerReviewPackCommand(program, emit, context) {
|
|
|
205
206
|
.option("--context <spec>", "Rendering context <viewport>[:<theme>[:<state>]] (repeatable; default desktop and " +
|
|
206
207
|
"mobile in light and dark).", (value, previous = []) => [...previous, value], [])
|
|
207
208
|
.option("--scope <selector>", "Also tile one screenshot per element matching <selector> (repeatable).", (value, previous = []) => [...previous, value], [])
|
|
208
|
-
.option("--max-tiles <n>", "Native tile cap per context, including required top and bottom bands."
|
|
209
|
+
.option("--max-tiles <n>", "Native tile cap per context, including required top and bottom bands (default 24). " +
|
|
210
|
+
`The whole pack never exceeds ${PAGE_REVIEW_MAX_TILE_BUDGET} tiles, so the cap is ` +
|
|
211
|
+
"lowered when the contexts would need more.")
|
|
209
212
|
.option("--concurrency <n>", "Concurrent capture browsers (1-8; default 2).", "2")
|
|
210
213
|
.option("--timeout <ms>", "Per-capture timeout in milliseconds (default 120000).", "120000")
|
|
211
214
|
.option("--retain <minutes>", `Minutes the pack lives before the whole directory is deleted (1-43200; default ` +
|
|
@@ -231,6 +234,23 @@ export function registerReviewPackCommand(program, emit, context) {
|
|
|
231
234
|
process.exitCode = 1;
|
|
232
235
|
return;
|
|
233
236
|
}
|
|
237
|
+
const requestedMaxTiles = Number(opts.maxTiles ?? "24");
|
|
238
|
+
if (!Number.isInteger(requestedMaxTiles) ||
|
|
239
|
+
requestedMaxTiles < 1 ||
|
|
240
|
+
requestedMaxTiles > PAGE_REVIEW_MAX_TILE_BUDGET) {
|
|
241
|
+
emit.error({
|
|
242
|
+
code: "review_pack_invalid_max_tiles",
|
|
243
|
+
message: `--max-tiles must be an integer between 1 and ${PAGE_REVIEW_MAX_TILE_BUDGET}`,
|
|
244
|
+
});
|
|
245
|
+
process.exitCode = 1;
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
// The judge refuses a pack above the ceiling, so share it across contexts here.
|
|
249
|
+
const perContextMaxTiles = Math.max(2, Math.min(requestedMaxTiles, Math.floor(PAGE_REVIEW_MAX_TILE_BUDGET / contexts.length)));
|
|
250
|
+
if (perContextMaxTiles < requestedMaxTiles) {
|
|
251
|
+
emit.log(`review-pack: ${contexts.length} contexts share the ${PAGE_REVIEW_MAX_TILE_BUDGET}-tile ceiling; ` +
|
|
252
|
+
`capping each at ${perContextMaxTiles} tiles`, "warn");
|
|
253
|
+
}
|
|
234
254
|
const concurrency = Math.max(1, Math.min(8, Number.parseInt(opts.concurrency ?? "2", 10) || 2));
|
|
235
255
|
const timeoutMs = Math.max(1000, Number.parseInt(opts.timeout ?? "120000", 10) || 120_000);
|
|
236
256
|
const repoRoot = resolveQaRepoRoot(context);
|
|
@@ -291,7 +311,8 @@ export function registerReviewPackCommand(program, emit, context) {
|
|
|
291
311
|
"--qa-state",
|
|
292
312
|
ctx.state,
|
|
293
313
|
...(opts.scope ?? []).flatMap((selector) => ["--review-pack-scope", selector]),
|
|
294
|
-
|
|
314
|
+
"--check-critique-max-tiles",
|
|
315
|
+
String(perContextMaxTiles),
|
|
295
316
|
];
|
|
296
317
|
emit.log(`capture ${ctx.id}`, "info");
|
|
297
318
|
const res = await defaultQaRunExec(argv, { timeoutMs, env });
|
|
@@ -434,8 +455,12 @@ export function registerReviewPackCommand(program, emit, context) {
|
|
|
434
455
|
else
|
|
435
456
|
process.env[QA_RUN_HEADLESS_ONLY_ENV] = prior;
|
|
436
457
|
const merged = new Map((manifest.critique ?? []).map((row) => [row.context_id, row]));
|
|
437
|
-
for (const row of toCritiqueRecords(result))
|
|
438
|
-
|
|
458
|
+
for (const row of toCritiqueRecords(result)) {
|
|
459
|
+
// Re-judging never changes the captured coverage, so a signoff's
|
|
460
|
+
// sampled acceptance (ADR 0224) still applies.
|
|
461
|
+
const prior = merged.get(row.context_id)?.coverage_mode;
|
|
462
|
+
merged.set(row.context_id, prior ? { ...row, coverage_mode: prior } : row);
|
|
463
|
+
}
|
|
439
464
|
const judgedRecords = new Map(result.contexts.map((row) => [row.context_id, row.record]));
|
|
440
465
|
finalizePageReviewPack({
|
|
441
466
|
packDir,
|
|
@@ -461,7 +486,9 @@ export function registerReviewPackCommand(program, emit, context) {
|
|
|
461
486
|
` · ${high} high / ${row.findings.length - high} other finding(s)` +
|
|
462
487
|
(row.error ? ` · ${row.error}` : ""), row.outcome === "pass" ? "info" : "warn");
|
|
463
488
|
}
|
|
464
|
-
emit.log(`judge: ${result.outcome} · pool ${result.pool.concurrency} · ${result.tiles_reviewed} tile(s) in ${result.pool.wall_time_ms}ms
|
|
489
|
+
emit.log(`judge: ${result.outcome} · pool ${result.pool.concurrency} · ${result.tiles_reviewed} tile(s) in ${result.pool.wall_time_ms}ms` +
|
|
490
|
+
(result.usage ? ` · ${formatCritiqueUsage(result.usage)}` : "") +
|
|
491
|
+
` · ${packPaths(packDir).review}`, result.outcome === "pass" ? "info" : "warn");
|
|
465
492
|
if (opts.json)
|
|
466
493
|
emit.data(result);
|
|
467
494
|
if (result.outcome === "fail")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA2EnD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA2vBjF"}
|
|
@@ -475,9 +475,7 @@ export function registerWorkflowCommand(program, emit) {
|
|
|
475
475
|
.description("Preview reclaim of an inactive owned workspace, or confirm salvage or discard and release.")
|
|
476
476
|
.option("--yes", "Confirm that this commits or discards uncommitted work, then releases")
|
|
477
477
|
.option("--discard", "Throw the uncommitted work away instead of salvaging it")
|
|
478
|
-
.option("--
|
|
479
|
-
.option("--actor <id>", "Actor responsible for an audited recovery")
|
|
480
|
-
.option("--reason <text>", "Reason for an audited recovery")
|
|
478
|
+
.option("--force", "With --yes, admit missing or corrupt liveness evidence (active evidence still refuses) and record it")
|
|
481
479
|
.option("--json", "Emit the reclaim preview or confirmed result as JSON")
|
|
482
480
|
.action(async (runId, opts) => {
|
|
483
481
|
const coordRoot = resolveCoordRoot();
|
|
@@ -502,13 +500,7 @@ export function registerWorkflowCommand(program, emit) {
|
|
|
502
500
|
const result = await provider.reclaim(binding, {
|
|
503
501
|
mode: opts.discard ? "discard" : "salvage",
|
|
504
502
|
yes: opts.yes,
|
|
505
|
-
|
|
506
|
-
? {
|
|
507
|
-
evidenceSha256: opts.unknownLiveness,
|
|
508
|
-
actor: opts.actor,
|
|
509
|
-
reason: opts.reason,
|
|
510
|
-
}
|
|
511
|
-
: undefined,
|
|
503
|
+
force: opts.force,
|
|
512
504
|
});
|
|
513
505
|
if (opts.json) {
|
|
514
506
|
emit.config({ format: "json" });
|
|
@@ -519,11 +511,13 @@ export function registerWorkflowCommand(program, emit) {
|
|
|
519
511
|
const holders = result.lease_holder.map((holder) => `${holder.scope}: ${holder.owner_id ?? "unknown"}${holder.pid ? ` (pid ${holder.pid})` : ""}${holder.detail ? `; ${holder.detail}` : ""}`);
|
|
520
512
|
emit.text(`reclaim preview: ${result.run_id}\n` +
|
|
521
513
|
`mode: ${result.mode}\nliveness: ${result.liveness}\nownership: ${result.ownership}\n` +
|
|
522
|
-
`evidence sha256: ${result.evidence_sha256}\n` +
|
|
523
514
|
`lease holder: ${holders.length > 0 ? holders.join(", ") : "none observed"}\n` +
|
|
524
515
|
`dirty paths: ${result.dirty_paths === null ? "unknown" : result.dirty_paths.length > 0 ? result.dirty_paths.join(", ") : "none"}\n` +
|
|
525
516
|
(result.ownership_detail ? `ownership detail: ${result.ownership_detail}\n` : "") +
|
|
526
|
-
`Pass --yes to confirm ${result.mode} and release after all checks pass.\n`
|
|
517
|
+
`Pass --yes to confirm ${result.mode} and release after all checks pass.\n` +
|
|
518
|
+
(result.liveness === "unknown"
|
|
519
|
+
? "Liveness is unknown; add --force with --yes only if the run is known to be stopped.\n"
|
|
520
|
+
: ""));
|
|
527
521
|
return;
|
|
528
522
|
}
|
|
529
523
|
emit.text(`reclaim ${result.preparation.action}: ${result.preparation.detail}\n` +
|
|
@@ -539,39 +533,6 @@ export function registerWorkflowCommand(program, emit) {
|
|
|
539
533
|
process.exit(1);
|
|
540
534
|
}
|
|
541
535
|
});
|
|
542
|
-
workflow
|
|
543
|
-
.command("unlock <run-id>")
|
|
544
|
-
.description("Preview or explicitly retire one exact resume lock whose local owner is proven dead.")
|
|
545
|
-
.option("--lock-sha256 <sha256>", "Exact lock identity digest returned by the preview")
|
|
546
|
-
.option("--actor <id>", "Actor responsible for the recovery")
|
|
547
|
-
.option("--reason <text>", "Reason for the recovery")
|
|
548
|
-
.option("--yes", "Confirm removal after dead-owner and exact-lock checks")
|
|
549
|
-
.option("--json", "Emit the recovery preview or result as JSON")
|
|
550
|
-
.action(async (runId, opts) => {
|
|
551
|
-
try {
|
|
552
|
-
const coordRoot = resolveCoordRoot();
|
|
553
|
-
if (!coordRoot)
|
|
554
|
-
throw new Error("no .harnery/ coordination root found");
|
|
555
|
-
const { recoverWorkflowResumeLease } = await import("../core/workflow/index.js");
|
|
556
|
-
const result = recoverWorkflowResumeLease(coordRoot, runId, opts);
|
|
557
|
-
if (opts.json) {
|
|
558
|
-
emit.config({ format: "json" });
|
|
559
|
-
emit.data(result);
|
|
560
|
-
return;
|
|
561
|
-
}
|
|
562
|
-
emit.text(`resume lock ${result.action}: ${runId}\nowner: ${result.owner_state}\nlock sha256: ${result.lock_sha256 ?? "absent"}\n` +
|
|
563
|
-
(result.action === "preview"
|
|
564
|
-
? "Pass --lock-sha256, --actor, --reason and --yes to confirm exact dead-owner recovery.\n"
|
|
565
|
-
: `recovery: ${result.recovery_id}\n`));
|
|
566
|
-
}
|
|
567
|
-
catch (error) {
|
|
568
|
-
emit.error({
|
|
569
|
-
code: "workflow_resume_unlock_failed",
|
|
570
|
-
message: error instanceof Error ? error.message : String(error),
|
|
571
|
-
});
|
|
572
|
-
process.exit(1);
|
|
573
|
-
}
|
|
574
|
-
});
|
|
575
536
|
const approvals = program
|
|
576
537
|
.command("approval")
|
|
577
538
|
.description("Inspect and resolve durable run-policy approvals.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coord-client.d.ts","sourceRoot":"","sources":["../../../src/core/agents/coord-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAWhE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAI5E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOhF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CA+B7E;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7D;AAeD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAiED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"coord-client.d.ts","sourceRoot":"","sources":["../../../src/core/agents/coord-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAWhE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAI5E;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOhF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CA+B7E;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE7D;AAeD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAiED,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED,+EAA+E;AAC/E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,mFAAmF;AACnF,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA2CxD;AAgCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,iBAAiB,GAAG,aAAa,GAAG,kBAAkB,GAAG,MAAM,CAAC;CAC5F,CAsEA;AAED;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsB5C;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG;IAClD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,QAAQ,GAAG,iBAAiB,GAAG,MAAM,CAAC;CAC/C,CAyBA;AAyBD,sFAAsF;AACtF;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAuCD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAmB9C;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOpE"}
|
|
@@ -251,25 +251,7 @@ export function parsePidmapRowStartToken(row) {
|
|
|
251
251
|
* a test can hold this one against `processStartToken` and fail on drift.
|
|
252
252
|
*/
|
|
253
253
|
export function pidStartToken(pid) {
|
|
254
|
-
if (!Number.isInteger(pid) || pid <= 0)
|
|
255
|
-
return null;
|
|
256
254
|
const forced = process.env.HARNERY_PID_PROBE;
|
|
257
|
-
if (process.platform === "win32" && forced !== "procfs" && forced !== "ps") {
|
|
258
|
-
try {
|
|
259
|
-
const out = spawnSync("powershell.exe", [
|
|
260
|
-
"-NoLogo",
|
|
261
|
-
"-NoProfile",
|
|
262
|
-
"-NonInteractive",
|
|
263
|
-
"-Command",
|
|
264
|
-
`$process = [Diagnostics.Process]::GetProcessById(${pid}); try { 'w' + $process.StartTime.ToFileTimeUtc().ToString([Globalization.CultureInfo]::InvariantCulture) } finally { $process.Dispose() }`,
|
|
265
|
-
], { encoding: "utf8", timeout: 10_000, windowsHide: true });
|
|
266
|
-
const token = String(out.stdout ?? "").trim();
|
|
267
|
-
return out.status === 0 && /^w\d+$/.test(token) ? token : null;
|
|
268
|
-
}
|
|
269
|
-
catch {
|
|
270
|
-
return null;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
255
|
const useProcfs = forced === "procfs" || (forced !== "ps" && existsSync("/proc/self/stat"));
|
|
274
256
|
// One machine, one probe. Falling back to the other on a read failure would
|
|
275
257
|
// answer in the wrong dialect and read as a recycled pid.
|
|
@@ -10,5 +10,6 @@ export * from "./canonical-emit.js";
|
|
|
10
10
|
export * from "./coord-client.js";
|
|
11
11
|
export * from "./live-observation-v3.js";
|
|
12
12
|
export * from "./session-events.js";
|
|
13
|
+
export { type AgentParentReference, type AgentParentReferenceOptions, type AgentParentSubject, resolveAgentParentReference, } from "./state/parent-reference.js";
|
|
13
14
|
export * from "./state/session-state.js";
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/agents/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,2BAA2B,EAChC,KAAK,kBAAkB,EACvB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,cAAc,0BAA0B,CAAC"}
|
|
@@ -10,4 +10,5 @@ export * from "./canonical-emit.js";
|
|
|
10
10
|
export * from "./coord-client.js";
|
|
11
11
|
export * from "./live-observation-v3.js";
|
|
12
12
|
export * from "./session-events.js";
|
|
13
|
+
export { resolveAgentParentReference, } from "./state/parent-reference.js";
|
|
13
14
|
export * from "./state/session-state.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"live-authority-v3.d.ts","sourceRoot":"","sources":["../../../src/core/agents/live-authority-v3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,yBAAyB,CAAC;AAgBzF,OAAO,EACL,KAAK,mCAAmC,EAEzC,MAAM,iDAAiD,CAAC;AASzD,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,6BAA6B,CAAC;AAQrC,eAAO,MAAM,gCAAgC,EAAG,iBAA0B,CAAC;AAE3E,qBAAa,gCAAiC,SAAQ,KAAK;aAC7B,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAI3C;AAED,MAAM,MAAM,iCAAiC,GACzC;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GACtB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,mCAAmC,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,oCAAoC;IACnD,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,OAAO,MAAM,EAAE,CAAC;IACrC,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,uCAAuC;IACtD,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,WAAW,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,uCAAuC,CA6H1C;
|
|
1
|
+
{"version":3,"file":"live-authority-v3.d.ts","sourceRoot":"","sources":["../../../src/core/agents/live-authority-v3.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,OAAO,EAAE,KAAK,gBAAgB,EAA2B,MAAM,yBAAyB,CAAC;AAgBzF,OAAO,EACL,KAAK,mCAAmC,EAEzC,MAAM,iDAAiD,CAAC;AASzD,OAAO,EAEL,KAAK,SAAS,EAMf,MAAM,6BAA6B,CAAC;AAQrC,eAAO,MAAM,gCAAgC,EAAG,iBAA0B,CAAC;AAE3E,qBAAa,gCAAiC,SAAQ,KAAK;aAC7B,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAI3C;AAED,MAAM,MAAM,iCAAiC,GACzC;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GACtB;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,mCAAmC,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,oCAAoC;IACnD,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,OAAO,MAAM,EAAE,CAAC;IACrC,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,uCAAuC;IACtD,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,MAAM,EAAE,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B;IAC9C,KAAK,EAAE,WAAW,GAAG,UAAU,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,uCAAuC,CA6H1C;AA4ED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CAAC,KAAK,EAAE;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,mBAAmB,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;CACvC,GAAG,+BAA+B,CAmFlC;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,KAAK,EAAE;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,oCAAoC,CAqDvC;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C,iCAAiC,CAiCnC;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,mBAAmB,GAAG;IAC3B,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,iCAAiC,CAoCnC;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,mBAAmB,GAAG;IAC3B,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B,GACA,iCAAiC,CAwCnC;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChE,iCAAiC,CAwBnC;AAuDD,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAI/E;AAaD,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,SAAS,GAAG,UAAU,MAAM,EAAE,CAa3F"}
|
|
@@ -6,7 +6,7 @@ import { readCoordinationViewV3, requireAuthoritySafeCoordinationViewV3, } from
|
|
|
6
6
|
import { fingerprintContextV3 } from "../events/v3/fingerprint-keys.js";
|
|
7
7
|
import { LIVE_HOOK_V3_PRODUCER_ID, liveInstanceIdV3, livePlatformV3, resolveLiveEventLedgerRouteV3, } from "../events/v3/live-routing.js";
|
|
8
8
|
import { recordCoordinationAuthorityV3, } from "../events/v3/producers/coordination-recorder.js";
|
|
9
|
-
import {
|
|
9
|
+
import { readHookProducerStateV3, readTerminalHookProducerStateV3, recordHookSignalV3, scanHookProducerStateRecordsV3, } from "../events/v3/producers/recorder.js";
|
|
10
10
|
import { canonicalClaimPath } from "./claim-path.js";
|
|
11
11
|
import { acquireClaim, readHeartbeat, releaseClaim, setIdentityCache, setLifecycleCache, setTask, } from "./state/heartbeat-writer.js";
|
|
12
12
|
import { liveCoordinationAdapterV3, readLiveCoordinationRow, } from "./state/live-coordination-view.js";
|
|
@@ -139,14 +139,21 @@ function readSessionProducerStatesForBootstrap(coordRoot, nativeSessionId) {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
function readInstanceProducerStatesForBootstrap(coordRoot, instanceId) {
|
|
142
|
+
let scan;
|
|
142
143
|
try {
|
|
143
|
-
|
|
144
|
-
.map((record) => record.state)
|
|
145
|
-
.filter((state) => state.instance_id === instanceId);
|
|
144
|
+
scan = scanHookProducerStateRecordsV3(coordRoot, { includeTerminal: true });
|
|
146
145
|
}
|
|
147
146
|
catch {
|
|
148
147
|
throw new LiveCoordinationAuthorityV3Error("producer_state_unsafe");
|
|
149
148
|
}
|
|
149
|
+
// Another session's invalid file does not block this one; this instance's
|
|
150
|
+
// own invalid file still fails closed.
|
|
151
|
+
if (scan.invalid.some((file) => file.instance_id === instanceId)) {
|
|
152
|
+
throw new LiveCoordinationAuthorityV3Error("producer_state_unsafe");
|
|
153
|
+
}
|
|
154
|
+
return scan.records
|
|
155
|
+
.map((record) => record.state)
|
|
156
|
+
.filter((state) => state.instance_id === instanceId);
|
|
150
157
|
}
|
|
151
158
|
function terminalGenerationForSession(view, instanceId, sessionId) {
|
|
152
159
|
return Object.values(view.terminal_generations).some((generation) => generation.instance_id === instanceId && generation.session_id === sessionId);
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* Outputs a Claude Code SessionStart hookSpecificOutput.additionalContext
|
|
7
7
|
* string.
|
|
8
8
|
*/
|
|
9
|
-
import { statSync } from "node:fs";
|
|
10
9
|
export interface RenderOpts {
|
|
11
10
|
coordRoot: string;
|
|
12
11
|
instanceId: string;
|
|
@@ -43,9 +42,4 @@ export declare function checkWiring(coordRoot: string): string[];
|
|
|
43
42
|
* (or "" when no councils await input).
|
|
44
43
|
*/
|
|
45
44
|
export declare function formatPendingCouncils(coordRoot: string, agentName: string): string;
|
|
46
|
-
/**
|
|
47
|
-
* Suppress unused import warning when statSync isn't used in this file
|
|
48
|
-
* (kept exported for future renderers, e.g. heartbeat-freshness coloring).
|
|
49
|
-
*/
|
|
50
|
-
export declare const _ensureStatSyncImported: typeof statSync;
|
|
51
45
|
//# sourceMappingURL=session-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"session-context.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/render/session-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA4BH,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;IACvB,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA8F7D;AA6LD;;;;;;;;;;;;;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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* string.
|
|
8
8
|
*/
|
|
9
9
|
import { spawnSync } from "node:child_process";
|
|
10
|
-
import { existsSync, readdirSync, readFileSync
|
|
10
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
11
11
|
import { join } from "node:path";
|
|
12
12
|
import { resolveBinName, resolveHooksSetupHint } from "../../config.js";
|
|
13
13
|
import { harneryVersion, loadAdapterWiring } from "../../hooks/adapter/wiring.js";
|
|
@@ -389,8 +389,3 @@ export function formatPendingCouncils(coordRoot, agentName) {
|
|
|
389
389
|
}
|
|
390
390
|
return `Councils waiting on your input (${pending.length} open): ${list}. Run \`${bin} agents council list --mine\` to see all of them, then \`${bin} agents council show <id>\` for any brief.`;
|
|
391
391
|
}
|
|
392
|
-
/**
|
|
393
|
-
* Suppress unused import warning when statSync isn't used in this file
|
|
394
|
-
* (kept exported for future renderers, e.g. heartbeat-freshness coloring).
|
|
395
|
-
*/
|
|
396
|
-
export const _ensureStatSyncImported = statSync;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../../src/core/agents/session-events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,mDAAmD;AACnD,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,yBAAyB,GAAG,mBAAmB,CAAC;AAEnG;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBjE;
|
|
1
|
+
{"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../../src/core/agents/session-events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,mDAAmD;AACnD,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,GAAG,yBAAyB,GAAG,mBAAmB,CAAC;AAEnG;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED,6EAA6E;AAC7E,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBjE;AAyHD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD;AAgED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,gBAAgB,EACtB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACnC,IAAI,CAoDN;AAED,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,SAAO,GAAG,MAAM,CAGxD"}
|
|
@@ -62,16 +62,21 @@ function commandKey(fields) {
|
|
|
62
62
|
? JSON.stringify([fields.instance_id, fields.cmd_id])
|
|
63
63
|
: undefined;
|
|
64
64
|
}
|
|
65
|
-
|
|
65
|
+
/**
|
|
66
|
+
* `deferDrain` stages each summary durably in the spool without appending it,
|
|
67
|
+
* for a caller that writes the completion next: that write drains every staged
|
|
68
|
+
* row under one lease and one witness advance instead of one per row.
|
|
69
|
+
*/
|
|
70
|
+
function flushCommandOutput(command, deferDrain = false) {
|
|
66
71
|
for (const summary of command.streams.values()) {
|
|
67
|
-
recordCommandObservation("command.output_observed", command.fields, command.coordRoot, summary);
|
|
72
|
+
recordCommandObservation("command.output_observed", command.fields, command.coordRoot, summary, deferDrain);
|
|
68
73
|
}
|
|
69
74
|
command.streams.clear();
|
|
70
75
|
}
|
|
71
76
|
/** Emit a command/narration event to the canonical stream. Swallows every
|
|
72
77
|
* error and skips when identity can't be resolved: telemetry must never break
|
|
73
78
|
* or slow down a command. */
|
|
74
|
-
function recordCommandObservation(type, fields, coordRoot, summary) {
|
|
79
|
+
function recordCommandObservation(type, fields, coordRoot, summary, deferDrain = false) {
|
|
75
80
|
const instanceId = typeof fields.instance_id === "string" ? fields.instance_id : undefined;
|
|
76
81
|
if (!instanceId)
|
|
77
82
|
return false;
|
|
@@ -104,6 +109,7 @@ function recordCommandObservation(type, fields, coordRoot, summary) {
|
|
|
104
109
|
platform: livePlatformV3(),
|
|
105
110
|
...(fields.bridge === "codex-wsl" ? { bridge: "codex-wsl" } : {}),
|
|
106
111
|
monotonic_ns: process.hrtime.bigint().toString(),
|
|
112
|
+
...(deferDrain ? { writerOptions: { deferDrain: true } } : {}),
|
|
107
113
|
});
|
|
108
114
|
if (result.state === "generation_unavailable") {
|
|
109
115
|
const expectedLifecycleReopenGap = result.reason === "turn_not_started" &&
|
|
@@ -243,8 +249,10 @@ export function writeSessionEvent(type, fields = {}) {
|
|
|
243
249
|
const coordRoot = command?.coordRoot ?? coordinationRootPath();
|
|
244
250
|
if (type === "command.completed") {
|
|
245
251
|
pendingCommands.delete(key);
|
|
252
|
+
// The completion below drains the staged summaries with itself. If it
|
|
253
|
+
// never writes, the rows stay durable in the spool for the next drain.
|
|
246
254
|
if (command)
|
|
247
|
-
flushCommandOutput(command);
|
|
255
|
+
flushCommandOutput(command, true);
|
|
248
256
|
recordCommandObservation(type, fields, coordRoot);
|
|
249
257
|
}
|
|
250
258
|
else if (recordCommandObservation(type, fields, coordRoot) && !command) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** Read-only access to the generation-bound heartbeat cache. */
|
|
2
|
+
import type { AgentParentReference } from "./parent-reference-contract.js";
|
|
2
3
|
import type { AgentActivity, TaskState } from "./session-state.js";
|
|
3
4
|
export interface Heartbeat {
|
|
4
5
|
schema_version?: number;
|
|
@@ -46,6 +47,8 @@ export interface Heartbeat {
|
|
|
46
47
|
last_status_at?: string;
|
|
47
48
|
current_turn_id?: string;
|
|
48
49
|
parent_instance_id?: string;
|
|
50
|
+
/** Read-only display/recipient evidence; never a claim or lifecycle authority input. */
|
|
51
|
+
parent_reference?: AgentParentReference;
|
|
49
52
|
workflow_run_id?: string;
|
|
50
53
|
workflow_agent_id?: string;
|
|
51
54
|
/** Disposable-cache bindings that prove a row belongs to the current V3 generation. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-reader.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/heartbeat-reader.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,SAAS;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;OAKG;IACH,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAC5C;;;;;OAKG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uFAAuF;IACvF,cAAc,CAAC,EAAE,QAAQ,MAAM,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAU3E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQrF"}
|
|
1
|
+
{"version":3,"file":"heartbeat-reader.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/heartbeat-reader.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAIhE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,SAAS;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wEAAwE;IACxE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;OAKG;IACH,kCAAkC,CAAC,EAAE,MAAM,CAAC;IAC5C;;;;;OAKG;IACH,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uFAAuF;IACvF,cAAc,CAAC,EAAE,QAAQ,MAAM,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,MAAM,EAAE,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAU3E;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAQrF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type EventAdapterIdV3 } from "../../events/v3/adapter-id.js";
|
|
2
|
-
import { type CoordinationGenerationViewV3 } from "../../events/v3/coordination-view.js";
|
|
2
|
+
import { type CoordinationGenerationViewV3, type CoordinationViewV3 } from "../../events/v3/coordination-view.js";
|
|
3
3
|
import { type Heartbeat } from "./heartbeat-reader.js";
|
|
4
4
|
/**
|
|
5
5
|
* Heartbeat files are disposable V3 caches. These bindings prevent a stale
|
|
@@ -12,6 +12,8 @@ export interface V3HeartbeatMaterialization extends Heartbeat {
|
|
|
12
12
|
v3_projection_event_id: string;
|
|
13
13
|
v3_task_state: "set" | "cleared";
|
|
14
14
|
}
|
|
15
|
+
/** Index exact generations; a current replacement never erases its terminal predecessor. */
|
|
16
|
+
export declare function indexCoordinationGenerationsV3(view: CoordinationViewV3): ReadonlyMap<string, CoordinationGenerationViewV3>;
|
|
15
17
|
/** Read the live coordination rows through the hard-cut ledger route. */
|
|
16
18
|
export declare function readLiveCoordinationRows(coordRoot: string): V3HeartbeatMaterialization[];
|
|
17
19
|
/** Read one current row from the authority-safe V3 projection. */
|
|
@@ -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,
|
|
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,EACjC,KAAK,kBAAkB,EAGxB,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,4FAA4F;AAC5F,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,kBAAkB,GACvB,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAMnD;AAED,yEAAyE;AACzE,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,EAAE,CAyBxF;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,GACvB,0BAA0B,GAAG,IAAI,CAqBnC;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"}
|
|
@@ -5,6 +5,10 @@ import { readCoordinationViewV3, requireAuthoritySafeCoordinationViewV3, } from
|
|
|
5
5
|
import { liveInstanceIdV3, nativeInstanceIdV3, observeLiveEventLedgerRouteV3, } from "../../events/v3/live-route-observer.js";
|
|
6
6
|
import { readHeartbeat } from "./heartbeat-reader.js";
|
|
7
7
|
import { resolveName } from "./names.js";
|
|
8
|
+
/** Index exact generations; a current replacement never erases its terminal predecessor. */
|
|
9
|
+
export function indexCoordinationGenerationsV3(view) {
|
|
10
|
+
return new Map([...Object.values(view.terminal_generations), ...Object.values(view.instances)].map((generation) => [generation.generation_id, generation]));
|
|
11
|
+
}
|
|
8
12
|
/** Read the live coordination rows through the hard-cut ledger route. */
|
|
9
13
|
export function readLiveCoordinationRows(coordRoot) {
|
|
10
14
|
const route = observeLiveEventLedgerRouteV3(coordRoot);
|
|
@@ -18,7 +22,7 @@ export function readLiveCoordinationRows(coordRoot) {
|
|
|
18
22
|
return [];
|
|
19
23
|
}
|
|
20
24
|
const caches = readV3Caches(coordRoot);
|
|
21
|
-
const byGeneration =
|
|
25
|
+
const byGeneration = indexCoordinationGenerationsV3(view);
|
|
22
26
|
return Object.values(view.instances)
|
|
23
27
|
.filter((generation) => generation.authority_eligible)
|
|
24
28
|
.map((generation) => {
|
|
@@ -40,7 +44,7 @@ export function readLiveCoordinationRow(coordRoot, nativeInstanceId) {
|
|
|
40
44
|
return null;
|
|
41
45
|
const cache = readHeartbeat(coordRoot, nativeInstanceId);
|
|
42
46
|
const parent = generation.parent_generation_id
|
|
43
|
-
?
|
|
47
|
+
? indexCoordinationGenerationsV3(view).get(generation.parent_generation_id)
|
|
44
48
|
: undefined;
|
|
45
49
|
return projectHeartbeatV3(coordRoot, generation, isCurrentV3HeartbeatCache(cache, generation) ? cache : undefined, nativeInstanceId, parent);
|
|
46
50
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type AgentParentReference = {
|
|
2
|
+
state: "verified";
|
|
3
|
+
relationship: "delegated-child" | "native-child";
|
|
4
|
+
parent_instance_id: string;
|
|
5
|
+
parent_v3_instance_id: string;
|
|
6
|
+
parent_generation_id: string | null;
|
|
7
|
+
parent_session_id: string | null;
|
|
8
|
+
parent_name: string | null;
|
|
9
|
+
source: "v3-session-link" | "native-session-metadata";
|
|
10
|
+
source_witness?: string;
|
|
11
|
+
addressable: boolean;
|
|
12
|
+
} | {
|
|
13
|
+
state: "none" | "unknown" | "conflict";
|
|
14
|
+
reason: string;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=parent-reference-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-reference-contract.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/parent-reference-contract.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC5B;IACE,KAAK,EAAE,UAAU,CAAC;IAClB,YAAY,EAAE,iBAAiB,GAAG,cAAc,CAAC;IACjD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,iBAAiB,GAAG,yBAAyB,CAAC;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;CACtB,GACD;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CoordinationViewV3 } from "../../events/v3/coordination-view.js";
|
|
2
|
+
import { type NativeParentObservation, type NativeParentRequest } from "../../hooks/adapter/native-parent.js";
|
|
3
|
+
import type { AgentParentReference } from "./parent-reference-contract.js";
|
|
4
|
+
export type { AgentParentReference } from "./parent-reference-contract.js";
|
|
5
|
+
export interface AgentParentSubject {
|
|
6
|
+
instance_id: string;
|
|
7
|
+
generation_id?: string;
|
|
8
|
+
v3_generation_id?: string;
|
|
9
|
+
platform?: string;
|
|
10
|
+
native_session_id?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AgentParentReferenceOptions {
|
|
13
|
+
view?: CoordinationViewV3;
|
|
14
|
+
readNativeParent?: (request: NativeParentRequest) => NativeParentObservation;
|
|
15
|
+
}
|
|
16
|
+
/** Display/recipient evidence only. Never use native evidence as a claim or lifecycle waiver. */
|
|
17
|
+
export declare function resolveAgentParentReference(coordRoot: string, child: AgentParentSubject, options?: AgentParentReferenceOptions): AgentParentReference;
|
|
18
|
+
//# sourceMappingURL=parent-reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-reference.d.ts","sourceRoot":"","sources":["../../../../src/core/agents/state/parent-reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EAEzB,MAAM,sCAAsC,CAAC;AAE9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,YAAY,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,uBAAuB,CAAC;CAC9E;AAED,iGAAiG;AACjG,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAyEtB"}
|