firedrill-run 2.2.5 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/README.md +178 -22
  2. package/bin/firedrill.mjs +29 -5
  3. package/dist/assembly.json +13 -0
  4. package/dist/cli/runtime/candidate_copy.py +395 -0
  5. package/dist/cli/runtime/source_snapshot.py +391 -0
  6. package/dist/cli/src/administration.js +295 -0
  7. package/dist/cli/src/agent-changes.js +496 -0
  8. package/dist/cli/src/assessment-requests.js +67 -0
  9. package/dist/cli/src/auth.js +465 -0
  10. package/dist/cli/src/billing-commerce-contracts.js +1 -0
  11. package/dist/cli/src/billing-usage.js +227 -0
  12. package/dist/cli/src/billing-wallet-contracts.js +1 -0
  13. package/dist/cli/src/billing.js +170 -0
  14. package/dist/cli/src/bootstrap-process-lock.js +136 -0
  15. package/dist/cli/src/browser-links.js +14 -0
  16. package/dist/cli/src/campaign-controls.js +122 -0
  17. package/dist/cli/src/campaign-diagnoses.js +118 -0
  18. package/dist/cli/src/campaign-reports.js +1215 -0
  19. package/dist/cli/src/campaign-world.js +156 -0
  20. package/dist/cli/src/candidate-copy.js +376 -0
  21. package/dist/cli/src/catalog-contracts.js +1 -0
  22. package/dist/cli/src/ci-access-contracts.js +1 -0
  23. package/dist/cli/src/ci-configuration-contracts.js +1 -0
  24. package/dist/cli/src/ci-coverage.js +64 -0
  25. package/dist/cli/src/ci-delivery-contracts.js +1 -0
  26. package/dist/cli/src/ci-result-contracts.js +1 -0
  27. package/dist/cli/src/ci-run-contracts.js +1 -0
  28. package/dist/cli/src/ci-setup-proposals.js +52 -0
  29. package/dist/cli/src/company-policies.js +229 -0
  30. package/dist/cli/src/completion.js +79 -0
  31. package/dist/cli/src/configuration-intents.js +277 -0
  32. package/dist/cli/src/configuration.js +369 -0
  33. package/dist/cli/src/continuous-simulation.js +277 -0
  34. package/dist/cli/src/coordinated-checkpoints.js +133 -0
  35. package/dist/cli/src/credential-mode.js +139 -0
  36. package/dist/cli/src/credentials.js +331 -0
  37. package/dist/cli/src/credit-format.js +8 -0
  38. package/dist/cli/src/dataset-contracts.js +1 -0
  39. package/dist/cli/src/dataset-export.js +154 -0
  40. package/dist/cli/src/dataset-reads.js +37 -0
  41. package/dist/cli/src/dependency-preparation.js +239 -0
  42. package/dist/cli/src/director-tool-setup.js +104 -0
  43. package/dist/cli/src/driver-review.js +225 -0
  44. package/dist/cli/src/evaluation-authoring.js +315 -0
  45. package/dist/cli/src/evidence-bundles.js +367 -0
  46. package/dist/cli/src/execution-proposals.js +36 -0
  47. package/dist/cli/src/http.js +302 -0
  48. package/dist/cli/src/local-container-boundary.js +38 -0
  49. package/dist/cli/src/local-container-policy.js +201 -0
  50. package/dist/cli/src/local-execution-setup.js +81 -0
  51. package/dist/cli/src/local-source-basis.js +73 -0
  52. package/dist/cli/src/local-source.js +66 -0
  53. package/dist/cli/src/local-value-store.js +91 -0
  54. package/dist/cli/src/local-values.js +163 -0
  55. package/dist/cli/src/login-organizations.js +70 -0
  56. package/dist/cli/src/main.js +1622 -0
  57. package/dist/cli/src/mcp-connection.js +109 -0
  58. package/dist/cli/src/native/bindings.js +137 -0
  59. package/dist/cli/src/native/canonical.js +370 -0
  60. package/dist/cli/src/native/cloud-resources.js +942 -0
  61. package/dist/cli/src/native/companion-channel.js +421 -0
  62. package/dist/cli/src/native/companion-ipc.js +473 -0
  63. package/dist/cli/src/native/contracts.js +218 -0
  64. package/dist/cli/src/native/control-plane.js +1354 -0
  65. package/dist/cli/src/native/credit-approval.js +15 -0
  66. package/dist/cli/src/native/dependency-proxy.js +1006 -0
  67. package/dist/cli/src/native/drill-cleanup.js +115 -0
  68. package/dist/cli/src/native/drill-runner.js +1562 -0
  69. package/dist/cli/src/native/drivers/action-trace.js +210 -0
  70. package/dist/cli/src/native/drivers/function-wrapper.js +152 -0
  71. package/dist/cli/src/native/drivers/http.js +442 -0
  72. package/dist/cli/src/native/drivers/index.js +47 -0
  73. package/dist/cli/src/native/drivers/jsonl-process.js +538 -0
  74. package/dist/cli/src/native/drivers/playwright.js +600 -0
  75. package/dist/cli/src/native/drivers/signed-event.js +244 -0
  76. package/dist/cli/src/native/drivers/types.js +578 -0
  77. package/dist/cli/src/native/evidence-filter.js +255 -0
  78. package/dist/cli/src/native/isolated-access.js +241 -0
  79. package/dist/cli/src/native/library-sharing.js +220 -0
  80. package/dist/cli/src/native/local-run.js +667 -0
  81. package/dist/cli/src/native/local-secrets.js +19 -0
  82. package/dist/cli/src/native/mcp-config.js +123 -0
  83. package/dist/cli/src/native/metadata-requests.js +120 -0
  84. package/dist/cli/src/native/observations.js +1159 -0
  85. package/dist/cli/src/native/owned-groups.js +46 -0
  86. package/dist/cli/src/native/plan.js +594 -0
  87. package/dist/cli/src/native/png.js +159 -0
  88. package/dist/cli/src/native/ports.js +43 -0
  89. package/dist/cli/src/native/readiness.js +139 -0
  90. package/dist/cli/src/native/reassessments.js +206 -0
  91. package/dist/cli/src/native/redaction.js +235 -0
  92. package/dist/cli/src/native/registration.js +155 -0
  93. package/dist/cli/src/native/roots.js +110 -0
  94. package/dist/cli/src/native/run-cleanup.js +199 -0
  95. package/dist/cli/src/native/scratch.js +117 -0
  96. package/dist/cli/src/native/screenshots.js +60 -0
  97. package/dist/cli/src/native/session.js +556 -0
  98. package/dist/cli/src/native/standalone-proxy.js +580 -0
  99. package/dist/cli/src/native/standalone-renewals.js +183 -0
  100. package/dist/cli/src/native/standalone-state.js +193 -0
  101. package/dist/cli/src/native/standalone-tools.js +187 -0
  102. package/dist/cli/src/native/supervisor.js +831 -0
  103. package/dist/cli/src/native/target-auth.js +161 -0
  104. package/dist/cli/src/native/target-state.js +330 -0
  105. package/dist/cli/src/native/tool-reuse.js +364 -0
  106. package/dist/cli/src/native/tool-setups.js +336 -0
  107. package/dist/cli/src/native/world-reuse.js +288 -0
  108. package/dist/cli/src/onboarding.js +23 -0
  109. package/dist/cli/src/priority-requests.js +70 -0
  110. package/dist/cli/src/priority.js +223 -0
  111. package/dist/cli/src/prompts.js +184 -0
  112. package/dist/cli/src/real-operations.js +221 -0
  113. package/dist/cli/src/recipe-intents.js +58 -0
  114. package/dist/cli/src/recorded-context-intents.js +59 -0
  115. package/dist/cli/src/recorded-context.js +248 -0
  116. package/dist/cli/src/recordings.js +69 -0
  117. package/dist/cli/src/registration-guide.js +39 -0
  118. package/dist/cli/src/report-exports.js +213 -0
  119. package/dist/cli/src/request-input.js +47 -0
  120. package/dist/cli/src/resource-lifecycle.js +141 -0
  121. package/dist/cli/src/revision-requests.js +55 -0
  122. package/dist/cli/src/runner-abandon.js +53 -0
  123. package/dist/cli/src/runner-campaign-controls.js +262 -0
  124. package/dist/cli/src/runner-claim-reads.js +36 -0
  125. package/dist/cli/src/runner-completion.js +65 -0
  126. package/dist/cli/src/runner-configuration.js +546 -0
  127. package/dist/cli/src/runner-container.js +794 -0
  128. package/dist/cli/src/runner-evidence-erasure.js +351 -0
  129. package/dist/cli/src/runner-evidence-privacy.js +37 -0
  130. package/dist/cli/src/runner-evidence-retention.js +161 -0
  131. package/dist/cli/src/runner-evidence.js +326 -0
  132. package/dist/cli/src/runner-execute.js +92 -0
  133. package/dist/cli/src/runner-execution-deadline.js +25 -0
  134. package/dist/cli/src/runner-grants.js +307 -0
  135. package/dist/cli/src/runner-identity.js +615 -0
  136. package/dist/cli/src/runner-inputs.js +308 -0
  137. package/dist/cli/src/runner-jobs.js +49 -0
  138. package/dist/cli/src/runner-model-transport.js +392 -0
  139. package/dist/cli/src/runner-ownership.js +332 -0
  140. package/dist/cli/src/runner-process-lock.js +175 -0
  141. package/dist/cli/src/runner-runtime.js +396 -0
  142. package/dist/cli/src/runner-session-channel.js +377 -0
  143. package/dist/cli/src/runner-trial-completion.js +34 -0
  144. package/dist/cli/src/runner-trial-journal.js +358 -0
  145. package/dist/cli/src/runner-trial-live.js +393 -0
  146. package/dist/cli/src/runner-trial-protocol.js +289 -0
  147. package/dist/cli/src/runner-trial-sync.js +110 -0
  148. package/dist/cli/src/runner-trial-transfer.js +107 -0
  149. package/dist/cli/src/runner-voice.js +40 -0
  150. package/dist/cli/src/runner-world-claim.js +21 -0
  151. package/dist/cli/src/runner-world-collector.js +159 -0
  152. package/dist/cli/src/runner-world-command-evidence.js +487 -0
  153. package/dist/cli/src/runner-world-commands.js +268 -0
  154. package/dist/cli/src/runner-world-completion.js +76 -0
  155. package/dist/cli/src/runner-world-erasure.js +95 -0
  156. package/dist/cli/src/runner-world-evidence-sync.js +91 -0
  157. package/dist/cli/src/runner-world-journal.js +510 -0
  158. package/dist/cli/src/runner-world-native-filters.js +134 -0
  159. package/dist/cli/src/runner-world-observations.js +50 -0
  160. package/dist/cli/src/runner-world-session-protocol.js +134 -0
  161. package/dist/cli/src/saved-records.js +40 -0
  162. package/dist/cli/src/scenario-authoring.js +212 -0
  163. package/dist/cli/src/scenario-discovery.js +216 -0
  164. package/dist/cli/src/scenario-paths.js +68 -0
  165. package/dist/cli/src/scenario-requests.js +4 -0
  166. package/dist/cli/src/service-receipts.js +105 -0
  167. package/dist/cli/src/simple/authoring.js +270 -0
  168. package/dist/cli/src/simple/credit-approval.js +16 -0
  169. package/dist/cli/src/simple/help.js +98 -0
  170. package/dist/cli/src/simple/init.js +61 -0
  171. package/dist/cli/src/simple/library-sharing.js +414 -0
  172. package/dist/cli/src/simple/metadata-requests.js +46 -0
  173. package/dist/cli/src/simple/native-report.js +841 -0
  174. package/dist/cli/src/simple/native-tools.js +780 -0
  175. package/dist/cli/src/simple/plan-apply.js +506 -0
  176. package/dist/cli/src/simple/reassessment.js +323 -0
  177. package/dist/cli/src/simple/register.js +123 -0
  178. package/dist/cli/src/simple/run.js +122 -0
  179. package/dist/cli/src/simple/status.js +49 -0
  180. package/dist/cli/src/simple/tool-renewal.js +308 -0
  181. package/dist/cli/src/simple/tool-reuse.js +526 -0
  182. package/dist/cli/src/simple/tool-start-catalog.js +100 -0
  183. package/dist/cli/src/simple/tool-state.js +426 -0
  184. package/dist/cli/src/simple/tools-author.js +222 -0
  185. package/dist/cli/src/simple/watch.js +28 -0
  186. package/dist/cli/src/simple/world-reuse.js +586 -0
  187. package/dist/cli/src/simulation-intents.js +406 -0
  188. package/dist/cli/src/simulation-run.js +1058 -0
  189. package/dist/cli/src/source-batch.js +322 -0
  190. package/dist/cli/src/source-connection.js +451 -0
  191. package/dist/cli/src/source-runtime.js +346 -0
  192. package/dist/cli/src/source-selection-intents.js +75 -0
  193. package/dist/cli/src/source-sets.js +214 -0
  194. package/dist/cli/src/target-models.js +109 -0
  195. package/dist/cli/src/tool-catalog.js +224 -0
  196. package/dist/cli/src/tool-command-contracts.js +1 -0
  197. package/dist/cli/src/tool-command-export.js +245 -0
  198. package/dist/cli/src/tool-connection-contracts.js +1 -0
  199. package/dist/cli/src/tool-connection-reads.js +23 -0
  200. package/dist/cli/src/tool-contributions.js +58 -0
  201. package/dist/cli/src/tool-data.js +116 -0
  202. package/dist/cli/src/tool-datasets.js +176 -0
  203. package/dist/cli/src/tool-group-contracts.js +1 -0
  204. package/dist/cli/src/tool-group-reads.js +26 -0
  205. package/dist/cli/src/tool-group-state.js +147 -0
  206. package/dist/cli/src/tool-groups.js +311 -0
  207. package/dist/cli/src/tool-instances.js +186 -0
  208. package/dist/cli/src/tool-lifecycle-contracts.js +1 -0
  209. package/dist/cli/src/tool-lifecycle-reads.js +30 -0
  210. package/dist/cli/src/tool-lifecycle.js +323 -0
  211. package/dist/cli/src/tool-package-contracts.js +1 -0
  212. package/dist/cli/src/tool-package-reads.js +41 -0
  213. package/dist/cli/src/tool-records.js +53 -0
  214. package/dist/cli/src/tool-runtime.js +96 -0
  215. package/dist/cli/src/tool-state-contracts.js +1 -0
  216. package/dist/cli/src/tool-state-reads.js +31 -0
  217. package/dist/cli/src/tools.js +306 -0
  218. package/dist/cli/src/trial-actions.js +93 -0
  219. package/dist/cli/src/trial-checkpoints.js +133 -0
  220. package/dist/cli/src/trial-checks.js +70 -0
  221. package/dist/cli/src/trial-state.js +197 -0
  222. package/dist/cli/src/vault.js +266 -0
  223. package/dist/cli/src/workspace-registration.js +383 -0
  224. package/dist/cli/src/workspace-team-contracts.js +1 -0
  225. package/dist/cli/src/world-access.js +231 -0
  226. package/dist/cli/src/world-agent.js +4 -0
  227. package/dist/cli/src/world-checkpoint-scopes.js +15 -0
  228. package/dist/cli/src/world-contracts.js +6 -0
  229. package/dist/cli/src/world-creation.js +201 -0
  230. package/dist/cli/src/world-datasets.js +207 -0
  231. package/dist/cli/src/world-inspection.js +257 -0
  232. package/dist/cli/src/world-recipes.js +103 -0
  233. package/dist/cli/src/world-requests.js +241 -0
  234. package/dist/cli/src/world-session-checkpoints.js +196 -0
  235. package/dist/cli/src/world-session-lifecycle.js +207 -0
  236. package/dist/cli/src/world-session-requests.js +215 -0
  237. package/dist/cli/src/world-session-state.js +145 -0
  238. package/dist/cli/src/world-session-voice.js +66 -0
  239. package/dist/cli/src/world-sessions.js +288 -0
  240. package/dist/cli/src/world-stream.js +99 -0
  241. package/dist/cli/src/world-time-report.js +58 -0
  242. package/dist/contracts/agent-change-contracts.js +75 -0
  243. package/dist/contracts/agent-execution-contracts.js +38 -0
  244. package/dist/contracts/application-state-contracts.js +26 -0
  245. package/dist/contracts/assessment-aggregate-contracts.js +15 -0
  246. package/dist/contracts/assessment-contracts.js +74 -0
  247. package/dist/contracts/billing-commerce-contracts.js +107 -0
  248. package/dist/contracts/billing-wallet-contracts.js +43 -0
  249. package/dist/contracts/campaign-lifecycle.js +1 -0
  250. package/dist/contracts/campaign-world-contracts.js +80 -0
  251. package/dist/contracts/catalog-contracts.js +73 -0
  252. package/dist/contracts/ci-access-contracts.js +68 -0
  253. package/dist/contracts/ci-configuration-contracts.js +88 -0
  254. package/dist/contracts/ci-coverage-contracts.js +65 -0
  255. package/dist/contracts/ci-coverage-labels.js +25 -0
  256. package/dist/contracts/ci-delivery-contracts.js +61 -0
  257. package/dist/contracts/ci-result-contracts.js +103 -0
  258. package/dist/contracts/ci-run-contracts.js +51 -0
  259. package/dist/contracts/ci-setup-contracts.js +88 -0
  260. package/dist/contracts/clip-contracts.js +32 -0
  261. package/dist/contracts/comparison-contracts.js +53 -0
  262. package/dist/contracts/composite-contracts.js +34 -0
  263. package/dist/contracts/context-contracts.js +76 -0
  264. package/dist/contracts/continuation-report-contracts.js +1 -0
  265. package/dist/contracts/continuity-requirements.js +8 -0
  266. package/dist/contracts/coordinated-checkpoint-contracts.js +34 -0
  267. package/dist/contracts/dataset-contracts.js +88 -0
  268. package/dist/contracts/dependency-decision-contracts.js +36 -0
  269. package/dist/contracts/dependency-protocol-contracts.js +43 -0
  270. package/dist/contracts/director-execution.js +51 -0
  271. package/dist/contracts/driver-review-contracts.js +99 -0
  272. package/dist/contracts/evidence-contracts.js +65 -0
  273. package/dist/contracts/evidence-coverage-contracts.js +10 -0
  274. package/dist/contracts/export-contracts.js +44 -0
  275. package/dist/contracts/github-directory-contracts.js +96 -0
  276. package/dist/contracts/insight-contracts.js +11 -0
  277. package/dist/contracts/inspection-contracts.js +1 -0
  278. package/dist/contracts/local-claim-contracts.js +39 -0
  279. package/dist/contracts/local-configuration-contracts.js +7 -0
  280. package/dist/contracts/local-evidence-contracts.js +32 -0
  281. package/dist/contracts/local-grant-contracts.js +83 -0
  282. package/dist/contracts/local-input-contracts.js +19 -0
  283. package/dist/contracts/local-runner-contracts.js +42 -0
  284. package/dist/contracts/local-trial-live-contracts.js +16 -0
  285. package/dist/contracts/local-value-source-contracts.js +92 -0
  286. package/dist/contracts/local-world-native-contracts.js +8 -0
  287. package/dist/contracts/mcp-contracts.js +42 -0
  288. package/dist/contracts/media-contracts.js +28 -0
  289. package/dist/contracts/native-check-contracts.js +31 -0
  290. package/dist/contracts/native-identity-contracts.js +52 -0
  291. package/dist/contracts/onboarding-contracts.js +32 -0
  292. package/dist/contracts/performance-contracts.js +85 -0
  293. package/dist/contracts/planning-contracts.js +81 -0
  294. package/dist/contracts/real-operation-contracts.js +30 -0
  295. package/dist/contracts/recommendation-contracts.js +54 -0
  296. package/dist/contracts/report-contracts.js +1 -0
  297. package/dist/contracts/resource-lifecycle-contracts.js +57 -0
  298. package/dist/contracts/revision-contracts.js +12 -0
  299. package/dist/contracts/revision-request-contracts.js +39 -0
  300. package/dist/contracts/saved-record-contracts.js +76 -0
  301. package/dist/contracts/scenario-draft-comparison.js +91 -0
  302. package/dist/contracts/scenario-world-contracts.js +14 -0
  303. package/dist/contracts/service-contracts.js +1 -0
  304. package/dist/contracts/session-command-contracts.js +56 -0
  305. package/dist/contracts/session-contracts.js +65 -0
  306. package/dist/contracts/session-state-contracts.js +67 -0
  307. package/dist/contracts/session-voice-contracts.js +45 -0
  308. package/dist/contracts/source-set-contracts.js +26 -0
  309. package/dist/contracts/source-upload-contracts.js +22 -0
  310. package/dist/contracts/tool-command-contracts.js +57 -0
  311. package/dist/contracts/tool-connection-contracts.js +87 -0
  312. package/dist/contracts/tool-contribution-contracts.js +35 -0
  313. package/dist/contracts/tool-group-contracts.js +53 -0
  314. package/dist/contracts/tool-group-state-contracts.js +63 -0
  315. package/dist/contracts/tool-lifecycle-contracts.js +94 -0
  316. package/dist/contracts/tool-package-contracts.js +91 -0
  317. package/dist/contracts/tool-protocol-contracts.js +71 -0
  318. package/dist/contracts/tool-runtime-billing-contracts.js +28 -0
  319. package/dist/contracts/tool-setup-proposal.js +59 -0
  320. package/dist/contracts/tool-state-contracts.js +79 -0
  321. package/dist/contracts/trial-state-contracts.js +30 -0
  322. package/dist/contracts/typescript/agent-change.js +1 -0
  323. package/dist/contracts/typescript/assessment-aggregate.js +1 -0
  324. package/dist/contracts/typescript/assessment.js +1 -0
  325. package/dist/contracts/typescript/billing-commerce.js +1 -0
  326. package/dist/contracts/typescript/campaigns.js +1 -0
  327. package/dist/contracts/typescript/catalog.js +1 -0
  328. package/dist/contracts/typescript/ci-access.js +1 -0
  329. package/dist/contracts/typescript/ci-configuration.js +1 -0
  330. package/dist/contracts/typescript/ci-delivery.js +1 -0
  331. package/dist/contracts/typescript/ci-result.js +1 -0
  332. package/dist/contracts/typescript/ci-runs.js +1 -0
  333. package/dist/contracts/typescript/clips.js +1 -0
  334. package/dist/contracts/typescript/comparison.js +1 -0
  335. package/dist/contracts/typescript/composite.js +1 -0
  336. package/dist/contracts/typescript/connections.js +1 -0
  337. package/dist/contracts/typescript/context.js +1 -0
  338. package/dist/contracts/typescript/datasets.js +1 -0
  339. package/dist/contracts/typescript/evidence-coverage.js +1 -0
  340. package/dist/contracts/typescript/export.js +1 -0
  341. package/dist/contracts/typescript/github-directory.js +1 -0
  342. package/dist/contracts/typescript/insight.js +1 -0
  343. package/dist/contracts/typescript/inspection.js +1 -0
  344. package/dist/contracts/typescript/intake.js +1 -0
  345. package/dist/contracts/typescript/local-claim.js +1 -0
  346. package/dist/contracts/typescript/local-configuration.js +1 -0
  347. package/dist/contracts/typescript/local-evidence.js +1 -0
  348. package/dist/contracts/typescript/local-grant.js +1 -0
  349. package/dist/contracts/typescript/local-input.js +1 -0
  350. package/dist/contracts/typescript/local-runner.js +1 -0
  351. package/dist/contracts/typescript/local-trial-live.js +1 -0
  352. package/dist/contracts/typescript/local-value-source.js +1 -0
  353. package/dist/contracts/typescript/local-world-native.js +1 -0
  354. package/dist/contracts/typescript/mcp.js +1 -0
  355. package/dist/contracts/typescript/media.js +1 -0
  356. package/dist/contracts/typescript/native-check.js +1 -0
  357. package/dist/contracts/typescript/native-identity.js +1 -0
  358. package/dist/contracts/typescript/onboarding.js +1 -0
  359. package/dist/contracts/typescript/performance.js +1 -0
  360. package/dist/contracts/typescript/planning.js +1 -0
  361. package/dist/contracts/typescript/preparation.js +1 -0
  362. package/dist/contracts/typescript/real-operation.js +1 -0
  363. package/dist/contracts/typescript/recommendation.js +1 -0
  364. package/dist/contracts/typescript/reports.js +1 -0
  365. package/dist/contracts/typescript/resource-lifecycle.js +1 -0
  366. package/dist/contracts/typescript/saved-record.js +1 -0
  367. package/dist/contracts/typescript/scenarios.js +1 -0
  368. package/dist/contracts/typescript/services.js +1 -0
  369. package/dist/contracts/typescript/session-command.js +1 -0
  370. package/dist/contracts/typescript/session-state.js +1 -0
  371. package/dist/contracts/typescript/session-voice.js +1 -0
  372. package/dist/contracts/typescript/session.js +1 -0
  373. package/dist/contracts/typescript/tool-command.js +1 -0
  374. package/dist/contracts/typescript/tool-connection.js +1 -0
  375. package/dist/contracts/typescript/tool-contribution.js +1 -0
  376. package/dist/contracts/typescript/tool-groups.js +1 -0
  377. package/dist/contracts/typescript/tool-lifecycle.js +1 -0
  378. package/dist/contracts/typescript/tool-package.js +1 -0
  379. package/dist/contracts/typescript/tool-state.js +1 -0
  380. package/dist/contracts/typescript/trial-state.js +1 -0
  381. package/dist/contracts/typescript/vault.js +1 -0
  382. package/dist/contracts/typescript/workspace-team.js +1 -0
  383. package/dist/contracts/typescript/world-stream.js +1 -0
  384. package/dist/contracts/workspace-team-contracts.js +55 -0
  385. package/dist/contracts/world-command.js +65 -0
  386. package/dist/contracts/world-lifetime-contracts.js +74 -0
  387. package/dist/contracts/world-recipe-contracts.js +27 -0
  388. package/dist/contracts/world-stream-contracts.js +27 -0
  389. package/dist/package.json +1 -0
  390. package/package.json +16 -16
  391. package/LICENSE.md +0 -23
  392. package/PACKAGING.json +0 -50
@@ -0,0 +1,52 @@
1
+ import { api, openBrowser } from './auth.js';
2
+ import { workspaceLink } from './browser-links.js';
3
+ import { CliError } from './http.js';
4
+ import { selectOne, terminalText } from './prompts.js';
5
+ import { identifier } from './world-contracts.js';
6
+ import { ciSetupProposalMatches, ciSetupRequestDigest } from '../../contracts/ci-setup-contracts.js';
7
+ const requirement = (value) => ({
8
+ managed_plan_required: 'Save a managed simulation plan.',
9
+ github_source_required: 'Connect a GitHub source repository.',
10
+ github_connection_required: 'Review GitHub installation access.',
11
+ repository_directory_required: 'Refresh the available GitHub repositories.',
12
+ repository_access_required: 'Allow access to the selected repository.',
13
+ preparation_budget_review_required: 'Set the maximum preparation credits.',
14
+ simulation_budget_review_required: 'Review the simulation credit budget.',
15
+ input_access_review_required: 'Review runtime inputs and execution access.',
16
+ separate_activation_required: 'Enable automatic runs after review.',
17
+ pr_plan_too_long: 'Choose a shorter plan for pull requests.',
18
+ }[value] ?? value.replaceAll('_', ' '));
19
+ export async function ciSetupProposal(context, id, signal) {
20
+ const key = identifier(id);
21
+ const value = await api(`${context.prefix}/ci-setup-proposals/${key}`, { actor: context.owner, workspace: context.workspace, signal });
22
+ if (!ciSetupProposalMatches(value, context.world, key, context.owner)
23
+ || await ciSetupRequestDigest(value.request) !== value.request_sha256) {
24
+ throw new CliError('ci_setup_proposal_unconfirmed', 'This original CI setup draft could not be confirmed for the account and world. No configuration was saved or activated.');
25
+ }
26
+ return value;
27
+ }
28
+ export async function reviewCISetupProposal(context, id, options, output) {
29
+ const value = await ciSetupProposal(context, id, options.signal);
30
+ const url = workspaceLink(context.workspace, value.handoff_path);
31
+ const available = value.available && value.current && value.can_review;
32
+ const needsGitHub = value.missing_requirements.some(item => ['github_connection_required', 'repository_directory_required', 'repository_access_required'].includes(item));
33
+ const recovery = needsGitHub && value.available ? workspaceLink(context.workspace, '/ci/new', { world: context.world, return_ci_setup: value.id }) : null;
34
+ output('ci_setup_proposal', { ...value, url, recovery_url: recovery }, [value.request.title, value.request.repository,
35
+ `Baseline: ${value.request.scenario_count.toLocaleString()} scenarios, ${value.request.repetitions.toLocaleString()} repetitions, ${value.request.planned_trials.toLocaleString()} drills.`,
36
+ value.request.scenario_policy.mode === 'change_relevant' ? `Change-relevant PR selection, with ${value.request.scenario_policy.mandatory_scenario_ids.length.toLocaleString()} additional mandatory cases.` : 'All planned scenarios selected.',
37
+ `Triggers: ${value.request.triggers.map(item => item === 'pull_request' ? 'Pull requests' : item === 'default_branch' ? 'Default branch updates' : 'Nightly').join(', ')}.`,
38
+ value.request.mode === 'hard_constraints' ? 'Required exact checks. Quality scores stay separate.' : 'Report only. No quality threshold.',
39
+ ...value.missing_requirements.map(requirement),
40
+ !value.available ? 'This draft is no longer available.' : !value.current ? 'The source, world or repository access changed. This draft is out of date.'
41
+ : !value.can_review ? needsGitHub ? 'Review GitHub access before using this draft.' : 'CI setup review is not available to this account.' : 'Review GitHub, budgets and execution access before enabling automatic runs.',
42
+ 'No configuration, credentials, charge or automatic-run consent was created by this draft.',
43
+ available ? url : workspaceLink(context.workspace, `/worlds/${context.world}`),
44
+ ...(recovery ? [`Review GitHub access: ${recovery}`] : []),
45
+ ].map(terminalText).join('\n'));
46
+ if (!available || options.json || !process.stdin.isTTY || !process.stderr.isTTY)
47
+ return;
48
+ const open = await selectOne('Review CI setup?', [{ value: false, label: 'Not now', detail: `Keep the saved draft. Use /ci ${value.id} in this world's conversation.` },
49
+ { value: true, label: 'Review in the browser', detail: 'Normal Save, runtime input approval and automatic-run activation remain separate.' }], options.signal);
50
+ if (open && (!options.openBrowser || !await openBrowser(url)))
51
+ output('ci_setup_review', { url, opened: false }, url);
52
+ }
@@ -0,0 +1,229 @@
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import { constants } from 'node:fs';
3
+ import { lstat, open } from 'node:fs/promises';
4
+ import { basename, resolve } from 'node:path';
5
+ import { api } from './auth.js';
6
+ import { CliError } from './http.js';
7
+ import { selectMany, selectOne } from './prompts.js';
8
+ import { identifier } from './world-contracts.js';
9
+ import { selectedWorkspace } from './world-access.js';
10
+ import { samePolicyVersion, policyActionConfirmed, policyUploadDestination } from '../../contracts/context-contracts.js';
11
+ export async function selectPolicies(scope, agent, signal) {
12
+ if (!await selectOne('Include company policies in this criterion?', [{ value: false, label: 'No policies' },
13
+ { value: true, label: 'Choose policy versions and passages' }], signal))
14
+ return [];
15
+ const prefix = `/api/workspaces/${identifier(scope.workspace)}/agents/${identifier(agent)}/policies`;
16
+ const auth = { actor: scope.owner, workspace: scope.workspace, signal };
17
+ const selected = new Map();
18
+ let number = 1;
19
+ while (true) {
20
+ const page = await api(`${prefix}?status=available&page=${number}`, auth);
21
+ if (!page.count)
22
+ throw new CliError('policy_selection_empty', 'No extracted policies are available. Upload one with firedrill policies, or continue without policy context.', 2);
23
+ const ids = await selectMany('Company policies', page.results.map(row => ({ value: row.id, label: `${row.name} · Version ${row.version}` })), signal, [...selected.keys()]);
24
+ for (const row of page.results) {
25
+ if (ids.includes(row.id))
26
+ selected.set(row.id, row);
27
+ else
28
+ selected.delete(row.id);
29
+ }
30
+ const action = await selectOne('Policy selection', [{ value: 'done', label: `Continue with ${selected.size} selected versions` },
31
+ ...(page.next ? [{ value: 'next', label: 'Next page' }] : []), ...(number > 1 ? [{ value: 'previous', label: 'Previous page' }] : [])], signal);
32
+ if (action === 'done')
33
+ break;
34
+ number += action === 'next' ? 1 : -1;
35
+ }
36
+ const refs = [];
37
+ for (const row of selected.values()) {
38
+ const paragraphs = new Set();
39
+ number = 1;
40
+ while (true) {
41
+ const page = await api(`${prefix}/${identifier(row.id)}/paragraphs?page=${number}`, auth);
42
+ if (!samePolicyVersion(page.policy, row) || !page.policy.available || page.policy.sha256 !== row.sha256
43
+ || page.policy.text_sha256 !== row.text_sha256)
44
+ throw new CliError('policy_selection_changed', 'This policy version is no longer available. Reopen policy selection.', 2);
45
+ const ids = await selectMany(`${row.name}: select applicable passages`, page.results.map(one => ({ value: one.id,
46
+ label: `${one.id}${one.page ? ` · Page ${one.page}` : ''}`, detail: one.text })), signal, [...paragraphs]);
47
+ for (const one of page.results) {
48
+ if (ids.includes(one.id))
49
+ paragraphs.add(one.id);
50
+ else
51
+ paragraphs.delete(one.id);
52
+ }
53
+ const action = await selectOne('Passages', [{ value: 'done', label: `Continue with ${paragraphs.size} selected passages` },
54
+ ...(page.next ? [{ value: 'next', label: 'Next page' }] : []), ...(number > 1 ? [{ value: 'previous', label: 'Previous page' }] : [])], signal);
55
+ if (action === 'done')
56
+ break;
57
+ number += action === 'next' ? 1 : -1;
58
+ }
59
+ if (!paragraphs.size || !row.available || !row.text_sha256)
60
+ throw new CliError('policy_passages_required', 'Choose at least one applicable passage for each policy version. No criterion was saved.', 2);
61
+ refs.push({ revision_id: identifier(row.id), sha256: row.sha256, text_sha256: row.text_sha256,
62
+ paragraphs: [...paragraphs].sort((a, b) => Number(a.slice(1)) - Number(b.slice(1))) });
63
+ }
64
+ return refs;
65
+ }
66
+ async function fileBytes(path, maximum) {
67
+ const absolute = resolve(path);
68
+ const previous = await lstat(absolute);
69
+ if (!previous.isFile() || previous.isSymbolicLink() || previous.size < 1 || previous.size > maximum) {
70
+ throw new CliError('policy_file_invalid', 'Choose a regular policy document within the configured upload capacity.');
71
+ }
72
+ const handle = await open(absolute, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
73
+ try {
74
+ const before = await handle.stat();
75
+ if (before.dev !== previous.dev || before.ino !== previous.ino || before.size !== previous.size || before.mtimeMs !== previous.mtimeMs)
76
+ throw new Error();
77
+ const data = Buffer.alloc(before.size);
78
+ let used = 0;
79
+ while (used < data.length) {
80
+ const read = await handle.read(data, used, data.length - used, used);
81
+ if (!read.bytesRead)
82
+ throw new Error();
83
+ used += read.bytesRead;
84
+ }
85
+ const after = await handle.stat();
86
+ if (after.size !== before.size || after.mtimeMs !== before.mtimeMs || after.ctimeMs !== before.ctimeMs)
87
+ throw new Error();
88
+ return data;
89
+ }
90
+ catch {
91
+ throw new CliError('policy_file_changed', 'The selected policy file changed while reading it. No document was uploaded.');
92
+ }
93
+ finally {
94
+ await handle.close();
95
+ }
96
+ }
97
+ export async function policyCommand(args, options, output) {
98
+ const interactive = !options.json && Boolean(process.stdin.isTTY && process.stderr.isTTY);
99
+ const scope = await selectedWorkspace({ ...options, interactive });
100
+ const auth = { actor: scope.owner, workspace: scope.workspace, signal: options.signal };
101
+ let agent = options.agent ? identifier(options.agent) : undefined;
102
+ if (!agent && interactive) {
103
+ let page = 1;
104
+ while (!agent) {
105
+ const data = await api(`/api/workspaces/${scope.workspace}/agents?page=${page}`, auth);
106
+ const choices = data.results.map(row => ({ value: row.id, label: row.name }));
107
+ if (page > 1)
108
+ choices.push({ value: 'previous', label: 'Previous page' });
109
+ if (data.next)
110
+ choices.push({ value: 'next', label: 'Next page' });
111
+ if (!choices.length)
112
+ throw new CliError('agent_required', 'Connect an agent before adding company policies.');
113
+ const selected = await selectOne('Agent', choices, options.signal);
114
+ if (selected === 'next')
115
+ page += 1;
116
+ else if (selected === 'previous')
117
+ page -= 1;
118
+ else
119
+ agent = identifier(selected);
120
+ }
121
+ }
122
+ if (!agent)
123
+ throw new CliError('agent_required', 'Use --agent <id> or run firedrill policies interactively.', 2);
124
+ const prefix = `/api/workspaces/${scope.workspace}/agents/${agent}/policies`;
125
+ let action = args[0];
126
+ if (!action && interactive)
127
+ action = await selectOne('Company policies', [{ value: 'list', label: 'View policies' },
128
+ { value: 'upload', label: 'Upload a policy', detail: 'Use --file <path> and --name <name>. Text, Markdown, PDF and DOCX are supported.' }], options.signal);
129
+ action ??= 'list';
130
+ if (!['list', 'show', 'paragraphs', 'upload', 'archive', 'restore', 'revoke', 'remove'].includes(action) || args.length > 2) {
131
+ throw new CliError('arguments_invalid', 'Use policies list, show|paragraphs <revision>, upload, or archive|restore|revoke|remove <revision>.', 2);
132
+ }
133
+ if (['list', 'upload'].includes(action) && args.length > 1 || !['list', 'paragraphs'].includes(action) && (options.page !== undefined || options.search !== undefined)
134
+ || action !== 'upload' && (options.file !== undefined || options.name !== undefined || options.request !== undefined)
135
+ || !['list', 'upload'].includes(action) && options.policy !== undefined
136
+ || action !== 'upload' && options.basis !== undefined
137
+ || ['list', 'show', 'paragraphs'].includes(action) && options.consent !== undefined) {
138
+ throw new CliError('arguments_invalid', 'Choose only the arguments for this policy action. Upload options do not apply to inspection commands.', 2);
139
+ }
140
+ const page = options.page ?? '1';
141
+ if (!/^[1-9][0-9]{0,8}$/.test(page) || (options.search?.length ?? 0) > 200)
142
+ throw new CliError('arguments_invalid', 'Use valid policy paging and search.', 2);
143
+ if (action === 'list' || action === 'paragraphs') {
144
+ const revision = action === 'paragraphs' ? identifier(args[1] ?? '') : null;
145
+ const suffix = revision ? `/${revision}/paragraphs` : '';
146
+ const data = await api(`${prefix}${suffix}?page=${page}&q=${encodeURIComponent(options.search ?? '')}${options.policy && !revision ? `&policy_id=${identifier(options.policy)}` : ''}`, auth);
147
+ output('result', data, [data.results.map(row => 'text' in row ? `${row.id}${row.page ? ` · Page ${row.page}` : ''}\n${row.text}`
148
+ : `${row.name} · Version ${row.version} · ${row.state}\n${row.id}`).join('\n\n') || 'No matching policy records.',
149
+ ...(data.next ? [`Next page: --page ${Number(page) + 1}`] : [])].join('\n'));
150
+ return;
151
+ }
152
+ if (action === 'show') {
153
+ const data = await api(`${prefix}/${identifier(args[1] ?? '')}`, auth);
154
+ output('result', data, `${data.name} · Version ${data.version}\n${data.filename}\n${data.state}${data.archived ? ' · Archived' : ''}\n${data.id}${data.failure ? `\n${data.failure}` : ''}`);
155
+ return;
156
+ }
157
+ if (action !== 'upload') {
158
+ const revision = identifier(args[1] ?? '');
159
+ const row = await api(`${prefix}/${revision}`, auth);
160
+ const accepted = options.consent || interactive && await selectOne(action === 'remove' || action === 'revoke'
161
+ ? 'Revoke policy access and remove affected saved grading copies?' : `${action === 'archive' ? 'Archive' : 'Restore'} this policy?`, [{ value: false, label: 'Cancel' }, { value: true, label: 'Continue' }], options.signal);
162
+ if (!accepted)
163
+ throw new CliError('policy_consent_required', 'No policy was changed. Use --approve-policy for an explicit automated action.', 2);
164
+ const operation = action === 'archive' ? 'archive' : action === 'restore' ? 'restore' : action === 'revoke' ? 'revoke_version' : 'remove';
165
+ const body = { action: operation, basis_version: row.latest_version };
166
+ const result = await api(`${prefix}/${revision}`, { ...auth, method: 'POST', body });
167
+ if (!policyActionConfirmed(result, row, operation))
168
+ throw new CliError('policy_change_unconfirmed', 'The policy change could not be confirmed. Inspect the saved version before continuing.', 2);
169
+ output('result', result, `Policy updated: ${result.name} · Version ${result.version} · ${result.state}`);
170
+ return;
171
+ }
172
+ if (!options.file || !options.name?.trim())
173
+ throw new CliError('policy_file_required', 'Use policies upload --file <path> --name <name>. No file has been read or uploaded.', 2);
174
+ const filename = basename(options.file);
175
+ const formats = { txt: 'text', md: 'markdown', pdf: 'pdf', docx: 'docx' };
176
+ const format = formats[filename.split('.').at(-1).toLowerCase()];
177
+ if (!format)
178
+ throw new CliError('policy_file_invalid', 'Choose a text, Markdown, PDF or DOCX file.', 2);
179
+ const accepted = options.consent || interactive && await selectOne('Upload this private policy document? Do not include credentials.', [{ value: false, label: 'Keep it local' }, { value: true, label: 'Upload policy', detail: `${filename}. Policy text is evaluator-only unless separately selected as agent context.` }], options.signal);
180
+ if (!accepted)
181
+ throw new CliError('policy_consent_required', 'No document was uploaded. Use --approve-policy for explicit automated transfer consent.', 2);
182
+ const policy = options.policy ? identifier(options.policy) : null;
183
+ if (policy && !options.basis || options.basis && !/^(?:0|[1-9][0-9]{0,8})$/.test(options.basis)) {
184
+ throw new CliError('policy_basis_required', 'For a new version, use --policy-id and its exact --basis-version from policies show.', 2);
185
+ }
186
+ const capacity = await api(prefix, auth);
187
+ if (!capacity.limits?.upload_bytes || !Number.isSafeInteger(capacity.limits.upload_bytes))
188
+ throw new CliError('policy_capacity_unavailable', 'Policy upload capacity is unavailable. No file was uploaded.');
189
+ const data = await fileBytes(options.file, capacity.limits.upload_bytes);
190
+ const key = options.request ? identifier(options.request) : randomUUID();
191
+ output('policy_upload_intent', { request_key: key, agent_id: agent, sha256: createHash('sha256').update(data).digest('hex') }, `Policy upload request: ${key}\nKeep this request key. If interrupted, repeat the same command and file with --request-key ${key}.`);
192
+ const body = { policy_id: policy, basis_version: Number(options.basis ?? '0'),
193
+ name: options.name.trim(), filename, format, input_kind: 'upload', size: data.length,
194
+ sha256: createHash('sha256').update(data).digest('hex'), content_upload_consent: true };
195
+ const row = await api(prefix, { ...auth, method: 'POST', idempotencyKey: key, body });
196
+ if (row.agent_id !== agent || policy && row.policy_id !== policy || row.sha256 !== body.sha256
197
+ || row.filename !== body.filename || row.format !== body.format || row.name !== body.name
198
+ || row.version !== body.basis_version + 1)
199
+ throw new CliError('policy_upload_unconfirmed', 'The original policy upload could not be confirmed. Recover the same request before continuing.', 2);
200
+ if (row.state === 'uploading') {
201
+ let target;
202
+ try {
203
+ target = policyUploadDestination(row, scope.workspace, format);
204
+ }
205
+ catch {
206
+ throw new CliError('policy_upload_refused', 'The upload destination could not be confirmed. No document was sent.');
207
+ }
208
+ let uploaded;
209
+ try {
210
+ uploaded = await fetch(target, { method: 'PUT', headers: row.headers, body: data, credentials: 'omit', redirect: 'error',
211
+ signal: AbortSignal.any([options.signal, AbortSignal.timeout(120000)]) });
212
+ }
213
+ catch {
214
+ throw new CliError('policy_upload_uncertain', `Upload response unconfirmed. Repeat only the original command with --request-key ${key}; keep the same file and fields.`);
215
+ }
216
+ await uploaded.body?.cancel();
217
+ if (!uploaded.ok && uploaded.status !== 412)
218
+ throw new CliError('policy_upload_uncertain', `Upload not confirmed. Inspect the same request ${key} before retrying.`);
219
+ const complete = await api(`${prefix}/${row.id}/complete`, { ...auth, method: 'POST', body: {} });
220
+ if (!samePolicyVersion(complete, row) || !['queued', 'ready'].includes(complete.state))
221
+ throw new CliError('policy_processing_unconfirmed', 'Check the original policy version before continuing. Processing is not confirmed.', 2);
222
+ output('result', complete, `${complete.name} · Version ${complete.version} · ${complete.state}\nText extraction happens in the background. This did not run or evaluate the agent.`);
223
+ }
224
+ else {
225
+ if (!['queued', 'ready'].includes(row.state))
226
+ throw new CliError('policy_upload_closed', row.failure ?? 'This upload is closed. Inspect the retained version before starting another.', 2);
227
+ output('result', row, `${row.name} · Version ${row.version} · ${row.state}`);
228
+ }
229
+ }
@@ -0,0 +1,79 @@
1
+ import { CliError } from './http.js';
2
+ export const commandNames = ['init', 'status', 'register', 'descriptors', 'library', 'world', 'plan', 'apply', 'run', 'watch', 'report', 'tools', 'mcp', 'help',
3
+ 'login', 'signup', 'logout', 'docs', 'support', 'onboarding', 'workspace', 'settings', 'team', 'vault', 'values', 'billing', 'ci', 'source', 'connect',
4
+ 'runner', 'simulation', 'driver', 'criteria', 'assess', 'priority', 'changes', 'policies', 'context', 'recipes', 'sources',
5
+ 'datasets', 'sessions', 'configuration', 'connections', 'models', 'real-operations', 'recordings', 'inspect', 'completion',
6
+ 'agents', 'worlds', 'scenarios', 'personas', 'evaluations', 'simulations'];
7
+ const subcommands = {
8
+ help: 'advanced',
9
+ library: 'list show history save archive restore fork request withdraw-request',
10
+ world: 'save history show request withdraw-request', register: 'request withdraw-request', descriptors: 'request withdraw-request',
11
+ plan: 'show',
12
+ driver: 'review',
13
+ context: 'list import show records request resume complete accept discover remove withdraw',
14
+ recipes: 'list save request show use archive',
15
+ report: 'drill assignments findings scores diagnoses assessments assessment-status checks performance model-usage composite compare export',
16
+ sources: 'list options use status withdraw',
17
+ connections: 'prepare preparations preparation preparation-decision choose-preparation continue-preparation cancel-preparation compatibility',
18
+ onboarding: 'show open',
19
+ source: 'inspect snapshot runtime',
20
+ runner: 'enroll list status connect revoke authorize grants grant jobs claim runtime abandon cleanup run-cleanup evidence completion',
21
+ vault: 'list show save rotate expiry remove request resume open',
22
+ values: 'list show save recover remove forget',
23
+ recordings: 'list show records request open upload',
24
+ billing: 'summary options credits credit-help usage credit-ledger credit-allocations credit-work credit-purchases credit-purchase recharge credit-settings purchases purchase open refresh-purchase invoices invoice lines refresh-invoice subscribe change topup portal redeem',
25
+ inspect: 'workflows rules events collections show entries schema',
26
+ settings: 'show update open', team: 'list show invite invitations request resume withdraw revoke role remove open',
27
+ agents: 'new archive restore remove requests request resume withdraw', worlds: 'new creation continue-creation withdraw-creation archive restore remove requests request resume withdraw',
28
+ scenarios: 'create edit duplicate archive restore definition history paths requests request withdraw-request discover discoveries discovery cancel-discovery drafts draft edit-draft accept-draft coverage world-events revise-execution',
29
+ datasets: 'list show document export request save withdraw start-status',
30
+ sessions: 'list show close request withdraw timelines timeline-events schedule timeline-control timeline-request timeline-apply timeline-withdraw extension-quote extend extensions extension-status application-checkpoints application-checkpoint save-application-state coordinated-checkpoints coordinated-checkpoint save-world-and-agent',
31
+ simulation: 'resume pause resume-scheduling cancel control-request continue-control withdraw-control requests request',
32
+ tools: 'runnable sessions session access state init validate push catalog catalog-categories catalog-show catalog-operations catalog-operation add save catalog-setups catalog-status catalog-withdraw contribute contributions contribution contribution-withdraw setups setup setup-members setup-status start-many stop-setup quote extension-quote extend extensions extension-status group-state group-state-members group-state-status group-state-quote capture-group reset-group fork-group start start-status stop remove removal remove-status connect connections connection-request disconnect open checkpoint reset restore fork resume transitions transition checkpoint-status instances removed instance call activity result download checkpoints data datasets dataset dataset-document dataset-export dataset-request dataset-save dataset-withdraw versions list requests show services operations operation import upload status complete withdraw revoke',
33
+ workspace: 'list use refresh organizations create requests request withdraw', ci: 'list show scenarios access approvals revisions automatic-history runs run result criteria scores delivery delivery-history inputs open',
34
+ };
35
+ /** Prints installation input only. Never edits or sources a shell profile. */
36
+ export function completionScript(shell) {
37
+ if (shell === 'bash')
38
+ return `_firedrill_complete() {
39
+ COMPREPLY=()
40
+ local current="\${COMP_WORDS[COMP_CWORD]}" choices='${commandNames.join(' ')}'
41
+ if [[ $COMP_CWORD -eq 2 ]]; then
42
+ case "\${COMP_WORDS[1]}" in
43
+ ${Object.entries(subcommands).map(([key, values]) => ` ${key}) choices='${values}' ;;`).join('\n')}
44
+ completion) choices='bash zsh fish' ;;
45
+ *) return ;;
46
+ esac
47
+ elif [[ $COMP_CWORD -ne 1 ]]; then
48
+ return
49
+ fi
50
+ COMPREPLY=( $(compgen -W "$choices" -- "$current") )
51
+ }
52
+ complete -o default -F _firedrill_complete firedrill
53
+ `;
54
+ if (shell === 'zsh')
55
+ return `#compdef firedrill
56
+ _firedrill_complete() {
57
+ local -a choices
58
+ if (( CURRENT == 2 )); then
59
+ choices=(${commandNames.join(' ')})
60
+ elif (( CURRENT == 3 )); then
61
+ case "$words[2]" in
62
+ ${Object.entries(subcommands).map(([key, values]) => ` ${key}) choices=(${values}) ;;`).join('\n')}
63
+ completion) choices=(bash zsh fish) ;;
64
+ *) _files; return ;;
65
+ esac
66
+ else
67
+ _files; return
68
+ fi
69
+ _describe 'Firedrill command' choices
70
+ }
71
+ compdef _firedrill_complete firedrill
72
+ `;
73
+ if (shell === 'fish')
74
+ return `complete -c firedrill -f -n '__fish_use_subcommand' -a '${commandNames.join(' ')}'
75
+ ${Object.entries(subcommands).map(([key, values]) => `complete -c firedrill -f -n '__fish_seen_subcommand_from ${key}; and test (count (commandline -opc)) -eq 2' -a '${values}'`).join('\n')}
76
+ complete -c firedrill -f -n '__fish_seen_subcommand_from completion; and test (count (commandline -opc)) -eq 2' -a 'bash zsh fish'
77
+ `;
78
+ throw new CliError('shell_required', 'Use firedrill completion bash, zsh or fish. The script is printed only; install it in your own shell configuration.', 2);
79
+ }