@mono-agent/agent-app 0.11.3 → 0.11.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +222 -26
- package/dist/adapter-send-tools-main.js +7 -1
- package/dist/adapter-send-tools-main.js.map +1 -1
- package/dist/adapter-send-tools.d.ts +19 -1
- package/dist/adapter-send-tools.d.ts.map +1 -1
- package/dist/adapter-send-tools.js +127 -13
- package/dist/adapter-send-tools.js.map +1 -1
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +15 -2
- package/dist/app-config.js.map +1 -1
- package/dist/app-controller-channels.d.ts +8 -0
- package/dist/app-controller-channels.d.ts.map +1 -0
- package/dist/app-controller-channels.js +207 -0
- package/dist/app-controller-channels.js.map +1 -0
- package/dist/app-controller-continuation.d.ts +26 -0
- package/dist/app-controller-continuation.d.ts.map +1 -0
- package/dist/app-controller-continuation.js +198 -0
- package/dist/app-controller-continuation.js.map +1 -0
- package/dist/app-controller-lifecycle.d.ts +6 -0
- package/dist/app-controller-lifecycle.d.ts.map +1 -0
- package/dist/app-controller-lifecycle.js +81 -0
- package/dist/app-controller-lifecycle.js.map +1 -0
- package/dist/app-controller-maintenance.d.ts +13 -0
- package/dist/app-controller-maintenance.d.ts.map +1 -0
- package/dist/app-controller-maintenance.js +180 -0
- package/dist/app-controller-maintenance.js.map +1 -0
- package/dist/app-controller-memory-health.d.ts +12 -0
- package/dist/app-controller-memory-health.d.ts.map +1 -0
- package/dist/app-controller-memory-health.js +160 -0
- package/dist/app-controller-memory-health.js.map +1 -0
- package/dist/app-controller-memory.d.ts +9 -0
- package/dist/app-controller-memory.d.ts.map +1 -0
- package/dist/app-controller-memory.js +83 -0
- package/dist/app-controller-memory.js.map +1 -0
- package/dist/app-controller-responder.d.ts +20 -0
- package/dist/app-controller-responder.d.ts.map +1 -0
- package/dist/app-controller-responder.js +246 -0
- package/dist/app-controller-responder.js.map +1 -0
- package/dist/app-controller-traceability.d.ts +25 -0
- package/dist/app-controller-traceability.d.ts.map +1 -0
- package/dist/app-controller-traceability.js +418 -0
- package/dist/app-controller-traceability.js.map +1 -0
- package/dist/app-controller-utils.d.ts +38 -0
- package/dist/app-controller-utils.d.ts.map +1 -0
- package/dist/app-controller-utils.js +185 -0
- package/dist/app-controller-utils.js.map +1 -0
- package/dist/app-controller.d.ts +400 -0
- package/dist/app-controller.d.ts.map +1 -0
- package/dist/app-controller.js +336 -0
- package/dist/app-controller.js.map +1 -0
- package/dist/app.d.ts +7 -115
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +6 -1912
- package/dist/app.js.map +1 -1
- package/dist/artifact-retention.d.ts +4 -0
- package/dist/artifact-retention.d.ts.map +1 -1
- package/dist/artifact-retention.js +38 -0
- package/dist/artifact-retention.js.map +1 -1
- package/dist/backfill.d.ts +3 -1
- package/dist/backfill.d.ts.map +1 -1
- package/dist/backfill.js +5 -1
- package/dist/backfill.js.map +1 -1
- package/dist/background-runtime.d.ts +27 -0
- package/dist/background-runtime.d.ts.map +1 -1
- package/dist/background-runtime.js +383 -205
- package/dist/background-runtime.js.map +1 -1
- package/dist/background-worker-lease.d.ts.map +1 -1
- package/dist/background-worker-lease.js +41 -241
- package/dist/background-worker-lease.js.map +1 -1
- package/dist/background.d.ts +31 -9
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +543 -272
- package/dist/background.js.map +1 -1
- package/dist/channel-drivers/cron.d.ts +11 -0
- package/dist/channel-drivers/cron.d.ts.map +1 -0
- package/dist/channel-drivers/cron.js +168 -0
- package/dist/channel-drivers/cron.js.map +1 -0
- package/dist/channel-drivers/live.d.ts +11 -0
- package/dist/channel-drivers/live.d.ts.map +1 -0
- package/dist/channel-drivers/live.js +47 -0
- package/dist/channel-drivers/live.js.map +1 -0
- package/dist/channel-drivers/native-notify.d.ts +27 -0
- package/dist/channel-drivers/native-notify.d.ts.map +1 -0
- package/dist/channel-drivers/native-notify.js +94 -0
- package/dist/channel-drivers/native-notify.js.map +1 -0
- package/dist/channel-drivers/openai-api.d.ts +7 -0
- package/dist/channel-drivers/openai-api.d.ts.map +1 -0
- package/dist/channel-drivers/openai-api.js +63 -0
- package/dist/channel-drivers/openai-api.js.map +1 -0
- package/dist/channel-drivers/shared.d.ts +4 -0
- package/dist/channel-drivers/shared.d.ts.map +1 -0
- package/dist/channel-drivers/shared.js +5 -0
- package/dist/channel-drivers/shared.js.map +1 -0
- package/dist/channel-drivers/slack.d.ts +14 -0
- package/dist/channel-drivers/slack.d.ts.map +1 -0
- package/dist/channel-drivers/slack.js +227 -0
- package/dist/channel-drivers/slack.js.map +1 -0
- package/dist/channel-drivers/telegram.d.ts +11 -0
- package/dist/channel-drivers/telegram.d.ts.map +1 -0
- package/dist/channel-drivers/telegram.js +244 -0
- package/dist/channel-drivers/telegram.js.map +1 -0
- package/dist/channel-drivers/tui.d.ts +15 -0
- package/dist/channel-drivers/tui.d.ts.map +1 -0
- package/dist/channel-drivers/tui.js +108 -0
- package/dist/channel-drivers/tui.js.map +1 -0
- package/dist/channel-drivers/webhook.d.ts +7 -0
- package/dist/channel-drivers/webhook.d.ts.map +1 -0
- package/dist/channel-drivers/webhook.js +115 -0
- package/dist/channel-drivers/webhook.js.map +1 -0
- package/dist/channels.d.ts +21 -81
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +11 -1174
- package/dist/channels.js.map +1 -1
- package/dist/cli-args.d.ts +121 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +532 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-background-command.d.ts +59 -0
- package/dist/cli-background-command.d.ts.map +1 -0
- package/dist/cli-background-command.js +475 -0
- package/dist/cli-background-command.js.map +1 -0
- package/dist/cli-cancellation.d.ts +6 -0
- package/dist/cli-cancellation.d.ts.map +1 -0
- package/dist/cli-cancellation.js +23 -0
- package/dist/cli-cancellation.js.map +1 -0
- package/dist/cli-commands.d.ts +12 -0
- package/dist/cli-commands.d.ts.map +1 -0
- package/dist/cli-commands.js +306 -0
- package/dist/cli-commands.js.map +1 -0
- package/dist/cli-help.d.ts +11 -0
- package/dist/cli-help.d.ts.map +1 -0
- package/dist/cli-help.js +262 -0
- package/dist/cli-help.js.map +1 -0
- package/dist/cli-init-command.d.ts +60 -0
- package/dist/cli-init-command.d.ts.map +1 -0
- package/dist/cli-init-command.js +1910 -0
- package/dist/cli-init-command.js.map +1 -0
- package/dist/cli-install-skill-command.d.ts +3 -0
- package/dist/cli-install-skill-command.d.ts.map +1 -0
- package/dist/cli-install-skill-command.js +51 -0
- package/dist/cli-install-skill-command.js.map +1 -0
- package/dist/cli-sandbox-command.d.ts +10 -0
- package/dist/cli-sandbox-command.d.ts.map +1 -0
- package/dist/cli-sandbox-command.js +100 -0
- package/dist/cli-sandbox-command.js.map +1 -0
- package/dist/cli-validate-config-command.d.ts +36 -0
- package/dist/cli-validate-config-command.d.ts.map +1 -0
- package/dist/cli-validate-config-command.js +317 -0
- package/dist/cli-validate-config-command.js.map +1 -0
- package/dist/cli.d.ts +6 -248
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +6 -3792
- package/dist/cli.js.map +1 -1
- package/dist/config-reference.d.ts +2 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +14 -3
- package/dist/config-reference.js.map +1 -1
- package/dist/configured-agent.d.ts +23 -0
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +89 -12
- package/dist/configured-agent.js.map +1 -1
- package/dist/continuation-dispatch-worker.d.ts +21 -0
- package/dist/continuation-dispatch-worker.d.ts.map +1 -0
- package/dist/continuation-dispatch-worker.js +425 -0
- package/dist/continuation-dispatch-worker.js.map +1 -0
- package/dist/continuation-http-routes.d.ts +15 -0
- package/dist/continuation-http-routes.d.ts.map +1 -0
- package/dist/continuation-http-routes.js +265 -0
- package/dist/continuation-http-routes.js.map +1 -0
- package/dist/continuation-operator-api.d.ts +18 -0
- package/dist/continuation-operator-api.d.ts.map +1 -0
- package/dist/continuation-operator-api.js +164 -0
- package/dist/continuation-operator-api.js.map +1 -0
- package/dist/continuation-origin-store.d.ts +19 -0
- package/dist/continuation-origin-store.d.ts.map +1 -0
- package/dist/continuation-origin-store.js +273 -0
- package/dist/continuation-origin-store.js.map +1 -0
- package/dist/continuation-service-errors.d.ts +18 -0
- package/dist/continuation-service-errors.d.ts.map +1 -0
- package/dist/continuation-service-errors.js +35 -0
- package/dist/continuation-service-errors.js.map +1 -0
- package/dist/continuation-service-helpers.d.ts +39 -0
- package/dist/continuation-service-helpers.d.ts.map +1 -0
- package/dist/continuation-service-helpers.js +308 -0
- package/dist/continuation-service-helpers.js.map +1 -0
- package/dist/continuation-service-origin.d.ts +55 -0
- package/dist/continuation-service-origin.d.ts.map +1 -0
- package/dist/continuation-service-origin.js +325 -0
- package/dist/continuation-service-origin.js.map +1 -0
- package/dist/continuation-service-types.d.ts +110 -0
- package/dist/continuation-service-types.d.ts.map +1 -0
- package/dist/continuation-service-types.js +11 -0
- package/dist/continuation-service-types.js.map +1 -0
- package/dist/continuation-service.d.ts +4 -97
- package/dist/continuation-service.d.ts.map +1 -1
- package/dist/continuation-service.js +9 -1525
- package/dist/continuation-service.js.map +1 -1
- package/dist/continuation-store-fs.d.ts +15 -0
- package/dist/continuation-store-fs.d.ts.map +1 -0
- package/dist/continuation-store-fs.js +247 -0
- package/dist/continuation-store-fs.js.map +1 -0
- package/dist/continuation-store-policy.d.ts +21 -0
- package/dist/continuation-store-policy.d.ts.map +1 -0
- package/dist/continuation-store-policy.js +278 -0
- package/dist/continuation-store-policy.js.map +1 -0
- package/dist/continuation-store-records.d.ts +9 -0
- package/dist/continuation-store-records.d.ts.map +1 -0
- package/dist/continuation-store-records.js +221 -0
- package/dist/continuation-store-records.js.map +1 -0
- package/dist/continuation-store-types.d.ts +173 -0
- package/dist/continuation-store-types.d.ts.map +1 -0
- package/dist/continuation-store-types.js +26 -0
- package/dist/continuation-store-types.js.map +1 -0
- package/dist/continuation-store.d.ts +4 -138
- package/dist/continuation-store.d.ts.map +1 -1
- package/dist/continuation-store.js +145 -1049
- package/dist/continuation-store.js.map +1 -1
- package/dist/doctor.d.ts +5 -0
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +575 -38
- package/dist/doctor.js.map +1 -1
- package/dist/init.d.ts +2 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +92 -239
- package/dist/init.js.map +1 -1
- package/dist/interaction-bridge.d.ts +19 -0
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/interaction-bridge.js +130 -0
- package/dist/interaction-bridge.js.map +1 -1
- package/dist/launchd-logs.d.ts +91 -0
- package/dist/launchd-logs.d.ts.map +1 -0
- package/dist/launchd-logs.js +1499 -0
- package/dist/launchd-logs.js.map +1 -0
- package/dist/launchd.d.ts +27 -0
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +89 -10
- package/dist/launchd.js.map +1 -1
- package/dist/memory-command.d.ts +2 -0
- package/dist/memory-command.d.ts.map +1 -1
- package/dist/memory-command.js +161 -48
- package/dist/memory-command.js.map +1 -1
- package/dist/memory-recall-settings.d.ts +64 -0
- package/dist/memory-recall-settings.d.ts.map +1 -0
- package/dist/memory-recall-settings.js +51 -0
- package/dist/memory-recall-settings.js.map +1 -0
- package/dist/memory-recall.d.ts +7 -95
- package/dist/memory-recall.d.ts.map +1 -1
- package/dist/memory-recall.js +8 -143
- package/dist/memory-recall.js.map +1 -1
- package/dist/memory-rituals.d.ts +3 -3
- package/dist/memory-rituals.d.ts.map +1 -1
- package/dist/memory-rituals.js +16 -111
- package/dist/memory-rituals.js.map +1 -1
- package/dist/modules/catalog.js +2 -2
- package/dist/modules/catalog.js.map +1 -1
- package/dist/modules/known-tools.d.ts +8 -6
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +8 -6
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/notify-destinations.d.ts +5 -0
- package/dist/notify-destinations.d.ts.map +1 -1
- package/dist/notify-destinations.js +7 -1
- package/dist/notify-destinations.js.map +1 -1
- package/dist/owner-private-lock.d.ts +95 -0
- package/dist/owner-private-lock.d.ts.map +1 -0
- package/dist/owner-private-lock.js +566 -0
- package/dist/owner-private-lock.js.map +1 -0
- package/dist/pi-oauth-login.d.ts +2 -0
- package/dist/pi-oauth-login.d.ts.map +1 -1
- package/dist/pi-oauth-login.js +39 -5
- package/dist/pi-oauth-login.js.map +1 -1
- package/dist/posted-message-index.d.ts +35 -16
- package/dist/posted-message-index.d.ts.map +1 -1
- package/dist/posted-message-index.js +1068 -52
- package/dist/posted-message-index.js.map +1 -1
- package/dist/posted-reply-history.d.ts +17 -0
- package/dist/posted-reply-history.d.ts.map +1 -0
- package/dist/posted-reply-history.js +169 -0
- package/dist/posted-reply-history.js.map +1 -0
- package/dist/proactive-notify.d.ts.map +1 -1
- package/dist/proactive-notify.js +6 -4
- package/dist/proactive-notify.js.map +1 -1
- package/dist/project-skills.d.ts +4 -0
- package/dist/project-skills.d.ts.map +1 -1
- package/dist/project-skills.js +99 -130
- package/dist/project-skills.js.map +1 -1
- package/dist/provider-setup.d.ts +0 -1
- package/dist/provider-setup.d.ts.map +1 -1
- package/dist/provider-setup.js +0 -3
- package/dist/provider-setup.js.map +1 -1
- package/dist/readiness-probe-worker.d.ts +61 -1
- package/dist/readiness-probe-worker.d.ts.map +1 -1
- package/dist/readiness-probe-worker.js +49 -56
- package/dist/readiness-probe-worker.js.map +1 -1
- package/dist/readiness-probe.d.ts +6 -9
- package/dist/readiness-probe.d.ts.map +1 -1
- package/dist/readiness-probe.js +23 -56
- package/dist/readiness-probe.js.map +1 -1
- package/dist/redact-secrets.d.ts +15 -0
- package/dist/redact-secrets.d.ts.map +1 -0
- package/dist/redact-secrets.js +65 -0
- package/dist/redact-secrets.js.map +1 -0
- package/dist/run-history.js +34 -24
- package/dist/run-history.js.map +1 -1
- package/dist/runtime-provenance.d.ts +8 -0
- package/dist/runtime-provenance.d.ts.map +1 -0
- package/dist/runtime-provenance.js +225 -0
- package/dist/runtime-provenance.js.map +1 -0
- package/dist/sandbox-manager.d.ts +4 -1
- package/dist/sandbox-manager.d.ts.map +1 -1
- package/dist/sandbox-manager.js +114 -273
- package/dist/sandbox-manager.js.map +1 -1
- package/dist/secure-file-replace.d.ts +49 -0
- package/dist/secure-file-replace.d.ts.map +1 -0
- package/dist/secure-file-replace.js +270 -0
- package/dist/secure-file-replace.js.map +1 -0
- package/dist/seen-conversations.d.ts +32 -5
- package/dist/seen-conversations.d.ts.map +1 -1
- package/dist/seen-conversations.js +145 -15
- package/dist/seen-conversations.js.map +1 -1
- package/dist/sessions.d.ts +20 -0
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +41 -6
- package/dist/sessions.js.map +1 -1
- package/dist/wizard/index.d.ts +2 -2
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +1 -1
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/presets.d.ts +2 -1
- package/dist/wizard/presets.d.ts.map +1 -1
- package/dist/wizard/presets.js +2 -1
- package/dist/wizard/presets.js.map +1 -1
- package/dist/wizard/run.d.ts +0 -26
- package/dist/wizard/run.d.ts.map +1 -1
- package/dist/wizard/run.js +0 -53
- package/dist/wizard/run.js.map +1 -1
- package/package.json +21 -16
- package/schema/mono-agent.config.schema.json +17 -6
- package/skills/mono-agent-composer/SKILL.md +3 -3
- package/skills/mono-agent-composer/references/config-blueprint.md +41 -22
- package/skills/mono-agent-composer/references/discovery-questions.md +4 -4
- package/skills/mono-agent-composer/references/feature-coverage.md +14 -14
- package/skills/mono-agent-composer/references/package-map.md +3 -3
- package/skills/mono-agent-composer/references/playbooks.md +38 -20
- package/skills/mono-agent-composer/references/validation.md +16 -3
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { lstat, readdir, rm } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { assertAgentContinuationOriginContext } from "@mono-agent/agent-contracts";
|
|
4
|
+
import { TERMINAL_CONTINUATION_STATES, canonicalContinuationJson, continuationDigest, } from "./continuations.js";
|
|
5
|
+
import { assertOwnerOnlyRegularFile, readBoundedOwnerOnlyFile, readBoundedOwnerOnlyFileWithStats, syncDirectory, } from "./continuation-store-fs.js";
|
|
6
|
+
import { assertRecordFitsV3, isMissing, isOriginContextGroupCommit, } from "./continuation-store-policy.js";
|
|
7
|
+
import { MAX_CONTINUATION_ORIGIN_CONTEXT_BYTES, MAX_CONTINUATION_ORIGIN_CONTEXT_STORE_BYTES, } from "./continuation-store-types.js";
|
|
8
|
+
export function prepareOriginContextGroupCommit(records, input) {
|
|
9
|
+
const seeds = [...records.values()].filter((record) => record.claimFingerprint === input.claimFingerprint);
|
|
10
|
+
if (seeds.length === 0)
|
|
11
|
+
return undefined;
|
|
12
|
+
const seed = seeds[0];
|
|
13
|
+
if (seed.originContextState === "detached_latest")
|
|
14
|
+
return undefined;
|
|
15
|
+
if (seed.historyBoundary === undefined) {
|
|
16
|
+
throw new Error("A pinned continuation origin group must have an immutable history boundary.");
|
|
17
|
+
}
|
|
18
|
+
const candidates = [...records.values()].filter((record) => record.originRunId === seed.originRunId
|
|
19
|
+
&& record.originConversationId === seed.originConversationId
|
|
20
|
+
&& record.historyBoundary === seed.historyBoundary
|
|
21
|
+
&& !TERMINAL_CONTINUATION_STATES.has(record.state));
|
|
22
|
+
if (candidates.length === 0)
|
|
23
|
+
return undefined;
|
|
24
|
+
const digests = new Set();
|
|
25
|
+
for (const record of candidates) {
|
|
26
|
+
if ((record.originContextState !== "pending" && record.originContextState !== "pinned")
|
|
27
|
+
|| record.originContextRef === undefined
|
|
28
|
+
|| record.originContextDigest !== record.originContextRef.digest
|
|
29
|
+
|| record.originContextBindingMac === undefined) {
|
|
30
|
+
throw new Error("Continuation origin context was not durably prepared for activation.");
|
|
31
|
+
}
|
|
32
|
+
digests.add(record.originContextRef.digest);
|
|
33
|
+
}
|
|
34
|
+
if (digests.size !== 1) {
|
|
35
|
+
throw new Error("Continuation origin claims were prepared with conflicting snapshots.");
|
|
36
|
+
}
|
|
37
|
+
if (candidates.every((record) => record.originContextState === "pinned"))
|
|
38
|
+
return undefined;
|
|
39
|
+
const snapshotDigest = [...digests][0];
|
|
40
|
+
if (snapshotDigest === undefined)
|
|
41
|
+
throw new Error("Continuation origin group has no snapshot digest.");
|
|
42
|
+
const memberIds = candidates.map((record) => record.continuationId).sort();
|
|
43
|
+
const groupIdentity = {
|
|
44
|
+
originRunId: seed.originRunId,
|
|
45
|
+
originConversationId: seed.originConversationId,
|
|
46
|
+
historyBoundary: seed.historyBoundary,
|
|
47
|
+
};
|
|
48
|
+
return {
|
|
49
|
+
schemaVersion: 1,
|
|
50
|
+
groupKey: continuationDigest(`mono-agent-origin-context-group-v1\0${canonicalContinuationJson(groupIdentity)}`),
|
|
51
|
+
...groupIdentity,
|
|
52
|
+
snapshotDigest,
|
|
53
|
+
memberCount: memberIds.length,
|
|
54
|
+
memberSetDigest: continuationDigest(`mono-agent-origin-context-members-v1\0${canonicalContinuationJson(memberIds)}`),
|
|
55
|
+
activatedAt: input.activatedAt,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function applyOriginContextGroupCommit(records, commit) {
|
|
59
|
+
const candidates = [...records.values()].filter((record) => record.originRunId === commit.originRunId
|
|
60
|
+
&& record.originConversationId === commit.originConversationId
|
|
61
|
+
&& record.historyBoundary === commit.historyBoundary
|
|
62
|
+
&& !TERMINAL_CONTINUATION_STATES.has(record.state));
|
|
63
|
+
const memberIds = candidates.map((record) => record.continuationId).sort();
|
|
64
|
+
const memberSetDigest = continuationDigest(`mono-agent-origin-context-members-v1\0${canonicalContinuationJson(memberIds)}`);
|
|
65
|
+
if (candidates.length !== commit.memberCount || memberSetDigest !== commit.memberSetDigest) {
|
|
66
|
+
throw new Error("Continuation origin-context group commit member set does not match durable records.");
|
|
67
|
+
}
|
|
68
|
+
for (const record of candidates) {
|
|
69
|
+
if ((record.originContextState !== "pending" && record.originContextState !== "pinned")
|
|
70
|
+
|| record.originContextRef?.digest !== commit.snapshotDigest
|
|
71
|
+
|| record.originContextDigest !== commit.snapshotDigest
|
|
72
|
+
|| record.originContextBindingMac === undefined) {
|
|
73
|
+
throw new Error("Continuation origin-context group commit does not match its prepared records.");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// Validate the complete projection before mutating any record. A durable
|
|
77
|
+
// marker must never describe a state that cannot fit the v3 record format,
|
|
78
|
+
// otherwise every restart would replay the same unmaterializable commit.
|
|
79
|
+
for (const record of candidates) {
|
|
80
|
+
const projected = structuredClone(record);
|
|
81
|
+
applyOriginContextGroupProjection(projected, commit.activatedAt);
|
|
82
|
+
assertRecordFitsV3(projected, "Continuation activated record");
|
|
83
|
+
}
|
|
84
|
+
for (const record of candidates) {
|
|
85
|
+
applyOriginContextGroupProjection(record, commit.activatedAt);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function applyOriginContextGroupProjection(record, activatedAt) {
|
|
89
|
+
if (record.originContextState === "pinned")
|
|
90
|
+
return;
|
|
91
|
+
record.originContextState = "pinned";
|
|
92
|
+
record.updatedAt = activatedAt;
|
|
93
|
+
if (record.lastError?.code === "origin_context_pending")
|
|
94
|
+
delete record.lastError;
|
|
95
|
+
delete record.nextAttemptAt;
|
|
96
|
+
}
|
|
97
|
+
export async function applyOriginContextGroupCommits(directory, records) {
|
|
98
|
+
const applied = [];
|
|
99
|
+
let removedTemporary = false;
|
|
100
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
101
|
+
const path = join(directory, entry.name);
|
|
102
|
+
if (entry.name.startsWith(".") && entry.name.endsWith(".tmp")) {
|
|
103
|
+
if (!entry.isFile() || entry.isSymbolicLink()) {
|
|
104
|
+
throw new Error(`Continuation origin-context group temporary is not a regular file: ${path}`);
|
|
105
|
+
}
|
|
106
|
+
// Atomic marker writes are bounded and owner-only. Treat leftover
|
|
107
|
+
// temporaries as cleanup-only evidence, but validate their filesystem
|
|
108
|
+
// identity before deleting so a swapped, linked, or forged entry cannot
|
|
109
|
+
// hide behind the recovery sweep.
|
|
110
|
+
await readBoundedOwnerOnlyFile(path, 64 * 1024, "Continuation origin-context group temporary");
|
|
111
|
+
await rm(path, { force: true });
|
|
112
|
+
removedTemporary = true;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (!/^[a-f0-9]{64}\.json$/u.test(entry.name) || !entry.isFile() || entry.isSymbolicLink()) {
|
|
116
|
+
throw new Error(`Unexpected entry in continuation origin-context group directory: ${path}`);
|
|
117
|
+
}
|
|
118
|
+
const commit = await loadOriginContextGroupCommit(path);
|
|
119
|
+
if (`${commit.groupKey}.json` !== entry.name) {
|
|
120
|
+
throw new Error(`Continuation origin-context group filename does not match its key: ${path}`);
|
|
121
|
+
}
|
|
122
|
+
applyOriginContextGroupCommit(records, commit);
|
|
123
|
+
applied.push(path);
|
|
124
|
+
}
|
|
125
|
+
if (removedTemporary)
|
|
126
|
+
await syncDirectory(directory);
|
|
127
|
+
return applied;
|
|
128
|
+
}
|
|
129
|
+
export async function cleanOriginContextGroupTemporaries(directory) {
|
|
130
|
+
let removedTemporary = false;
|
|
131
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
132
|
+
if (!(entry.name.startsWith(".") && entry.name.endsWith(".tmp")))
|
|
133
|
+
continue;
|
|
134
|
+
const path = join(directory, entry.name);
|
|
135
|
+
if (!entry.isFile() || entry.isSymbolicLink()) {
|
|
136
|
+
throw new Error(`Continuation origin-context group temporary is not a regular file: ${path}`);
|
|
137
|
+
}
|
|
138
|
+
await readBoundedOwnerOnlyFile(path, 64 * 1024, "Continuation origin-context group temporary");
|
|
139
|
+
await rm(path, { force: true });
|
|
140
|
+
removedTemporary = true;
|
|
141
|
+
}
|
|
142
|
+
if (removedTemporary)
|
|
143
|
+
await syncDirectory(directory);
|
|
144
|
+
}
|
|
145
|
+
export async function loadOriginContextGroupCommit(path) {
|
|
146
|
+
const raw = await readBoundedOwnerOnlyFile(path, 64 * 1024, "Continuation origin-context group commit");
|
|
147
|
+
let value;
|
|
148
|
+
try {
|
|
149
|
+
value = JSON.parse(raw);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new Error(`Continuation origin-context group commit contains invalid JSON: ${path}`, { cause: error });
|
|
153
|
+
}
|
|
154
|
+
if (!isOriginContextGroupCommit(value)) {
|
|
155
|
+
throw new Error(`Continuation origin-context group commit has a malformed schema: ${path}`);
|
|
156
|
+
}
|
|
157
|
+
return value;
|
|
158
|
+
}
|
|
159
|
+
export async function removeOriginContextGroupCommits(directory, paths) {
|
|
160
|
+
if (paths.length === 0)
|
|
161
|
+
return;
|
|
162
|
+
for (const path of paths)
|
|
163
|
+
await rm(path, { force: true });
|
|
164
|
+
await syncDirectory(directory);
|
|
165
|
+
}
|
|
166
|
+
export class OriginContextCorruptionError extends Error {
|
|
167
|
+
}
|
|
168
|
+
export function originContextDigest(canonical) {
|
|
169
|
+
return continuationDigest(`mono-agent-origin-context-v1\0${canonical}`);
|
|
170
|
+
}
|
|
171
|
+
export async function readOriginContextCanonical(path, reference) {
|
|
172
|
+
let canonical;
|
|
173
|
+
try {
|
|
174
|
+
const loaded = await readBoundedOwnerOnlyFileWithStats(path, MAX_CONTINUATION_ORIGIN_CONTEXT_BYTES, "Continuation origin context");
|
|
175
|
+
if (loaded.bytes !== reference.bytes) {
|
|
176
|
+
throw new OriginContextCorruptionError("Continuation origin context size does not match its reference.");
|
|
177
|
+
}
|
|
178
|
+
canonical = loaded.text;
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
if (error instanceof OriginContextCorruptionError || isMissing(error))
|
|
182
|
+
throw error;
|
|
183
|
+
throw new OriginContextCorruptionError("Continuation origin context is not a safe owner-only file.", { cause: error });
|
|
184
|
+
}
|
|
185
|
+
if (Buffer.byteLength(canonical, "utf8") !== reference.bytes
|
|
186
|
+
|| originContextDigest(canonical) !== reference.digest) {
|
|
187
|
+
throw new OriginContextCorruptionError("Continuation origin context digest does not match its reference.");
|
|
188
|
+
}
|
|
189
|
+
let parsed;
|
|
190
|
+
try {
|
|
191
|
+
parsed = JSON.parse(canonical);
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
throw new OriginContextCorruptionError("Continuation origin context is not valid JSON.", { cause: error });
|
|
195
|
+
}
|
|
196
|
+
if (canonicalContinuationJson(parsed) !== canonical) {
|
|
197
|
+
throw new OriginContextCorruptionError("Continuation origin context is not canonically encoded.");
|
|
198
|
+
}
|
|
199
|
+
try {
|
|
200
|
+
assertAgentContinuationOriginContext(parsed);
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
throw new OriginContextCorruptionError("Continuation origin context has an invalid schema.", { cause: error });
|
|
204
|
+
}
|
|
205
|
+
if (parsed.messages.length !== reference.messageCount) {
|
|
206
|
+
throw new OriginContextCorruptionError("Continuation origin context message count does not match its reference.");
|
|
207
|
+
}
|
|
208
|
+
return canonical;
|
|
209
|
+
}
|
|
210
|
+
export function referencedOriginContextDigests(records) {
|
|
211
|
+
return new Set([...records.values()].flatMap((record) => record.originContextRef === undefined ? [] : [record.originContextRef.digest]));
|
|
212
|
+
}
|
|
213
|
+
export function releasePendingOriginPin(pins, digest) {
|
|
214
|
+
const count = pins.get(digest);
|
|
215
|
+
if (count === undefined)
|
|
216
|
+
return;
|
|
217
|
+
if (count <= 1)
|
|
218
|
+
pins.delete(digest);
|
|
219
|
+
else
|
|
220
|
+
pins.set(digest, count - 1);
|
|
221
|
+
}
|
|
222
|
+
export async function sweepOriginContextBlobs(directory, referenced, pending) {
|
|
223
|
+
let changed = false;
|
|
224
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
225
|
+
const path = join(directory, entry.name);
|
|
226
|
+
if (entry.name.startsWith(".") && entry.name.endsWith(".tmp")) {
|
|
227
|
+
if (!entry.isFile() && !entry.isSymbolicLink()) {
|
|
228
|
+
throw new Error(`Continuation origin-context temporary is not a regular file: ${path}`);
|
|
229
|
+
}
|
|
230
|
+
await rm(path, { force: true });
|
|
231
|
+
changed = true;
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
const match = /^([a-f0-9]{64})\.json$/u.exec(entry.name);
|
|
235
|
+
if (match?.[1] !== undefined && !referenced.has(match[1]) && !pending.has(match[1])) {
|
|
236
|
+
await rm(path, { force: true, recursive: true });
|
|
237
|
+
changed = true;
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (match?.[1] === undefined) {
|
|
241
|
+
throw new Error(`Unexpected entry in continuation origin-context directory: ${path}`);
|
|
242
|
+
}
|
|
243
|
+
if (!entry.isFile() || entry.isSymbolicLink())
|
|
244
|
+
continue;
|
|
245
|
+
try {
|
|
246
|
+
await assertOwnerOnlyRegularFile(path, "Continuation origin context");
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (changed)
|
|
253
|
+
await syncDirectory(directory);
|
|
254
|
+
}
|
|
255
|
+
export async function originContextStoreBytes(directory) {
|
|
256
|
+
let total = 0;
|
|
257
|
+
for (const entry of await readdir(directory, { withFileTypes: true })) {
|
|
258
|
+
if (entry.name.startsWith(".") && entry.name.endsWith(".tmp"))
|
|
259
|
+
continue;
|
|
260
|
+
if (!/^[a-f0-9]{64}\.json$/u.test(entry.name)) {
|
|
261
|
+
throw new Error(`Unexpected entry in continuation origin-context directory: ${join(directory, entry.name)}`);
|
|
262
|
+
}
|
|
263
|
+
if (!entry.isFile() || entry.isSymbolicLink())
|
|
264
|
+
continue;
|
|
265
|
+
const info = await lstat(join(directory, entry.name));
|
|
266
|
+
total += info.size;
|
|
267
|
+
if (total > MAX_CONTINUATION_ORIGIN_CONTEXT_STORE_BYTES) {
|
|
268
|
+
throw new Error("Continuation origin context store exceeds its aggregate byte quota.");
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return total;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=continuation-origin-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation-origin-store.js","sourceRoot":"","sources":["../src/continuation-origin-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare class ContinuationSynthesisUnavailableError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
readonly retryAfterMs: number | undefined;
|
|
4
|
+
constructor(code: string, message: string, retryAfterMs?: number);
|
|
5
|
+
}
|
|
6
|
+
export declare class ContinuationServiceStoppingError extends Error {
|
|
7
|
+
constructor();
|
|
8
|
+
}
|
|
9
|
+
export declare class ContinuationOperationTimeoutError extends Error {
|
|
10
|
+
readonly phase: "synthesis" | "delivery";
|
|
11
|
+
constructor(phase: "synthesis" | "delivery", timeoutMs: number);
|
|
12
|
+
}
|
|
13
|
+
export declare class ContinuationProtocolError extends Error {
|
|
14
|
+
readonly status: number;
|
|
15
|
+
readonly code: string;
|
|
16
|
+
constructor(status: number, code: string, message: string);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=continuation-service-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation-service-errors.d.ts","sourceRoot":"","sources":["../src/continuation-service-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,qCAAsC,SAAQ,KAAK;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;gBAE9B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAMjE;AAED,qBAAa,gCAAiC,SAAQ,KAAK;;CAK1D;AAED,qBAAa,iCAAkC,SAAQ,KAAK;IAC9C,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,UAAU;gBAA/B,KAAK,EAAE,WAAW,GAAG,UAAU,EAAE,SAAS,EAAE,MAAM;CAIxE;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAM1D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export class ContinuationSynthesisUnavailableError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
retryAfterMs;
|
|
4
|
+
constructor(code, message, retryAfterMs) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "ContinuationSynthesisUnavailableError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.retryAfterMs = retryAfterMs;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class ContinuationServiceStoppingError extends Error {
|
|
12
|
+
constructor() {
|
|
13
|
+
super("Continuation service is stopping.");
|
|
14
|
+
this.name = "ContinuationServiceStoppingError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class ContinuationOperationTimeoutError extends Error {
|
|
18
|
+
phase;
|
|
19
|
+
constructor(phase, timeoutMs) {
|
|
20
|
+
super(`Continuation ${phase} exceeded its ${String(timeoutMs)}ms timeout.`);
|
|
21
|
+
this.phase = phase;
|
|
22
|
+
this.name = "ContinuationOperationTimeoutError";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class ContinuationProtocolError extends Error {
|
|
26
|
+
status;
|
|
27
|
+
code;
|
|
28
|
+
constructor(status, code, message) {
|
|
29
|
+
super(message);
|
|
30
|
+
this.name = "ContinuationProtocolError";
|
|
31
|
+
this.status = status;
|
|
32
|
+
this.code = code;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=continuation-service-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation-service-errors.js","sourceRoot":"","sources":["../src/continuation-service-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IACrD,IAAI,CAAS;IACb,YAAY,CAAqB;IAE1C,YAAY,IAAY,EAAE,OAAe,EAAE,YAAqB;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gCAAiC,SAAQ,KAAK;IACzD;QACE,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IACjD,CAAC;CACF;AAED,MAAM,OAAO,iCAAkC,SAAQ,KAAK;IACrC;IAArB,YAAqB,KAA+B,EAAE,SAAiB;QACrE,KAAK,CAAC,gBAAgB,KAAK,iBAAiB,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QADzD,UAAK,GAAL,KAAK,CAA0B;QAElD,IAAI,CAAC,IAAI,GAAG,mCAAmC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,MAAM,CAAS;IACf,IAAI,CAAS;IAEtB,YAAY,MAAc,EAAE,IAAY,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { IncomingMessage, Server, ServerResponse } from "node:http";
|
|
2
|
+
import type { ContinuationOriginContextReference, DurableContinuationRecord } from "./continuation-store.js";
|
|
3
|
+
import { type ResolvedOriginContext } from "./continuation-service-types.js";
|
|
4
|
+
import { type ContinuationLimits, type ContinuationStatusSnapshot, type ContinuationSynthesisInput, type NamedContinuationRoute } from "./continuations.js";
|
|
5
|
+
export declare function continuationOperatorToken(secret: Uint8Array): string;
|
|
6
|
+
export interface ParsedClaim {
|
|
7
|
+
readonly taskKey: string;
|
|
8
|
+
readonly taskHash: string;
|
|
9
|
+
readonly deadline: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function parseClaim(body: unknown, now: Date, maxDeadlineMs: number): ParsedClaim;
|
|
12
|
+
export declare function statusOf(record: DurableContinuationRecord | undefined): ContinuationStatusSnapshot | undefined;
|
|
13
|
+
export declare function statusOfRequired(record: DurableContinuationRecord): ContinuationStatusSnapshot;
|
|
14
|
+
export declare function requireRecord(records: Map<string, DurableContinuationRecord>, id: string): DurableContinuationRecord;
|
|
15
|
+
export declare function synthesisInput(record: DurableContinuationRecord, originContext: Extract<ResolvedOriginContext, {
|
|
16
|
+
readonly kind: "ready";
|
|
17
|
+
}>): ContinuationSynthesisInput;
|
|
18
|
+
export declare function originContextBindingMac(secret: Uint8Array, record: DurableContinuationRecord, reference: ContinuationOriginContextReference): string;
|
|
19
|
+
export declare function requireLease(record: DurableContinuationRecord, owner: string): void;
|
|
20
|
+
export declare function clearLease(record: DurableContinuationRecord): void;
|
|
21
|
+
export declare function expire(record: DurableContinuationRecord, at: string): void;
|
|
22
|
+
export declare function errorRecord(code: string, reason: string, at: string): NonNullable<DurableContinuationRecord["lastError"]>;
|
|
23
|
+
export declare function authorizeRecordToken(record: DurableContinuationRecord, token: string): void;
|
|
24
|
+
export declare function validateNamedRoutes(routes: Readonly<Record<string, NamedContinuationRoute>>): void;
|
|
25
|
+
export declare function resolveContinuationLimits(input: Partial<ContinuationLimits> | undefined): ContinuationLimits;
|
|
26
|
+
export declare function operatorContinuationPage(records: readonly DurableContinuationRecord[], url: URL, configuredPageSize: number): Record<string, unknown>;
|
|
27
|
+
export declare function closeContinuationServer(server: Server): Promise<void>;
|
|
28
|
+
export declare function requireBearer(request: IncomingMessage): string;
|
|
29
|
+
export declare function requireHeader(request: IncomingMessage, name: string): string;
|
|
30
|
+
export declare function readJson(request: IncomingMessage, maxBytes: number): Promise<unknown>;
|
|
31
|
+
export declare function asObject(value: unknown): Record<string, unknown>;
|
|
32
|
+
export declare function requiredStringField(object: Record<string, unknown>, key: string, max?: number): string;
|
|
33
|
+
export declare function sendJson(response: ServerResponse, status: number, body: unknown): void;
|
|
34
|
+
export declare function isLoopbackHost(host: string): boolean;
|
|
35
|
+
export declare function formatHost(host: string): string;
|
|
36
|
+
export declare function backoffMs(attempt: number, base: number, cap: number): number;
|
|
37
|
+
export declare function safeReason(error: unknown): string;
|
|
38
|
+
export declare function boundedHistoryErrorCode(value: string): string;
|
|
39
|
+
//# sourceMappingURL=continuation-service-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuation-service-helpers.d.ts","sourceRoot":"","sources":["../src/continuation-service-helpers.ts"],"names":[],"mappings":"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"}
|