@skrr-ai/cli 0.1.118 → 0.1.120

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 (285) hide show
  1. package/dist/base-command.d.ts +32 -0
  2. package/dist/base-command.js +113 -5
  3. package/dist/commands/commands.js +11 -0
  4. package/dist/commands/commitments/action-proposal.d.ts +13 -0
  5. package/dist/commands/commitments/action-proposal.js +39 -0
  6. package/dist/commands/commitments/action-proposals/decide.js +8 -1
  7. package/dist/commands/commitments/action-proposals/execute.js +11 -1
  8. package/dist/commands/commitments/create.js +2 -2
  9. package/dist/commands/commitments/doctor.d.ts +8 -0
  10. package/dist/commands/commitments/doctor.js +22 -0
  11. package/dist/commands/commitments/execute-remediation.js +12 -1
  12. package/dist/commands/commitments/observations.js +2 -2
  13. package/dist/commands/commitments/pack/bind.d.ts +18 -1
  14. package/dist/commands/commitments/pack/bind.js +66 -8
  15. package/dist/commands/commitments/pack/plan.d.ts +4 -1
  16. package/dist/commands/commitments/pack/plan.js +30 -2
  17. package/dist/commands/commitments/update.js +8 -2
  18. package/dist/commands/completion/index.js +1 -1
  19. package/dist/commands/completion/values.js +1 -1
  20. package/dist/commands/computer-use/audio.d.ts +1 -0
  21. package/dist/commands/computer-use/audio.js +1 -0
  22. package/dist/commands/computer-use/browser.d.ts +1 -0
  23. package/dist/commands/computer-use/browser.js +1 -0
  24. package/dist/commands/computer-use/disable.d.ts +1 -0
  25. package/dist/commands/computer-use/disable.js +1 -0
  26. package/dist/commands/computer-use/enable.d.ts +1 -0
  27. package/dist/commands/computer-use/enable.js +1 -0
  28. package/dist/commands/computer-use/index.d.ts +1 -0
  29. package/dist/commands/computer-use/index.js +1 -0
  30. package/dist/commands/computer-use/install.d.ts +1 -0
  31. package/dist/commands/computer-use/install.js +1 -0
  32. package/dist/commands/computer-use/recover.d.ts +1 -0
  33. package/dist/commands/computer-use/recover.js +1 -0
  34. package/dist/commands/computer-use/status.d.ts +1 -0
  35. package/dist/commands/computer-use/status.js +1 -0
  36. package/dist/commands/computer-use/stop.d.ts +1 -0
  37. package/dist/commands/computer-use/stop.js +1 -0
  38. package/dist/commands/context.js +16 -11
  39. package/dist/commands/convos/recovery.js +1 -1
  40. package/dist/commands/daemon/diagnostics.d.ts +9 -0
  41. package/dist/commands/daemon/diagnostics.js +53 -0
  42. package/dist/commands/daemon/index.js +2 -0
  43. package/dist/commands/daemon/maintenance/attest.d.ts +15 -0
  44. package/dist/commands/daemon/maintenance/attest.js +52 -0
  45. package/dist/commands/daemon/maintenance/hold.d.ts +17 -0
  46. package/dist/commands/daemon/maintenance/hold.js +70 -0
  47. package/dist/commands/daemon/maintenance/index.d.ts +12 -0
  48. package/dist/commands/daemon/maintenance/index.js +30 -0
  49. package/dist/commands/daemon/maintenance/resume.d.ts +13 -0
  50. package/dist/commands/daemon/maintenance/resume.js +36 -0
  51. package/dist/commands/daemon/maintenance/status.d.ts +13 -0
  52. package/dist/commands/daemon/maintenance/status.js +36 -0
  53. package/dist/commands/doctor.d.ts +4 -1
  54. package/dist/commands/doctor.js +50 -6
  55. package/dist/commands/followups/plans/cancel-batch.js +6 -3
  56. package/dist/commands/followups/plans/capacity.js +7 -3
  57. package/dist/commands/followups/plans/observability.js +11 -3
  58. package/dist/commands/followups/plans/preferences/set.js +26 -8
  59. package/dist/commands/followups/plans/preferences.js +1 -1
  60. package/dist/commands/followups/plans/show.js +1 -1
  61. package/dist/commands/goals/key-results/assess.d.ts +36 -0
  62. package/dist/commands/goals/key-results/assess.js +110 -0
  63. package/dist/commands/goals/key-results/history.d.ts +30 -0
  64. package/dist/commands/goals/key-results/history.js +104 -0
  65. package/dist/commands/goals/key-results/list.d.ts +5 -4
  66. package/dist/commands/goals/key-results/list.js +12 -6
  67. package/dist/commands/goals/key-results/show.d.ts +4 -2
  68. package/dist/commands/goals/key-results/show.js +25 -4
  69. package/dist/commands/goals/key-results/update.d.ts +4 -0
  70. package/dist/commands/goals/key-results/update.js +18 -24
  71. package/dist/commands/goals/plan-now.js +12 -1
  72. package/dist/commands/goals/planner-compare.d.ts +30 -0
  73. package/dist/commands/goals/planner-compare.js +136 -0
  74. package/dist/commands/machines/dedicated/service/exec.d.ts +3 -0
  75. package/dist/commands/machines/dedicated/service/exec.js +70 -11
  76. package/dist/commands/machines/hosted/destroy.d.ts +1 -0
  77. package/dist/commands/machines/hosted/destroy.js +11 -1
  78. package/dist/commands/machines/hosted/exec.d.ts +1 -0
  79. package/dist/commands/machines/hosted/exec.js +12 -1
  80. package/dist/commands/machines/hosted/index.js +1 -0
  81. package/dist/commands/machines/hosted/operation.d.ts +14 -0
  82. package/dist/commands/machines/hosted/operation.js +51 -0
  83. package/dist/commands/machines/hosted/pull.js +1 -1
  84. package/dist/commands/machines/hosted/start.js +6 -2
  85. package/dist/commands/memory/versions/list.d.ts +2 -0
  86. package/dist/commands/memory/versions/list.js +3 -2
  87. package/dist/commands/memory/versions/show.d.ts +2 -0
  88. package/dist/commands/memory/versions/show.js +3 -2
  89. package/dist/commands/spaces/auto-executor/compare.d.ts +18 -0
  90. package/dist/commands/spaces/auto-executor/compare.js +139 -0
  91. package/dist/commands/spaces/auto-executor/runs.d.ts +3 -0
  92. package/dist/commands/spaces/auto-executor/runs.js +13 -1
  93. package/dist/commands/spaces/charter/create-from-description.d.ts +21 -0
  94. package/dist/commands/spaces/charter/create-from-description.js +77 -0
  95. package/dist/commands/spaces/charter/show.d.ts +22 -0
  96. package/dist/commands/spaces/charter/show.js +61 -0
  97. package/dist/commands/spaces/heartbeats/list.d.ts +1 -16
  98. package/dist/commands/spaces/heartbeats/list.js +13 -0
  99. package/dist/commands/spaces/install-template.js +3 -0
  100. package/dist/commands/spaces/loops/migrate.d.ts +32 -0
  101. package/dist/commands/spaces/loops/migrate.js +103 -0
  102. package/dist/commands/spaces/loops/release.d.ts +14 -0
  103. package/dist/commands/spaces/loops/release.js +59 -0
  104. package/dist/commands/spaces/notebook.d.ts +25 -0
  105. package/dist/commands/spaces/notebook.js +75 -0
  106. package/dist/commands/spaces/proposals/discard.d.ts +17 -0
  107. package/dist/commands/spaces/proposals/discard.js +17 -0
  108. package/dist/commands/spaces/proposals/keep.d.ts +17 -0
  109. package/dist/commands/spaces/proposals/keep.js +17 -0
  110. package/dist/commands/spaces/proposals/list.d.ts +24 -0
  111. package/dist/commands/spaces/proposals/list.js +89 -0
  112. package/dist/commands/spaces/skills/propose.d.ts +29 -0
  113. package/dist/commands/spaces/skills/propose.js +82 -0
  114. package/dist/commands/spaces/templates/fork.js +3 -0
  115. package/dist/commands/spaces/triggers/show.js +6 -0
  116. package/dist/commands/spaces/workflows/retry.d.ts +1 -0
  117. package/dist/commands/spaces/workflows/retry.js +8 -1
  118. package/dist/commands/spaces/workflows/triggers/create.js +3 -2
  119. package/dist/commands/spaces/workflows/triggers/fire.js +4 -0
  120. package/dist/commands/spaces/workflows/triggers/update.js +2 -1
  121. package/dist/commands/spaces/write-policy/set.d.ts +22 -0
  122. package/dist/commands/spaces/write-policy/set.js +82 -0
  123. package/dist/commands/spaces/write-policy/show.d.ts +19 -0
  124. package/dist/commands/spaces/write-policy/show.js +49 -0
  125. package/dist/commands/store/artifacts/receipt.d.ts +14 -0
  126. package/dist/commands/store/artifacts/receipt.js +34 -0
  127. package/dist/commands/store/artifacts/release.d.ts +2 -0
  128. package/dist/commands/store/artifacts/release.js +11 -0
  129. package/dist/commands/store/governance/publish-release.d.ts +2 -0
  130. package/dist/commands/store/governance/publish-release.js +30 -1
  131. package/dist/commands/store/governance/release-receipt.d.ts +12 -0
  132. package/dist/commands/store/governance/release-receipt.js +32 -0
  133. package/dist/commands/tasks/approvals/list.d.ts +11 -5
  134. package/dist/commands/tasks/approvals/list.js +13 -6
  135. package/dist/commands/tasks/attachments/facts.d.ts +12 -0
  136. package/dist/commands/tasks/attachments/facts.js +29 -0
  137. package/dist/commands/tasks/attachments/upload.d.ts +1 -0
  138. package/dist/commands/tasks/attachments/upload.js +16 -0
  139. package/dist/commands/tasks/bulk-update.js +35 -1
  140. package/dist/commands/tasks/context.d.ts +15 -0
  141. package/dist/commands/tasks/context.js +69 -0
  142. package/dist/commands/tasks/copy.d.ts +18 -0
  143. package/dist/commands/tasks/copy.js +85 -0
  144. package/dist/commands/tasks/create-tree.js +97 -23
  145. package/dist/commands/tasks/create.js +9 -1
  146. package/dist/commands/tasks/deliverable/add.js +20 -10
  147. package/dist/commands/tasks/move.js +8 -1
  148. package/dist/commands/tasks/operations/show.d.ts +16 -0
  149. package/dist/commands/tasks/operations/show.js +98 -0
  150. package/dist/commands/tasks/operations/wait.d.ts +22 -0
  151. package/dist/commands/tasks/operations/wait.js +114 -0
  152. package/dist/commands/tasks/preflight.d.ts +1 -0
  153. package/dist/commands/tasks/preflight.js +11 -1
  154. package/dist/commands/tasks/rearm-recurrence.js +4 -0
  155. package/dist/commands/tasks/result/show.js +22 -0
  156. package/dist/commands/tasks/result/submit.d.ts +1 -0
  157. package/dist/commands/tasks/result/submit.js +3 -0
  158. package/dist/commands/tasks/retry-receipt.d.ts +15 -0
  159. package/dist/commands/tasks/retry-receipt.js +89 -0
  160. package/dist/commands/tasks/retry-review.d.ts +16 -0
  161. package/dist/commands/tasks/retry-review.js +66 -0
  162. package/dist/commands/tasks/retry.d.ts +4 -8
  163. package/dist/commands/tasks/retry.js +34 -68
  164. package/dist/commands/tasks/runs.d.ts +21 -0
  165. package/dist/commands/tasks/runs.js +95 -0
  166. package/dist/commands/tasks/show.d.ts +2 -0
  167. package/dist/commands/tasks/show.js +15 -1
  168. package/dist/commands/tasks/start-receipt.d.ts +15 -0
  169. package/dist/commands/tasks/start-receipt.js +95 -0
  170. package/dist/commands/tasks/start.d.ts +4 -0
  171. package/dist/commands/tasks/start.js +49 -3
  172. package/dist/commands/tasks/update.js +3 -0
  173. package/dist/commands/tasks/upsert.js +17 -3
  174. package/dist/commands/tasks/watch.d.ts +3 -0
  175. package/dist/commands/tasks/watch.js +85 -20
  176. package/dist/commands/wiki/history.d.ts +33 -0
  177. package/dist/commands/wiki/history.js +134 -0
  178. package/dist/commands/wiki/ls.d.ts +2 -0
  179. package/dist/commands/wiki/ls.js +8 -0
  180. package/dist/commands/wiki/update.d.ts +3 -1
  181. package/dist/commands/wiki/update.js +24 -2
  182. package/dist/commands/wiki/write.d.ts +22 -0
  183. package/dist/commands/wiki/write.js +144 -6
  184. package/dist/generated/agent-guides.json +81 -81
  185. package/dist/generated/managed-instruction-guides.json +1 -1
  186. package/dist/lib/agent-guides.d.ts +9 -0
  187. package/dist/lib/agent-guides.js +23 -1
  188. package/dist/lib/agentic-stream.d.ts +5 -0
  189. package/dist/lib/agentic-stream.js +122 -3
  190. package/dist/lib/api-fetch.d.ts +4 -0
  191. package/dist/lib/api-fetch.js +25 -7
  192. package/dist/lib/auth-diagnostics.d.ts +39 -0
  193. package/dist/lib/auth-diagnostics.js +71 -0
  194. package/dist/lib/cli-client-identity.d.ts +6 -0
  195. package/dist/lib/cli-client-identity.js +16 -0
  196. package/dist/lib/cli-installation-diagnostics.d.ts +52 -0
  197. package/dist/lib/cli-installation-diagnostics.js +254 -0
  198. package/dist/lib/command-hygiene.d.ts +45 -0
  199. package/dist/lib/command-hygiene.js +413 -0
  200. package/dist/lib/commitments.d.ts +64 -3
  201. package/dist/lib/commitments.js +34 -6
  202. package/dist/lib/completion-index.d.ts +16 -4
  203. package/dist/lib/completion-index.js +50 -14
  204. package/dist/lib/config.js +7 -1
  205. package/dist/lib/daemon-maintenance-command.d.ts +22 -0
  206. package/dist/lib/daemon-maintenance-command.js +39 -0
  207. package/dist/lib/daemon-maintenance.d.ts +275 -0
  208. package/dist/lib/daemon-maintenance.js +1035 -0
  209. package/dist/lib/dedicated-service.d.ts +3 -2
  210. package/dist/lib/dedicated-service.js +11 -3
  211. package/dist/lib/governed-store.d.ts +8 -0
  212. package/dist/lib/governed-store.js +5 -0
  213. package/dist/lib/hosted-machines.d.ts +33 -2
  214. package/dist/lib/hosted-machines.js +19 -1
  215. package/dist/lib/json-output.d.ts +1 -1
  216. package/dist/lib/machines.d.ts +9 -1
  217. package/dist/lib/machines.js +15 -1
  218. package/dist/lib/memory-history-session.d.ts +14 -0
  219. package/dist/lib/memory-history-session.js +60 -0
  220. package/dist/lib/node-adapter.js +13 -0
  221. package/dist/lib/record-output.d.ts +22 -0
  222. package/dist/lib/record-output.js +78 -0
  223. package/dist/lib/roles.d.ts +3 -3
  224. package/dist/lib/scoped-memory-command.d.ts +24 -0
  225. package/dist/lib/scoped-memory-command.js +87 -5
  226. package/dist/lib/space-charter.d.ts +49 -0
  227. package/dist/lib/space-charter.js +78 -0
  228. package/dist/lib/space-loop-migration.d.ts +18 -0
  229. package/dist/lib/space-loop-migration.js +128 -0
  230. package/dist/lib/space-notebook.d.ts +22 -0
  231. package/dist/lib/space-notebook.js +140 -0
  232. package/dist/lib/space-proposal-decision-command.d.ts +36 -0
  233. package/dist/lib/space-proposal-decision-command.js +108 -0
  234. package/dist/lib/space-proposals.d.ts +44 -0
  235. package/dist/lib/space-proposals.js +186 -0
  236. package/dist/lib/space-templates.d.ts +8 -0
  237. package/dist/lib/space-templates.js +17 -0
  238. package/dist/lib/space-write-policy.d.ts +24 -0
  239. package/dist/lib/space-write-policy.js +103 -0
  240. package/dist/lib/task-agent-context-capabilities.d.ts +10 -0
  241. package/dist/lib/task-agent-context-capabilities.js +22 -0
  242. package/dist/lib/task-agent-context-compatibility.d.ts +9 -0
  243. package/dist/lib/task-agent-context-compatibility.js +30 -0
  244. package/dist/lib/task-asset-upload.d.ts +22 -0
  245. package/dist/lib/task-asset-upload.js +257 -29
  246. package/dist/lib/task-batch.d.ts +15 -1
  247. package/dist/lib/task-batch.js +35 -2
  248. package/dist/lib/task-operation-watch.d.ts +66 -0
  249. package/dist/lib/task-operation-watch.js +159 -0
  250. package/dist/lib/task-resolver.d.ts +1 -1
  251. package/dist/lib/task-resolver.js +4 -3
  252. package/dist/lib/task-runtime-headers.js +13 -3
  253. package/dist/lib/task-work.d.ts +1 -1
  254. package/dist/lib/task-work.js +35 -1
  255. package/dist/lib/task-write-attribution.d.ts +14 -0
  256. package/dist/lib/task-write-attribution.js +35 -2
  257. package/dist/lib/triggers.d.ts +11 -0
  258. package/dist/lib/triggers.js +7 -0
  259. package/dist/lib/wiki-update.d.ts +1 -0
  260. package/dist/lib/wiki-update.js +10 -1
  261. package/dist/lib/wiki.js +4 -1
  262. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.d.ts +9 -1
  263. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.js +31 -15
  264. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonToolApproval.js +1 -0
  265. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonWire.js +13 -7
  266. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/guidedUpdate.d.ts +370 -0
  267. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/guidedUpdate.js +315 -0
  268. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/maintenanceReportWire.d.ts +178 -0
  269. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/maintenanceReportWire.js +262 -0
  270. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.d.ts +51 -0
  271. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.js +106 -0
  272. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.d.ts +9 -1
  273. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.js +32 -5
  274. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonToolApproval.js +1 -0
  275. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonWire.js +33 -14
  276. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/guidedUpdate.d.ts +370 -0
  277. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/guidedUpdate.js +404 -0
  278. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/maintenanceReportWire.d.ts +178 -0
  279. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/maintenanceReportWire.js +342 -0
  280. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.d.ts +51 -0
  281. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.js +138 -0
  282. package/dist/node_modules/@skrr-ai/auth-core/package.json +20 -0
  283. package/dist/node_modules/@skrr-ai/data-provider/index.js +27085 -20250
  284. package/oclif.manifest.json +10570 -7247
  285. package/package.json +20 -2
@@ -0,0 +1,25 @@
1
+ import { BaseCommand } from '../../base-command';
2
+ /**
3
+ * `skrr spaces notebook <space>` — the Space's notebook (OSK-17996): one page
4
+ * of its Task Results, loop Cycles, hypothesis verdicts and journal / report
5
+ * pages, newest first. A view over records that already exist: each row is a
6
+ * summary and a link, and the body is read from the record itself. VIEW on
7
+ * the Space. A loop's Cycles are shared with the Space's members while its
8
+ * rules hold; a Commitment that only watches the Space, and every hypothesis
9
+ * verdict, show only to people who can open the Commitment. Each loop row says
10
+ * which.
11
+ */
12
+ export default class SpacesNotebook extends BaseCommand {
13
+ static description: string;
14
+ static examples: string[];
15
+ static args: {
16
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
17
+ };
18
+ static flags: {
19
+ kinds: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
20
+ limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ cursor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
23
+ };
24
+ run(): Promise<void>;
25
+ }
@@ -0,0 +1,75 @@
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 space_notebook_1 = require("../../lib/space-notebook");
7
+ const web_url_1 = require("../../lib/web-url");
8
+ /**
9
+ * `skrr spaces notebook <space>` — the Space's notebook (OSK-17996): one page
10
+ * of its Task Results, loop Cycles, hypothesis verdicts and journal / report
11
+ * pages, newest first. A view over records that already exist: each row is a
12
+ * summary and a link, and the body is read from the record itself. VIEW on
13
+ * the Space. A loop's Cycles are shared with the Space's members while its
14
+ * rules hold; a Commitment that only watches the Space, and every hypothesis
15
+ * verdict, show only to people who can open the Commitment. Each loop row says
16
+ * which.
17
+ */
18
+ class SpacesNotebook extends base_command_1.BaseCommand {
19
+ static description = "Show a space's notebook: its task results, loop cycles, hypothesis verdicts and journal and report pages, newest first";
20
+ static examples = [
21
+ '<%= config.bin %> spaces notebook <space-id>',
22
+ '<%= config.bin %> spaces notebook "Growth lab" --kinds task_result,hypothesis',
23
+ '<%= config.bin %> spaces notebook <space-id> --limit 50 --json',
24
+ '<%= config.bin %> spaces notebook <space-id> --cursor <next-cursor>',
25
+ ];
26
+ static args = {
27
+ id: core_1.Args.string({
28
+ description: 'Space ID, or a title to resolve',
29
+ required: true,
30
+ ignoreStdin: true,
31
+ }),
32
+ };
33
+ static flags = {
34
+ kinds: core_1.Flags.string({
35
+ description: `Only these kinds, comma-separated: ${data_provider_1.SPACE_NOTEBOOK_KINDS.join(', ')} (default: all)`,
36
+ }),
37
+ limit: core_1.Flags.integer({ description: 'Rows per page (1-100, default 30)', min: 1, max: 100 }),
38
+ cursor: core_1.Flags.string({
39
+ description: 'The cursor the previous page printed; pass the same --kinds with it',
40
+ }),
41
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
42
+ };
43
+ async run() {
44
+ this.requireAuth();
45
+ const { args, flags } = await this.parse(SpacesNotebook);
46
+ const kinds = (0, data_provider_1.readSpaceNotebookKinds)(flags.kinds);
47
+ if (!kinds.ok) {
48
+ this.error(`Unknown notebook kind: ${kinds.unknown.join(', ')}. Use: ${data_provider_1.SPACE_NOTEBOOK_KINDS.join(', ')}`, { exit: 2 });
49
+ }
50
+ const spaceId = await this.resolveSpaceReference(args.id);
51
+ let page;
52
+ try {
53
+ page = await data_provider_1.dataService.getSpaceNotebook(spaceId, {
54
+ // Every kind is the default; sending none keeps the URL short.
55
+ ...(kinds.kinds.length < data_provider_1.SPACE_NOTEBOOK_KINDS.length ? { kinds: kinds.kinds } : {}),
56
+ ...(typeof flags.limit === 'number' ? { limit: flags.limit } : {}),
57
+ ...(flags.cursor ? { cursor: flags.cursor } : {}),
58
+ });
59
+ }
60
+ catch (err) {
61
+ this.handleApiError(err, { subject: `space ${args.id}` });
62
+ }
63
+ if (flags.json) {
64
+ this.printJsonResult(page);
65
+ return;
66
+ }
67
+ for (const line of (0, space_notebook_1.notebookLines)(page, {
68
+ webOrigin: (0, web_url_1.webOrigin)(this.cliConfig.baseURL),
69
+ binName: this.config.bin,
70
+ })) {
71
+ this.log(line);
72
+ }
73
+ }
74
+ }
75
+ exports.default = SpacesNotebook;
@@ -0,0 +1,17 @@
1
+ import { SpaceProposalDecisionCommand } from '../../../lib/space-proposal-decision-command';
2
+ /** `skrr spaces proposals discard <space> <KIND:ID>`: reject through the item's own endpoint. */
3
+ export default class SpacesProposalsDiscard extends SpaceProposalDecisionCommand {
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ space: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ item: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ static flags: {
11
+ expected: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ reason: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'reason-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ static decision: "discard";
17
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const space_proposal_decision_command_1 = require("../../../lib/space-proposal-decision-command");
4
+ /** `skrr spaces proposals discard <space> <KIND:ID>`: reject through the item's own endpoint. */
5
+ class SpacesProposalsDiscard extends space_proposal_decision_command_1.SpaceProposalDecisionCommand {
6
+ static description = "Discard (reject) one item in a space's proposals inbox, through the item's own decision endpoint";
7
+ static examples = [
8
+ `<%= config.bin %> spaces proposals discard <space-id> commitment_action_proposal:cap_123 --expected '{"snapshotDigest":"…","bundleVersion":2}' --reason-code not_worth_it`,
9
+ '<%= config.bin %> spaces proposals discard <space-id> memory_proposal:<uuid> --reason "Not true any more"',
10
+ '<%= config.bin %> spaces proposals discard <space-id> space_lesson:<uuid> --reason-code incorrect --reason "Step 2 is the old flow"',
11
+ ];
12
+ // Own, not inherited: oclif drops a static a subclass only inherits (OSK-15346).
13
+ static args = space_proposal_decision_command_1.SpaceProposalDecisionCommand.args;
14
+ static flags = { ...space_proposal_decision_command_1.spaceProposalDecisionFlags };
15
+ static decision = 'discard';
16
+ }
17
+ exports.default = SpacesProposalsDiscard;
@@ -0,0 +1,17 @@
1
+ import { SpaceProposalDecisionCommand } from '../../../lib/space-proposal-decision-command';
2
+ /** `skrr spaces proposals keep <space> <KIND:ID>`: approve through the item's own endpoint. */
3
+ export default class SpacesProposalsKeep extends SpaceProposalDecisionCommand {
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ space: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ item: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
9
+ };
10
+ static flags: {
11
+ expected: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ reason: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ 'reason-code': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ };
16
+ static decision: "keep";
17
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const space_proposal_decision_command_1 = require("../../../lib/space-proposal-decision-command");
4
+ /** `skrr spaces proposals keep <space> <KIND:ID>`: approve through the item's own endpoint. */
5
+ class SpacesProposalsKeep extends space_proposal_decision_command_1.SpaceProposalDecisionCommand {
6
+ static description = "Keep (approve) one item in a space's proposals inbox, through the item's own decision endpoint";
7
+ static examples = [
8
+ `<%= config.bin %> spaces proposals keep <space-id> commitment_action_proposal:cap_123 --expected '{"snapshotDigest":"…","bundleVersion":2}'`,
9
+ '<%= config.bin %> spaces proposals keep <space-id> memory_proposal:<uuid>',
10
+ '<%= config.bin %> spaces proposals keep <space-id> space_lesson:<uuid>',
11
+ ];
12
+ // Own, not inherited: oclif drops a static a subclass only inherits (OSK-15346).
13
+ static args = space_proposal_decision_command_1.SpaceProposalDecisionCommand.args;
14
+ static flags = { ...space_proposal_decision_command_1.spaceProposalDecisionFlags };
15
+ static decision = 'keep';
16
+ }
17
+ exports.default = SpacesProposalsKeep;
@@ -0,0 +1,24 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ /**
3
+ * `skrr spaces proposals list <space>` (OSK-17993): the pending objects that
4
+ * target one Space (writes the Space held for approval, its loops' bundles,
5
+ * its Memory proposals), each with whether YOU can decide it. VIEW on the
6
+ * Space. A read-time projection: nothing here is the Space's own state, and
7
+ * a decision goes to the item's own endpoint (`spaces proposals keep|discard`).
8
+ */
9
+ export default class SpacesProposalsList extends BaseCommand {
10
+ static description: string;
11
+ static examples: string[];
12
+ static args: {
13
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
14
+ };
15
+ static flags: {
16
+ kind: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ disposition: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
18
+ all: import("@oclif/core/interfaces").BooleanFlag<boolean>;
19
+ limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
20
+ cursor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
22
+ };
23
+ run(): Promise<void>;
24
+ }
@@ -0,0 +1,89 @@
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 format_1 = require("../../../lib/format");
7
+ const list_output_1 = require("../../../lib/list-output");
8
+ const space_proposals_1 = require("../../../lib/space-proposals");
9
+ /**
10
+ * `skrr spaces proposals list <space>` (OSK-17993): the pending objects that
11
+ * target one Space (writes the Space held for approval, its loops' bundles,
12
+ * its Memory proposals), each with whether YOU can decide it. VIEW on the
13
+ * Space. A read-time projection: nothing here is the Space's own state, and
14
+ * a decision goes to the item's own endpoint (`spaces proposals keep|discard`).
15
+ */
16
+ class SpacesProposalsList extends base_command_1.BaseCommand {
17
+ static description = "List a space's proposals inbox: held writes, its loops' bundles and its Memory proposals, with who can decide each";
18
+ static examples = [
19
+ '<%= config.bin %> spaces proposals list <space-id>',
20
+ '<%= config.bin %> spaces proposals list "Growth lab" --disposition proposed',
21
+ '<%= config.bin %> spaces proposals list <space-id> --kind memory_proposal --json',
22
+ ];
23
+ static args = {
24
+ id: core_1.Args.string({
25
+ description: 'Space ID, or a title to resolve',
26
+ required: true,
27
+ ignoreStdin: true,
28
+ }),
29
+ };
30
+ static flags = {
31
+ kind: core_1.Flags.string({ options: [...data_provider_1.SPACE_PROPOSAL_KINDS] }),
32
+ disposition: core_1.Flags.string({
33
+ options: [...data_provider_1.PROPOSAL_DISPOSITIONS],
34
+ default: 'proposed',
35
+ description: 'proposed (waiting for a decision) by default',
36
+ }),
37
+ all: core_1.Flags.boolean({ description: 'Every disposition, not only the ones waiting' }),
38
+ limit: core_1.Flags.integer({ min: 1, max: 100, default: 50 }),
39
+ cursor: core_1.Flags.string(),
40
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
41
+ };
42
+ async run() {
43
+ this.requireAuth();
44
+ const { args, flags } = await this.parse(SpacesProposalsList);
45
+ const spaceId = await this.resolveSpaceReference(args.id);
46
+ let result;
47
+ try {
48
+ result = await space_proposals_1.spaceProposalsApi.list(spaceId, {
49
+ kind: flags.kind,
50
+ disposition: flags.all ? undefined : flags.disposition,
51
+ limit: flags.limit,
52
+ cursor: flags.cursor,
53
+ });
54
+ }
55
+ catch (error) {
56
+ this.handleApiError(error, { subject: `space ${args.id}` });
57
+ }
58
+ if (flags.json) {
59
+ this.printJsonResult((0, list_output_1.listResult)(result));
60
+ return;
61
+ }
62
+ if (!result.data.length) {
63
+ for (const line of (0, space_proposals_1.emptySpaceInboxLines)(result.nextCursor))
64
+ this.log(line);
65
+ }
66
+ (0, format_1.renderTable)(result.data.map(space_proposals_1.spaceProposalRow), [
67
+ { key: 'id', header: 'PROPOSAL', verbatim: true },
68
+ { key: 'title', header: 'TITLE' },
69
+ { key: 'scope', header: 'WHY HERE' },
70
+ { key: 'disposition', header: 'DISPOSITION' },
71
+ { key: 'deadline', header: 'DEADLINE' },
72
+ { key: 'note', header: 'NOTE' },
73
+ ], (line) => this.log(line));
74
+ const bin = this.config?.bin || 'skrr';
75
+ for (const item of result.data) {
76
+ for (const line of (0, space_proposals_1.spaceProposalDetailLines)(item, bin))
77
+ this.log(line);
78
+ }
79
+ if (!result.coverage.complete) {
80
+ this.log(`Partial coverage: ${result.coverage.sources
81
+ .filter((source) => source.status !== 'available')
82
+ .map((source) => `${source.kind}:${source.status}${source.code ? ` (${source.code})` : ''}`)
83
+ .join(', ')}`);
84
+ }
85
+ if (result.nextCursor)
86
+ this.log(`Next cursor: ${result.nextCursor}`);
87
+ }
88
+ }
89
+ exports.default = SpacesProposalsList;
@@ -0,0 +1,29 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ /**
3
+ * `skrr spaces skills propose <space>` (OSK-17998): suggest a procedure as a
4
+ * skill for every agent in the space.
5
+ *
6
+ * The procedure becomes a suggested lesson in the space's Memory and is listed
7
+ * in its proposals inbox (`spaces proposals list`); a person promotes it there,
8
+ * which compiles it into a space skill. From an agent's run the space's write
9
+ * policy decides it (`skill_write`): it is refused only where the space refuses
10
+ * skill changes from that agent.
11
+ */
12
+ export default class SpacesSkillsPropose extends BaseCommand {
13
+ static description: string;
14
+ static examples: string[];
15
+ static args: {
16
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
17
+ };
18
+ static flags: {
19
+ title: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
20
+ content: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
21
+ procedure: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
22
+ summary: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
23
+ applies: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
24
+ except: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ key: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
27
+ };
28
+ run(): Promise<void>;
29
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_crypto_1 = require("node:crypto");
4
+ const core_1 = require("@oclif/core");
5
+ const data_provider_1 = require("@skrr-ai/data-provider");
6
+ const base_command_1 = require("../../../base-command");
7
+ const prompt_1 = require("../../../lib/prompt");
8
+ /**
9
+ * `skrr spaces skills propose <space>` (OSK-17998): suggest a procedure as a
10
+ * skill for every agent in the space.
11
+ *
12
+ * The procedure becomes a suggested lesson in the space's Memory and is listed
13
+ * in its proposals inbox (`spaces proposals list`); a person promotes it there,
14
+ * which compiles it into a space skill. From an agent's run the space's write
15
+ * policy decides it (`skill_write`): it is refused only where the space refuses
16
+ * skill changes from that agent.
17
+ */
18
+ class SpacesSkillsPropose extends base_command_1.BaseCommand {
19
+ static description = "Propose a procedure as a space skill: a suggested lesson a person promotes from the space's proposals inbox";
20
+ static examples = [
21
+ '<%= config.bin %> spaces skills propose <space-id> --title "Weekly KR review" --content "How we review…" --procedure procedure.json',
22
+ 'cat procedure.json | <%= config.bin %> spaces skills propose <space-id> --title "Release checklist" --content "…" --procedure -',
23
+ ];
24
+ static args = {
25
+ id: core_1.Args.string({ description: 'Space ID', required: true, ignoreStdin: true }),
26
+ };
27
+ static flags = {
28
+ title: core_1.Flags.string({ description: 'What the skill is called', required: true }),
29
+ content: core_1.Flags.string({
30
+ description: 'The lesson in prose, as the person reviewing it reads it',
31
+ required: true,
32
+ }),
33
+ procedure: core_1.Flags.string({
34
+ description: 'The structured procedure the skill gives (schemaVersion 1, goal, steps…): a JSON file, or - for stdin',
35
+ required: true,
36
+ }),
37
+ summary: core_1.Flags.string({ description: 'One-line summary' }),
38
+ applies: core_1.Flags.string({
39
+ description: 'When it applies (repeatable)',
40
+ multiple: true,
41
+ }),
42
+ except: core_1.Flags.string({ description: 'When it does not apply (repeatable)', multiple: true }),
43
+ key: core_1.Flags.string({
44
+ description: 'Idempotency key: a retry with the same key returns the first proposal',
45
+ }),
46
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
47
+ };
48
+ async run() {
49
+ this.requireAuth();
50
+ const { args, flags } = await this.parse(SpacesSkillsPropose);
51
+ const spaceRef = await this.resolveEntityRef('space', args.id);
52
+ let procedure;
53
+ try {
54
+ procedure = (await (0, prompt_1.readJsonBody)(flags.procedure));
55
+ }
56
+ catch (err) {
57
+ this.error(err.message, { exit: 1 });
58
+ }
59
+ let result;
60
+ try {
61
+ result = await data_provider_1.dataService.proposeSpaceSkill(spaceRef, {
62
+ title: flags.title,
63
+ content: flags.content,
64
+ procedure,
65
+ ...(flags.summary ? { summary: flags.summary } : {}),
66
+ ...(flags.applies?.length ? { applicability: flags.applies } : {}),
67
+ ...(flags.except?.length ? { exclusions: flags.except } : {}),
68
+ idempotencyKey: flags.key || `space-skill:${(0, node_crypto_1.randomUUID)()}`,
69
+ });
70
+ }
71
+ catch (err) {
72
+ this.handleApiError(err);
73
+ }
74
+ if (flags.json) {
75
+ this.printJsonResult(result);
76
+ return;
77
+ }
78
+ this.log(`Proposed "${flags.title}" as a skill for space ${spaceRef}: ${result.proposal.itemId}. ` +
79
+ 'A person promotes it from the space proposals inbox (`spaces proposals list`).');
80
+ }
81
+ }
82
+ exports.default = SpacesSkillsPropose;
@@ -55,6 +55,9 @@ class SpacesTemplatesFork extends base_command_1.BaseCommand {
55
55
  return this.log(JSON.stringify((0, space_output_1.withSpacePerspectiveUrl)(this.cliConfig.baseURL, result.spaceId, 'tasks', result), null, 2));
56
56
  }
57
57
  this.log(`Forked into space ${result.spaceId} — ${result.taskCount ?? 0} task(s), ${result.goalCount ?? 0} goal(s).`);
58
+ for (const notice of (0, space_templates_1.wikiPageInstallNotices)(result.outcomes)) {
59
+ this.log(notice);
60
+ }
58
61
  }
59
62
  }
60
63
  exports.default = SpacesTemplatesFork;
@@ -38,6 +38,12 @@ class SpacesTriggersShow extends base_command_1.BaseCommand {
38
38
  this.log(`Enabled: ${assistant.enabled === false ? 'no' : 'yes'}`);
39
39
  this.log(`On event: ${formatLane(triggers.onEvent)}`);
40
40
  this.log(`On schedule:${formatLane(triggers.onSchedule)}`);
41
+ const loop = assistant.loop;
42
+ if (loop?.commitmentId) {
43
+ this.log(loop.state === 'retired'
44
+ ? `Loop: converted into loop ${loop.commitmentId}, which replaced its scheduled turns; read-only`
45
+ : `Loop: being converted into loop ${loop.commitmentId}; read-only, and it keeps running until the loop is active`);
46
+ }
41
47
  }
42
48
  }
43
49
  exports.default = SpacesTriggersShow;
@@ -8,6 +8,7 @@ export default class SpacesWorkflowsRetry extends BaseCommand {
8
8
  };
9
9
  static flags: {
10
10
  mode: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'retry-identity': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
12
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
13
  };
13
14
  run(): Promise<void>;
@@ -21,6 +21,9 @@ class SpacesWorkflowsRetry extends base_command_1.BaseCommand {
21
21
  default: 'original',
22
22
  description: 'Retry the original version or the workflow’s current version',
23
23
  }),
24
+ 'retry-identity': core_1.Flags.string({
25
+ description: 'Stable identity for one logical retry; a repeat reuses its durable run',
26
+ }),
24
27
  json: core_1.Flags.boolean({ description: 'Output the retry result as JSON' }),
25
28
  };
26
29
  async run() {
@@ -28,7 +31,7 @@ class SpacesWorkflowsRetry extends base_command_1.BaseCommand {
28
31
  const { args, flags } = await this.parse(SpacesWorkflowsRetry);
29
32
  let result;
30
33
  try {
31
- result = await data_provider_1.dataService.retrySpaceWorkflowRun(args.spaceId, args.runId, flags.mode);
34
+ result = await data_provider_1.dataService.retrySpaceWorkflowRun(args.spaceId, args.runId, flags.mode, flags['retry-identity']);
32
35
  }
33
36
  catch (error) {
34
37
  this.handleApiError(error);
@@ -39,6 +42,10 @@ class SpacesWorkflowsRetry extends base_command_1.BaseCommand {
39
42
  return;
40
43
  }
41
44
  this.log(`${result.reused ? 'Reused' : 'Started'} retry run ${result.run.id} (${result.run.status}).`);
45
+ if (result.receipt)
46
+ this.log(`Retry receipt: ${result.receipt.state} durable run ${result.receipt.runId}.`);
47
+ if (result.inspection)
48
+ this.log(`Inspect: skrr spaces workflows run ${args.spaceId} ${result.inspection.runId}`);
42
49
  }
43
50
  }
44
51
  exports.default = SpacesWorkflowsRetry;
@@ -16,7 +16,7 @@ async function readTriggerConfig(inline, file) {
16
16
  }
17
17
  class SpacesWorkflowsTriggersCreate extends base_command_1.BaseCommand {
18
18
  static aliases = ['workflows:triggers:create'];
19
- static description = 'Create a schedule, webhook, or space-event workflow trigger';
19
+ static description = 'Create a schedule or webhook workflow trigger';
20
20
  static args = {
21
21
  spaceId: core_1.Args.string({ required: true, ignoreStdin: true }),
22
22
  workflowId: core_1.Args.string({ required: true, ignoreStdin: true }),
@@ -24,7 +24,8 @@ class SpacesWorkflowsTriggersCreate extends base_command_1.BaseCommand {
24
24
  static flags = {
25
25
  type: core_1.Flags.string({
26
26
  required: true,
27
- options: ['schedule', 'webhook', 'space_event'],
27
+ // `space_event` is refused by the server: nothing delivers Space events to a workflow.
28
+ options: ['schedule', 'webhook'],
28
29
  description: 'Trigger type',
29
30
  }),
30
31
  status: core_1.Flags.string({
@@ -53,6 +53,10 @@ class SpacesWorkflowsTriggersFire extends base_command_1.BaseCommand {
53
53
  return;
54
54
  }
55
55
  this.log(`${result.reused ? 'Reused' : 'Fired'} trigger run ${result.run.id} (${result.run.status}).`);
56
+ if (result.receipt)
57
+ this.log(`Delivery receipt: ${result.receipt.state} durable run ${result.receipt.runId}.`);
58
+ if (result.inspection)
59
+ this.log(`Inspect: skrr spaces workflows run ${args.spaceId} ${result.inspection.runId}`);
56
60
  }
57
61
  }
58
62
  exports.default = SpacesWorkflowsTriggersFire;
@@ -15,7 +15,8 @@ class SpacesWorkflowsTriggersUpdate extends base_command_1.BaseCommand {
15
15
  };
16
16
  static flags = {
17
17
  type: core_1.Flags.string({
18
- options: ['schedule', 'webhook', 'space_event'],
18
+ // A stored `space_event` trigger can be paused or retyped, never set.
19
+ options: ['schedule', 'webhook'],
19
20
  description: 'Trigger type',
20
21
  }),
21
22
  status: core_1.Flags.string({ options: ['active', 'paused'], description: 'Trigger status' }),
@@ -0,0 +1,22 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ /**
3
+ * `skrr spaces write-policy set <space>` — set how a Space treats UNATTENDED
4
+ * writes of one class (OSK-17988). SHARE on the Space, the authority that also
5
+ * configures the execution principal. `default` returns a writer to the design
6
+ * default. `auto` for a class the Workspace requires approval for is refused by
7
+ * the server (`SPACE_WRITE_POLICY_CEILING`).
8
+ */
9
+ export default class SpacesWritePolicySet extends BaseCommand {
10
+ static description: string;
11
+ static examples: string[];
12
+ static args: {
13
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
14
+ };
15
+ static flags: {
16
+ class: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
17
+ 'principal-automation': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ 'member-automation': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
19
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
20
+ };
21
+ run(): Promise<void>;
22
+ }
@@ -0,0 +1,82 @@
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 space_write_policy_1 = require("../../../lib/space-write-policy");
7
+ const MODE_OPTIONS = [...data_provider_1.SPACE_WRITE_MODES, 'default'];
8
+ /**
9
+ * `skrr spaces write-policy set <space>` — set how a Space treats UNATTENDED
10
+ * writes of one class (OSK-17988). SHARE on the Space, the authority that also
11
+ * configures the execution principal. `default` returns a writer to the design
12
+ * default. `auto` for a class the Workspace requires approval for is refused by
13
+ * the server (`SPACE_WRITE_POLICY_CEILING`).
14
+ */
15
+ class SpacesWritePolicySet extends base_command_1.BaseCommand {
16
+ static description = 'Set how a space treats unattended writes of one class (share access required)';
17
+ static examples = [
18
+ '<%= config.bin %> spaces write-policy set <space-id> --member-automation auto',
19
+ '<%= config.bin %> spaces write-policy set <space-id> --principal-automation propose',
20
+ '<%= config.bin %> spaces write-policy set <space-id> --member-automation refuse --json',
21
+ '<%= config.bin %> spaces write-policy set <space-id> --member-automation default',
22
+ ];
23
+ static args = {
24
+ id: core_1.Args.string({
25
+ description: 'Space ID, or a title to resolve',
26
+ required: true,
27
+ ignoreStdin: true,
28
+ }),
29
+ };
30
+ static flags = {
31
+ class: core_1.Flags.string({
32
+ description: 'The write class to set',
33
+ options: [...data_provider_1.SPACE_WRITE_CLASSES],
34
+ default: data_provider_1.SPACE_WRITE_CLASSES[0],
35
+ }),
36
+ 'principal-automation': core_1.Flags.string({
37
+ description: "Mode for the space's own automation (runs admitted under its execution principal); " +
38
+ '`default` resets it',
39
+ options: MODE_OPTIONS,
40
+ }),
41
+ 'member-automation': core_1.Flags.string({
42
+ description: "Mode for other members' agents writing unattended (for example their Commitment runs); " +
43
+ '`default` resets it',
44
+ options: MODE_OPTIONS,
45
+ }),
46
+ json: core_1.Flags.boolean({ description: 'Output as JSON' }),
47
+ };
48
+ async run() {
49
+ this.requireAuth();
50
+ const { args, flags } = await this.parse(SpacesWritePolicySet);
51
+ const principal = (0, space_write_policy_1.cellValue)(flags['principal-automation']);
52
+ const member = (0, space_write_policy_1.cellValue)(flags['member-automation']);
53
+ if (principal === undefined && member === undefined) {
54
+ this.failWithCliError({
55
+ message: 'Pass --principal-automation and/or --member-automation (auto, propose, refuse or default).',
56
+ code: 'SPACE_WRITE_POLICY_NOTHING_TO_SET',
57
+ exit: 2,
58
+ retryable: false,
59
+ });
60
+ }
61
+ const spaceId = await this.resolveSpaceReference(args.id);
62
+ const cells = {
63
+ ...(principal !== undefined ? { principal_automation: principal } : {}),
64
+ ...(member !== undefined ? { member_automation: member } : {}),
65
+ };
66
+ const writePolicy = { [flags.class]: cells };
67
+ let view;
68
+ try {
69
+ view = await data_provider_1.dataService.updateSpaceWritePolicy({ spaceId, data: { writePolicy } });
70
+ }
71
+ catch (err) {
72
+ this.handleApiError(err, { subject: `space ${args.id}` });
73
+ }
74
+ if (flags.json) {
75
+ this.printJsonResult(view);
76
+ return;
77
+ }
78
+ for (const line of (0, space_write_policy_1.writePolicyLines)(view))
79
+ this.log(line);
80
+ }
81
+ }
82
+ exports.default = SpacesWritePolicySet;
@@ -0,0 +1,19 @@
1
+ import { BaseCommand } from '../../../base-command';
2
+ /**
3
+ * `skrr spaces write-policy show <space>` — how a Space treats UNATTENDED
4
+ * writes (OSK-17988): for each write class, the mode each kind of automated
5
+ * writer gets, whether that is the default, and the Workspace's approval
6
+ * ceiling. The rows are the server's own reading, so this shows the mode the
7
+ * server applies. VIEW on the Space.
8
+ */
9
+ export default class SpacesWritePolicyShow extends BaseCommand {
10
+ static description: string;
11
+ static examples: string[];
12
+ static args: {
13
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
14
+ };
15
+ static flags: {
16
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
17
+ };
18
+ run(): Promise<void>;
19
+ }