@skrr-ai/cli 0.1.103 → 0.1.105

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 (111) hide show
  1. package/dist/base-command.js +6 -2
  2. package/dist/commands/agenda/trigger/list.js +2 -0
  3. package/dist/commands/agents/chat.js +4 -1
  4. package/dist/commands/agents/operating-plan.js +5 -2
  5. package/dist/commands/agents/triggers/create.js +3 -1
  6. package/dist/commands/agents/triggers/fire.js +2 -0
  7. package/dist/commands/agents/triggers/replay.js +2 -0
  8. package/dist/commands/agents/triggers/update.js +12 -4
  9. package/dist/commands/commitments/action-history.js +7 -2
  10. package/dist/commands/commitments/cadence-decisions.js +6 -1
  11. package/dist/commands/commitments/cadence-requests/decide.d.ts +1 -1
  12. package/dist/commands/commitments/cadence-requests/decide.js +1 -1
  13. package/dist/commands/commitments/create.js +2 -0
  14. package/dist/commands/commitments/doctor.js +7 -1
  15. package/dist/commands/commitments/observations.js +7 -1
  16. package/dist/commands/commitments/operating-review.d.ts +15 -0
  17. package/dist/commands/commitments/operating-review.js +23 -2
  18. package/dist/commands/commitments/preflight.d.ts +12 -0
  19. package/dist/commands/commitments/preflight.js +23 -9
  20. package/dist/commands/commitments/reflection.js +6 -1
  21. package/dist/commands/commitments/show.js +3 -1
  22. package/dist/commands/commitments/trigger-status.js +2 -22
  23. package/dist/commands/commitments/wake-capabilities.d.ts +13 -0
  24. package/dist/commands/commitments/wake-capabilities.js +39 -3
  25. package/dist/commands/daemon/logs.d.ts +109 -4
  26. package/dist/commands/daemon/logs.js +397 -43
  27. package/dist/commands/followups/act.js +13 -1
  28. package/dist/commands/followups/checkin.js +11 -2
  29. package/dist/commands/followups/reschedule.js +13 -1
  30. package/dist/commands/proposals/discard.d.ts +1 -1
  31. package/dist/commands/proposals/keep.d.ts +1 -1
  32. package/dist/commands/proposals/list.d.ts +7 -0
  33. package/dist/commands/proposals/list.js +31 -5
  34. package/dist/commands/proposals/show.d.ts +2 -1
  35. package/dist/commands/proposals/show.js +31 -4
  36. package/dist/commands/proposals/snooze.d.ts +1 -1
  37. package/dist/commands/requests/create.js +8 -3
  38. package/dist/commands/spaces/workflows/create.js +3 -3
  39. package/dist/commands/tasks/complete.js +4 -0
  40. package/dist/commands/tasks/create.d.ts +2 -0
  41. package/dist/commands/tasks/create.js +17 -3
  42. package/dist/commands/tasks/deliverable/add.d.ts +2 -0
  43. package/dist/commands/tasks/deliverable/add.js +22 -7
  44. package/dist/commands/tasks/deliverable/list.d.ts +13 -0
  45. package/dist/commands/tasks/deliverable/list.js +34 -1
  46. package/dist/commands/tasks/economics-compare.js +7 -1
  47. package/dist/commands/tasks/expectations.d.ts +10 -0
  48. package/dist/commands/tasks/expectations.js +31 -3
  49. package/dist/commands/tasks/list.d.ts +9 -0
  50. package/dist/commands/tasks/list.js +40 -5
  51. package/dist/commands/tasks/report.js +1 -1
  52. package/dist/commands/tasks/result/show.d.ts +7 -0
  53. package/dist/commands/tasks/result/show.js +32 -1
  54. package/dist/commands/tasks/result/submit.js +1 -1
  55. package/dist/commands/tasks/show.d.ts +6 -0
  56. package/dist/commands/tasks/show.js +23 -0
  57. package/dist/commands/tasks/update.d.ts +3 -0
  58. package/dist/commands/tasks/update.js +23 -3
  59. package/dist/commands/triggers/audit.js +6 -2
  60. package/dist/commands/triggers/create.js +3 -1
  61. package/dist/commands/triggers/fire.d.ts +1 -0
  62. package/dist/commands/triggers/fire.js +16 -1
  63. package/dist/commands/triggers/preflight.js +6 -5
  64. package/dist/commands/triggers/replay.js +2 -0
  65. package/dist/commands/triggers/update.js +12 -4
  66. package/dist/commands/workspaces/stewardship.js +5 -1
  67. package/dist/lib/agentic-stream.d.ts +9 -0
  68. package/dist/lib/agentic-stream.js +38 -18
  69. package/dist/lib/commitment-event-wakes.d.ts +8 -0
  70. package/dist/lib/commitment-event-wakes.js +39 -0
  71. package/dist/lib/commitment-ledgers.d.ts +9 -0
  72. package/dist/lib/commitment-ledgers.js +126 -0
  73. package/dist/lib/commitments.d.ts +102 -2
  74. package/dist/lib/commitments.js +208 -8
  75. package/dist/lib/delegated-cli.js +13 -2
  76. package/dist/lib/followups.d.ts +6 -0
  77. package/dist/lib/followups.js +12 -0
  78. package/dist/lib/message-content.d.ts +6 -0
  79. package/dist/lib/message-content.js +24 -0
  80. package/dist/lib/operating-plan-loops.d.ts +8 -0
  81. package/dist/lib/operating-plan-loops.js +32 -0
  82. package/dist/lib/preflight-copy.d.ts +27 -0
  83. package/dist/lib/preflight-copy.js +89 -0
  84. package/dist/lib/proposal-decision-command.d.ts +1 -1
  85. package/dist/lib/proposal-decision-command.js +27 -3
  86. package/dist/lib/proposals.d.ts +17 -0
  87. package/dist/lib/proposals.js +41 -0
  88. package/dist/lib/stewardship-output.js +57 -12
  89. package/dist/lib/task-economics-line.d.ts +30 -0
  90. package/dist/lib/task-economics-line.js +49 -0
  91. package/dist/lib/task-economics.d.ts +15 -0
  92. package/dist/lib/task-economics.js +73 -8
  93. package/dist/lib/task-recurrence-outcome.d.ts +19 -0
  94. package/dist/lib/task-recurrence-outcome.js +30 -0
  95. package/dist/lib/triggers.d.ts +42 -0
  96. package/dist/lib/triggers.js +136 -2
  97. package/dist/lib/widgetTerminalText.d.ts +8 -0
  98. package/dist/lib/widgetTerminalText.js +116 -0
  99. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/cliHandoffWire.d.ts +33 -0
  100. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/cliHandoffWire.js +27 -0
  101. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.d.ts +84 -0
  102. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.js +222 -0
  103. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/cliHandoffWire.d.ts +33 -0
  104. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/cliHandoffWire.js +26 -0
  105. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.d.ts +84 -0
  106. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.js +216 -0
  107. package/dist/node_modules/@skrr-ai/auth-core/package.json +11 -1
  108. package/dist/node_modules/@skrr-ai/data-provider/index.js +7628 -7414
  109. package/docs/v1/operations.md +1 -1
  110. package/oclif.manifest.json +117 -73
  111. package/package.json +1 -1
@@ -56,7 +56,7 @@ The workspace CLI also has a separate agent-turn stream (this starts work and ca
56
56
  skrr agents chat <agent-id> --prompt "Summarize the chosen repository" --jsonl
57
57
  ```
58
58
 
59
- Each stdout line is one JSON event. `text.delta.text` is the cumulative answer despite the event name: take the latest value rather than appending it repeatedly. A `run.result` is a terminal result; `stream.gap` describes missing envelopes, and a lost view is not proof the run failed. Preserve the process exit status: 0 for completed, 1 for a failed terminal result, 75 for lost streaming access, and 130 for actual Ctrl-C detach. Cancellation is requested but must be verified against durable work state. CLI JSONL is a different transport contract from public SSE; this guide's offline checks validate the command/flags, while real reconnect/lifetime qualification belongs to the installed CLI's release checks.
59
+ Each stdout line is one JSON event. `text.delta.text` is the cumulative answer despite the event name: take the latest value rather than appending it repeatedly. A widget the agent wrote (a block of CSS, HTML and JavaScript that the apps draw) is its text description in `text.delta` and `run.result`; the `session.output` lane keeps the block itself. A `run.result` is a terminal result; `stream.gap` describes missing envelopes, and a lost view is not proof the run failed. Preserve the process exit status: 0 for completed, 1 for a failed terminal result, 75 for lost streaming access, and 130 for actual Ctrl-C detach. Cancellation is requested but must be verified against durable work state. CLI JSONL is a different transport contract from public SSE; this guide's offline checks validate the command/flags, while real reconnect/lifetime qualification belongs to the installed CLI's release checks.
60
60
 
61
61
  ## Quota and cost
62
62
 
@@ -7187,7 +7187,7 @@
7187
7187
  "type": "boolean"
7188
7188
  },
7189
7189
  "jsonl": {
7190
- "description": "Emit one JSON event per line while streaming. Every line is a complete JSON value. Assistant text arrives as `text.delta` whose `text` is the CUMULATIVE answer so far, not a delta — take the last one, or `run.result` at the end. The same text is mirrored inside `session.output` envelopes for consumers that want the raw stream, so folding both doubles the answer: pick ONE lane. Inside a `session.output`, `envelopes[].__seq` is the dedupe key and the ordering key — the same envelope is delivered by more than one room, and a re-delivery repeats its `__seq`. A `stream.gap` event means envelopes in that seq range never arrived and replay from the server could not recover them; a hole replay fills, or one that held only invisible envelopes (`service`, `status`), emits nothing. When the persisted message could be checked, `verified` is true and `missing` names what the stream is short of (`text`, `tool`), and the event arrives just before the terminal event; `verified: false` means it could not be checked and the text MAY be short. `run.result` and the persisted message remain authoritative. Tool calls arrive as `tool.started` / `tool.completed`, once per `toolUseId`, on cloud and local-harness runs alike. A `session.notice` with `notice: \"harness-session-reset\"` means the local harness could not resume its previous session and started a new one, which does not see earlier turns of the conversation; `message` says why. A `permission.resolved` says how a local harness permission request was decided: `decidedBy` in words, and `basis` — `person` (with `surface`), `mode` (with `mode`), `policy` or `session-grant` — beside the wire `by`. When a platform update restarts the server relaying a turn your machine is still running, the run does not end at that failure: `run.handed_over` (`code: \"AGENT_WORKER_REPLACED\"`, `reason: \"worker_replaced_daemon_running\"`, `waitMs`, `deadlineAt`) says the CLI is waiting, then exactly one terminal event follows — `run.completed` with `repaired: true` and `result` (then `run.result` with `status: \"completed\"`, `repaired: true`, exit 0) when the machine finished; `run.failed` with `handover.outcome: \"machine_failed\"` and the machine's reason when it did not; or `run.failed` with `handover.outcome: \"expired\"` and the original failure when --repair-wait ran out (exit 1 for both). Ctrl-C during the wait emits `run.detached` with `handedOver: true` and exits 130.",
7190
+ "description": "Emit one JSON event per line while streaming. Every line is a complete JSON value. Assistant text arrives as `text.delta` whose `text` is the CUMULATIVE answer so far, not a delta — take the last one, or `run.result` at the end. The same text is mirrored inside `session.output` envelopes for consumers that want the raw stream, so folding both doubles the answer: pick ONE lane. A widget the agent wrote (a block of CSS, HTML and JavaScript the apps draw) is its text description in `text.delta` and `run.result`; the `session.output` lane carries the block itself. Inside a `session.output`, `envelopes[].__seq` is the dedupe key and the ordering key — the same envelope is delivered by more than one room, and a re-delivery repeats its `__seq`. A `stream.gap` event means envelopes in that seq range never arrived and replay from the server could not recover them; a hole replay fills, or one that held only invisible envelopes (`service`, `status`), emits nothing. When the persisted message could be checked, `verified` is true and `missing` names what the stream is short of (`text`, `tool`), and the event arrives just before the terminal event; `verified: false` means it could not be checked and the text MAY be short. `run.result` and the persisted message remain authoritative. Tool calls arrive as `tool.started` / `tool.completed`, once per `toolUseId`, on cloud and local-harness runs alike. A `session.notice` with `notice: \"harness-session-reset\"` means the local harness could not resume its previous session and started a new one, which does not see earlier turns of the conversation; `message` says why. A `permission.resolved` says how a local harness permission request was decided: `decidedBy` in words, and `basis` — `person` (with `surface`), `mode` (with `mode`), `policy` or `session-grant` — beside the wire `by`. When a platform update restarts the server relaying a turn your machine is still running, the run does not end at that failure: `run.handed_over` (`code: \"AGENT_WORKER_REPLACED\"`, `reason: \"worker_replaced_daemon_running\"`, `waitMs`, `deadlineAt`) says the CLI is waiting, then exactly one terminal event follows — `run.completed` with `repaired: true` and `result` (then `run.result` with `status: \"completed\"`, `repaired: true`, exit 0) when the machine finished; `run.failed` with `handover.outcome: \"machine_failed\"` and the machine's reason when it did not; or `run.failed` with `handover.outcome: \"expired\"` and the original failure when --repair-wait ran out (exit 1 for both). Ctrl-C during the wait emits `run.detached` with `handedOver: true` and exits 130.",
7191
7191
  "name": "jsonl",
7192
7192
  "allowNo": false,
7193
7193
  "type": "boolean"
@@ -16859,7 +16859,7 @@
16859
16859
  "type": "option"
16860
16860
  },
16861
16861
  "stale-catchup-ms": {
16862
- "description": "Schedule stale catch-up window in ms",
16862
+ "description": "How late a missed occurrence may still run, in ms (a positive number). After downtime, an occurrence more than this overdue is skipped rather than run late, and the schedule moves to its next future slot. Unset: 3600000 (1 hour).",
16863
16863
  "name": "stale-catchup-ms",
16864
16864
  "hasDynamicHelp": false,
16865
16865
  "multiple": false,
@@ -18274,7 +18274,7 @@
18274
18274
  "type": "option"
18275
18275
  },
18276
18276
  "stale-catchup-ms": {
18277
- "description": "Schedule stale catch-up window in ms",
18277
+ "description": "How late a missed occurrence may still run, in ms (a positive number). After downtime, an occurrence more than this overdue is skipped rather than run late, and the schedule moves to its next future slot. Unset: 3600000 (1 hour).",
18278
18278
  "name": "stale-catchup-ms",
18279
18279
  "hasDynamicHelp": false,
18280
18280
  "multiple": false,
@@ -18288,7 +18288,7 @@
18288
18288
  "type": "option"
18289
18289
  },
18290
18290
  "entity": {
18291
- "description": "Event entity type for event triggers",
18291
+ "description": "Event entity type for event triggers (create only; refused on update)",
18292
18292
  "name": "entity",
18293
18293
  "hasDynamicHelp": false,
18294
18294
  "multiple": false,
@@ -18356,14 +18356,14 @@
18356
18356
  "type": "option"
18357
18357
  },
18358
18358
  "eval-interval-minutes": {
18359
- "description": "Stochastic eval interval in minutes",
18359
+ "description": "Stochastic eval interval in minutes (create only; refused on update)",
18360
18360
  "name": "eval-interval-minutes",
18361
18361
  "hasDynamicHelp": false,
18362
18362
  "multiple": false,
18363
18363
  "type": "option"
18364
18364
  },
18365
18365
  "next-run-at": {
18366
- "description": "ISO datetime for self_scheduled triggers",
18366
+ "description": "ISO datetime: alias of --at for once triggers; for self_scheduled triggers it is set at create and refused on update",
18367
18367
  "name": "next-run-at",
18368
18368
  "hasDynamicHelp": false,
18369
18369
  "multiple": false,
@@ -28528,7 +28528,7 @@
28528
28528
  "<%= config.bin %> commitments create --agent <agent-id> --title \"SLA\" --outcome \"p95 under 200ms\" --criterion \"p95 latency confirmed\" --evaluator metric --measure <measure-id>",
28529
28529
  "<%= config.bin %> commitments create --agent <agent-id> --title \"AWS cost watch\" --outcome \"Cost regressions are investigated\" --agent-directive-file ./aws-cost-policy.md",
28530
28530
  "<%= config.bin %> commitments create --from-json commitment.json --json",
28531
- "# Replace <agent-id> with your Agent ID; this creates a draft, not a running loop.\ncat > commitment.json <<'JSON'\n{\n \"agentId\": \"<agent-id>\",\n \"title\": \"Daily queue review\",\n \"status\": \"draft\",\n \"target\": { \"outcome\": \"Queue changes are reviewed\" },\n \"cadence\": { \"mode\": \"daily\", \"times\": [\"09:15\", \"17:45\"], \"timezone\": \"Asia/Shanghai\" },\n \"watchedSources\": [{\n \"source\": \"agent_run\",\n \"config\": { \"keys\": [\n { \"key\": \"queue.depth\", \"label\": \"Queue depth\", \"requireArtifact\": true,\n \"changeRule\": { \"mode\": \"numeric_delta\", \"minDelta\": 2, \"absoluteFloor\": 1 } },\n \"queue.status\"\n ] }\n }],\n \"policy\": {\n \"maxUserNudgesPerDay\": 0,\n \"executionBudget\": { \"maxRunsPerDay\": 0, \"maxObservationRunsPerDay\": 0, \"maxCostUsdPerDay\": 0 }\n }\n}\nJSON\n<%= config.bin %> commitments preflight --from-json commitment.json\n<%= config.bin %> commitments create --from-json commitment.json --json",
28531
+ "# Replace <agent-id> with your Agent ID; this creates a draft, not a running loop.\n# In \"policy\", 0 is a ZERO budget (nothing may run or be spent), not \"no limit\".\n# To remove a limit set it to null (e.g. \"maxCostUsdPerDay\": null) or leave the key out.\ncat > commitment.json <<'JSON'\n{\n \"agentId\": \"<agent-id>\",\n \"title\": \"Daily queue review\",\n \"status\": \"draft\",\n \"target\": { \"outcome\": \"Queue changes are reviewed\" },\n \"cadence\": { \"mode\": \"daily\", \"times\": [\"09:15\", \"17:45\"], \"timezone\": \"Asia/Shanghai\" },\n \"watchedSources\": [{\n \"source\": \"agent_run\",\n \"config\": { \"keys\": [\n { \"key\": \"queue.depth\", \"label\": \"Queue depth\", \"requireArtifact\": true,\n \"changeRule\": { \"mode\": \"numeric_delta\", \"minDelta\": 2, \"absoluteFloor\": 1 } },\n \"queue.status\"\n ] }\n }],\n \"policy\": {\n \"maxUserNudgesPerDay\": 0,\n \"executionBudget\": { \"maxRunsPerDay\": 0, \"maxObservationRunsPerDay\": 0, \"maxCostUsdPerDay\": 0 }\n }\n}\nJSON\n<%= config.bin %> commitments preflight --from-json commitment.json\n<%= config.bin %> commitments create --from-json commitment.json --json",
28532
28532
  "<%= config.bin %> commitments create --agent <agent-id> --title \"Keep CI healthy\" --outcome \"Failed checks are repaired\" --watch github --github-event check_run_failed --event-driven --delivery draft-pr --repo owner/repo --base main --status draft"
28533
28533
  ],
28534
28534
  "flags": {
@@ -32041,7 +32041,7 @@
32041
32041
  "required": true
32042
32042
  }
32043
32043
  },
32044
- "description": "Show what the commitment's runs reported observing",
32044
+ "description": "Show what the commitment's runs reported observing.\n\nColumns: VALUE is shortened to fit the table (--json has the stored value). DECLARED no / REASON undeclared means the key is not declared on the Commitment's agent_run source: the reading is recorded but can never open a loop. CLAMPED yes means the observed time the run claimed was moved into the accepted window (CLAIMED is what it said). CHANGED is the server's verdict against the previous reading of the same key, never the run's. CONF is a cap on how much an Agent-reported reading is worth, not a measurement.",
32045
32045
  "examples": [
32046
32046
  "<%= config.bin %> commitments observations obj_abc123",
32047
32047
  "<%= config.bin %> commitments observations obj_abc123 --declared-only --changed-only",
@@ -38000,6 +38000,7 @@
38000
38000
  "<%= config.bin %> daemon logs --lines 500",
38001
38001
  "<%= config.bin %> daemon logs --stderr",
38002
38002
  "<%= config.bin %> daemon logs --path",
38003
+ "<%= config.bin %> daemon logs --rotated | grep arun_",
38003
38004
  "<%= config.bin %> daemon logs --profile dogfood-laptop --lines 50"
38004
38005
  ],
38005
38006
  "flags": {
@@ -38012,14 +38013,14 @@
38012
38013
  },
38013
38014
  "lines": {
38014
38015
  "char": "n",
38015
- "description": "Number of recent log lines to print",
38016
+ "description": "Number of recent log lines to print (default 200; every line with --rotated)",
38016
38017
  "name": "lines",
38017
38018
  "hasDynamicHelp": false,
38018
38019
  "multiple": false,
38019
38020
  "type": "option"
38020
38021
  },
38021
38022
  "stderr": {
38022
- "description": "Read daemon.err.log — every WARN and ERROR — instead of daemon.log",
38023
+ "description": "Read the daemon's raw stderr instead of its log: the file its installed service redirects stderr to, or the profile's daemon.err.log. A daemon started with --log-file by anything else has no known stderr file, so its live log (which carries every WARN and ERROR) is shown instead, with a note",
38023
38024
  "name": "stderr",
38024
38025
  "allowNo": false,
38025
38026
  "type": "boolean"
@@ -38030,6 +38031,12 @@
38030
38031
  "allowNo": false,
38031
38032
  "type": "boolean"
38032
38033
  },
38034
+ "rotated": {
38035
+ "description": "Include the rotated files (daemon.app.1.log …) before the current one, oldest first; with --path, list them all",
38036
+ "name": "rotated",
38037
+ "allowNo": false,
38038
+ "type": "boolean"
38039
+ },
38033
38040
  "profile": {
38034
38041
  "char": "p",
38035
38042
  "description": "Read the logs of this daemon profile instead of the active one",
@@ -41792,7 +41799,7 @@
41792
41799
  "type": "option"
41793
41800
  },
41794
41801
  "in": {
41795
- "description": "Duration from now (2h, 3d)",
41802
+ "description": "Duration from now (2h, 3d), between 1m and 30d",
41796
41803
  "exclusive": [
41797
41804
  "at"
41798
41805
  ],
@@ -41995,7 +42002,7 @@
41995
42002
  "type": "option"
41996
42003
  },
41997
42004
  "in": {
41998
- "description": "Duration from now (90m, 2h) — the once form",
42005
+ "description": "Duration from now (90m, 2h), between 1m and 30d — the once form",
41999
42006
  "exclusive": [
42000
42007
  "frequency"
42001
42008
  ],
@@ -42497,7 +42504,7 @@
42497
42504
  "type": "option"
42498
42505
  },
42499
42506
  "in": {
42500
- "description": "New offset from now (90m, 2h)",
42507
+ "description": "New offset from now (90m, 2h); between 1m and 30d",
42501
42508
  "exclusive": [
42502
42509
  "at"
42503
42510
  ],
@@ -75046,20 +75053,14 @@
75046
75053
  "aliases": [],
75047
75054
  "args": {
75048
75055
  "kind": {
75056
+ "description": "Proposal kind, or the KIND:ID that `proposals list` prints",
75049
75057
  "name": "kind",
75050
- "options": [
75051
- "commitment_action_proposal",
75052
- "agent_initiative",
75053
- "northstar_intent",
75054
- "commitment_remediation_proposal",
75055
- "request",
75056
- "task_approval"
75057
- ],
75058
75058
  "required": true
75059
75059
  },
75060
75060
  "id": {
75061
+ "description": "Proposal id",
75061
75062
  "name": "id",
75062
- "required": true
75063
+ "required": false
75063
75064
  }
75064
75065
  },
75065
75066
  "description": "Discard one displayed proposal through its domain authority",
@@ -75162,20 +75163,14 @@
75162
75163
  "aliases": [],
75163
75164
  "args": {
75164
75165
  "kind": {
75166
+ "description": "Proposal kind, or the KIND:ID that `proposals list` prints",
75165
75167
  "name": "kind",
75166
- "options": [
75167
- "commitment_action_proposal",
75168
- "agent_initiative",
75169
- "northstar_intent",
75170
- "commitment_remediation_proposal",
75171
- "request",
75172
- "task_approval"
75173
- ],
75174
75168
  "required": true
75175
75169
  },
75176
75170
  "id": {
75171
+ "description": "Proposal id",
75177
75172
  "name": "id",
75178
- "required": true
75173
+ "required": false
75179
75174
  }
75180
75175
  },
75181
75176
  "description": "Keep one displayed proposal through its domain authority",
@@ -75277,7 +75272,7 @@
75277
75272
  "proposals:list": {
75278
75273
  "aliases": [],
75279
75274
  "args": {},
75280
- "description": "List the bounded proposal inbox and source coverage",
75275
+ "description": "List the bounded proposal inbox and source coverage. BASIS is how the proposal's own cost/benefit estimate was established (agent_estimate, human_confirmed or measured); — means it carries none.",
75281
75276
  "flags": {
75282
75277
  "bare": {
75283
75278
  "description": "Bare mode — ignore keychain/file credential sources. Token must come from env or --token.",
@@ -75372,6 +75367,7 @@
75372
75367
  "type": "option"
75373
75368
  },
75374
75369
  "sort": {
75370
+ "description": "recent: newest first, page by page through every source. value: rows you can decide now first, then by estimated savings per effort hour (risk-discounted; a row with no estimate after every row that has one), then newest. value ranks one bounded window and is not exhaustive.",
75375
75371
  "name": "sort",
75376
75372
  "default": "recent",
75377
75373
  "hasDynamicHelp": false,
@@ -75405,23 +75401,21 @@
75405
75401
  "aliases": [],
75406
75402
  "args": {
75407
75403
  "kind": {
75404
+ "description": "Proposal kind, or the KIND:ID that `proposals list` prints",
75408
75405
  "name": "kind",
75409
- "options": [
75410
- "commitment_action_proposal",
75411
- "agent_initiative",
75412
- "northstar_intent",
75413
- "commitment_remediation_proposal",
75414
- "request",
75415
- "task_approval"
75416
- ],
75417
75406
  "required": true
75418
75407
  },
75419
75408
  "id": {
75409
+ "description": "Proposal id",
75420
75410
  "name": "id",
75421
- "required": true
75411
+ "required": false
75422
75412
  }
75423
75413
  },
75424
75414
  "description": "Show one viewer-scoped proposal and its frozen revision",
75415
+ "examples": [
75416
+ "<%= config.bin %> proposals show request <proposal-id>",
75417
+ "<%= config.bin %> proposals show request:<proposal-id>"
75418
+ ],
75425
75419
  "flags": {
75426
75420
  "bare": {
75427
75421
  "description": "Bare mode — ignore keychain/file credential sources. Token must come from env or --token.",
@@ -75484,20 +75478,14 @@
75484
75478
  "aliases": [],
75485
75479
  "args": {
75486
75480
  "kind": {
75481
+ "description": "Proposal kind, or the KIND:ID that `proposals list` prints",
75487
75482
  "name": "kind",
75488
- "options": [
75489
- "commitment_action_proposal",
75490
- "agent_initiative",
75491
- "northstar_intent",
75492
- "commitment_remediation_proposal",
75493
- "request",
75494
- "task_approval"
75495
- ],
75496
75483
  "required": true
75497
75484
  },
75498
75485
  "id": {
75486
+ "description": "Proposal id",
75499
75487
  "name": "id",
75500
- "required": true
75488
+ "required": false
75501
75489
  }
75502
75490
  },
75503
75491
  "description": "Snooze one displayed proposal through its domain authority",
@@ -75934,9 +75922,9 @@
75934
75922
  "args": {},
75935
75923
  "description": "Create a new request",
75936
75924
  "examples": [
75937
- "<%= config.bin %> requests create --title \"Approve budget\" --type approval",
75938
- "<%= config.bin %> requests create --title \"Q1 review\" --type task --description \"Review Q1 goals\"",
75939
- "<%= config.bin %> requests create --from-json request.json"
75925
+ "<%= config.bin %> requests create --title \"Approve budget\" --type approval --target-user <user-id>",
75926
+ "<%= config.bin %> requests create --title \"Q1 review\" --type task --description \"Review Q1 goals\" --target-agent <agent-id>",
75927
+ "cat > request.json <<'JSON'\n{ \"title\": \"Approve budget\", \"type\": \"approval\", \"targetUserId\": \"<user-id>\" }\nJSON\n<%= config.bin %> requests create --from-json request.json"
75940
75928
  ],
75941
75929
  "flags": {
75942
75930
  "bare": {
@@ -95269,21 +95257,21 @@
95269
95257
  "type": "option"
95270
95258
  },
95271
95259
  "graph": {
95272
- "description": "Required exactly once with --draft/--starter: path to graph JSON ({ nodes, edges }); inspect config with spaces workflows node-types",
95260
+ "description": "One of --graph, --draft or --starter (exactly one): path to graph JSON ({ nodes, edges }); inspect config with spaces workflows node-types",
95273
95261
  "name": "graph",
95274
95262
  "hasDynamicHelp": false,
95275
95263
  "multiple": false,
95276
95264
  "type": "option"
95277
95265
  },
95278
95266
  "draft": {
95279
- "description": "Required exactly once with --graph/--starter: path to complete Canvas draft JSON ({ semantic, presentation })",
95267
+ "description": "One of --graph, --draft or --starter (exactly one): path to complete Canvas draft JSON ({ semantic, presentation })",
95280
95268
  "name": "draft",
95281
95269
  "hasDynamicHelp": false,
95282
95270
  "multiple": false,
95283
95271
  "type": "option"
95284
95272
  },
95285
95273
  "starter": {
95286
- "description": "Required exactly once with --graph/--draft: create a valid one-node starter graph",
95274
+ "description": "One of --graph, --draft or --starter (exactly one): create a valid one-node starter graph",
95287
95275
  "name": "starter",
95288
95276
  "allowNo": false,
95289
95277
  "type": "boolean"
@@ -109061,7 +109049,7 @@
109061
109049
  "type": "option"
109062
109050
  },
109063
109051
  "savings": {
109064
- "description": "Expected USD savings (requires --per)",
109052
+ "description": "Expected USD savings (requires --per). An estimate you write as a person is recorded as Human confirmed under your name, and an Agent edit is then refused with a 409; an Agent writes an Agent estimate. Re-sending the same values changes nothing.",
109065
109053
  "name": "savings",
109066
109054
  "hasDynamicHelp": false,
109067
109055
  "multiple": false,
@@ -109080,14 +109068,14 @@
109080
109068
  "type": "option"
109081
109069
  },
109082
109070
  "effort": {
109083
- "description": "Expected effort in hours, nonnegative",
109071
+ "description": "Expected effort in hours, nonnegative (part of the estimate; see --savings)",
109084
109072
  "name": "effort",
109085
109073
  "hasDynamicHelp": false,
109086
109074
  "multiple": false,
109087
109075
  "type": "option"
109088
109076
  },
109089
109077
  "risk": {
109090
- "description": "Expected risk",
109078
+ "description": "Expected risk (part of the estimate; see --savings)",
109091
109079
  "name": "risk",
109092
109080
  "hasDynamicHelp": false,
109093
109081
  "multiple": false,
@@ -109098,6 +109086,25 @@
109098
109086
  ],
109099
109087
  "type": "option"
109100
109088
  },
109089
+ "confidence": {
109090
+ "description": "How sure the estimate is (part of the estimate; see --savings). An earlier confidence stays on the claim until you replace it.",
109091
+ "name": "confidence",
109092
+ "hasDynamicHelp": false,
109093
+ "multiple": false,
109094
+ "options": [
109095
+ "low",
109096
+ "medium",
109097
+ "high"
109098
+ ],
109099
+ "type": "option"
109100
+ },
109101
+ "rationale": {
109102
+ "description": "Why the estimate is what it is, up to 500 characters (part of the estimate). An earlier rationale stays on the claim, under its new basis, until you replace it.",
109103
+ "name": "rationale",
109104
+ "hasDynamicHelp": false,
109105
+ "multiple": false,
109106
+ "type": "option"
109107
+ },
109101
109108
  "estimate": {
109102
109109
  "description": "Estimate value from the Space estimate scale. Requires a scale on the Space (or an ancestor it inherits from); with none set, the server drops the value. Set one with `spaces update <space> --estimate-scale <scale> --estimate-migration <clear|migrate>`.",
109103
109110
  "name": "estimate",
@@ -120833,7 +120840,7 @@
120833
120840
  "type": "option"
120834
120841
  },
120835
120842
  "savings": {
120836
- "description": "Expected USD savings (requires --per)",
120843
+ "description": "Expected USD savings (requires --per). An estimate you write as a person is recorded as Human confirmed under your name, and an Agent edit is then refused with a 409; an Agent writes an Agent estimate. Re-sending the same values changes nothing.",
120837
120844
  "name": "savings",
120838
120845
  "hasDynamicHelp": false,
120839
120846
  "multiple": false,
@@ -120852,14 +120859,14 @@
120852
120859
  "type": "option"
120853
120860
  },
120854
120861
  "effort": {
120855
- "description": "Expected effort in hours, nonnegative",
120862
+ "description": "Expected effort in hours, nonnegative (part of the estimate; see --savings)",
120856
120863
  "name": "effort",
120857
120864
  "hasDynamicHelp": false,
120858
120865
  "multiple": false,
120859
120866
  "type": "option"
120860
120867
  },
120861
120868
  "risk": {
120862
- "description": "Expected risk",
120869
+ "description": "Expected risk (part of the estimate; see --savings)",
120863
120870
  "name": "risk",
120864
120871
  "hasDynamicHelp": false,
120865
120872
  "multiple": false,
@@ -120870,6 +120877,25 @@
120870
120877
  ],
120871
120878
  "type": "option"
120872
120879
  },
120880
+ "confidence": {
120881
+ "description": "How sure the estimate is (part of the estimate; see --savings). An earlier confidence stays on the claim until you replace it.",
120882
+ "name": "confidence",
120883
+ "hasDynamicHelp": false,
120884
+ "multiple": false,
120885
+ "options": [
120886
+ "low",
120887
+ "medium",
120888
+ "high"
120889
+ ],
120890
+ "type": "option"
120891
+ },
120892
+ "rationale": {
120893
+ "description": "Why the estimate is what it is, up to 500 characters (part of the estimate). An earlier rationale stays on the claim, under its new basis, until you replace it.",
120894
+ "name": "rationale",
120895
+ "hasDynamicHelp": false,
120896
+ "multiple": false,
120897
+ "type": "option"
120898
+ },
120873
120899
  "estimate": {
120874
120900
  "description": "New estimate value from the Space estimate scale. Requires a scale on the Space (or an ancestor it inherits from); with none set, the server drops the value. Set the scale in the web UI — no CLI command configures it.",
120875
120901
  "name": "estimate",
@@ -120892,6 +120918,17 @@
120892
120918
  "multiple": false,
120893
120919
  "type": "option"
120894
120920
  },
120921
+ "review-policy": {
120922
+ "description": "Raise or lower the review bar: 'required' means closing this Task needs someone other than the Result author to accept it, 'none' (the default) does not. Not a specification change.",
120923
+ "name": "review-policy",
120924
+ "hasDynamicHelp": false,
120925
+ "multiple": false,
120926
+ "options": [
120927
+ "none",
120928
+ "required"
120929
+ ],
120930
+ "type": "option"
120931
+ },
120895
120932
  "goal": {
120896
120933
  "description": "Move task to a different goal (goal id), or \"none\" to detach it from its goal",
120897
120934
  "name": "goal",
@@ -125118,14 +125155,14 @@
125118
125155
  "type": "option"
125119
125156
  },
125120
125157
  "outcome": {
125121
- "description": "Outcome filter for owner-wide audit history",
125158
+ "description": "Outcome filter for owner-wide audit history (succeeded, failed, skipped, incomplete, capped, ...); an unknown value is refused with the full list",
125122
125159
  "name": "outcome",
125123
125160
  "hasDynamicHelp": false,
125124
125161
  "multiple": false,
125125
125162
  "type": "option"
125126
125163
  },
125127
125164
  "source": {
125128
- "description": "Source filter for owner-wide audit history",
125165
+ "description": "Source filter for owner-wide audit history (schedule, once, event, manual, webhook, replay, ...); an unknown value is refused with the full list",
125129
125166
  "name": "source",
125130
125167
  "hasDynamicHelp": false,
125131
125168
  "multiple": false,
@@ -125562,7 +125599,7 @@
125562
125599
  "type": "option"
125563
125600
  },
125564
125601
  "stale-catchup-ms": {
125565
- "description": "Schedule stale catch-up window in ms",
125602
+ "description": "How late a missed occurrence may still run, in ms (a positive number). After downtime, an occurrence more than this overdue is skipped rather than run late, and the schedule moves to its next future slot. Unset: 3600000 (1 hour).",
125566
125603
  "name": "stale-catchup-ms",
125567
125604
  "hasDynamicHelp": false,
125568
125605
  "multiple": false,
@@ -126175,7 +126212,8 @@
126175
126212
  "description": "Fire a universal trigger immediately",
126176
126213
  "examples": [
126177
126214
  "<%= config.bin %> triggers fire <trigger-id>",
126178
- "<%= config.bin %> triggers fire <trigger-id> --from-json fire-options.json --json"
126215
+ "<%= config.bin %> triggers fire <trigger-id> --from-json fire-options.json --json",
126216
+ "<%= config.bin %> triggers fire <trigger-id> --strict # exit 1 unless the fire succeeded"
126179
126217
  ],
126180
126218
  "flags": {
126181
126219
  "bare": {
@@ -126218,11 +126256,17 @@
126218
126256
  "type": "boolean"
126219
126257
  },
126220
126258
  "from-json": {
126221
- "description": "Path to a JSON file (or \"-\" for stdin) to use as fire options",
126259
+ "description": "Path to a JSON file (or \"-\" for stdin) of fire options. Read: occurrenceId (a key of your own; firing it again is the same fire) and, for an event trigger only, event ({payload}; the entity and event type come from the trigger). Any other key is ignored, and the answer names it",
126222
126260
  "name": "from-json",
126223
126261
  "hasDynamicHelp": false,
126224
126262
  "multiple": false,
126225
126263
  "type": "option"
126264
+ },
126265
+ "strict": {
126266
+ "description": "Exit 1 unless the fire was accepted (outcome succeeded, in_progress or awaiting_runtime, or a repeat of one that was). A fire that resolved nothing or was refused (incomplete, skipped, failed, …) exits 1 with it; without it every outcome exits 0",
126267
+ "name": "strict",
126268
+ "allowNo": false,
126269
+ "type": "boolean"
126226
126270
  }
126227
126271
  },
126228
126272
  "hasDynamicHelp": false,
@@ -127346,7 +127390,7 @@
127346
127390
  "type": "option"
127347
127391
  },
127348
127392
  "stale-catchup-ms": {
127349
- "description": "Schedule stale catch-up window in ms",
127393
+ "description": "How late a missed occurrence may still run, in ms (a positive number). After downtime, an occurrence more than this overdue is skipped rather than run late, and the schedule moves to its next future slot. Unset: 3600000 (1 hour).",
127350
127394
  "name": "stale-catchup-ms",
127351
127395
  "hasDynamicHelp": false,
127352
127396
  "multiple": false,
@@ -127360,7 +127404,7 @@
127360
127404
  "type": "option"
127361
127405
  },
127362
127406
  "entity": {
127363
- "description": "Event entity type for event triggers",
127407
+ "description": "Event entity type for event triggers (create only; refused on update)",
127364
127408
  "name": "entity",
127365
127409
  "hasDynamicHelp": false,
127366
127410
  "multiple": false,
@@ -127428,14 +127472,14 @@
127428
127472
  "type": "option"
127429
127473
  },
127430
127474
  "eval-interval-minutes": {
127431
- "description": "Stochastic eval interval in minutes",
127475
+ "description": "Stochastic eval interval in minutes (create only; refused on update)",
127432
127476
  "name": "eval-interval-minutes",
127433
127477
  "hasDynamicHelp": false,
127434
127478
  "multiple": false,
127435
127479
  "type": "option"
127436
127480
  },
127437
127481
  "next-run-at": {
127438
- "description": "ISO datetime for self_scheduled triggers",
127482
+ "description": "ISO datetime: alias of --at for once triggers; for self_scheduled triggers it is set at create and refused on update",
127439
127483
  "name": "next-run-at",
127440
127484
  "hasDynamicHelp": false,
127441
127485
  "multiple": false,
@@ -132305,7 +132349,7 @@
132305
132349
  "required": true
132306
132350
  },
132307
132351
  "userId": {
132308
- "description": "Member user ID",
132352
+ "description": "Member user ID: 24 hexadecimal characters, not an email (`skrr whoami` prints your own)",
132309
132353
  "name": "userId",
132310
132354
  "required": true
132311
132355
  }
@@ -132453,5 +132497,5 @@
132453
132497
  ]
132454
132498
  }
132455
132499
  },
132456
- "version": "0.1.103"
132500
+ "version": "0.1.105"
132457
132501
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skrr-ai/cli",
3
- "version": "0.1.103",
3
+ "version": "0.1.105",
4
4
  "description": "Command-line interface for skrr",
5
5
  "license": "ISC",
6
6
  "author": "skrr",