@odla-ai/cli 0.48.4 → 0.49.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/dist/bin.js CHANGED
@@ -172,7 +172,7 @@ function absoluteEntryPath(entryPath) {
172
172
 
173
173
  // src/bin.ts
174
174
  var argv = process.argv.slice(2);
175
- requireCurrentCliForProvision(argv).then(() => requireCoherentProvisionRuntime(argv)).then(async () => (await import("./cli-MXYYOFBR.js")).runCli()).catch((err) => {
175
+ requireCurrentCliForProvision(argv).then(() => requireCoherentProvisionRuntime(argv)).then(async () => (await import("./cli-AT6M3FCR.js")).runCli()).catch((err) => {
176
176
  console.error(redactSecrets(`odla-ai: ${err instanceof Error ? err.message : String(err)}`));
177
177
  process.exitCode = exitCodeFor(err);
178
178
  });
@@ -1246,6 +1246,7 @@ var COMMAND_SURFACE = {
1246
1246
  pm: {
1247
1247
  ...PM_ENTITIES,
1248
1248
  project: { list: {}, add: {}, create: {}, use: {}, set: {} },
1249
+ brief: {},
1249
1250
  handoff: {},
1250
1251
  next: {},
1251
1252
  start: {},
@@ -11327,7 +11328,8 @@ Usage:
11327
11328
  odla-ai pm bug list [--app <id>|--platform-wide] [--status <s>] [--severity <s>] [--goal <id>] [--assignee <id>] [--decision <id>] [--q <text>] [--limit <n>] [--offset <n>] [--json]
11328
11329
  odla-ai pm goal add --app <id> --title <t> [--status <s>] [--proof <text>] [--target <pct>] [--mutation-id <id>] [--json]
11329
11330
  odla-ai pm task add --app <id> --title <t> [--column <backlog|ready|doing|review|done>] [--goal <id>|--alignment-decision <id>] [--assignee <id>] [--description <text>|--body <text>] [--acceptance <text>] [--execution <human|agent|either>] [--due <epoch-ms>] [--mutation-id <id>] [--json]
11330
- odla-ai pm next --app <id> [--project <id>] [--verbose] [--json]
11331
+ odla-ai pm brief --app <id> [--project <id>] [--json] [bounded counts + actionable windows]
11332
+ odla-ai pm next --app <id> [--project <id>] [--brief|--verbose] [--json]
11331
11333
  odla-ai pm start --app <id> [<task-id>] [--goal <id>] [--verbose] [--mutation-id <id>] [--json] [claims the top Ready task in one call]
11332
11334
  odla-ai pm watch --app <id> [--cursor <cursor>] [--entity goal|task|decision|bug] [--action created|updated|deleted|comment.created|comment.updated] [--state <state>] [--by <principalId>] [--self <principalId>] [--interval <s>] [--timeout <s>] [--json|--jsonl]
11333
11335
  odla-ai pm task ready <id> --expected-revision <n> [--goal <id>|--alignment-decision <id>] [--description <text>|--body <text>] [--acceptance <text>] [--execution <human|agent|either>] [--mutation-id <id>] [--json]
@@ -11349,7 +11351,7 @@ Usage:
11349
11351
  odla-ai pm <goal|task|decision|bug> comments <id> [--json]
11350
11352
  odla-ai pm <goal|task|decision|bug> history <id> [--limit <n>] [--json]
11351
11353
  odla-ai pm <goal|task|decision|bug> rm <id>
11352
- odla-ai pm handoff --app <id> [--project <id>] [--verbose] [--json]
11354
+ odla-ai pm handoff --app <id> [--project <id>] [--brief|--verbose] [--json]
11353
11355
  odla-ai discuss groups [--json]
11354
11356
  odla-ai discuss list [--app <id>] [--q <text>] [--state open|resolved|all] [--mentions] [--json]
11355
11357
  odla-ai discuss read <topic> [--limit <n> --offset <n>] [--json]
@@ -12594,7 +12596,36 @@ function requireApp(ctx, parsed, command) {
12594
12596
  if (!appId) throw new Error(`pm ${command} needs --app <appId>`);
12595
12597
  return { appId, projectId: stringOpt(parsed.options.project) ?? ctx.projectId };
12596
12598
  }
12599
+ function printBriefingSection(ctx, label, entity, section) {
12600
+ ctx.out.log(`${label}: ${section.shown} shown of ${section.total}`);
12601
+ if (!section.records.length) ctx.out.log("- (none)");
12602
+ else for (const record12 of section.records) printRecord(ctx, entity, record12);
12603
+ if (section.truncated) ctx.out.log(` expand: ${section.expand}`);
12604
+ }
12605
+ async function pmBrief(ctx, parsed) {
12606
+ const { appId, projectId } = requireApp(ctx, parsed, "brief");
12607
+ const q = new URLSearchParams({ app: appId });
12608
+ if (projectId) q.set("project", projectId);
12609
+ const result = await pmRequest(ctx, "GET", `/briefing?${q}`);
12610
+ emit2(ctx, result, () => {
12611
+ ctx.out.log(`${appId}: bounded PM briefing (read only)`);
12612
+ ctx.out.log(
12613
+ `counts: goals ${result.counts.openGoals}; Ready ${result.counts.ready}; active tasks ${result.counts.activeTasks}; Doing ${result.counts.doing}; yours ${result.counts.currentPrincipal}; bugs ${result.counts.openBugs}`
12614
+ );
12615
+ printBriefingSection(ctx, "your current work", "task", result.currentWork);
12616
+ printBriefingSection(ctx, "top Ready", "task", result.ready);
12617
+ printBriefingSection(ctx, "context goals", "goal", result.goals);
12618
+ printBriefingSection(ctx, "open bugs", "bug", result.openBugs);
12619
+ if (result.counts.doing > 0) {
12620
+ ctx.out.log(`doing expansion: ${result.expansions.doing}`);
12621
+ }
12622
+ ctx.out.log(`next: ${result.next}`);
12623
+ ctx.out.log(`monitor: ${result.monitor}`);
12624
+ ctx.out.log(`full handoff: ${result.expandFull}`);
12625
+ });
12626
+ }
12597
12627
  async function pmNext(ctx, parsed) {
12628
+ if (parsed.options.brief === true) return pmBrief(ctx, parsed);
12598
12629
  const { appId, projectId } = requireApp(ctx, parsed, "next");
12599
12630
  const verbose = wantsVerbose(parsed);
12600
12631
  const [goals, tasks] = await Promise.all([
@@ -12631,6 +12662,7 @@ async function pmNext(ctx, parsed) {
12631
12662
  });
12632
12663
  }
12633
12664
  async function pmHandoff(ctx, parsed) {
12665
+ if (parsed.options.brief === true) return pmBrief(ctx, parsed);
12634
12666
  const { appId, projectId } = requireApp(ctx, parsed, "handoff");
12635
12667
  const verbose = wantsVerbose(parsed);
12636
12668
  const [goals, tasks, bugs] = await Promise.all([
@@ -13236,9 +13268,13 @@ async function pmCommand(parsed, deps = {}) {
13236
13268
  rejectWord(["pm", "project"], action3);
13237
13269
  }
13238
13270
  if (word === "next") {
13239
- assertArgs(parsed, [...COMMON_OPTIONS, "app", "project", "verbose"], 2);
13271
+ assertArgs(parsed, [...COMMON_OPTIONS, "app", "project", "verbose", "brief"], 2);
13240
13272
  return pmNext(await buildContext2(parsed, deps), parsed);
13241
13273
  }
13274
+ if (word === "brief") {
13275
+ assertArgs(parsed, [...COMMON_OPTIONS, "app", "project"], 2);
13276
+ return pmBrief(await buildContext2(parsed, deps), parsed);
13277
+ }
13242
13278
  if (word === "start") {
13243
13279
  assertArgs(parsed, [...COMMON_OPTIONS, "app", "project", "goal", "verbose", "mutation-id"], 3);
13244
13280
  return pmStart(await buildContext2(parsed, deps), parsed);
@@ -13260,7 +13296,7 @@ async function pmCommand(parsed, deps = {}) {
13260
13296
  return pmWatch(await buildContext2(parsed, deps), parsed).then(() => void 0);
13261
13297
  }
13262
13298
  if (word === "handoff") {
13263
- assertArgs(parsed, [...COMMON_OPTIONS, "app", "project", "verbose"], 2);
13299
+ assertArgs(parsed, [...COMMON_OPTIONS, "app", "project", "verbose", "brief"], 2);
13264
13300
  return pmHandoff(await buildContext2(parsed, deps), parsed);
13265
13301
  }
13266
13302
  const entity = ALIASES[word];
@@ -16687,4 +16723,4 @@ export {
16687
16723
  isTerminalHostedSecurityStatus,
16688
16724
  runCli
16689
16725
  };
16690
- //# sourceMappingURL=chunk-BD5KIG63.js.map
16726
+ //# sourceMappingURL=chunk-7627AY5G.js.map