@odla-ai/cli 0.46.11 → 0.46.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/bin.cjs CHANGED
@@ -6878,17 +6878,17 @@ var init_cli_project = __esm({
6878
6878
  }
6879
6879
  });
6880
6880
 
6881
- // ../harness/dist/chunk-RXNHCGWE.js
6881
+ // ../harness/dist/chunk-I43KTCJ2.js
6882
6882
  var HARNESS_PROTOCOL_VERSION;
6883
- var init_chunk_RXNHCGWE = __esm({
6884
- "../harness/dist/chunk-RXNHCGWE.js"() {
6883
+ var init_chunk_I43KTCJ2 = __esm({
6884
+ "../harness/dist/chunk-I43KTCJ2.js"() {
6885
6885
  "use strict";
6886
6886
  init_cjs_shims();
6887
6887
  HARNESS_PROTOCOL_VERSION = 1;
6888
6888
  }
6889
6889
  });
6890
6890
 
6891
- // ../harness/dist/chunk-CR6RE3A2.js
6891
+ // ../harness/dist/chunk-HDIR4MM5.js
6892
6892
  function assertPinnedImage(image) {
6893
6893
  if (!DIGEST_IMAGE.test(image)) throw new TypeError("container image must be pinned by sha256 digest");
6894
6894
  }
@@ -7237,8 +7237,8 @@ async function stageWorkspacePair(baselineSource, workspaceSource, options = {})
7237
7237
  }
7238
7238
  }
7239
7239
  var import_child_process, import_fs, import_promises2, import_path, import_process, import_promises3, import_os, import_path2, import_child_process2, import_path3, import_promises4, import_os2, import_path4, import_child_process3, DIGEST_IMAGE, SKIP_WORKSPACE_DIRS, SECRET_WORKSPACE_FILE;
7240
- var init_chunk_CR6RE3A2 = __esm({
7241
- "../harness/dist/chunk-CR6RE3A2.js"() {
7240
+ var init_chunk_HDIR4MM5 = __esm({
7241
+ "../harness/dist/chunk-HDIR4MM5.js"() {
7242
7242
  "use strict";
7243
7243
  init_cjs_shims();
7244
7244
  import_child_process = require("child_process");
@@ -8236,7 +8236,7 @@ var init_code2 = __esm({
8236
8236
  }
8237
8237
  });
8238
8238
 
8239
- // ../harness/dist/chunk-J7XU5QB7.js
8239
+ // ../harness/dist/chunk-4EPJJMFG.js
8240
8240
  async function digestStagedWorkspace(root, limits) {
8241
8241
  const files = [];
8242
8242
  const walk = async (directory) => {
@@ -10640,13 +10640,62 @@ function codeRuntimeAcknowledgementGate(signal) {
10640
10640
  else signal.addEventListener("abort", onAbort, { once: true });
10641
10641
  return { ready, release };
10642
10642
  }
10643
+ function observeCodeRuntimeSessionSkills(command, skills, emit4) {
10644
+ return skills.map((skill) => ({
10645
+ ...skill,
10646
+ tools: skill.tools.map((tool) => {
10647
+ if (!tool.handler) return tool;
10648
+ const handler = tool.handler;
10649
+ return {
10650
+ ...tool,
10651
+ handler: async (input, context) => {
10652
+ const startedAt = Date.now();
10653
+ const operationId = digestRuntimeValue(
10654
+ `${command.commandId}:${skill.name}:${tool.name}:${context.toolCallId ?? "missing"}`
10655
+ );
10656
+ await emit4({
10657
+ type: "collaboration",
10658
+ phase: "started",
10659
+ skill: skill.name,
10660
+ tool: tool.name,
10661
+ operationId
10662
+ }).catch(() => void 0);
10663
+ try {
10664
+ const output = await handler(input, context);
10665
+ await emit4({
10666
+ type: "collaboration",
10667
+ phase: "completed",
10668
+ skill: skill.name,
10669
+ tool: tool.name,
10670
+ operationId,
10671
+ ok: output.isError !== true,
10672
+ durationMs: Date.now() - startedAt
10673
+ }).catch(() => void 0);
10674
+ return output;
10675
+ } catch (cause) {
10676
+ await emit4({
10677
+ type: "collaboration",
10678
+ phase: "completed",
10679
+ skill: skill.name,
10680
+ tool: tool.name,
10681
+ operationId,
10682
+ ok: false,
10683
+ durationMs: Date.now() - startedAt
10684
+ }).catch(() => void 0);
10685
+ throw cause;
10686
+ }
10687
+ }
10688
+ };
10689
+ })
10690
+ }));
10691
+ }
10643
10692
  var import_crypto, import_promises5, import_path5, import_child_process4, import_promises6, import_path6, import_child_process5, import_process2, import_crypto2, import_crypto3, import_fs2, import_promises7, import_path7, import_promises8, import_os3, import_path8, import_ai4, import_ai5, import_child_process6, import_promises9, import_path9, import_promises10, import_promises11, import_path10, import_crypto4, CODE_RUNTIME_PROTOCOL_VERSION, CodeRuntimeReconciler, CodeRuntimeControlError, record5, invalid, RESERVED, SECRET, PATH, FORBIDDEN, ARTIFACT_PATH, PRIVATE_ARTIFACT_PART, SHA3, DIGEST3, ID3, RULE, DEFAULT_PREFIXES, DEFAULT_SUFFIXES, message, CodeRuntimeCheckpointManager, record22, SOURCE_LIMITS, RESERVED2, SECRET2, SOURCE_MAX_FILES, SOURCE_MAX_BYTES, SOURCE_SET_MAX_BYTES, V1_SYSTEM_PROMPT, V2_SYSTEM_PROMPT, V3_SYSTEM_PROMPT, SYSTEM_PROMPT_FOR, DEFAULT_MAX_FILES, DEFAULT_MAX_RESULTS, DEFAULT_MAX_FILE_BYTES, MAX_NATIVE_ARG_BYTES, DESTINATIONS, READ, LIST, SEARCH, GRAPH, PATCH, RECIPE, cache, shortId, GRAPH_TOOLS, MAX_MEMORY_BODY, POSITIVE, digestRuntimeValue, runtimeErrorMessage, text3, integer2, record32, excerpt, paths, TheseusRuntimeEngine;
10644
- var init_chunk_J7XU5QB7 = __esm({
10645
- "../harness/dist/chunk-J7XU5QB7.js"() {
10693
+ var init_chunk_4EPJJMFG = __esm({
10694
+ "../harness/dist/chunk-4EPJJMFG.js"() {
10646
10695
  "use strict";
10647
10696
  init_cjs_shims();
10648
- init_chunk_CR6RE3A2();
10649
- init_chunk_RXNHCGWE();
10697
+ init_chunk_HDIR4MM5();
10698
+ init_chunk_I43KTCJ2();
10650
10699
  import_crypto = require("crypto");
10651
10700
  import_promises5 = require("fs/promises");
10652
10701
  import_path5 = require("path");
@@ -11113,7 +11162,7 @@ Never claim a build or test passed unless odla_run_recipe returned that result.`
11113
11162
  event: (event) => this.#event(command, event, active.conversationRefs)
11114
11163
  });
11115
11164
  await this.#event(command, { type: "status", status: "running" }, active.conversationRefs);
11116
- const extraSkills = await sessionSkillsFor(this.options, command);
11165
+ const extraSkills = observeCodeRuntimeSessionSkills(command, await sessionSkillsFor(this.options, command), (event) => this.#event(command, event, active.conversationRefs));
11117
11166
  const result = await this.#attempt({
11118
11167
  inference,
11119
11168
  broker,
@@ -11218,8 +11267,8 @@ var init_node = __esm({
11218
11267
  "../harness/dist/node.js"() {
11219
11268
  "use strict";
11220
11269
  init_cjs_shims();
11221
- init_chunk_J7XU5QB7();
11222
- init_chunk_CR6RE3A2();
11270
+ init_chunk_4EPJJMFG();
11271
+ init_chunk_HDIR4MM5();
11223
11272
  MEASURED_PREMIUM = Object.freeze({
11224
11273
  /** 3 racers vs pure depth at equal budget: 21,044 / 7,936. */
11225
11274
  racePerRacer: 0.55,
@@ -13641,13 +13690,15 @@ async function pmNext(ctx, parsed) {
13641
13690
  const ready = tasks.filter((record11) => record11.column === READY_COLUMN);
13642
13691
  const doing = tasks.filter((record11) => record11.column === "doing");
13643
13692
  const guidance = !goals.length ? "discuss alignment with the user before creating or claiming project work" : !ready.length ? 'refine a linked Backlog task and mark it Ready with "pm task ready <id>"' : `claim the top Ready task in one call: odla-ai pm start --app ${appId}`;
13693
+ const monitor = `odla-ai pm watch --app ${appId} --jsonl`;
13644
13694
  const result = {
13645
13695
  appId,
13646
13696
  projectId,
13647
13697
  openGoals: leanRecords("goal", goals, verbose),
13648
13698
  doing: leanRecords("task", doing, verbose),
13649
13699
  ready: leanRecords("task", ready, verbose),
13650
- next: guidance
13700
+ next: guidance,
13701
+ monitor
13651
13702
  };
13652
13703
  emit2(ctx, result, () => {
13653
13704
  ctx.out.log(`${appId}: goal-aligned work intake (read only)`);
@@ -13661,6 +13712,7 @@ async function pmNext(ctx, parsed) {
13661
13712
  else for (const record11 of records) printRecord(ctx, entity, record11);
13662
13713
  }
13663
13714
  ctx.out.log(`next: ${guidance}`);
13715
+ ctx.out.log(`monitor: ${monitor}`);
13664
13716
  });
13665
13717
  }
13666
13718
  async function pmHandoff(ctx, parsed) {
@@ -13672,17 +13724,20 @@ async function pmHandoff(ctx, parsed) {
13672
13724
  listFiltered(ctx, "bug", appId, projectId, { status: OPEN_BUG_STATUSES })
13673
13725
  ]);
13674
13726
  const clean4 = !goals.length && !tasks.length && !bugs.length;
13727
+ const monitor = `odla-ai pm watch --app ${appId} --jsonl`;
13675
13728
  const result = {
13676
13729
  appId,
13677
13730
  projectId,
13678
13731
  unmetGoals: leanRecords("goal", goals, verbose),
13679
13732
  activeTasks: leanRecords("task", tasks, verbose),
13680
13733
  openBugs: leanRecords("bug", bugs, verbose),
13681
- clean: clean4
13734
+ clean: clean4,
13735
+ monitor
13682
13736
  };
13683
13737
  emit2(ctx, result, () => {
13684
13738
  if (clean4) {
13685
13739
  ctx.out.log(`${appId}: no unresolved PM work`);
13740
+ ctx.out.log(`monitor: ${monitor}`);
13686
13741
  return;
13687
13742
  }
13688
13743
  ctx.out.log(`${appId}: authoritative PM handoff`);
@@ -13695,6 +13750,7 @@ async function pmHandoff(ctx, parsed) {
13695
13750
  if (!records.length) ctx.out.log("- (none)");
13696
13751
  else for (const record11 of records) printRecord(ctx, entity, record11);
13697
13752
  }
13753
+ ctx.out.log(`monitor: ${monitor}`);
13698
13754
  });
13699
13755
  }
13700
13756
  var READY_COLUMN, UNMET_GOAL_STATUS, ACTIVE_TASK_COLUMNS, OPEN_BUG_STATUSES, wantsVerbose;