@skrr-ai/cli 0.1.95 → 0.1.97

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 (200) hide show
  1. package/README.md +22 -0
  2. package/dist/commands/agent/message/send.d.ts +2 -0
  3. package/dist/commands/agent/message/send.js +75 -5
  4. package/dist/commands/agents/chat.js +1 -1
  5. package/dist/commands/agents/create.d.ts +0 -3
  6. package/dist/commands/agents/create.js +0 -26
  7. package/dist/commands/agents/egress.d.ts +17 -0
  8. package/dist/commands/agents/egress.js +84 -0
  9. package/dist/commands/agents/mailbox/messages.d.ts +14 -0
  10. package/dist/commands/agents/mailbox/messages.js +52 -0
  11. package/dist/commands/agents/mailbox/show.d.ts +13 -0
  12. package/dist/commands/agents/mailbox/show.js +52 -0
  13. package/dist/commands/agents/operating-plan.js +8 -0
  14. package/dist/commands/agents/roles/capture.d.ts +16 -0
  15. package/dist/commands/agents/roles/capture.js +53 -0
  16. package/dist/commands/agents/roles/install.d.ts +1 -0
  17. package/dist/commands/agents/roles/install.js +8 -1
  18. package/dist/commands/agents/roles/preview.d.ts +2 -0
  19. package/dist/commands/agents/roles/preview.js +27 -3
  20. package/dist/commands/agents/update.d.ts +0 -3
  21. package/dist/commands/agents/update.js +1 -31
  22. package/dist/commands/agents/usage-cap.d.ts +4 -1
  23. package/dist/commands/agents/usage-cap.js +49 -10
  24. package/dist/commands/code/jobs/show.js +12 -0
  25. package/dist/commands/commitments/action-proposals/decide.d.ts +2 -0
  26. package/dist/commands/commitments/action-proposals/decide.js +12 -0
  27. package/dist/commands/commitments/action-proposals.js +7 -0
  28. package/dist/commands/commitments/create.d.ts +1 -0
  29. package/dist/commands/commitments/create.js +17 -1
  30. package/dist/commands/commitments/delivery.d.ts +1 -0
  31. package/dist/commands/commitments/delivery.js +11 -1
  32. package/dist/commands/commitments/doctor.js +4 -0
  33. package/dist/commands/commitments/effective-policy.js +26 -0
  34. package/dist/commands/commitments/endpoints/create.js +5 -2
  35. package/dist/commands/commitments/observations.d.ts +10 -0
  36. package/dist/commands/commitments/observations.js +88 -0
  37. package/dist/commands/commitments/pause.d.ts +1 -1
  38. package/dist/commands/commitments/pause.js +4 -3
  39. package/dist/commands/commitments/preflight.js +2 -1
  40. package/dist/commands/commitments/reports.d.ts +2 -0
  41. package/dist/commands/commitments/reports.js +22 -4
  42. package/dist/commands/commitments/update.d.ts +1 -0
  43. package/dist/commands/commitments/update.js +35 -5
  44. package/dist/commands/daemon/install.js +1 -1
  45. package/dist/commands/grants/create.d.ts +1 -0
  46. package/dist/commands/grants/create.js +8 -0
  47. package/dist/commands/grants/rotate.d.ts +5 -0
  48. package/dist/commands/grants/rotate.js +13 -1
  49. package/dist/commands/grants/update.d.ts +12 -0
  50. package/dist/commands/grants/update.js +27 -0
  51. package/dist/commands/machines/hosted/start.js +7 -1
  52. package/dist/commands/machines/list.js +4 -4
  53. package/dist/commands/measures/confirm.d.ts +1 -7
  54. package/dist/commands/measures/confirm.js +15 -14
  55. package/dist/commands/measures/list.d.ts +1 -7
  56. package/dist/commands/measures/list.js +1 -7
  57. package/dist/commands/measures/record.js +4 -4
  58. package/dist/commands/measures/show.d.ts +11 -0
  59. package/dist/commands/measures/show.js +26 -0
  60. package/dist/commands/northstars/governance/configure.d.ts +1 -0
  61. package/dist/commands/northstars/governance/configure.js +8 -1
  62. package/dist/commands/proposals/discard.d.ts +5 -0
  63. package/dist/commands/proposals/discard.js +8 -0
  64. package/dist/commands/proposals/keep.d.ts +5 -0
  65. package/dist/commands/proposals/keep.js +8 -0
  66. package/dist/commands/proposals/list.d.ts +15 -0
  67. package/dist/commands/proposals/list.js +74 -0
  68. package/dist/commands/proposals/show.d.ts +12 -0
  69. package/dist/commands/proposals/show.js +27 -0
  70. package/dist/commands/proposals/snooze.d.ts +5 -0
  71. package/dist/commands/proposals/snooze.js +8 -0
  72. package/dist/commands/signals/monitors/create.d.ts +9 -0
  73. package/dist/commands/signals/monitors/create.js +29 -0
  74. package/dist/commands/signals/monitors/list.d.ts +8 -0
  75. package/dist/commands/signals/monitors/list.js +16 -0
  76. package/dist/commands/signals/monitors/pause.d.ts +11 -0
  77. package/dist/commands/signals/monitors/pause.js +17 -0
  78. package/dist/commands/signals/monitors/resume.d.ts +11 -0
  79. package/dist/commands/signals/monitors/resume.js +17 -0
  80. package/dist/commands/signals/monitors/revise.d.ts +12 -0
  81. package/dist/commands/signals/monitors/revise.js +25 -0
  82. package/dist/commands/signals/monitors/show.d.ts +11 -0
  83. package/dist/commands/signals/monitors/show.js +17 -0
  84. package/dist/commands/signals/monitors/test.d.ts +12 -0
  85. package/dist/commands/signals/monitors/test.js +25 -0
  86. package/dist/commands/signals/monitors/transitions.d.ts +11 -0
  87. package/dist/commands/signals/monitors/transitions.js +17 -0
  88. package/dist/commands/signals/monitors/validate.d.ts +9 -0
  89. package/dist/commands/signals/monitors/validate.js +24 -0
  90. package/dist/commands/signals/schemas/list.d.ts +8 -0
  91. package/dist/commands/signals/schemas/list.js +16 -0
  92. package/dist/commands/signals/schemas/show.d.ts +11 -0
  93. package/dist/commands/signals/schemas/show.js +17 -0
  94. package/dist/commands/signals/sources/list.d.ts +8 -0
  95. package/dist/commands/signals/sources/list.js +16 -0
  96. package/dist/commands/signals/sources/receipts.d.ts +11 -0
  97. package/dist/commands/signals/sources/receipts.js +17 -0
  98. package/dist/commands/signals/sources/show.d.ts +11 -0
  99. package/dist/commands/signals/sources/show.js +17 -0
  100. package/dist/commands/spaces/usage.d.ts +12 -0
  101. package/dist/commands/spaces/usage.js +28 -0
  102. package/dist/commands/spaces/workflows/run.js +3 -0
  103. package/dist/commands/spaces/workflows/runs.js +2 -1
  104. package/dist/commands/spaces/workflows/update.d.ts +6 -1
  105. package/dist/commands/spaces/workflows/update.js +34 -2
  106. package/dist/commands/tasks/cascade-status.d.ts +2 -0
  107. package/dist/commands/tasks/cascade-status.js +27 -1
  108. package/dist/commands/tasks/comments/add.js +29 -20
  109. package/dist/commands/tasks/complete.js +7 -4
  110. package/dist/commands/tasks/create.d.ts +4 -0
  111. package/dist/commands/tasks/create.js +16 -0
  112. package/dist/commands/tasks/deliverable/add.js +17 -7
  113. package/dist/commands/tasks/economics-compare.d.ts +15 -0
  114. package/dist/commands/tasks/economics-compare.js +60 -0
  115. package/dist/commands/tasks/events/append.js +6 -5
  116. package/dist/commands/tasks/expectations/assess.js +4 -4
  117. package/dist/commands/tasks/expectations/evaluate.d.ts +13 -0
  118. package/dist/commands/tasks/expectations/evaluate.js +43 -0
  119. package/dist/commands/tasks/list.d.ts +1 -0
  120. package/dist/commands/tasks/list.js +44 -1
  121. package/dist/commands/tasks/move.js +15 -11
  122. package/dist/commands/tasks/report.js +19 -11
  123. package/dist/commands/tasks/result/submit.js +5 -4
  124. package/dist/commands/tasks/resume/save.js +5 -4
  125. package/dist/commands/tasks/review.js +4 -4
  126. package/dist/commands/tasks/show.d.ts +5 -0
  127. package/dist/commands/tasks/show.js +17 -0
  128. package/dist/commands/tasks/update.d.ts +4 -0
  129. package/dist/commands/tasks/update.js +9 -0
  130. package/dist/commands/tasks/updates/add.js +5 -4
  131. package/dist/commands/tasks/workflow-findings.js +2 -2
  132. package/dist/commands/triggers/create.d.ts +2 -0
  133. package/dist/commands/triggers/create.js +15 -0
  134. package/dist/commands/workspaces/grants.d.ts +12 -0
  135. package/dist/commands/workspaces/grants.js +31 -0
  136. package/dist/commands/workspaces/stewardship.d.ts +13 -0
  137. package/dist/commands/workspaces/stewardship.js +34 -0
  138. package/dist/lib/agent-config.d.ts +0 -12
  139. package/dist/lib/agent-config.js +1 -27
  140. package/dist/lib/agent-mailbox.d.ts +35 -0
  141. package/dist/lib/agent-mailbox.js +55 -0
  142. package/dist/lib/commitment-endpoints.d.ts +2 -1
  143. package/dist/lib/commitment-endpoints.js +2 -5
  144. package/dist/lib/commitment-product.d.ts +3 -1
  145. package/dist/lib/commitment-product.js +10 -0
  146. package/dist/lib/commitment-terms.js +1 -1
  147. package/dist/lib/commitments.d.ts +17 -7
  148. package/dist/lib/commitments.js +173 -85
  149. package/dist/lib/compasses.d.ts +14 -0
  150. package/dist/lib/compasses.js +25 -11
  151. package/dist/lib/grants.d.ts +5 -1
  152. package/dist/lib/grants.js +9 -1
  153. package/dist/lib/hosted-machines.d.ts +7 -0
  154. package/dist/lib/mailbox-human-command.d.ts +11 -0
  155. package/dist/lib/mailbox-human-command.js +41 -0
  156. package/dist/lib/measures.d.ts +28 -2
  157. package/dist/lib/measures.js +38 -14
  158. package/dist/lib/message-intent.d.ts +6 -2
  159. package/dist/lib/message-intent.js +1 -0
  160. package/dist/lib/northstars.js +2 -1
  161. package/dist/lib/proposal-decision-command.d.ts +19 -0
  162. package/dist/lib/proposal-decision-command.js +64 -0
  163. package/dist/lib/proposals.d.ts +8 -0
  164. package/dist/lib/proposals.js +22 -0
  165. package/dist/lib/roles.d.ts +141 -6
  166. package/dist/lib/roles.js +8 -2
  167. package/dist/lib/session-task-write.d.ts +18 -0
  168. package/dist/lib/session-task-write.js +43 -0
  169. package/dist/lib/signals.d.ts +20 -0
  170. package/dist/lib/signals.js +24 -0
  171. package/dist/lib/space-usage.d.ts +3 -0
  172. package/dist/lib/space-usage.js +17 -0
  173. package/dist/lib/stewardship-output.d.ts +4 -0
  174. package/dist/lib/stewardship-output.js +82 -0
  175. package/dist/lib/task-asset-upload.d.ts +3 -1
  176. package/dist/lib/task-asset-upload.js +19 -22
  177. package/dist/lib/task-economics.d.ts +16 -0
  178. package/dist/lib/task-economics.js +22 -0
  179. package/dist/lib/triggers.d.ts +11 -3
  180. package/dist/lib/triggers.js +58 -1
  181. package/dist/lib/unsupported-managed-task-write.d.ts +2 -0
  182. package/dist/lib/unsupported-managed-task-write.js +12 -0
  183. package/dist/lib/usage-discovery.d.ts +10 -0
  184. package/dist/lib/usage-discovery.js +24 -3
  185. package/dist/lib/workflow-run-budget.d.ts +12 -0
  186. package/dist/lib/workflow-run-budget.js +37 -0
  187. package/dist/lib/workspaces.d.ts +48 -0
  188. package/dist/lib/workspaces.js +8 -0
  189. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/cliHandoffWire.d.ts +4 -0
  190. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/cliHandoffWire.js +14 -1
  191. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/githubPushRefusal.d.ts +9 -0
  192. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/githubPushRefusal.js +49 -0
  193. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/cliHandoffWire.d.ts +4 -0
  194. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/cliHandoffWire.js +12 -0
  195. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/githubPushRefusal.d.ts +9 -0
  196. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/githubPushRefusal.js +44 -0
  197. package/dist/node_modules/@skrr-ai/auth-core/package.json +10 -0
  198. package/dist/node_modules/@skrr-ai/data-provider/index.js +8017 -7086
  199. package/oclif.manifest.json +3872 -1167
  200. package/package.json +22 -1
@@ -1,17 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
4
5
  const base_command_1 = require("../../base-command");
5
6
  const measures_1 = require("../../lib/measures");
6
- /**
7
- * `skrr measures confirm` — turn a claim into ground truth.
8
- *
9
- * This is the human-in-the-loop step whose `agentOutcome` equivalent shipped
10
- * with zero callers, which left every value claim in the system permanently
11
- * unverified.
12
- */
7
+ /** Confirm a reading and display the server-derived attribution. */
13
8
  class MeasuresConfirm extends base_command_1.BaseCommand {
14
- static description = 'Confirm an observation (marks it as ground truth)';
9
+ static description = 'Confirm an observation with credential-derived evidence attribution';
15
10
  static examples = [
16
11
  '<%= config.bin %> measures confirm <measure-id> --at 2026-07-28T00:00:00Z',
17
12
  '<%= config.bin %> measures confirm <measure-id> --latest',
@@ -22,7 +17,9 @@ class MeasuresConfirm extends base_command_1.BaseCommand {
22
17
  static flags = {
23
18
  json: core_1.Flags.boolean({ description: 'Output as JSON' }),
24
19
  at: core_1.Flags.string({ description: 'observedAt of the reading to confirm (ISO-8601)' }),
25
- latest: core_1.Flags.boolean({ description: 'Confirm the most recent unconfirmed reading' }),
20
+ latest: core_1.Flags.boolean({
21
+ description: 'Confirm the most recent reading lacking person confirmation',
22
+ }),
26
23
  };
27
24
  async run() {
28
25
  this.requireAuth();
@@ -33,19 +30,23 @@ class MeasuresConfirm extends base_command_1.BaseCommand {
33
30
  this.error('Specify --at <iso-instant> or --latest.');
34
31
  }
35
32
  const measure = await measures_1.measureApi.get(args.measureId);
36
- const unconfirmed = measure.observations.filter((o) => !o.confirmed);
37
- if (unconfirmed.length === 0) {
38
- this.log('Nothing to confirm — every reading is already confirmed.');
33
+ const selection = (0, data_provider_1.latestConfirmableMeasureReading)(measure.observations);
34
+ if (selection.ambiguous) {
35
+ this.error('Multiple retained readings have the same timestamp; the existing confirmation endpoint cannot distinguish them. No confirmation was sent.');
36
+ }
37
+ const unconfirmed = selection.reading;
38
+ if (!unconfirmed) {
39
+ this.log('Nothing to confirm — no eligible reading lacking person confirmation is available.');
39
40
  return;
40
41
  }
41
- observedAt = unconfirmed[unconfirmed.length - 1].observedAt;
42
+ observedAt = unconfirmed.observedAt;
42
43
  }
43
44
  const measure = await measures_1.measureApi.confirm(args.measureId, observedAt);
44
45
  if (flags.json) {
45
46
  this.log(JSON.stringify(measure, null, 2));
46
47
  return;
47
48
  }
48
- this.log(`Confirmed. ${measure.rollup.confirmedCount}/${measure.rollup.observationCount} readings are ground truth.`);
49
+ this.log((0, measures_1.recordConfirmationForObservation)(measure.observations.find((o) => Date.parse(o.observedAt) === Date.parse(observedAt))).message);
49
50
  }
50
51
  }
51
52
  exports.default = MeasuresConfirm;
@@ -1,11 +1,5 @@
1
1
  import { BaseCommand } from '../../base-command';
2
- /**
3
- * `skrr measures list` — what an agent is supposed to move.
4
- *
5
- * The CONFIRMED column is `confirmed/total`: an agent-reported reading is a
6
- * claim until a human confirms it, and collapsing the two would reproduce the
7
- * unverified-self-estimate problem with a unit attached.
8
- */
2
+ /** Read numeric movement alongside server-derived evidence counts. */
9
3
  export default class MeasuresList extends BaseCommand {
10
4
  static description: string;
11
5
  static examples: string[];
@@ -4,13 +4,7 @@ const core_1 = require("@oclif/core");
4
4
  const base_command_1 = require("../../base-command");
5
5
  const measures_1 = require("../../lib/measures");
6
6
  const triggers_1 = require("../../lib/triggers");
7
- /**
8
- * `skrr measures list` — what an agent is supposed to move.
9
- *
10
- * The CONFIRMED column is `confirmed/total`: an agent-reported reading is a
11
- * claim until a human confirms it, and collapsing the two would reproduce the
12
- * unverified-self-estimate problem with a unit attached.
13
- */
7
+ /** Read numeric movement alongside server-derived evidence counts. */
14
8
  class MeasuresList extends base_command_1.BaseCommand {
15
9
  static description = 'List measures (numeric outcomes with unit + baseline)';
16
10
  static examples = [
@@ -23,8 +23,8 @@ class MeasuresRecord extends base_command_1.BaseCommand {
23
23
  static flags = {
24
24
  json: core_1.Flags.boolean({ description: 'Output as JSON' }),
25
25
  source: core_1.Flags.string({
26
- description: 'Where the reading came from (manual entries are immediately confirmed ground truth)',
27
- options: [...measures_1.MEASURE_OBSERVATION_SOURCES],
26
+ description: 'Declared source; credential-derived evidence is reported by the server',
27
+ options: [...measures_1.MEASURE_WRITABLE_SOURCES],
28
28
  default: 'manual',
29
29
  }),
30
30
  at: core_1.Flags.string({ description: 'Observation instant (ISO-8601); defaults to now' }),
@@ -44,13 +44,13 @@ class MeasuresRecord extends base_command_1.BaseCommand {
44
44
  note: flags.note,
45
45
  evidence: flags.evidence,
46
46
  });
47
- const confirmation = (0, measures_1.recordConfirmationForSource)(flags.source);
47
+ const confirmation = (0, measures_1.recordConfirmationForObservation)(measure.observations.at(-1));
48
48
  if (flags.json) {
49
49
  this.log(JSON.stringify({ ...measure, record: { source: flags.source, confirmation } }, null, 2));
50
50
  return;
51
51
  }
52
52
  const r = measure.rollup;
53
- this.log(`Recorded ${value} on ${measure.label}${confirmation.status === 'confirmed' ? ' and confirmed.' : '.'}`);
53
+ this.log(`Recorded ${value} on ${measure.label}.`);
54
54
  if (r.delta !== null) {
55
55
  this.log(` ${r.baseline} → ${r.latest} (${r.delta > 0 ? '+' : ''}${r.delta}) — ${r.improved === null
56
56
  ? 'no direction'
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class MeasuresShow extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ measureId: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
6
+ };
7
+ static flags: {
8
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../base-command");
6
+ const measures_1 = require("../../lib/measures");
7
+ class MeasuresShow extends base_command_1.BaseCommand {
8
+ static description = 'Show measure readings, credential provenance and target revisions';
9
+ static args = { measureId: core_1.Args.string({ required: true, ignoreStdin: true }) };
10
+ static flags = { json: core_1.Flags.boolean({ description: 'Output as JSON' }) };
11
+ async run() {
12
+ this.requireAuth();
13
+ const { args, flags } = await this.parse(MeasuresShow);
14
+ const measure = await measures_1.measureApi.get(args.measureId);
15
+ if (flags.json) {
16
+ this.log(JSON.stringify(measure, null, 2));
17
+ return;
18
+ }
19
+ this.log(`${measure.label} (${measure.id})`);
20
+ for (const o of measure.observations)
21
+ this.log(`${o.observedAt} ${o.value}: ${o.provenance ? (0, data_provider_1.describeMeasureEvidence)(o.provenance.level, o.provenance.confirmedBy || o.provenance.recordedBy) : 'Before provenance tracking'}; declared ${o.source}; by ${o.provenance?.recordedBy?.kind || 'unattributed'} via ${o.provenance?.recordedBy?.via || 'unknown'}`);
22
+ for (const revision of measure.revisions || [])
23
+ this.log(`${revision.at} ${revision.by.kind} via ${revision.by.via}: ${revision.changes.map((c) => `${c.field} ${JSON.stringify(c.from)} → ${JSON.stringify(c.to)}`).join(', ')}`);
24
+ }
25
+ }
26
+ exports.default = MeasuresShow;
@@ -29,6 +29,7 @@ export default class NorthstarsGovernanceConfigure extends BaseCommand {
29
29
  'min-interval-hours': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
30
30
  'max-interval-hours': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
31
31
  'max-relative-change': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
32
+ 'max-observation-runs-per-day': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
32
33
  'max-runs-per-day': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
33
34
  'max-concurrent-runs': import("@oclif/core/lib/interfaces").OptionFlag<number | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
34
35
  'critical-reserve': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -84,8 +84,13 @@ class NorthstarsGovernanceConfigure extends base_command_1.BaseCommand {
84
84
  'max-relative-change': core_1.Flags.string({
85
85
  description: 'Largest single-step relative change a bounded-auto adjustment may make (0..1)',
86
86
  }),
87
+ 'max-observation-runs-per-day': core_1.Flags.integer({
88
+ description: 'Opt-in portfolio observation runs per UTC day',
89
+ min: 0,
90
+ max: 10000,
91
+ }),
87
92
  'max-runs-per-day': core_1.Flags.integer({
88
- description: 'Portfolio-wide observation budget (execution, NOT attention)',
93
+ description: 'Portfolio-wide action run budget (execution, NOT attention)',
89
94
  min: 0,
90
95
  max: 10000,
91
96
  }),
@@ -145,6 +150,8 @@ class NorthstarsGovernanceConfigure extends base_command_1.BaseCommand {
145
150
  if (Object.keys(cadencePolicy).length)
146
151
  body.cadencePolicy = cadencePolicy;
147
152
  const executionBudget = {};
153
+ if (flags['max-observation-runs-per-day'] !== undefined)
154
+ executionBudget.maxObservationRunsPerDay = flags['max-observation-runs-per-day'];
148
155
  if (flags['max-runs-per-day'] !== undefined) {
149
156
  executionBudget.maxRunsPerDay = flags['max-runs-per-day'];
150
157
  }
@@ -0,0 +1,5 @@
1
+ import { ProposalDecisionCommand } from '../../lib/proposal-decision-command';
2
+ export default class ProposalsDiscard extends ProposalDecisionCommand {
3
+ static description: string;
4
+ static decision: "discard";
5
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const proposal_decision_command_1 = require("../../lib/proposal-decision-command");
4
+ class ProposalsDiscard extends proposal_decision_command_1.ProposalDecisionCommand {
5
+ static description = 'Discard one displayed proposal through its domain authority';
6
+ static decision = 'discard';
7
+ }
8
+ exports.default = ProposalsDiscard;
@@ -0,0 +1,5 @@
1
+ import { ProposalDecisionCommand } from '../../lib/proposal-decision-command';
2
+ export default class ProposalsKeep extends ProposalDecisionCommand {
3
+ static description: string;
4
+ static decision: "keep";
5
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const proposal_decision_command_1 = require("../../lib/proposal-decision-command");
4
+ class ProposalsKeep extends proposal_decision_command_1.ProposalDecisionCommand {
5
+ static description = 'Keep one displayed proposal through its domain authority';
6
+ static decision = 'keep';
7
+ }
8
+ exports.default = ProposalsKeep;
@@ -0,0 +1,15 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class ProposalsList extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ kind: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
7
+ disposition: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
+ 'commitment-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
+ 'agent-id': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ limit: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
11
+ cursor: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
+ sort: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../base-command");
6
+ const proposals_1 = require("../../lib/proposals");
7
+ const format_1 = require("../../lib/format");
8
+ /** A snoozed proposal reads `proposed` in its disposition; the wake time is what tells them apart. */
9
+ function noteFor(row) {
10
+ if (row.sourceStatus === 'snoozed' && row.snoozedUntil)
11
+ return `snoozed until ${row.snoozedUntil}`;
12
+ if (!row.canDecide && row.undecidableReason && row.undecidableReason !== 'settled')
13
+ return data_provider_1.PROPOSAL_UNDECIDABLE_TEXT[row.undecidableReason];
14
+ return '—';
15
+ }
16
+ class ProposalsList extends base_command_1.BaseCommand {
17
+ static description = 'List the bounded proposal inbox and source coverage';
18
+ static flags = {
19
+ json: core_1.Flags.boolean(),
20
+ kind: core_1.Flags.string({ options: [...data_provider_1.PROPOSAL_KINDS] }),
21
+ disposition: core_1.Flags.string({ options: [...data_provider_1.PROPOSAL_DISPOSITIONS] }),
22
+ 'commitment-id': core_1.Flags.string(),
23
+ 'agent-id': core_1.Flags.string(),
24
+ limit: core_1.Flags.integer({ min: 1, max: 100, default: 50 }),
25
+ cursor: core_1.Flags.string(),
26
+ sort: core_1.Flags.string({ options: ['recent', 'value'], default: 'recent' }),
27
+ };
28
+ async run() {
29
+ this.requireAuth();
30
+ const { flags } = await this.parse(ProposalsList);
31
+ let result;
32
+ try {
33
+ result = await proposals_1.proposalApi.list({
34
+ kind: flags.kind,
35
+ disposition: flags.disposition,
36
+ commitmentId: flags['commitment-id'],
37
+ agentId: flags['agent-id'],
38
+ limit: flags.limit,
39
+ cursor: flags.cursor,
40
+ sort: flags.sort,
41
+ });
42
+ }
43
+ catch (error) {
44
+ this.handleApiError(error);
45
+ }
46
+ if (flags.json) {
47
+ this.log(JSON.stringify(result, null, 2));
48
+ return;
49
+ }
50
+ (0, format_1.renderTable)(result.data.map((row) => ({
51
+ id: row.id,
52
+ title: row.title,
53
+ disposition: row.disposition,
54
+ basis: row.economics?.basis || 'unknown',
55
+ deadline: row.deadline || '—',
56
+ note: noteFor(row),
57
+ })), [
58
+ { key: 'id', header: 'PROPOSAL', verbatim: true },
59
+ { key: 'title', header: 'TITLE' },
60
+ { key: 'disposition', header: 'DISPOSITION' },
61
+ { key: 'basis', header: 'BASIS' },
62
+ { key: 'deadline', header: 'DEADLINE' },
63
+ { key: 'note', header: 'NOTE' },
64
+ ], (line) => this.log(line));
65
+ if (!result.coverage.complete)
66
+ this.log(`Partial coverage: ${result.coverage.sources
67
+ .filter((source) => source.status !== 'available')
68
+ .map((source) => `${source.kind}:${source.status}`)
69
+ .join(', ')}`);
70
+ if (result.nextCursor)
71
+ this.log(`Next cursor: ${result.nextCursor}`);
72
+ }
73
+ }
74
+ exports.default = ProposalsList;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ export default class ProposalsShow extends BaseCommand {
3
+ static description: string;
4
+ static args: {
5
+ kind: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
6
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
+ };
8
+ static flags: {
9
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const data_provider_1 = require("@skrr-ai/data-provider");
5
+ const base_command_1 = require("../../base-command");
6
+ const proposals_1 = require("../../lib/proposals");
7
+ class ProposalsShow extends base_command_1.BaseCommand {
8
+ static description = 'Show one viewer-scoped proposal and its frozen revision';
9
+ static args = {
10
+ kind: core_1.Args.string({ required: true, options: [...data_provider_1.PROPOSAL_KINDS], ignoreStdin: true }),
11
+ id: core_1.Args.string({ required: true, ignoreStdin: true }),
12
+ };
13
+ static flags = { json: core_1.Flags.boolean() };
14
+ async run() {
15
+ this.requireAuth();
16
+ const { args } = await this.parse(ProposalsShow);
17
+ let result;
18
+ try {
19
+ result = await proposals_1.proposalApi.show(args.kind, args.id);
20
+ }
21
+ catch (error) {
22
+ this.handleApiError(error);
23
+ }
24
+ this.log(JSON.stringify(result, null, 2));
25
+ }
26
+ }
27
+ exports.default = ProposalsShow;
@@ -0,0 +1,5 @@
1
+ import { ProposalDecisionCommand } from '../../lib/proposal-decision-command';
2
+ export default class ProposalsSnooze extends ProposalDecisionCommand {
3
+ static description: string;
4
+ static decision: "snooze";
5
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const proposal_decision_command_1 = require("../../lib/proposal-decision-command");
4
+ class ProposalsSnooze extends proposal_decision_command_1.ProposalDecisionCommand {
5
+ static description = 'Snooze one displayed proposal through its domain authority';
6
+ static decision = 'snooze';
7
+ }
8
+ exports.default = ProposalsSnooze;
@@ -0,0 +1,9 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsCreate extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ 'from-json': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../../base-command");
5
+ const signals_1 = require("../../../lib/signals");
6
+ const prompt_1 = require("../../../lib/prompt");
7
+ class MonitorsCreate extends base_command_1.BaseCommand {
8
+ static description = 'Validate, then create, a Signal Monitor (a repeated monitorId answers 409: use revise)';
9
+ static flags = {
10
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
11
+ 'from-json': core_1.Flags.string({
12
+ description: 'Monitor definition JSON file path, or - for stdin',
13
+ required: true,
14
+ }),
15
+ };
16
+ async run() {
17
+ this.requireAuth();
18
+ const { flags } = await this.parse(MonitorsCreate);
19
+ const body = await (0, prompt_1.readJsonBody)(flags['from-json']);
20
+ // Validation runs first so a refusal never reaches the writer, and the
21
+ // compiled summary is shown before anything is persisted.
22
+ const validation = await signals_1.signalsApi.validateMonitor(body);
23
+ if (!flags.json)
24
+ this.log(JSON.stringify(validation, null, 2));
25
+ const result = await signals_1.signalsApi.createMonitor(body);
26
+ this.log(JSON.stringify(flags.json ? { validation, ...result } : result, null, 2));
27
+ }
28
+ }
29
+ exports.default = MonitorsCreate;
@@ -0,0 +1,8 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsList extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ };
7
+ run(): Promise<void>;
8
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../../base-command");
5
+ const signals_1 = require("../../../lib/signals");
6
+ class MonitorsList extends base_command_1.BaseCommand {
7
+ static description = 'List Signal Monitors in the current workspace';
8
+ static flags = { json: core_1.Flags.boolean({ description: 'Output as JSON' }) };
9
+ async run() {
10
+ this.requireAuth();
11
+ await this.parse(MonitorsList);
12
+ const result = await signals_1.signalsApi.listMonitors();
13
+ this.log(JSON.stringify(result, null, 2));
14
+ }
15
+ }
16
+ exports.default = MonitorsList;
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsPause extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ };
7
+ static args: {
8
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../../base-command");
5
+ const signals_1 = require("../../../lib/signals");
6
+ class MonitorsPause extends base_command_1.BaseCommand {
7
+ static description = 'Pause a Signal Monitor';
8
+ static flags = { json: core_1.Flags.boolean({ description: 'Output as JSON' }) };
9
+ static args = { id: core_1.Args.string({ required: true, ignoreStdin: true }) };
10
+ async run() {
11
+ this.requireAuth();
12
+ const { args } = await this.parse(MonitorsPause);
13
+ const result = await signals_1.signalsApi.setMonitorStatus(args.id, 'paused');
14
+ this.log(JSON.stringify(result, null, 2));
15
+ }
16
+ }
17
+ exports.default = MonitorsPause;
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsResume extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ };
7
+ static args: {
8
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../../base-command");
5
+ const signals_1 = require("../../../lib/signals");
6
+ class MonitorsResume extends base_command_1.BaseCommand {
7
+ static description = 'Resume a paused Signal Monitor';
8
+ static flags = { json: core_1.Flags.boolean({ description: 'Output as JSON' }) };
9
+ static args = { id: core_1.Args.string({ required: true, ignoreStdin: true }) };
10
+ async run() {
11
+ this.requireAuth();
12
+ const { args } = await this.parse(MonitorsResume);
13
+ const result = await signals_1.signalsApi.setMonitorStatus(args.id, 'active');
14
+ this.log(JSON.stringify(result, null, 2));
15
+ }
16
+ }
17
+ exports.default = MonitorsResume;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsRevise extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ 'from-json': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
7
+ };
8
+ static args: {
9
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../../base-command");
5
+ const signals_1 = require("../../../lib/signals");
6
+ const prompt_1 = require("../../../lib/prompt");
7
+ class MonitorsRevise extends base_command_1.BaseCommand {
8
+ static description = 'Create an immutable revision of a Signal Monitor';
9
+ static flags = {
10
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
11
+ 'from-json': core_1.Flags.string({
12
+ description: 'JSON file path, or - for stdin (a Monitor definition document)',
13
+ required: true,
14
+ }),
15
+ };
16
+ static args = { id: core_1.Args.string({ required: true, ignoreStdin: true }) };
17
+ async run() {
18
+ this.requireAuth();
19
+ const { flags, args } = await this.parse(MonitorsRevise);
20
+ const body = await (0, prompt_1.readJsonBody)(flags['from-json']);
21
+ const result = await signals_1.signalsApi.reviseMonitor(args.id, body);
22
+ this.log(JSON.stringify(result, null, 2));
23
+ }
24
+ }
25
+ exports.default = MonitorsRevise;
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsShow extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ };
7
+ static args: {
8
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../../base-command");
5
+ const signals_1 = require("../../../lib/signals");
6
+ class MonitorsShow extends base_command_1.BaseCommand {
7
+ static description = 'Show one Signal Monitor';
8
+ static flags = { json: core_1.Flags.boolean({ description: 'Output as JSON' }) };
9
+ static args = { id: core_1.Args.string({ required: true, ignoreStdin: true }) };
10
+ async run() {
11
+ this.requireAuth();
12
+ const { args } = await this.parse(MonitorsShow);
13
+ const result = await signals_1.signalsApi.showMonitor(args.id);
14
+ this.log(JSON.stringify(result, null, 2));
15
+ }
16
+ }
17
+ exports.default = MonitorsShow;
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsTest extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ 'from-json': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
7
+ };
8
+ static args: {
9
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const core_1 = require("@oclif/core");
4
+ const base_command_1 = require("../../../base-command");
5
+ const signals_1 = require("../../../lib/signals");
6
+ const prompt_1 = require("../../../lib/prompt");
7
+ class MonitorsTest extends base_command_1.BaseCommand {
8
+ static description = 'Simulate one CloudEvent against a Monitor; records no receipt, transition, wake or run';
9
+ static flags = {
10
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
11
+ 'from-json': core_1.Flags.string({
12
+ description: 'JSON file path, or - for stdin ({"event": <CloudEvent>})',
13
+ required: true,
14
+ }),
15
+ };
16
+ static args = { id: core_1.Args.string({ required: true, ignoreStdin: true }) };
17
+ async run() {
18
+ this.requireAuth();
19
+ const { flags, args } = await this.parse(MonitorsTest);
20
+ const body = await (0, prompt_1.readJsonBody)(flags['from-json']);
21
+ const result = await signals_1.signalsApi.testMonitor(args.id, body);
22
+ this.log(JSON.stringify(result, null, 2));
23
+ }
24
+ }
25
+ exports.default = MonitorsTest;
@@ -0,0 +1,11 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ export default class MonitorsTransitions extends BaseCommand {
3
+ static description: string;
4
+ static flags: {
5
+ json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
6
+ };
7
+ static args: {
8
+ id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ run(): Promise<void>;
11
+ }