@morty-build/cli 0.4.26 → 0.4.28

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.
Files changed (39) hide show
  1. package/dist/{chunk-VKVKHAQ7.js → chunk-SIBZGZID.js} +329 -81
  2. package/dist/{chunk-VKVKHAQ7.js.map → chunk-SIBZGZID.js.map} +4 -4
  3. package/dist/{chunk-P2Q7CY6D.js → chunk-XUKSI7PW.js} +2 -2
  4. package/dist/{chunk-P2Q7CY6D.js.map → chunk-XUKSI7PW.js.map} +1 -1
  5. package/dist/{cli-AHHDI2TF.js → cli-ZCPZAQL3.js} +3 -3
  6. package/dist/cli.js +2 -2
  7. package/dist/engine/runtime/command/registry/interactions.d.ts.map +1 -1
  8. package/dist/engine/runtime/command/registry/interactions.js +113 -35
  9. package/dist/engine/runtime/command/registry/interactions.js.map +1 -1
  10. package/dist/engine/runtime/command/registry/prompt.d.ts.map +1 -1
  11. package/dist/engine/runtime/command/registry/prompt.js +38 -7
  12. package/dist/engine/runtime/command/registry/prompt.js.map +1 -1
  13. package/dist/engine/runtime/command/turn-replies.d.ts +27 -0
  14. package/dist/engine/runtime/command/turn-replies.d.ts.map +1 -0
  15. package/dist/engine/runtime/command/turn-replies.js +44 -0
  16. package/dist/engine/runtime/command/turn-replies.js.map +1 -0
  17. package/dist/engine/runtime/relay/run-relay-connection.d.ts.map +1 -1
  18. package/dist/engine/runtime/relay/run-relay-connection.js +25 -1
  19. package/dist/engine/runtime/relay/run-relay-connection.js.map +1 -1
  20. package/dist/engine/runtime/relay/session-event-publisher.d.ts +0 -1
  21. package/dist/engine/runtime/relay/session-event-publisher.d.ts.map +1 -1
  22. package/dist/engine/runtime/relay/session-event-publisher.js +0 -3
  23. package/dist/engine/runtime/relay/session-event-publisher.js.map +1 -1
  24. package/dist/engine/session/api/session-api.d.ts +0 -1
  25. package/dist/engine/session/api/session-api.d.ts.map +1 -1
  26. package/dist/engine/session/api/session-layer.d.ts.map +1 -1
  27. package/dist/engine/session/api/session-layer.js +1 -2
  28. package/dist/engine/session/api/session-layer.js.map +1 -1
  29. package/dist/engine/session/prompt/prompt-lifecycle.d.ts +1 -1
  30. package/dist/engine/session/prompt/prompt-lifecycle.d.ts.map +1 -1
  31. package/dist/engine/session/prompt/prompt-lifecycle.js +3 -9
  32. package/dist/engine/session/prompt/prompt-lifecycle.js.map +1 -1
  33. package/dist/engine/session/turn/execution-receipts.d.ts +6 -0
  34. package/dist/engine/session/turn/execution-receipts.d.ts.map +1 -1
  35. package/dist/engine/session/turn/execution-receipts.js +56 -6
  36. package/dist/engine/session/turn/execution-receipts.js.map +1 -1
  37. package/dist/engine.js +2 -2
  38. package/package.json +1 -1
  39. /package/dist/{cli-AHHDI2TF.js.map → cli-ZCPZAQL3.js.map} +0 -0
@@ -80,7 +80,7 @@ var __callDispose = (stack, error, hasError) => {
80
80
  // package.json
81
81
  var package_default = {
82
82
  name: "@morty-build/cli",
83
- version: "0.4.26",
83
+ version: "0.4.28",
84
84
  description: "Morty CLI for installing, pairing, and operating the Morty background service.",
85
85
  type: "module",
86
86
  bin: {
@@ -176,4 +176,4 @@ export {
176
176
  __callDispose,
177
177
  package_default
178
178
  };
179
- //# sourceMappingURL=chunk-P2Q7CY6D.js.map
179
+ //# sourceMappingURL=chunk-XUKSI7PW.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../package.json"],
4
- "sourcesContent": ["{\n \"name\": \"@morty-build/cli\",\n \"version\": \"0.4.26\",\n \"description\": \"Morty CLI for installing, pairing, and operating the Morty background service.\",\n \"type\": \"module\",\n \"bin\": {\n \"morty\": \"dist/cli.js\"\n },\n \"exports\": {\n \"./engine\": {\n \"morty-source\": \"./src/exports/engine.ts\",\n \"types\": \"./dist/exports/engine.d.ts\",\n \"default\": \"./dist/engine.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"LICENSE\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.txt\"\n ],\n \"engines\": {\n \"node\": \"^22.19.0 || ^24.20.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \"./engine\": {\n \"types\": \"./dist/exports/engine.d.ts\",\n \"import\": \"./dist/engine.js\",\n \"default\": \"./dist/engine.js\"\n }\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/moxt-ai/morty.git\",\n \"directory\": \"packages/cli\"\n },\n \"scripts\": {\n \"prebuild\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"build\": \"node scripts/build.ts && tsc --project tsconfig.build.json\",\n \"dev\": \"node --watch src/cli/entrypoint.ts\",\n \"pretypecheck\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"prepack\": \"pnpm build\",\n \"start\": \"node dist/cli.js\",\n \"typecheck\": \"tsc --project tsconfig.json && tsc --project tests/tsconfig.json\",\n \"pretest:controlled\": \"pnpm build && pnpm pack:test\",\n \"test:controlled\": \"vitest run tests/sessions tests/runtime\",\n \"pretest:manual\": \"pnpm pretest:controlled\",\n \"test:manual\": \"vitest run tests/manual\",\n \"pretest:agents\": \"pnpm build && pnpm pack:test\",\n \"test:agents\": \"vitest run tests/agents --maxWorkers=2\",\n \"pretest:pressure\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"test:pressure\": \"node tests/pressure/concurrent-sessions.mjs\",\n \"pack:test\": \"node scripts/pack-test-release.ts\"\n },\n \"dependencies\": {\n \"undici\": \"8.12.2\"\n },\n \"devDependencies\": {\n \"@agentclientprotocol/sdk\": \"^1.4.0\",\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.257\",\n \"@anthropic-ai/sdk\": \"0.122.0\",\n \"@morty-build/client\": \"workspace:*\",\n \"@morty-build/platform-test-support\": \"workspace:*\",\n \"@types/node\": \"^24.13.5\",\n \"@types/semver\": \"^7.8.0\",\n \"@types/ws\": \"^8.18.1\",\n \"commander\": \"15.0.0\",\n \"drizzle-kit\": \"1.0.0-rc.4\",\n \"drizzle-orm\": \"1.0.0-rc.4\",\n \"esbuild\": \"0.28.2\",\n \"semver\": \"^7.8.5\",\n \"valibot\": \"1.5.0\",\n \"ws\": \"^8.21.3\",\n \"zod\": \"^4.6.7\",\n \"@morty-build/local-state\": \"workspace:*\",\n \"miniflare\": \"catalog:\"\n },\n \"keywords\": [],\n \"author\": \"Moxt\",\n \"license\": \"Apache-2.0\",\n \"bugs\": {\n \"url\": \"https://github.com/moxt-ai/morty/issues\"\n },\n \"homepage\": \"https://morty.build\",\n \"private\": false\n}\n"],
4
+ "sourcesContent": ["{\n \"name\": \"@morty-build/cli\",\n \"version\": \"0.4.28\",\n \"description\": \"Morty CLI for installing, pairing, and operating the Morty background service.\",\n \"type\": \"module\",\n \"bin\": {\n \"morty\": \"dist/cli.js\"\n },\n \"exports\": {\n \"./engine\": {\n \"morty-source\": \"./src/exports/engine.ts\",\n \"types\": \"./dist/exports/engine.d.ts\",\n \"default\": \"./dist/engine.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"LICENSE\",\n \"NOTICE\",\n \"THIRD-PARTY-NOTICES.txt\"\n ],\n \"engines\": {\n \"node\": \"^22.19.0 || ^24.20.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"exports\": {\n \"./engine\": {\n \"types\": \"./dist/exports/engine.d.ts\",\n \"import\": \"./dist/engine.js\",\n \"default\": \"./dist/engine.js\"\n }\n }\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/moxt-ai/morty.git\",\n \"directory\": \"packages/cli\"\n },\n \"scripts\": {\n \"prebuild\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"build\": \"node scripts/build.ts && tsc --project tsconfig.build.json\",\n \"dev\": \"node --watch src/cli/entrypoint.ts\",\n \"pretypecheck\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"prepack\": \"pnpm build\",\n \"start\": \"node dist/cli.js\",\n \"typecheck\": \"tsc --project tsconfig.json && tsc --project tests/tsconfig.json\",\n \"pretest:controlled\": \"pnpm build && pnpm pack:test\",\n \"test:controlled\": \"vitest run tests/sessions tests/runtime\",\n \"pretest:manual\": \"pnpm pretest:controlled\",\n \"test:manual\": \"vitest run tests/manual\",\n \"pretest:agents\": \"pnpm build && pnpm pack:test\",\n \"test:agents\": \"vitest run tests/agents --maxWorkers=2\",\n \"pretest:pressure\": \"tsc --project src/engine/acp/harness/claude/upstream/tsconfig.json && tsc --project src/engine/acp/harness/pi/upstream/tsconfig.json\",\n \"test:pressure\": \"node tests/pressure/concurrent-sessions.mjs\",\n \"pack:test\": \"node scripts/pack-test-release.ts\"\n },\n \"dependencies\": {\n \"undici\": \"8.12.2\"\n },\n \"devDependencies\": {\n \"@agentclientprotocol/sdk\": \"^1.4.0\",\n \"@anthropic-ai/claude-agent-sdk\": \"0.3.257\",\n \"@anthropic-ai/sdk\": \"0.122.0\",\n \"@morty-build/client\": \"workspace:*\",\n \"@morty-build/platform-test-support\": \"workspace:*\",\n \"@types/node\": \"^24.13.5\",\n \"@types/semver\": \"^7.8.0\",\n \"@types/ws\": \"^8.18.1\",\n \"commander\": \"15.0.0\",\n \"drizzle-kit\": \"1.0.0-rc.4\",\n \"drizzle-orm\": \"1.0.0-rc.4\",\n \"esbuild\": \"0.28.2\",\n \"semver\": \"^7.8.5\",\n \"valibot\": \"1.5.0\",\n \"ws\": \"^8.21.3\",\n \"zod\": \"^4.6.7\",\n \"@morty-build/local-state\": \"workspace:*\",\n \"miniflare\": \"catalog:\"\n },\n \"keywords\": [],\n \"author\": \"Moxt\",\n \"license\": \"Apache-2.0\",\n \"bugs\": {\n \"url\": \"https://github.com/moxt-ai/morty/issues\"\n },\n \"homepage\": \"https://morty.build\",\n \"private\": false\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACI,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,KAAO;AAAA,IACH,OAAS;AAAA,EACb;AAAA,EACA,SAAW;AAAA,IACP,YAAY;AAAA,MACR,gBAAgB;AAAA,MAChB,OAAS;AAAA,MACT,SAAW;AAAA,IACf;AAAA,EACJ;AAAA,EACA,OAAS;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAAA,EACA,SAAW;AAAA,IACP,MAAQ;AAAA,EACZ;AAAA,EACA,eAAiB;AAAA,IACb,QAAU;AAAA,IACV,SAAW;AAAA,MACP,YAAY;AAAA,QACR,OAAS;AAAA,QACT,QAAU;AAAA,QACV,SAAW;AAAA,MACf;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,YAAc;AAAA,IACV,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACjB;AAAA,EACA,SAAW;AAAA,IACP,UAAY;AAAA,IACZ,OAAS;AAAA,IACT,KAAO;AAAA,IACP,cAAgB;AAAA,IAChB,SAAW;AAAA,IACX,OAAS;AAAA,IACT,WAAa;AAAA,IACb,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACjB;AAAA,EACA,cAAgB;AAAA,IACZ,QAAU;AAAA,EACd;AAAA,EACA,iBAAmB;AAAA,IACf,4BAA4B;AAAA,IAC5B,kCAAkC;AAAA,IAClC,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,sCAAsC;AAAA,IACtC,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAa;AAAA,IACb,eAAe;AAAA,IACf,eAAe;AAAA,IACf,SAAW;AAAA,IACX,QAAU;AAAA,IACV,SAAW;AAAA,IACX,IAAM;AAAA,IACN,KAAO;AAAA,IACP,4BAA4B;AAAA,IAC5B,WAAa;AAAA,EACjB;AAAA,EACA,UAAY,CAAC;AAAA,EACb,QAAU;AAAA,EACV,SAAW;AAAA,EACX,MAAQ;AAAA,IACJ,KAAO;AAAA,EACX;AAAA,EACA,UAAY;AAAA,EACZ,SAAW;AACf;",
6
6
  "names": []
7
7
  }
@@ -36,10 +36,10 @@ import {
36
36
  validateLocalPath,
37
37
  validatePairingId,
38
38
  writeInstallationFile
39
- } from "./chunk-VKVKHAQ7.js";
39
+ } from "./chunk-SIBZGZID.js";
40
40
  import {
41
41
  package_default
42
- } from "./chunk-P2Q7CY6D.js";
42
+ } from "./chunk-XUKSI7PW.js";
43
43
 
44
44
  // ../../node_modules/.pnpm/commander@15.0.0/node_modules/commander/lib/error.js
45
45
  var CommanderError = class extends Error {
@@ -6126,4 +6126,4 @@ async function runCLI() {
6126
6126
  export {
6127
6127
  runCLI
6128
6128
  };
6129
- //# sourceMappingURL=cli-AHHDI2TF.js.map
6129
+ //# sourceMappingURL=cli-ZCPZAQL3.js.map
package/dist/cli.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  __commonJS,
4
4
  __toESM,
5
5
  package_default
6
- } from "./chunk-P2Q7CY6D.js";
6
+ } from "./chunk-XUKSI7PW.js";
7
7
 
8
8
  // ../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/constants.js
9
9
  var require_constants = __commonJS({
@@ -2013,7 +2013,7 @@ if (!(0, import_semver.satisfies)(process.versions.node, package_default.engines
2013
2013
  );
2014
2014
  process.exitCode = 1;
2015
2015
  } else {
2016
- const { runCLI } = await import("./cli-AHHDI2TF.js");
2016
+ const { runCLI } = await import("./cli-ZCPZAQL3.js");
2017
2017
  await runCLI();
2018
2018
  }
2019
2019
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/interactions.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,eAAO,MAAM,oBAAoB,EAAE,cAqBlC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,cAiD7C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAejC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,cAsBtC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,cAUtC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,cAUvC,CAAC"}
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/interactions.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA2BvD,eAAO,MAAM,oBAAoB,EAAE,cA+BlC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,cA2E7C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAejC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,cA6CtC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,cActC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,cAcvC,CAAC"}
@@ -1,42 +1,72 @@
1
- import { promptCompletion, SESSION_CANCEL_BEFORE_START_KIND, SESSION_CANCEL_KIND, SESSION_CLOSE_KIND, SESSION_CLOSED_KIND, SESSION_ELICITATION_RESPOND_KIND, SESSION_PERMISSION_RESPOND_KIND, SESSION_PROMPT_DISPOSITION_KIND, } from "@morty-build/client/protocol";
1
+ import { promptCompletion, SESSION_CANCEL_BEFORE_START_KIND, SESSION_CANCEL_KIND, SESSION_CLOSE_KIND, SESSION_CLOSED_KIND, SESSION_ELICITATION_RESPOND_KIND, SESSION_INTERACTION_ANSWERED_KIND, SESSION_PERMISSION_RESPOND_KIND, SESSION_PROMPT_DISPOSITION_KIND, SESSION_PROMPT_STEERED_KIND, SESSION_TURN_STOPPED_KIND, SESSION_TURN_WITHDRAWN_KIND, } from "@morty-build/client/protocol";
2
2
  import { SessionError } from "../../../session/api/session-error.js";
3
3
  import { settleAbandonedTurn } from "../../../session/prompt/prompt-lifecycle.js";
4
4
  import { reportOperationFailure, send } from "../transport.js";
5
+ import { reply, replyFailure, replySettledFailure, settledCommand } from "../turn-replies.js";
6
+ /** Answers a request that waited for its Turn to end with how the Turn ended. */
7
+ function replyStopped({ operations, socket }, { commandId, requestId, sessionId, }) {
8
+ const settled = settledCommand(operations, commandId);
9
+ if (settled.kind === "completed") {
10
+ reply(socket, {
11
+ commandId,
12
+ kind: SESSION_TURN_STOPPED_KIND,
13
+ requestId,
14
+ sessionId,
15
+ stopReason: settled.stopReason,
16
+ });
17
+ return;
18
+ }
19
+ replySettledFailure(socket, requestId, sessionId, settled);
20
+ }
5
21
  export const sessionCancelCommand = {
6
22
  kind: SESSION_CANCEL_KIND,
7
- handle: ({ eventProjection, operations, sessions, sessionTurns, signal, socket }, message) => {
23
+ handle: (context, message) => {
8
24
  if (message.kind !== SESSION_CANCEL_KIND) {
9
25
  throw new Error("Command kind mismatch");
10
26
  }
11
- const turn = sessionTurns.get(message.commandId, message.sessionId);
12
- if (turn === undefined) {
13
- void settleAbandonedTurn(eventProjection, operations, message).catch((error) => {
14
- reportOperationFailure(socket, message.commandId, message.sessionId, error);
15
- });
16
- return;
17
- }
18
- const cancellation = turn.requestCancellation();
19
- if (cancellation.kind !== "running") {
20
- return;
21
- }
22
- void sessions.cancelPrompt(message.sessionId, cancellation.execution, signal).catch((error) => {
23
- console.error("Morty daemon could not cancel the agent turn", error);
27
+ const { eventProjection, operations, sessions, sessionTurns, signal, socket } = context;
28
+ const { commandId, requestId, sessionId } = message;
29
+ const turn = sessionTurns.get(commandId, sessionId);
30
+ const stop = async () => {
31
+ if (turn === undefined) {
32
+ await settleAbandonedTurn(eventProjection, operations, message);
33
+ if (!operations.isTerminalExecution(commandId, sessionId)) {
34
+ replyFailure(socket, requestId, sessionId, "turn_not_active", "The turn is not running.");
35
+ return;
36
+ }
37
+ }
38
+ else {
39
+ const cancellation = turn.requestCancellation();
40
+ if (cancellation.kind === "running") {
41
+ await sessions.cancelPrompt(sessionId, cancellation.execution, signal);
42
+ }
43
+ await operations.settlement(commandId, sessionId, signal);
44
+ }
45
+ replyStopped(context, message);
46
+ };
47
+ void stop().catch((error) => {
48
+ if (!signal.aborted) {
49
+ reportOperationFailure(socket, requestId, sessionId, error);
50
+ }
24
51
  });
25
52
  },
26
53
  };
27
54
  export const sessionCancelBeforeStartCommand = {
28
55
  kind: SESSION_CANCEL_BEFORE_START_KIND,
29
- handle: ({ eventProjection, operations, sessionTurns, socket }, message) => {
56
+ handle: ({ eventProjection, operations, sessionTurns, signal, socket }, message) => {
30
57
  if (message.kind !== SESSION_CANCEL_BEFORE_START_KIND) {
31
58
  throw new Error("Command kind mismatch");
32
59
  }
33
- if (operations.hasStarted(message.commandId, message.sessionId)) {
34
- reportOperationFailure(socket, message.commandId, message.sessionId, new SessionError("turn_already_started", "The message already started and could not be withdrawn"));
60
+ const { commandId, requestId, sessionId } = message;
61
+ const withdrawn = () => reply(socket, { commandId, kind: SESSION_TURN_WITHDRAWN_KIND, requestId, sessionId });
62
+ const alreadyStarted = () => reportOperationFailure(socket, requestId, sessionId, new SessionError("turn_already_started", "The message already started and could not be withdrawn"));
63
+ if (operations.hasStarted(commandId, sessionId)) {
64
+ alreadyStarted();
35
65
  return;
36
66
  }
37
- const turn = sessionTurns.get(message.commandId, message.sessionId);
67
+ const turn = sessionTurns.get(commandId, sessionId);
38
68
  if (turn === undefined) {
39
- const cancelled = operations.recordCancellationBeforeAdmission(message.commandId, message.sessionId);
69
+ const cancelled = operations.recordCancellationBeforeAdmission(commandId, sessionId);
40
70
  const outcome = cancelled.kind === "unavailable" || cancelled.kind === "expired"
41
71
  ? undefined
42
72
  : cancelled.kind === "restated"
@@ -46,19 +76,42 @@ export const sessionCancelBeforeStartCommand = {
46
76
  outcome.payload.kind === "prompt.completed" &&
47
77
  promptCompletion(outcome.payload).kind === "cancelled") {
48
78
  if (cancelled.kind === "restated") {
49
- eventProjection.restateOutcome(message.sessionId, cancelled.outcome);
79
+ eventProjection.restateOutcome(sessionId, cancelled.outcome);
80
+ withdrawn();
50
81
  return;
51
82
  }
52
- void eventProjection.recordOutcome(message.sessionId, outcome).catch((error) => {
53
- reportOperationFailure(socket, message.commandId, message.sessionId, error);
83
+ void eventProjection
84
+ .recordOutcome(sessionId, outcome)
85
+ .then(withdrawn)
86
+ .catch((error) => {
87
+ reportOperationFailure(socket, requestId, sessionId, error);
54
88
  });
55
89
  return;
56
90
  }
57
- reportOperationFailure(socket, message.commandId, message.sessionId, new SessionError("turn_not_active", "The command is not waiting to start"));
91
+ reportOperationFailure(socket, requestId, sessionId, new SessionError("turn_not_active", "The command is not waiting to start"));
58
92
  return;
59
93
  }
60
94
  // No await separates checking admission from requesting cancellation.
61
95
  turn.requestCancellation();
96
+ void operations
97
+ .progress(commandId, sessionId, signal)
98
+ .then((progress) => {
99
+ if (progress === "started") {
100
+ alreadyStarted();
101
+ return;
102
+ }
103
+ const settled = settledCommand(operations, commandId);
104
+ if (settled.kind !== "completed") {
105
+ replySettledFailure(socket, requestId, sessionId, settled);
106
+ }
107
+ else if (settled.cancelledBeforeStart) {
108
+ withdrawn();
109
+ }
110
+ else {
111
+ alreadyStarted();
112
+ }
113
+ })
114
+ .catch(() => undefined);
62
115
  },
63
116
  };
64
117
  export const sessionCloseCommand = {
@@ -79,25 +132,42 @@ export const sessionCloseCommand = {
79
132
  };
80
133
  export const promptDispositionCommand = {
81
134
  kind: SESSION_PROMPT_DISPOSITION_KIND,
82
- handle: ({ diagnostics, operations, sessionTurns, socket }, message) => {
135
+ handle: ({ diagnostics, operations, sessionTurns, signal, socket }, message) => {
83
136
  if (message.kind !== SESSION_PROMPT_DISPOSITION_KIND) {
84
137
  throw new Error("Command kind mismatch");
85
138
  }
86
- const turn = sessionTurns.get(message.commandId, message.sessionId);
139
+ const { commandId, requestId, sessionId } = message;
140
+ const turn = sessionTurns.get(commandId, sessionId);
87
141
  const result = turn?.promoteQueuedPrompt(message) ?? "unavailable";
88
142
  if (result === "accepted") {
143
+ // The steered prompt is answered once it starts inside the running Turn.
144
+ void operations
145
+ .progress(commandId, sessionId, signal)
146
+ .then((progress) => {
147
+ if (progress === "started") {
148
+ reply(socket, { commandId, kind: SESSION_PROMPT_STEERED_KIND, requestId, sessionId });
149
+ return;
150
+ }
151
+ const settled = settledCommand(operations, commandId);
152
+ if (settled.kind !== "completed") {
153
+ replySettledFailure(socket, requestId, sessionId, settled);
154
+ return;
155
+ }
156
+ replyFailure(socket, requestId, sessionId, "turn_not_active", "The message ended before it was steered.");
157
+ })
158
+ .catch(() => undefined);
89
159
  return;
90
160
  }
91
- const started = result === "already-started" || operations.hasStarted(message.commandId, message.sessionId);
161
+ const started = result === "already-started" || operations.hasStarted(commandId, sessionId);
92
162
  const error = started
93
163
  ? new SessionError("turn_already_started", "The message already left the queue and could not be steered")
94
164
  : new SessionError("turn_not_active", "The message is no longer waiting to be steered");
95
- diagnostics.daemonDiagnostic("session_prompt_disposition_failed", message.commandId, {
165
+ diagnostics.daemonDiagnostic("session_prompt_disposition_failed", commandId, {
96
166
  code: error.code,
97
- commandId: message.commandId,
98
- sessionId: message.sessionId,
167
+ commandId,
168
+ sessionId,
99
169
  });
100
- reportOperationFailure(socket, message.commandId, message.sessionId, error);
170
+ reportOperationFailure(socket, requestId, sessionId, error);
101
171
  },
102
172
  };
103
173
  export const permissionRespondCommand = {
@@ -106,8 +176,12 @@ export const permissionRespondCommand = {
106
176
  if (message.kind !== SESSION_PERMISSION_RESPOND_KIND) {
107
177
  throw new Error("Command kind mismatch");
108
178
  }
109
- void sessions.respondPermission(message).catch((error) => {
110
- reportOperationFailure(socket, message.interactionId, message.sessionId, error);
179
+ const { interactionId, requestId, sessionId } = message;
180
+ void sessions
181
+ .respondPermission(message)
182
+ .then(() => reply(socket, { interactionId, kind: SESSION_INTERACTION_ANSWERED_KIND, requestId, sessionId }))
183
+ .catch((error) => {
184
+ reportOperationFailure(socket, requestId, sessionId, error);
111
185
  });
112
186
  },
113
187
  };
@@ -117,8 +191,12 @@ export const elicitationRespondCommand = {
117
191
  if (message.kind !== SESSION_ELICITATION_RESPOND_KIND) {
118
192
  throw new Error("Command kind mismatch");
119
193
  }
120
- void sessions.respondElicitation(message).catch((error) => {
121
- reportOperationFailure(socket, message.interactionId, message.sessionId, error);
194
+ const { interactionId, requestId, sessionId } = message;
195
+ void sessions
196
+ .respondElicitation(message)
197
+ .then(() => reply(socket, { interactionId, kind: SESSION_INTERACTION_ANSWERED_KIND, requestId, sessionId }))
198
+ .catch((error) => {
199
+ reportOperationFailure(socket, requestId, sessionId, error);
122
200
  });
123
201
  },
124
202
  };
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/interactions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/interactions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/prompt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,eAAO,MAAM,oBAAoB,EAAE,cA+HlC,CAAC"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/prompt.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIvD,eAAO,MAAM,oBAAoB,EAAE,cA6JlC,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { encodeSessionPromptCommand, SESSION_PROMPT_KIND, SessionPromptDisposition, } from "@morty-build/client/protocol";
2
2
  import { executePrompt } from "../../../session/prompt/execute-prompt.js";
3
3
  import { send } from "../transport.js";
4
+ import { reply, replySettledFailure, settledCommand } from "../turn-replies.js";
4
5
  export const sessionPromptCommand = {
5
6
  kind: SESSION_PROMPT_KIND,
6
7
  handle: (context, message) => {
@@ -42,9 +43,9 @@ export const sessionPromptCommand = {
42
43
  return;
43
44
  }
44
45
  if (receipt.kind === "duplicate") {
45
- // A retry records no lifecycle event of its own, so it is answered directly with where the original
46
- // command stands, as its receipt records it. A settled outcome is also restated for clients that missed it.
47
- send(context.socket, {
46
+ // A retry is answered with where the original command stands, as its receipt records it. A settled outcome
47
+ // is also restated for clients that missed it.
48
+ reply(context.socket, {
48
49
  kind: "session.prompt.accepted",
49
50
  requestId: message.commandId,
50
51
  sessionId: message.sessionId,
@@ -72,11 +73,38 @@ export const sessionPromptCommand = {
72
73
  }
73
74
  const turn = context.sessionTurns.start(message, receipt.attemptId);
74
75
  context.eventProjection.requested(message);
75
- // Queue admission is acknowledged by the V2 session.queue.changed lifecycle
76
- // event naming this command; the relay resolves the pending Turn submission
77
- // from it, so the daemon sends no separate acknowledgment frame.
76
+ const { commandId, sessionId } = message;
77
+ // A prompt is answered once, at the first of: it entered the queue, it started, or it ended without starting.
78
+ let answered = false;
79
+ const accepted = (state) => {
80
+ if (!answered) {
81
+ answered = true;
82
+ reply(context.socket, { kind: "session.prompt.accepted", requestId: commandId, sessionId, state });
83
+ }
84
+ };
85
+ const ended = () => {
86
+ if (answered) {
87
+ return;
88
+ }
89
+ const settled = settledCommand(context.operations, commandId);
90
+ if (settled.kind === "completed") {
91
+ accepted("settled");
92
+ return;
93
+ }
94
+ answered = true;
95
+ replySettledFailure(context.socket, commandId, sessionId, settled);
96
+ };
97
+ const waiting = new AbortController();
98
+ context.operations
99
+ .progress(commandId, sessionId, AbortSignal.any([waiting.signal, context.signal]))
100
+ .then((progress) => {
101
+ if (progress === "started") {
102
+ accepted("running");
103
+ }
104
+ })
105
+ .catch(() => undefined);
78
106
  const queueChanged = () => {
79
- void context.eventProjection.queueChanged(message.sessionId, message.commandId).catch((error) => {
107
+ void context.eventProjection.queueChanged(sessionId, commandId).catch((error) => {
80
108
  console.error("Could not record queue change", error);
81
109
  });
82
110
  };
@@ -98,6 +126,7 @@ export const sessionPromptCommand = {
98
126
  epoch: turn.epoch,
99
127
  waitForSessionAdmission: (signal) => context.sessionTurns.admitAndWait(turn, signal, () => {
100
128
  queueChanged();
129
+ accepted("queued");
101
130
  }),
102
131
  signal: turn.signal,
103
132
  cancellationRequested: turn.cancellationRequested,
@@ -106,6 +135,8 @@ export const sessionPromptCommand = {
106
135
  console.error("Morty daemon turn failed", error);
107
136
  })
108
137
  .finally(() => {
138
+ waiting.abort();
139
+ ended();
109
140
  context.sessionTurns.finish(turn);
110
141
  context.eventProjection.publishTerminal(message.sessionId, message.commandId);
111
142
  // Only a prompt that entered the queue changes it by leaving.
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEvC,MAAM,CAAC,MAAM,oBAAoB,GAAmB;IAChD,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAQ,EAAE;QAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACjB,IAAI,EAAE,mBAAmB;gBACzB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,sDAAsD;gBAC/D,SAAS,EAAE,OAAO,CAAC,SAAS;aAC/B,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QACD,yGAAyG;QACzG,qEAAqE;QACrE,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,cAAc,CAC7C,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,EACjB,0BAA0B,CAAC,OAAO,CAAC,EACnC,GAAG,EAAE,CACD,OAAO,CAAC,WAAW,KAAK,wBAAwB,CAAC,MAAM;YACvD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,CACnF,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACjB,IAAI,EAAE,6BAA6B;gBACnC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,mCAAmC;gBAC5C,SAAS,EAAE,OAAO,CAAC,SAAS;aAC/B,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACjB,IAAI,EAAE,2BAA2B;gBACjC,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EAAE,mEAAmE;gBAC5E,SAAS,EAAE,OAAO,CAAC,SAAS;aAC/B,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,oGAAoG;YACpG,4GAA4G;YAC5G,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACjB,IAAI,EAAE,yBAAyB;gBAC/B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EACD,OAAO,CAAC,KAAK,KAAK,SAAS;oBACvB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,IAAI;wBACnF,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,SAAS;aACxB,CAAC,CAAC;YACH,MAAM,OAAO,GACT,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACpG,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACvE,CAAC;YACD,OAAO;QACX,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACjB,IAAI,EAAE,wBAAwB;gBAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,0BAA0B;gBAChC,OAAO,EACH,mGAAmG;gBACvG,SAAS,EAAE,OAAO,CAAC,SAAS;aAC/B,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACpE,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,4EAA4E;QAC5E,4EAA4E;QAC5E,iEAAiE;QACjE,MAAM,YAAY,GAAG,GAAS,EAAE;YAC5B,KAAK,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;gBACrG,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC;QACF,KAAK,aAAa,CAAC;YACf,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,OAAO,EAAE,OAAO;YAChB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE;gBACvC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,IAAI,CAC/C,OAAO,CAAC,SAAS,EACjB,iBAAiB,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,EAC3D,MAAM,CACT,CAAC;gBACF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC1D,CAAC;YACD,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,gBAAgB;YACnD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,uBAAuB,EAAE,CAAC,MAAM,EAAE,EAAE,CAChC,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;gBACjD,YAAY,EAAE,CAAC;YACnB,CAAC,CAAC;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;SACpD,CAAC;aACG,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACV,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,OAAO,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YAC9E,8DAA8D;YAC9D,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;gBACtB,YAAY,EAAE,CAAC;YACnB,CAAC;QACL,CAAC,CAAC,CAAC;IACX,CAAC;CACJ,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../../../src/engine/runtime/command/registry/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type DaemonToServiceMessage } from "@morty-build/client/protocol";
2
+ import { WebSocket } from "undici";
3
+ import type { ExecutionReceipts } from "../../session/turn/execution-receipts.ts";
4
+ /** How a settled command ended, as the ledger's outcome records it. */
5
+ export type SettledCommand = {
6
+ readonly kind: "completed";
7
+ readonly stopReason: string;
8
+ readonly cancelledBeforeStart: boolean;
9
+ } | {
10
+ readonly kind: "failed";
11
+ readonly code: string;
12
+ readonly message: string;
13
+ } | {
14
+ readonly kind: "unavailable";
15
+ };
16
+ export declare function settledCommand(operations: ExecutionReceipts, commandId: string): SettledCommand;
17
+ /**
18
+ * Answers a request on the connection that carried it. A reply that outlives its connection has no reader: the Relay
19
+ * failed the request when that connection closed.
20
+ */
21
+ export declare function reply(socket: WebSocket, message: DaemonToServiceMessage): void;
22
+ export declare function replyFailure(socket: WebSocket, requestId: string, sessionId: string, code: string, message: string): void;
23
+ /** Answers a request with a settled command's failure, or with the loss of its outcome. */
24
+ export declare function replySettledFailure(socket: WebSocket, requestId: string, sessionId: string, settled: Exclude<SettledCommand, {
25
+ readonly kind: "completed";
26
+ }>): void;
27
+ //# sourceMappingURL=turn-replies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-replies.d.ts","sourceRoot":"","sources":["../../../../src/engine/runtime/command/turn-replies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,sBAAsB,EAAoB,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAGlF,uEAAuE;AACvE,MAAM,MAAM,cAAc,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,GACnG;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAEvC,wBAAgB,cAAc,CAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAmB/F;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAI9E;AAED,wBAAgB,YAAY,CACxB,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAChB,IAAI,CAEN;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,GACjE,IAAI,CAYN"}
@@ -0,0 +1,44 @@
1
+ import { promptCompletion } from "@morty-build/client/protocol";
2
+ import { WebSocket } from "undici";
3
+ import { send } from "./transport.js";
4
+ export function settledCommand(operations, commandId) {
5
+ const outcome = operations.outcome(commandId);
6
+ if (outcome?.type !== "lifecycle-metadata") {
7
+ return { kind: "unavailable" };
8
+ }
9
+ const payload = outcome.payload;
10
+ switch (payload.kind) {
11
+ case "prompt.completed":
12
+ return {
13
+ kind: "completed",
14
+ stopReason: payload.stopReason,
15
+ cancelledBeforeStart: promptCompletion(payload).kind === "cancelled",
16
+ };
17
+ case "prompt.failed":
18
+ case "prompt.failed-before-start":
19
+ return { kind: "failed", code: payload.code, message: payload.message };
20
+ default:
21
+ return { kind: "unavailable" };
22
+ }
23
+ }
24
+ /**
25
+ * Answers a request on the connection that carried it. A reply that outlives its connection has no reader: the Relay
26
+ * failed the request when that connection closed.
27
+ */
28
+ export function reply(socket, message) {
29
+ if (socket.readyState === WebSocket.OPEN) {
30
+ send(socket, message);
31
+ }
32
+ }
33
+ export function replyFailure(socket, requestId, sessionId, code, message) {
34
+ reply(socket, { code, kind: "session.operation.failed", message, requestId, sessionId });
35
+ }
36
+ /** Answers a request with a settled command's failure, or with the loss of its outcome. */
37
+ export function replySettledFailure(socket, requestId, sessionId, settled) {
38
+ if (settled.kind === "failed") {
39
+ replyFailure(socket, requestId, sessionId, settled.code, settled.message);
40
+ return;
41
+ }
42
+ replyFailure(socket, requestId, sessionId, "command_result_expired", "The command ended, but its result is no longer available.");
43
+ }
44
+ //# sourceMappingURL=turn-replies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn-replies.js","sourceRoot":"","sources":["../../../../src/engine/runtime/command/turn-replies.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAQtC,MAAM,UAAU,cAAc,CAAC,UAA6B,EAAE,SAAiB;IAC3E,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,OAAO,EAAE,IAAI,KAAK,oBAAoB,EAAE,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACnC,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,kBAAkB;YACnB,OAAO;gBACH,IAAI,EAAE,WAAW;gBACjB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,oBAAoB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,WAAW;aACvE,CAAC;QACN,KAAK,eAAe,CAAC;QACrB,KAAK,4BAA4B;YAC7B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5E;YACI,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;IACvC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,MAAiB,EAAE,OAA+B;IACpE,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CACxB,MAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,IAAY,EACZ,OAAe;IAEf,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,mBAAmB,CAC/B,MAAiB,EACjB,SAAiB,EACjB,SAAiB,EACjB,OAAgE;IAEhE,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1E,OAAO;IACX,CAAC;IACD,YAAY,CACR,MAAM,EACN,SAAS,EACT,SAAS,EACT,wBAAwB,EACxB,2DAA2D,CAC9D,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-relay-connection.d.ts","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/run-relay-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,oBAAoB,EAC5B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAejF,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,qFAAqF;IACrF,QAAQ,CAAC,yBAAyB,EAAE,CAChC,IAAI,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAC5C,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,4BAA4B,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CAAC,EACrC,YAAY,EACZ,MAAM,EACN,yBAAyB,EACzB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,UAAU,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,QAAQ,EACR,eAAe,EACf,WAAW,EACX,WAAW,EACX,MAAM,EACN,KAAK,GACR,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgMxC"}
1
+ {"version":3,"file":"run-relay-connection.d.ts","sourceRoot":"","sources":["../../../../src/engine/runtime/relay/run-relay-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,KAAK,oBAAoB,EAC5B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;AAChG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAIjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAejF,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,qFAAqF;IACrF,QAAQ,CAAC,yBAAyB,EAAE,CAChC,IAAI,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,EAC5C,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,QAAQ,CAAC,WAAW,EAAE,yBAAyB,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,4BAA4B,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CAAC,EACrC,YAAY,EACZ,MAAM,EACN,yBAAyB,EACzB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,UAAU,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,QAAQ,EACR,eAAe,EACf,WAAW,EACX,WAAW,EACX,MAAM,EACN,KAAK,GACR,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiMxC"}
@@ -1,7 +1,8 @@
1
- import { decodeKnownServiceToDaemonMessage, RUNTIME_HEARTBEAT_ACK_KIND, RUNTIME_LIVENESS_READY_KIND, } from "@morty-build/client/protocol";
1
+ import { decodeKnownServiceToDaemonMessage, isIdentifier, RUNTIME_HEARTBEAT_ACK_KIND, RUNTIME_LIVENESS_READY_KIND, } from "@morty-build/client/protocol";
2
2
  import { WebSocket } from "undici";
3
3
  import { createRuntimeCommandDispatcher } from "../command/dispatcher.js";
4
4
  import { send } from "../command/transport.js";
5
+ import { replyFailure } from "../command/turn-replies.js";
5
6
  import { connectRelay } from "./connect.js";
6
7
  import { RelayConnectionLiveness } from "./liveness.js";
7
8
  import { isRuntimeRelayRevocation, RuntimeRelayRevokedError } from "./runtime-revocation.js";
@@ -153,6 +154,7 @@ export async function runRelayConnection({ resolveAgent, config, reportUpgradeAv
153
154
  diagnostics.daemonDiagnostic("protocol_message_discarded", "unknown", {
154
155
  reason: "unsupported_message",
155
156
  });
157
+ refuseUnsupportedRequest(socket, encoded);
156
158
  return;
157
159
  }
158
160
  const kind = message.kind;
@@ -191,4 +193,26 @@ export async function runRelayConnection({ resolveAgent, config, reportUpgradeAv
191
193
  relay.release(new Error("Relay connection released"));
192
194
  }
193
195
  }
196
+ /**
197
+ * Answers a request this Runtime cannot run, as sent, so its sender learns at once that nothing was executed instead of
198
+ * waiting out its deadline. Only a message naming its own `requestId` can be answered.
199
+ */
200
+ function refuseUnsupportedRequest(socket, encoded) {
201
+ let value;
202
+ try {
203
+ value = JSON.parse(encoded);
204
+ }
205
+ catch {
206
+ return;
207
+ }
208
+ if (typeof value !== "object" || value === null) {
209
+ return;
210
+ }
211
+ const requestId = Reflect.get(value, "requestId");
212
+ const sessionId = Reflect.get(value, "sessionId");
213
+ if (!isIdentifier(requestId)) {
214
+ return;
215
+ }
216
+ replyFailure(socket, requestId, isIdentifier(sessionId) ? sessionId : "", "unsupported_operation", "This Morty Runtime does not support the requested operation.");
217
+ }
194
218
  //# sourceMappingURL=run-relay-connection.js.map