@inhuman.tools/turn 0.1.0 → 0.3.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/README.md +38 -0
- package/dist/agent-calls/acceptance.d.ts +1 -1
- package/dist/agent-calls/acceptance.d.ts.map +1 -1
- package/dist/agent-calls/acceptance.js +1 -1
- package/dist/agent-calls/acceptance.js.map +1 -1
- package/dist/agent-calls/callbacks.d.ts +1 -1
- package/dist/agent-calls/callbacks.d.ts.map +1 -1
- package/dist/agent-calls/callbacks.js +1 -1
- package/dist/agent-calls/callbacks.js.map +1 -1
- package/dist/agent-calls/delivery.d.ts +1 -1
- package/dist/agent-calls/delivery.d.ts.map +1 -1
- package/dist/agent-calls/delivery.js +1 -1
- package/dist/agent-calls/delivery.js.map +1 -1
- package/dist/agent-calls/operator.d.ts +1 -1
- package/dist/agent-calls/operator.d.ts.map +1 -1
- package/dist/agent-calls/operator.js +1 -1
- package/dist/agent-calls/operator.js.map +1 -1
- package/dist/agent-calls/runtime.d.ts +4 -2
- package/dist/agent-calls/runtime.d.ts.map +1 -1
- package/dist/agent-calls/runtime.js +17 -11
- package/dist/agent-calls/runtime.js.map +1 -1
- package/dist/agent-calls/types.d.ts +1 -1
- package/dist/agent-calls/types.d.ts.map +1 -1
- package/dist/context/compact-floors.d.ts +1 -1
- package/dist/context/compact-floors.d.ts.map +1 -1
- package/dist/context/compact.d.ts +1 -1
- package/dist/context/compact.d.ts.map +1 -1
- package/dist/context/compact.js +5 -4
- package/dist/context/compact.js.map +1 -1
- package/dist/context/history.d.ts +1 -1
- package/dist/context/history.d.ts.map +1 -1
- package/dist/context/history.js +35 -3
- package/dist/context/history.js.map +1 -1
- package/dist/context/retention/defaults.js +1 -1
- package/dist/context/retention/defaults.js.map +1 -1
- package/dist/context/retention/resolve.js +1 -1
- package/dist/context/retention/resolve.js.map +1 -1
- package/dist/context/retention/schema.js +1 -1
- package/dist/context/retention/schema.js.map +1 -1
- package/dist/context/retention/stamp.d.ts +1 -1
- package/dist/context/retention/stamp.d.ts.map +1 -1
- package/dist/context/retention/stamp.js +5 -2
- package/dist/context/retention/stamp.js.map +1 -1
- package/dist/context/retention/step.d.ts +1 -1
- package/dist/context/retention/step.d.ts.map +1 -1
- package/dist/context/retention/step.js +7 -4
- package/dist/context/retention/step.js.map +1 -1
- package/dist/context/retention/view.d.ts +1 -1
- package/dist/context/retention/view.d.ts.map +1 -1
- package/dist/context/retention/view.js +1 -1
- package/dist/context/retention/view.js.map +1 -1
- package/dist/context/spawn-history.d.ts +13 -0
- package/dist/context/spawn-history.d.ts.map +1 -0
- package/dist/context/spawn-history.js +82 -0
- package/dist/context/spawn-history.js.map +1 -0
- package/dist/context/squeeze.d.ts +1 -1
- package/dist/context/squeeze.d.ts.map +1 -1
- package/dist/context/squeeze.js +1 -1
- package/dist/context/squeeze.js.map +1 -1
- package/dist/context/tools.d.ts +2 -2
- package/dist/context/tools.d.ts.map +1 -1
- package/dist/context/tools.js +2 -2
- package/dist/context/tools.js.map +1 -1
- package/dist/context/transcript.d.ts +3 -1
- package/dist/context/transcript.d.ts.map +1 -1
- package/dist/context/transcript.js +17 -4
- package/dist/context/transcript.js.map +1 -1
- package/dist/policy-processor/classifier.d.ts.map +1 -1
- package/dist/policy-processor/classifier.js +3 -1
- package/dist/policy-processor/classifier.js.map +1 -1
- package/dist/policy-processor/scope.d.ts +1 -0
- package/dist/policy-processor/scope.d.ts.map +1 -1
- package/dist/policy-processor/scope.js +9 -2
- package/dist/policy-processor/scope.js.map +1 -1
- package/dist/policy-processor/unattended-guard.js +8 -2
- package/dist/policy-processor/unattended-guard.js.map +1 -1
- package/dist/resources/compact-assets.d.ts +5 -0
- package/dist/resources/compact-assets.d.ts.map +1 -0
- package/dist/resources/compact-assets.js +6 -0
- package/dist/resources/compact-assets.js.map +1 -0
- package/dist/resources/compact-snapshot.d.ts +21 -0
- package/dist/resources/compact-snapshot.d.ts.map +1 -0
- package/dist/resources/compact-snapshot.js +44 -0
- package/dist/resources/compact-snapshot.js.map +1 -0
- package/dist/resources/index.d.ts +6 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +19 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/module-bundle.d.ts +16 -0
- package/dist/resources/module-bundle.d.ts.map +1 -0
- package/dist/resources/module-bundle.js +78 -0
- package/dist/resources/module-bundle.js.map +1 -0
- package/dist/runtime/ambient-compact.d.ts +38 -0
- package/dist/runtime/ambient-compact.d.ts.map +1 -0
- package/dist/runtime/ambient-compact.js +123 -0
- package/dist/runtime/ambient-compact.js.map +1 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/ports.d.ts +33 -0
- package/dist/runtime/ports.d.ts.map +1 -0
- package/dist/runtime/ports.js +2 -0
- package/dist/runtime/ports.js.map +1 -0
- package/dist/runtime/prompt-message-of.d.ts +4 -0
- package/dist/runtime/prompt-message-of.d.ts.map +1 -0
- package/dist/runtime/prompt-message-of.js +8 -0
- package/dist/runtime/prompt-message-of.js.map +1 -0
- package/dist/runtime/re-act-loop-intent-detected-trigger.d.ts +32 -0
- package/dist/runtime/re-act-loop-intent-detected-trigger.d.ts.map +1 -0
- package/dist/runtime/re-act-loop-intent-detected-trigger.js +132 -0
- package/dist/runtime/re-act-loop-intent-detected-trigger.js.map +1 -0
- package/dist/runtime/round-boundary.d.ts +13 -0
- package/dist/runtime/round-boundary.d.ts.map +1 -0
- package/dist/runtime/round-boundary.js +210 -0
- package/dist/runtime/round-boundary.js.map +1 -0
- package/dist/runtime/round-stop.d.ts +9 -0
- package/dist/runtime/round-stop.d.ts.map +1 -0
- package/dist/runtime/round-stop.js +19 -0
- package/dist/runtime/round-stop.js.map +1 -0
- package/dist/runtime/tool-call.d.ts +4 -0
- package/dist/runtime/tool-call.d.ts.map +1 -0
- package/dist/runtime/tool-call.js +8 -0
- package/dist/runtime/tool-call.js.map +1 -0
- package/dist/runtime/turn-iterator.d.ts +32 -0
- package/dist/runtime/turn-iterator.d.ts.map +1 -0
- package/dist/runtime/turn-iterator.js +251 -0
- package/dist/runtime/turn-iterator.js.map +1 -0
- package/dist/runtime/turn-resolvers.d.ts +17 -0
- package/dist/runtime/turn-resolvers.d.ts.map +1 -0
- package/dist/runtime/turn-resolvers.js +29 -0
- package/dist/runtime/turn-resolvers.js.map +1 -0
- package/dist/session/cancel.d.ts +4 -1
- package/dist/session/cancel.d.ts.map +1 -1
- package/dist/session/cancel.js +10 -2
- package/dist/session/cancel.js.map +1 -1
- package/dist/session/commands.d.ts +1 -1
- package/dist/session/commands.d.ts.map +1 -1
- package/dist/session/commands.js +4 -2
- package/dist/session/commands.js.map +1 -1
- package/dist/session/compact-actor.d.ts +12 -5
- package/dist/session/compact-actor.d.ts.map +1 -1
- package/dist/session/compact-actor.js +64 -12
- package/dist/session/compact-actor.js.map +1 -1
- package/dist/session/compact-env.d.ts +31 -5
- package/dist/session/compact-env.d.ts.map +1 -1
- package/dist/session/compact-env.js +23 -13
- package/dist/session/compact-env.js.map +1 -1
- package/dist/session/compact.d.ts +6 -3
- package/dist/session/compact.d.ts.map +1 -1
- package/dist/session/compact.js.map +1 -1
- package/dist/session/index.d.ts +2 -2
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +2 -2
- package/dist/session/index.js.map +1 -1
- package/dist/session/park.d.ts +1 -1
- package/dist/session/park.d.ts.map +1 -1
- package/dist/session/park.js +1 -1
- package/dist/session/park.js.map +1 -1
- package/dist/session/side-channel-reminder.d.ts +1 -1
- package/dist/session/side-channel-reminder.d.ts.map +1 -1
- package/dist/session/side-channel-reminder.js +1 -1
- package/dist/session/side-channel-reminder.js.map +1 -1
- package/dist/session/types.d.ts +1 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session-runtime/ask-line.d.ts +7 -0
- package/dist/session-runtime/ask-line.d.ts.map +1 -0
- package/dist/session-runtime/ask-line.js +36 -0
- package/dist/session-runtime/ask-line.js.map +1 -0
- package/dist/session-runtime/durability.d.ts +25 -0
- package/dist/session-runtime/durability.d.ts.map +1 -0
- package/dist/session-runtime/durability.js +18 -0
- package/dist/session-runtime/durability.js.map +1 -0
- package/dist/session-runtime/effects.d.ts +53 -0
- package/dist/session-runtime/effects.d.ts.map +1 -0
- package/dist/session-runtime/effects.js +18 -0
- package/dist/session-runtime/effects.js.map +1 -0
- package/dist/session-runtime/index.d.ts +8 -0
- package/dist/session-runtime/index.d.ts.map +1 -0
- package/dist/session-runtime/index.js +8 -0
- package/dist/session-runtime/index.js.map +1 -0
- package/dist/session-runtime/interrupt.d.ts +3 -0
- package/dist/session-runtime/interrupt.d.ts.map +1 -0
- package/dist/session-runtime/interrupt.js +33 -0
- package/dist/session-runtime/interrupt.js.map +1 -0
- package/dist/session-runtime/recovery.d.ts +17 -0
- package/dist/session-runtime/recovery.d.ts.map +1 -0
- package/dist/session-runtime/recovery.js +119 -0
- package/dist/session-runtime/recovery.js.map +1 -0
- package/dist/session-runtime/runtime.d.ts +50 -0
- package/dist/session-runtime/runtime.d.ts.map +1 -0
- package/dist/session-runtime/runtime.js +533 -0
- package/dist/session-runtime/runtime.js.map +1 -0
- package/dist/session-runtime/summary.d.ts +26 -0
- package/dist/session-runtime/summary.d.ts.map +1 -0
- package/dist/session-runtime/summary.js +33 -0
- package/dist/session-runtime/summary.js.map +1 -0
- package/dist/tool-catalog/bindings.d.ts +6 -0
- package/dist/tool-catalog/bindings.d.ts.map +1 -0
- package/dist/tool-catalog/bindings.js +37 -0
- package/dist/tool-catalog/bindings.js.map +1 -0
- package/dist/tool-catalog/catalog.d.ts +1 -3
- package/dist/tool-catalog/catalog.d.ts.map +1 -1
- package/dist/tool-catalog/catalog.js +6 -34
- package/dist/tool-catalog/catalog.js.map +1 -1
- package/dist/tool-catalog/types.d.ts +8 -0
- package/dist/tool-catalog/types.d.ts.map +1 -1
- package/dist/tool-catalog/types.js.map +1 -1
- package/dist/tool-runtime/approval/approved.d.ts +1 -1
- package/dist/tool-runtime/approval/approved.d.ts.map +1 -1
- package/dist/tool-runtime/approval/approved.js +1 -1
- package/dist/tool-runtime/approval/approved.js.map +1 -1
- package/dist/tool-runtime/handler.d.ts.map +1 -1
- package/dist/tool-runtime/handler.js +291 -237
- package/dist/tool-runtime/handler.js.map +1 -1
- package/dist/tool-runtime/run-system-tool.d.ts +1 -0
- package/dist/tool-runtime/run-system-tool.d.ts.map +1 -1
- package/dist/tool-runtime/run-system-tool.js +30 -10
- package/dist/tool-runtime/run-system-tool.js.map +1 -1
- package/dist/tool-runtime/worker-tools.d.ts.map +1 -1
- package/dist/tool-runtime/worker-tools.js +2 -2
- package/dist/tool-runtime/worker-tools.js.map +1 -1
- package/package.json +31 -18
- package/src/agent-calls/acceptance.ts +1 -1
- package/src/agent-calls/callbacks.ts +1 -1
- package/src/agent-calls/delivery.ts +1 -1
- package/src/agent-calls/operator.ts +7 -1
- package/src/agent-calls/runtime.ts +23 -11
- package/src/agent-calls/types.ts +1 -1
- package/src/context/compact-floors.ts +1 -1
- package/src/context/compact.ts +4 -5
- package/src/context/history.ts +46 -4
- package/src/context/retention/defaults.ts +1 -1
- package/src/context/retention/resolve.ts +1 -1
- package/src/context/retention/schema.ts +1 -1
- package/src/context/retention/stamp.ts +7 -2
- package/src/context/retention/step.ts +7 -4
- package/src/context/retention/view.ts +1 -1
- package/src/context/spawn-history.ts +95 -0
- package/src/context/squeeze.ts +1 -1
- package/src/context/tools.ts +3 -2
- package/src/context/transcript.ts +15 -4
- package/src/policy-processor/README.md +1 -1
- package/src/policy-processor/classifier.ts +3 -1
- package/src/policy-processor/scope.ts +7 -2
- package/src/policy-processor/unattended-guard.ts +5 -2
- package/src/resources/compact-assets.ts +9 -0
- package/src/resources/compact-snapshot.ts +51 -0
- package/src/resources/index.ts +27 -0
- package/src/resources/module-bundle.ts +90 -0
- package/src/runtime/ambient-compact.ts +147 -0
- package/src/runtime/index.ts +17 -0
- package/src/runtime/ports.ts +28 -0
- package/src/runtime/prompt-message-of.ts +14 -0
- package/src/runtime/re-act-loop-intent-detected-trigger.ts +177 -0
- package/src/runtime/round-boundary.ts +248 -0
- package/src/runtime/round-stop.ts +24 -0
- package/src/runtime/tool-call.ts +10 -0
- package/src/runtime/turn-iterator.ts +312 -0
- package/src/runtime/turn-resolvers.ts +43 -0
- package/src/session/cancel.ts +11 -3
- package/src/session/commands.ts +5 -2
- package/src/session/compact-actor.ts +76 -16
- package/src/session/compact-env.ts +27 -18
- package/src/session/compact.ts +8 -3
- package/src/session/index.ts +7 -2
- package/src/session/park.ts +7 -1
- package/src/session/side-channel-reminder.ts +1 -1
- package/src/session/types.ts +1 -1
- package/src/session-runtime/ask-line.ts +39 -0
- package/src/session-runtime/durability.ts +41 -0
- package/src/session-runtime/effects.ts +35 -0
- package/src/session-runtime/index.ts +19 -0
- package/src/session-runtime/interrupt.ts +34 -0
- package/src/session-runtime/recovery.ts +145 -0
- package/src/session-runtime/runtime.ts +535 -0
- package/src/session-runtime/summary.ts +67 -0
- package/src/tool-catalog/bindings.ts +37 -0
- package/src/tool-catalog/catalog.ts +6 -31
- package/src/tool-catalog/types.ts +9 -0
- package/src/tool-runtime/approval/approved.ts +1 -1
- package/src/tool-runtime/handler.ts +40 -24
- package/src/tool-runtime/run-system-tool.ts +27 -11
- package/src/tool-runtime/worker-tools.ts +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-line.d.ts","sourceRoot":"","sources":["../../src/session-runtime/ask-line.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAEL,KAAK,aAAa,EASnB,MAAM,sCAAsC,CAAC;AAE9C,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAqBhE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Glance-sized sitting-ask question. Family + optional description.
|
|
3
|
+
* Not pretty-mcp interpolation — command/path stay off KernelRoot.
|
|
4
|
+
*/
|
|
5
|
+
import { AgentMessageJob, BotCallJob, CallJob, clampChars, flattenOverviewLine, GLANCE_ASK_DESCRIPTION_MAX_CHARS, GLANCE_ASK_LINE_MAX_CHARS, MCPToolJob, ToolCallJob, } from "@inhuman.tools/harness-model/session";
|
|
6
|
+
export function glanceAskLine(head) {
|
|
7
|
+
if (head == null)
|
|
8
|
+
return "";
|
|
9
|
+
if (!(head instanceof ToolCallJob))
|
|
10
|
+
return "";
|
|
11
|
+
const args = head.args;
|
|
12
|
+
const description = args != null && typeof args.description === "string"
|
|
13
|
+
? flattenOverviewLine(args.description, GLANCE_ASK_DESCRIPTION_MAX_CHARS)
|
|
14
|
+
: "";
|
|
15
|
+
if (description !== "")
|
|
16
|
+
return clampChars(`approve ${description}?`, GLANCE_ASK_LINE_MAX_CHARS);
|
|
17
|
+
if (head instanceof BotCallJob)
|
|
18
|
+
return "confirm bot?";
|
|
19
|
+
if (head instanceof CallJob || head instanceof AgentMessageJob)
|
|
20
|
+
return "confirm agent?";
|
|
21
|
+
if (head instanceof MCPToolJob) {
|
|
22
|
+
const tool = head.serverToolName.trim() || head.name.trim();
|
|
23
|
+
return tool === "" ? "" : clampChars(`confirm ${tool}?`, GLANCE_ASK_LINE_MAX_CHARS);
|
|
24
|
+
}
|
|
25
|
+
const name = head.name.trim();
|
|
26
|
+
if (name === "shell")
|
|
27
|
+
return "confirm shell command?";
|
|
28
|
+
if (name === "edit_file")
|
|
29
|
+
return "confirm edit?";
|
|
30
|
+
if (name === "write_file")
|
|
31
|
+
return "confirm write?";
|
|
32
|
+
if (name === "")
|
|
33
|
+
return "";
|
|
34
|
+
return clampChars(`confirm ${name}?`, GLANCE_ASK_LINE_MAX_CHARS);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=ask-line.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-line.js","sourceRoot":"","sources":["../../src/session-runtime/ask-line.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EACL,eAAe,EAEf,UAAU,EACV,OAAO,EACP,UAAU,EACV,mBAAmB,EACnB,gCAAgC,EAChC,yBAAyB,EACzB,UAAU,EACV,WAAW,GACZ,MAAM,sCAAsC,CAAC;AAE9C,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,IAAI,IAAI,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC5B,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,WAAW,GACf,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;QAClD,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC;QACzE,CAAC,CAAC,EAAE,CAAC;IACT,IAAI,WAAW,KAAK,EAAE;QAAE,OAAO,UAAU,CAAC,WAAW,WAAW,GAAG,EAAE,yBAAyB,CAAC,CAAC;IAChG,IAAI,IAAI,YAAY,UAAU;QAAE,OAAO,cAAc,CAAC;IACtD,IAAI,IAAI,YAAY,OAAO,IAAI,IAAI,YAAY,eAAe;QAAE,OAAO,gBAAgB,CAAC;IACxF,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5D,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,GAAG,EAAE,yBAAyB,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,wBAAwB,CAAC;IACtD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,eAAe,CAAC;IACjD,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,gBAAgB,CAAC;IACnD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,UAAU,CAAC,WAAW,IAAI,GAAG,EAAE,yBAAyB,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type SessionCheckpoint = {
|
|
2
|
+
readonly sessionId: string;
|
|
3
|
+
readonly incarnation: string;
|
|
4
|
+
readonly revision: number;
|
|
5
|
+
readonly state: Uint8Array;
|
|
6
|
+
};
|
|
7
|
+
export type SessionReceipt = {
|
|
8
|
+
readonly sessionId: string;
|
|
9
|
+
readonly incarnation: string;
|
|
10
|
+
readonly revision: number;
|
|
11
|
+
};
|
|
12
|
+
export type SessionDurability = {
|
|
13
|
+
readonly kind: "memory";
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: "durable";
|
|
16
|
+
commit(checkpoint: SessionCheckpoint): Promise<SessionReceipt>;
|
|
17
|
+
};
|
|
18
|
+
export declare function receiptCovers(receipt: SessionReceipt, checkpoint: SessionCheckpoint): boolean;
|
|
19
|
+
export declare class SessionPersistenceError extends Error {
|
|
20
|
+
constructor(message?: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class SessionOwnershipError extends Error {
|
|
23
|
+
constructor(message?: string);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=durability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durability.d.ts","sourceRoot":"","sources":["../../src/session-runtime/durability.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,MAAM,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAChE,CAAC;AAEN,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAM7F;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,OAAO,SAAoD;CAIxE;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,SAAmD;CAIvE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function receiptCovers(receipt, checkpoint) {
|
|
2
|
+
return (receipt.sessionId === checkpoint.sessionId &&
|
|
3
|
+
receipt.incarnation === checkpoint.incarnation &&
|
|
4
|
+
receipt.revision >= checkpoint.revision);
|
|
5
|
+
}
|
|
6
|
+
export class SessionPersistenceError extends Error {
|
|
7
|
+
constructor(message = "session checkpoint was not durably acknowledged") {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = "SessionPersistenceError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class SessionOwnershipError extends Error {
|
|
13
|
+
constructor(message = "session execution no longer owns this document") {
|
|
14
|
+
super(message);
|
|
15
|
+
this.name = "SessionOwnershipError";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=durability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"durability.js","sourceRoot":"","sources":["../../src/session-runtime/durability.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,aAAa,CAAC,OAAuB,EAAE,UAA6B;IAClF,OAAO,CACL,OAAO,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS;QAC1C,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,WAAW;QAC9C,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CACxC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,OAAO,GAAG,iDAAiD;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,GAAG,gDAAgD;QACpE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export type SessionEffectRequest = {
|
|
3
|
+
readonly sessionId: string;
|
|
4
|
+
readonly operationId: string;
|
|
5
|
+
readonly incarnation: string;
|
|
6
|
+
readonly method: string;
|
|
7
|
+
readonly payload: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const sessionEffectOutcomeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
10
|
+
kind: z.ZodLiteral<"success">;
|
|
11
|
+
payload: z.ZodString;
|
|
12
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
13
|
+
kind: z.ZodLiteral<"refused">;
|
|
14
|
+
message: z.ZodString;
|
|
15
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
16
|
+
kind: z.ZodLiteral<"unknown">;
|
|
17
|
+
message: z.ZodString;
|
|
18
|
+
}, z.core.$strip>], "kind">;
|
|
19
|
+
export type SessionEffectOutcome = z.infer<typeof sessionEffectOutcomeSchema>;
|
|
20
|
+
export type SessionEffectPort = {
|
|
21
|
+
invoke(request: SessionEffectRequest, signal: AbortSignal): Promise<SessionEffectOutcome>;
|
|
22
|
+
reconcile?(request: SessionEffectRequest, signal: AbortSignal): Promise<SessionEffectOutcome>;
|
|
23
|
+
};
|
|
24
|
+
export declare const effectRecordSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
25
|
+
phase: z.ZodLiteral<"intent">;
|
|
26
|
+
request: z.ZodObject<{
|
|
27
|
+
sessionId: z.ZodString;
|
|
28
|
+
operationId: z.ZodString;
|
|
29
|
+
incarnation: z.ZodString;
|
|
30
|
+
method: z.ZodString;
|
|
31
|
+
payload: z.ZodString;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
34
|
+
phase: z.ZodLiteral<"result">;
|
|
35
|
+
request: z.ZodObject<{
|
|
36
|
+
sessionId: z.ZodString;
|
|
37
|
+
operationId: z.ZodString;
|
|
38
|
+
incarnation: z.ZodString;
|
|
39
|
+
method: z.ZodString;
|
|
40
|
+
payload: z.ZodString;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
outcome: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
43
|
+
kind: z.ZodLiteral<"success">;
|
|
44
|
+
payload: z.ZodString;
|
|
45
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
46
|
+
kind: z.ZodLiteral<"refused">;
|
|
47
|
+
message: z.ZodString;
|
|
48
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
49
|
+
kind: z.ZodLiteral<"unknown">;
|
|
50
|
+
message: z.ZodString;
|
|
51
|
+
}, z.core.$strip>], "kind">;
|
|
52
|
+
}, z.core.$strip>], "phase">;
|
|
53
|
+
//# sourceMappingURL=effects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.d.ts","sourceRoot":"","sources":["../../src/session-runtime/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,eAAO,MAAM,0BAA0B;;;;;;;;;2BAIrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC1F,SAAS,CAAC,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAC/F,CAAC;AAUF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAG7B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const sessionEffectOutcomeSchema = z.discriminatedUnion("kind", [
|
|
3
|
+
z.object({ kind: z.literal("success"), payload: z.string() }),
|
|
4
|
+
z.object({ kind: z.literal("refused"), message: z.string() }),
|
|
5
|
+
z.object({ kind: z.literal("unknown"), message: z.string() }),
|
|
6
|
+
]);
|
|
7
|
+
const requestSchema = z.object({
|
|
8
|
+
sessionId: z.string(),
|
|
9
|
+
operationId: z.string(),
|
|
10
|
+
incarnation: z.string(),
|
|
11
|
+
method: z.string(),
|
|
12
|
+
payload: z.string(),
|
|
13
|
+
});
|
|
14
|
+
export const effectRecordSchema = z.discriminatedUnion("phase", [
|
|
15
|
+
z.object({ phase: z.literal("intent"), request: requestSchema }),
|
|
16
|
+
z.object({ phase: z.literal("result"), request: requestSchema, outcome: sessionEffectOutcomeSchema }),
|
|
17
|
+
]);
|
|
18
|
+
//# sourceMappingURL=effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects.js","sourceRoot":"","sources":["../../src/session-runtime/effects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACrE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7D,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC7D,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CAC9D,CAAC,CAAC;AASH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE;IAC9D,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAChE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACtG,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { SessionRuntime, type SessionRecoveryPolicy } from "./runtime.js";
|
|
2
|
+
export { receiptCovers, SessionOwnershipError, SessionPersistenceError, type SessionCheckpoint, type SessionDurability, type SessionReceipt, } from "./durability.js";
|
|
3
|
+
export { sessionEffectOutcomeSchema, type SessionEffectOutcome, type SessionEffectPort, type SessionEffectRequest, } from "./effects.js";
|
|
4
|
+
export { recoverSessionJobs, type JobRecoveryOptions, type RecoveredJob } from "./recovery.js";
|
|
5
|
+
export { interruptSession } from "./interrupt.js";
|
|
6
|
+
export { sessionSummary, observeSessionSummary, type SessionSummary } from "./summary.js";
|
|
7
|
+
export { glanceAskLine } from "./ask-line.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { SessionRuntime } from "./runtime.js";
|
|
2
|
+
export { receiptCovers, SessionOwnershipError, SessionPersistenceError, } from "./durability.js";
|
|
3
|
+
export { sessionEffectOutcomeSchema, } from "./effects.js";
|
|
4
|
+
export { recoverSessionJobs } from "./recovery.js";
|
|
5
|
+
export { interruptSession } from "./interrupt.js";
|
|
6
|
+
export { sessionSummary, observeSessionSummary } from "./summary.js";
|
|
7
|
+
export { glanceAskLine } from "./ask-line.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session-runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA8B,MAAM,cAAc,CAAC;AAC1E,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,uBAAuB,GAIxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,GAI3B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAA8C,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAuB,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt.d.ts","sourceRoot":"","sources":["../../src/session-runtime/interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,sCAAsC,CAAC;AAI9C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAsBzE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { CallJob, CompactJob, CompletionJob, ProgrammaticJob, ToolCallJob, } from "@inhuman.tools/harness-model/session";
|
|
2
|
+
import { WorkExpectation, walkWork } from "@inhuman.tools/plexus-expectations";
|
|
3
|
+
import { runInAction } from "mobx";
|
|
4
|
+
export function interruptSession(root, message) {
|
|
5
|
+
runInAction(() => {
|
|
6
|
+
for (const turn of root.liveTurns) {
|
|
7
|
+
if (turn.reducerExited)
|
|
8
|
+
continue;
|
|
9
|
+
for (const node of walkWork(turn)) {
|
|
10
|
+
if (node instanceof CallJob)
|
|
11
|
+
continue;
|
|
12
|
+
if (node instanceof WorkExpectation && !node.isDone)
|
|
13
|
+
node.fail("cancel", message, "null");
|
|
14
|
+
if ((node instanceof ToolCallJob || node instanceof ProgrammaticJob) && !node.completed) {
|
|
15
|
+
node.outcomeSnap ??= { ok: false, text: message };
|
|
16
|
+
node.markComplete();
|
|
17
|
+
}
|
|
18
|
+
else if (node instanceof CompactJob && !node.completed) {
|
|
19
|
+
node.failed = true;
|
|
20
|
+
node.notice = message;
|
|
21
|
+
node.markComplete();
|
|
22
|
+
}
|
|
23
|
+
else if (node instanceof CompletionJob && !node.completed)
|
|
24
|
+
node.markComplete();
|
|
25
|
+
}
|
|
26
|
+
turn.cancelRequested = true;
|
|
27
|
+
turn.broke = message;
|
|
28
|
+
turn.reducerExited = true;
|
|
29
|
+
turn.markComplete();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=interrupt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt.js","sourceRoot":"","sources":["../../src/session-runtime/interrupt.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,UAAU,EACV,aAAa,EACb,eAAe,EACf,WAAW,GAEZ,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,UAAU,gBAAgB,CAAC,IAAiB,EAAE,OAAe;IACjE,WAAW,CAAC,GAAG,EAAE;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,aAAa;gBAAE,SAAS;YACjC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,IAAI,IAAI,YAAY,OAAO;oBAAE,SAAS;gBACtC,IAAI,IAAI,YAAY,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC1F,IAAI,CAAC,IAAI,YAAY,WAAW,IAAI,IAAI,YAAY,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACxF,IAAI,CAAC,WAAW,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBAClD,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,YAAY,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACzD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;oBACtB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC;qBAAM,IAAI,IAAI,YAAY,aAAa,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,YAAY,EAAE,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Session job recovery is shared by local and embedded hosts. */
|
|
2
|
+
import { CallJob, SessionRoot } from "@inhuman.tools/harness-model/session";
|
|
3
|
+
import { Job } from "@inhuman.tools/plexus-expectations";
|
|
4
|
+
import { type CallsCatalog } from "../agent-calls/index.js";
|
|
5
|
+
type JobRecoveryAction = "settled" | "dispatch" | "unknown" | "cancel" | "resume-inner";
|
|
6
|
+
export type RecoveredJob = {
|
|
7
|
+
readonly job: Job;
|
|
8
|
+
readonly kind: string;
|
|
9
|
+
readonly action: JobRecoveryAction;
|
|
10
|
+
};
|
|
11
|
+
export type JobRecoveryOptions = {
|
|
12
|
+
readonly catalog?: CallsCatalog;
|
|
13
|
+
readonly releaseCall?: (call: CallJob) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function recoverSessionJobs(root: SessionRoot, options?: JobRecoveryOptions): RecoveredJob[];
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/session-runtime/recovery.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EACL,OAAO,EAOP,WAAW,EAKZ,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAmB,MAAM,oCAAoC,CAAC;AAG1E,OAAO,EAA4C,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAItG,KAAK,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,CAAC;AAExF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,CAAC;AA8FF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,kBAAuB,GAAG,YAAY,EAAE,CAiBtG"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/** Session job recovery is shared by local and embedded hosts. */
|
|
2
|
+
import { CallJob, ApprovableJob, CompletionJob, FailureOutcome, MCPToolJob, ProgrammaticJob, cancelUnstarted, SessionTurn, ToolCallJob, WebExtractToolJob, WebSearchToolJob, } from "@inhuman.tools/harness-model/session";
|
|
3
|
+
import { Job, WorkExpectation } from "@inhuman.tools/plexus-expectations";
|
|
4
|
+
import { runInAction } from "mobx";
|
|
5
|
+
import { restorePendingRound, settleCancelledTurn } from "../agent-calls/index.js";
|
|
6
|
+
const UNKNOWN_TEXT = "interrupted by restart; execution outcome unknown";
|
|
7
|
+
function hasSettlement(job) {
|
|
8
|
+
if (job.completed)
|
|
9
|
+
return true;
|
|
10
|
+
if (job instanceof ToolCallJob || job instanceof ProgrammaticJob) {
|
|
11
|
+
return job.receiptJson != null && job.receiptJson !== "";
|
|
12
|
+
}
|
|
13
|
+
if (job instanceof CompletionJob)
|
|
14
|
+
return job.expectation.isDone;
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
function leftoverInFlight(job) {
|
|
18
|
+
if (job instanceof MCPToolJob && job.dispatched)
|
|
19
|
+
return true;
|
|
20
|
+
if (job instanceof MCPToolJob || job instanceof WebSearchToolJob || job instanceof WebExtractToolJob) {
|
|
21
|
+
const attempt = job.expectation;
|
|
22
|
+
return !attempt.isDone && attempt.startedAtMs != null;
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
function hasRecordedIntent(job) {
|
|
27
|
+
return job.orchestrated || leftoverInFlight(job);
|
|
28
|
+
}
|
|
29
|
+
function failOpen(job, code, text) {
|
|
30
|
+
for (const node of job.work) {
|
|
31
|
+
if (node instanceof WorkExpectation && !node.isDone)
|
|
32
|
+
node.fail(code, text, "null");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function stampUnknown(job) {
|
|
36
|
+
if (job instanceof CallJob) {
|
|
37
|
+
job.settleResult(new FailureOutcome({ code: "error", message: UNKNOWN_TEXT }));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (job instanceof ToolCallJob || job instanceof ProgrammaticJob) {
|
|
41
|
+
job.outcomeSnap ??= { ok: false, text: UNKNOWN_TEXT };
|
|
42
|
+
}
|
|
43
|
+
failOpen(job, "crash", UNKNOWN_TEXT);
|
|
44
|
+
if (!job.completed)
|
|
45
|
+
job.markComplete();
|
|
46
|
+
}
|
|
47
|
+
/** A cancelled job the crash left open closes with a cancel receipt and no open attempt. */
|
|
48
|
+
function settleCancelled(job) {
|
|
49
|
+
if (job instanceof ApprovableJob)
|
|
50
|
+
cancelUnstarted(job);
|
|
51
|
+
else if (job instanceof ProgrammaticJob)
|
|
52
|
+
job.outcomeSnap ??= { ok: false, text: "cancelled" };
|
|
53
|
+
failOpen(job, "cancel", "terminated by recovery; outcome unknown");
|
|
54
|
+
if (!job.completed)
|
|
55
|
+
job.markComplete();
|
|
56
|
+
}
|
|
57
|
+
/** Classify one job from its effect fields. */
|
|
58
|
+
function classifyJobRecovery(job) {
|
|
59
|
+
// A closed turn whose cancel never landed can still hold an open completion.
|
|
60
|
+
if (job instanceof SessionTurn && job.cancelRequested)
|
|
61
|
+
return "cancel";
|
|
62
|
+
if (job.completed)
|
|
63
|
+
return "settled";
|
|
64
|
+
if (job.cancelled)
|
|
65
|
+
return "cancel";
|
|
66
|
+
switch (job.unknownRecovery) {
|
|
67
|
+
case "unknown-no-replay":
|
|
68
|
+
if (hasSettlement(job))
|
|
69
|
+
return "settled";
|
|
70
|
+
return hasRecordedIntent(job) ? "unknown" : "dispatch";
|
|
71
|
+
case "resume-inner":
|
|
72
|
+
return "resume-inner";
|
|
73
|
+
case "resume-queued":
|
|
74
|
+
return "dispatch";
|
|
75
|
+
default:
|
|
76
|
+
// A contract-less job is not ours to replay.
|
|
77
|
+
return hasRecordedIntent(job) ? "unknown" : "dispatch";
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function applyJobRecovery(job, action, catalog, releaseCall, session) {
|
|
81
|
+
switch (action) {
|
|
82
|
+
case "settled":
|
|
83
|
+
case "dispatch":
|
|
84
|
+
return;
|
|
85
|
+
case "unknown":
|
|
86
|
+
stampUnknown(job);
|
|
87
|
+
return;
|
|
88
|
+
case "cancel":
|
|
89
|
+
if (job instanceof SessionTurn)
|
|
90
|
+
settleCancelledTurn(job, catalog, releaseCall, session);
|
|
91
|
+
else
|
|
92
|
+
settleCancelled(job);
|
|
93
|
+
return;
|
|
94
|
+
case "resume-inner":
|
|
95
|
+
if (job instanceof SessionTurn)
|
|
96
|
+
restorePendingRound(job);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export function recoverSessionJobs(root, options = {}) {
|
|
101
|
+
const nodes = [];
|
|
102
|
+
for (const node of root.motionWork()) {
|
|
103
|
+
if (node instanceof Job)
|
|
104
|
+
nodes.push(node);
|
|
105
|
+
}
|
|
106
|
+
// A turn re-enters before its children are classified: it reads the round
|
|
107
|
+
// the interruption left open, and the child's recovery closes that round.
|
|
108
|
+
nodes.sort((a, b) => Number(b instanceof SessionTurn) - Number(a instanceof SessionTurn));
|
|
109
|
+
const recovered = [];
|
|
110
|
+
runInAction(() => {
|
|
111
|
+
for (const job of nodes) {
|
|
112
|
+
const action = classifyJobRecovery(job);
|
|
113
|
+
applyJobRecovery(job, action, options.catalog, options.releaseCall, root);
|
|
114
|
+
recovered.push({ job, kind: job.__type__, action });
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
return recovered;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/session-runtime/recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { SessionPlexus, SessionTurn, type SessionRoot } from "@inhuman.tools/harness-model/session";
|
|
2
|
+
import { type SessionCheckpoint, type SessionDurability, type SessionReceipt } from "./durability.js";
|
|
3
|
+
import { type SessionEffectOutcome, type SessionEffectPort } from "./effects.js";
|
|
4
|
+
import { type JobRecoveryOptions, type RecoveredJob } from "./recovery.js";
|
|
5
|
+
import { type TurnIteratorHost } from "../runtime/turn-iterator.js";
|
|
6
|
+
import { admitTurn, type CancelTurnArgs, type CompactAdmitResult, type RewindResult, type TurnAdmitResult } from "../session/commands.js";
|
|
7
|
+
import type { SessionCommandHost } from "../session/types.js";
|
|
8
|
+
type RuntimePhase = "hydrated" | "ready" | "active" | "parked" | "disposed";
|
|
9
|
+
export type SessionRecoveryPolicy = {
|
|
10
|
+
readonly kind: "resume";
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: "interrupt";
|
|
13
|
+
readonly message: string;
|
|
14
|
+
};
|
|
15
|
+
export declare class SessionRuntime implements AsyncDisposable {
|
|
16
|
+
#private;
|
|
17
|
+
readonly session: SessionPlexus;
|
|
18
|
+
readonly incarnation: `${string}-${string}-${string}-${string}-${string}`;
|
|
19
|
+
accessor phase: RuntimePhase;
|
|
20
|
+
constructor(session: SessionPlexus, durability: SessionDurability);
|
|
21
|
+
static create(sessionId: string, durability: SessionDurability, workspacePath?: string): SessionRuntime;
|
|
22
|
+
static restore(sessionId: string, state: Uint8Array, durability: SessionDurability): SessionRuntime;
|
|
23
|
+
get root(): SessionRoot;
|
|
24
|
+
get signal(): AbortSignal;
|
|
25
|
+
get isCurrent(): boolean;
|
|
26
|
+
get ownershipSignal(): AbortSignal;
|
|
27
|
+
get admissionHeld(): boolean;
|
|
28
|
+
recover(policy?: SessionRecoveryPolicy, options?: JobRecoveryOptions): RecoveredJob[];
|
|
29
|
+
activate(): void;
|
|
30
|
+
checkpoint(): SessionCheckpoint;
|
|
31
|
+
flush(): Promise<SessionReceipt>;
|
|
32
|
+
commitMutation(operationId: string, input: string, mutate: () => void, signal?: AbortSignal): Promise<SessionReceipt>;
|
|
33
|
+
admit(host: SessionCommandHost, args: Parameters<typeof admitTurn>[1], commandId?: string): Promise<TurnAdmitResult>;
|
|
34
|
+
compact(host: SessionCommandHost, focus?: string): Promise<CompactAdmitResult>;
|
|
35
|
+
interrupt(operationId: string, message: string): Promise<SessionReceipt>;
|
|
36
|
+
cancel(host: SessionCommandHost, args: CancelTurnArgs): Promise<{
|
|
37
|
+
readonly ok: true;
|
|
38
|
+
}>;
|
|
39
|
+
rewind(host: SessionCommandHost, turnId: string): Promise<RewindResult>;
|
|
40
|
+
retry(host: SessionCommandHost): Promise<{
|
|
41
|
+
readonly ok: true;
|
|
42
|
+
}>;
|
|
43
|
+
drain(host: SessionCommandHost): Promise<void>;
|
|
44
|
+
run(turn: SessionTurn, host: TurnIteratorHost, signal?: AbortSignal): Promise<void>;
|
|
45
|
+
effect(operationId: string, method: string, payload: string, port: SessionEffectPort, apply: (outcome: SessionEffectOutcome) => void, signal?: AbortSignal): Promise<SessionEffectOutcome>;
|
|
46
|
+
park(): void;
|
|
47
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/session-runtime/runtime.ts"],"names":[],"mappings":"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"}
|