@morty-build/cli 0.4.23 → 0.4.24

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.
@@ -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.23",
83
+ version: "0.4.24",
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-6TVNT2T7.js.map
179
+ //# sourceMappingURL=chunk-ILKOV4ZU.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.23\",\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.24\",\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
  }
@@ -3,7 +3,7 @@ import {
3
3
  __export,
4
4
  __using,
5
5
  package_default
6
- } from "./chunk-6TVNT2T7.js";
6
+ } from "./chunk-ILKOV4ZU.js";
7
7
 
8
8
  // src/engine/runtime/relay/runtime-revocation.ts
9
9
  var runtimeRevocationCloseCode = 1008;
@@ -20924,7 +20924,8 @@ function inputValue(value) {
20924
20924
  return value;
20925
20925
  }
20926
20926
  try {
20927
- return JSON.parse(value);
20927
+ const parsed = JSON.parse(value);
20928
+ return parsed;
20928
20929
  } catch (cause) {
20929
20930
  throw new ProtocolMessageError("Session Event Log V2 message is not valid JSON", { cause });
20930
20931
  }
@@ -72264,6 +72265,10 @@ var turnSchema = external_exports.object({
72264
72265
  status: turnStatusSchema
72265
72266
  });
72266
72267
  var turnSteerResponseSchema = external_exports.object({ turnId: boundedText(256) });
72268
+ var turnStartResponseSchema = external_exports.object({ turn: turnSchema });
72269
+ var threadNameUpdatedSchema = external_exports.object({ threadName: external_exports.string().min(1) });
72270
+ var turnPlanUpdatedSchema = external_exports.object({ plan: external_exports.array(external_exports.unknown()) });
72271
+ var itemNotificationSchema = external_exports.object({ item: external_exports.unknown() });
72267
72272
  var threadNotificationSchema = external_exports.object({ threadId: boundedText(256).min(1) });
72268
72273
  var turnNotificationSchema = external_exports.object({
72269
72274
  thread: external_exports.object({ id: boundedText(256) }).nullish(),
@@ -73260,10 +73265,11 @@ var CodexOwnedAcpAgent = class {
73260
73265
  return;
73261
73266
  }
73262
73267
  if (method === "thread/name/updated") {
73263
- const threadName = params.threadName;
73264
- if (typeof threadName === "string" && threadName.length > 0) {
73268
+ const decoded = threadNameUpdatedSchema.safeParse(params);
73269
+ if (decoded.success) {
73270
+ const title2 = decoded.data.threadName;
73265
73271
  await this.#enqueue(async () => {
73266
- await this.#context.emit({ sessionUpdate: "session_info_update", title: threadName });
73272
+ await this.#context.emit({ sessionUpdate: "session_info_update", title: title2 });
73267
73273
  });
73268
73274
  }
73269
73275
  return;
@@ -73285,9 +73291,9 @@ var CodexOwnedAcpAgent = class {
73285
73291
  return;
73286
73292
  }
73287
73293
  if (method === "turn/plan/updated") {
73288
- const plan = params.plan;
73289
- if (Array.isArray(plan)) {
73290
- const entries = plan.map((step) => ({
73294
+ const decoded = turnPlanUpdatedSchema.safeParse(params);
73295
+ if (decoded.success) {
73296
+ const entries = decoded.data.plan.map((step) => ({
73291
73297
  content: typeof step === "object" && step !== null && "step" in step ? String(Reflect.get(step, "step")) : "",
73292
73298
  priority: "medium",
73293
73299
  status: "in_progress"
@@ -73330,7 +73336,8 @@ var CodexOwnedAcpAgent = class {
73330
73336
  if (method !== "item/started" && method !== "item/completed") {
73331
73337
  return;
73332
73338
  }
73333
- const item = decodeThreadItem(params.item);
73339
+ const notification = itemNotificationSchema.safeParse(params);
73340
+ const item = notification.success ? decodeThreadItem(notification.data.item) : null;
73334
73341
  if (item === null) {
73335
73342
  return;
73336
73343
  }
@@ -73583,8 +73590,8 @@ var CodexOwnedAcpAgent = class {
73583
73590
  this.#turn = turn;
73584
73591
  this.#nativeTurnId = null;
73585
73592
  try {
73586
- const started = turnSchema.parse(
73587
- (await this.#appServer.request(
73593
+ const { turn: started } = turnStartResponseSchema.parse(
73594
+ await this.#appServer.request(
73588
73595
  "turn/start",
73589
73596
  {
73590
73597
  ...this.#settings.turnParameters(),
@@ -73593,7 +73600,7 @@ var CodexOwnedAcpAgent = class {
73593
73600
  threadId: this.#context.threadId()
73594
73601
  },
73595
73602
  signal
73596
- )).turn
73603
+ )
73597
73604
  );
73598
73605
  if (this.#turn === turn) {
73599
73606
  turn.turn.id = started.id;
@@ -81203,6 +81210,7 @@ function replaceAcpPayload(event, payload) {
81203
81210
  }
81204
81211
  function patchToolCallFields(previous, incoming) {
81205
81212
  const {
81213
+ sessionUpdate: _previousKind,
81206
81214
  content: previousContent,
81207
81215
  kind: previousKind,
81208
81216
  locations: previousLocations,
@@ -81212,7 +81220,18 @@ function patchToolCallFields(previous, incoming) {
81212
81220
  title: previousTitle,
81213
81221
  ...previousFields
81214
81222
  } = previous;
81215
- const { content, kind, locations, rawInput, rawOutput, status, title: title2, ...incomingFields } = incoming;
81223
+ const {
81224
+ sessionUpdate: _incomingKind,
81225
+ content,
81226
+ kind,
81227
+ locations,
81228
+ rawInput,
81229
+ rawOutput,
81230
+ status,
81231
+ title: title2,
81232
+ ...incomingFields
81233
+ } = incoming;
81234
+ const mergedTitle = title2 ?? previousTitle ?? void 0;
81216
81235
  return {
81217
81236
  ...previousFields,
81218
81237
  ...incomingFields,
@@ -81222,9 +81241,8 @@ function patchToolCallFields(previous, incoming) {
81222
81241
  ...rawInput === void 0 || rawInput === null ? previousRawInput === void 0 || previousRawInput === null ? {} : { rawInput: previousRawInput } : { rawInput },
81223
81242
  ...rawOutput === void 0 || rawOutput === null ? previousRawOutput === void 0 || previousRawOutput === null ? {} : { rawOutput: previousRawOutput } : { rawOutput },
81224
81243
  ...status === void 0 || status === null ? previousStatus === void 0 || previousStatus === null ? {} : { status: previousStatus } : { status },
81225
- // A tool call always carries a title in the session event log, so the
81226
- // merged form keeps the announced one when an update omits it.
81227
- title: title2 ?? previousTitle,
81244
+ // An update that omits the title keeps the one already reported.
81245
+ ...mergedTitle === void 0 ? {} : { title: mergedTitle },
81228
81246
  toolCallId: previous.toolCallId
81229
81247
  };
81230
81248
  }
@@ -81235,10 +81253,8 @@ function mergeToolCall(previous, incoming) {
81235
81253
  sessionUpdate: "tool_call_update"
81236
81254
  };
81237
81255
  }
81238
- return {
81239
- ...patchToolCallFields(previous, incoming),
81240
- sessionUpdate: "tool_call"
81241
- };
81256
+ const fields = patchToolCallFields(previous, incoming);
81257
+ return { ...fields, sessionUpdate: "tool_call", title: fields.title ?? previous.title };
81242
81258
  }
81243
81259
  function mergeTextChunk(previous, incoming) {
81244
81260
  if (previous.sessionUpdate !== "agent_message_chunk" && previous.sessionUpdate !== "agent_thought_chunk" && previous.sessionUpdate !== "user_message_chunk" || incoming.sessionUpdate !== previous.sessionUpdate || previous.messageId !== incoming.messageId || previous.content.type !== "text" || incoming.content.type !== "text") {
@@ -96942,30 +96958,37 @@ function connectRelay(url2, signal, transportFailed = () => void 0) {
96942
96958
  }
96943
96959
  };
96944
96960
  const dispatcher = environmentProxyDispatcher.compose((dispatch) => (options, handler) => {
96945
- const trackedHandler = Object.create(handler);
96946
- trackedHandler.onRequestStart = (controller, context) => {
96947
- releaseTransport = (reason) => controller.abort(reason);
96948
- handler.onRequestStart?.(controller, context);
96949
- };
96950
- trackedHandler.onResponseError = (controller, failure2) => {
96951
- observeFailure(failure2, "request");
96952
- handler.onResponseError?.(controller, failure2);
96953
- };
96954
- trackedHandler.onResponseStart = (controller, statusCode, responseHeaders, statusMessage) => {
96955
- observeHandshake(statusCode, 101);
96956
- handler.onResponseStart?.(controller, statusCode, responseHeaders, statusMessage);
96957
- };
96958
- trackedHandler.onRequestUpgrade = (controller, statusCode, responseHeaders, transport) => {
96959
- observeHandshake(statusCode, Reflect.get(transport, "session") == null ? 101 : 200);
96960
- releaseTransport = (reason) => transport.destroy(reason);
96961
- const onTransportError = (failure2) => observeFailure(failure2, "socket");
96962
- removeTransportObserver = () => {
96963
- transport.off("error", onTransportError);
96964
- transport.off("close", removeTransportObserver);
96965
- };
96966
- transport.on("error", onTransportError);
96967
- transport.once("close", removeTransportObserver);
96968
- return handler.onRequestUpgrade?.(controller, statusCode, responseHeaders, transport);
96961
+ const trackedHandler = {
96962
+ onRequestStart: (controller, context) => {
96963
+ releaseTransport = (reason) => controller.abort(reason);
96964
+ handler.onRequestStart?.(controller, context);
96965
+ },
96966
+ onRequestUpgrade: (controller, statusCode, responseHeaders, transport) => {
96967
+ observeHandshake(statusCode, Reflect.get(transport, "session") == null ? 101 : 200);
96968
+ releaseTransport = (reason) => transport.destroy(reason);
96969
+ const onTransportError = (failure2) => observeFailure(failure2, "socket");
96970
+ removeTransportObserver = () => {
96971
+ transport.off("error", onTransportError);
96972
+ transport.off("close", removeTransportObserver);
96973
+ };
96974
+ transport.on("error", onTransportError);
96975
+ transport.once("close", removeTransportObserver);
96976
+ handler.onRequestUpgrade?.(controller, statusCode, responseHeaders, transport);
96977
+ },
96978
+ onResponseStart: (controller, statusCode, responseHeaders, statusMessage) => {
96979
+ observeHandshake(statusCode, 101);
96980
+ handler.onResponseStart?.(controller, statusCode, responseHeaders, statusMessage);
96981
+ },
96982
+ onResponseData: (controller, chunk) => {
96983
+ handler.onResponseData?.(controller, chunk);
96984
+ },
96985
+ onResponseEnd: (controller, trailers) => {
96986
+ handler.onResponseEnd?.(controller, trailers);
96987
+ },
96988
+ onResponseError: (controller, failure2) => {
96989
+ observeFailure(failure2, "request");
96990
+ handler.onResponseError?.(controller, failure2);
96991
+ }
96969
96992
  };
96970
96993
  return dispatch(options, trackedHandler);
96971
96994
  });
@@ -98025,4 +98048,4 @@ export {
98025
98048
  * MIT Licensed
98026
98049
  *)
98027
98050
  */
98028
- //# sourceMappingURL=chunk-KOTNUOD2.js.map
98051
+ //# sourceMappingURL=chunk-MOBB42YM.js.map