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,122 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { createInterface } from 'node:readline/promises';
3
+ import { api } from './auth.js';
4
+ import { CliError } from './http.js';
5
+ import { selectOne } from './prompts.js';
6
+ import { selectedWorkspace } from './world-access.js';
7
+ import { identifier } from './world-contracts.js';
8
+ const direct = { pause: 'pause', 'resume-scheduling': 'resume', cancel: 'cancel' };
9
+ const commands = new Set(['pause', 'resume', 'cancel']);
10
+ const readActions = new Set(['control-request', 'continue-control', 'withdraw-control']);
11
+ const terminal = new Set(['completed', 'failed', 'canceled']);
12
+ const description = {
13
+ pause: 'Pause new drill dispatches. Active drills can continue; their clocks and external actions are not paused.',
14
+ resume: 'Resume scheduling only within the original plan, permissions and deadline. Unknown drills are not replayed.',
15
+ cancel: 'Request cancellation of this simulation and its remaining work. Active cleanup may take time; external effects are not rolled back.',
16
+ };
17
+ function checked(value, command) {
18
+ if (!value || value.command !== command || !['not_received', 'pending', 'accepted', 'withdrawn'].includes(value.state)
19
+ || value.last_error !== null && (!value.last_error || typeof value.last_error.code !== 'string' || typeof value.last_error.message !== 'string'))
20
+ throw new CliError('campaign_control_unconfirmed', 'The original scheduling receipt could not be confirmed. No request was repeated.');
21
+ return value;
22
+ }
23
+ async function chooseCampaign(scope, command, options) {
24
+ let page = 1, query = '';
25
+ while (true) {
26
+ const params = new URLSearchParams({ status: command === 'resume' ? 'resumable' : 'active', page: String(page), q: query });
27
+ if (options.world)
28
+ params.set('world', identifier(options.world));
29
+ const result = await api(`/api/workspaces/${scope.workspace}/simulations?${params}`, { actor: scope.owner, workspace: scope.workspace, signal: options.signal });
30
+ const choices = result.results.filter(row => row.status !== 'canceling' && (command !== 'pause' || row.status !== 'paused'))
31
+ .map(row => ({ value: row.id, label: row.name, detail: row.status }));
32
+ if (page > 1)
33
+ choices.unshift({ value: 'previous', label: 'Previous page', detail: '' });
34
+ if (result.next)
35
+ choices.push({ value: 'next', label: 'Next page', detail: '' });
36
+ choices.push({ value: 'search', label: 'Search simulations', detail: query }, { value: 'cancel', label: 'Cancel', detail: '' });
37
+ const value = await selectOne('Simulation', choices, options.signal);
38
+ if (value === 'next') {
39
+ page++;
40
+ continue;
41
+ }
42
+ if (value === 'previous') {
43
+ page--;
44
+ continue;
45
+ }
46
+ if (value === 'cancel')
47
+ throw new CliError('canceled', 'No scheduling action was submitted.', 130);
48
+ if (value === 'search') {
49
+ const prompt = createInterface({ input: process.stdin, output: process.stderr, terminal: false });
50
+ try {
51
+ query = (await prompt.question('Find a simulation (blank for all): ', { signal: options.signal })).trim();
52
+ }
53
+ finally {
54
+ prompt.close();
55
+ }
56
+ if (query.length > 200 || /[\u0000-\u001f\u007f-\u009f]/u.test(query))
57
+ throw new CliError('campaign_search_invalid', 'Use search text of up to 200 characters.', 2);
58
+ page = 1;
59
+ continue;
60
+ }
61
+ return identifier(value);
62
+ }
63
+ }
64
+ export async function campaignControl(args, options, output) {
65
+ const action = args[0], recover = readActions.has(action), command = recover ? args[2] : direct[action];
66
+ if ((!recover && !Object.hasOwn(direct, action)) || !commands.has(command) || args.length > (recover ? 4 : 2)
67
+ || recover && args.length !== 4 || action === 'control-request' && options.approve)
68
+ throw new CliError('arguments_invalid', 'Use simulation pause|resume-scheduling|cancel [id], or control-request|continue-control|withdraw-control <id> <pause|resume|cancel> <original-key>.', 2);
69
+ const tty = !options.json && !!process.stdin.isTTY && !!process.stderr.isTTY;
70
+ if (!args[1] && !tty)
71
+ throw new CliError('campaign_required', 'Provide the simulation campaign ID from saved history or its report.', 2);
72
+ if (!tty && action !== 'control-request' && !options.approve)
73
+ throw new CliError('approval_required', 'Use --approve-change for this exact reviewed scheduling request.', 2);
74
+ const scope = await selectedWorkspace({ ...options, interactive: tty });
75
+ const id = args[1] ? identifier(args[1]) : await chooseCampaign(scope, command, options);
76
+ const prefix = `/api/workspaces/${scope.workspace}/campaigns/${id}`;
77
+ const auth = { actor: scope.owner, workspace: scope.workspace, signal: options.signal };
78
+ const current = await api(prefix, auth);
79
+ if (!current || current.id !== id || options.world && current.world_id !== identifier(options.world))
80
+ throw new CliError('campaign_scope_changed', 'The simulation does not match the selected workspace/world. Nothing was changed.', 2);
81
+ const key = recover ? identifier(args[3]) : randomUUID();
82
+ const lookup = async () => checked(await api(`${prefix}/command-requests?${new URLSearchParams({ command, request_key: key })}`, auth), command);
83
+ const show = (receipt) => output('campaign_control_receipt', { campaign_id: id, workspace_id: scope.workspace, request_key: key, ...receipt }, `Simulation: ${id}\nOriginal ${command} request: ${key}\n${receipt.state === 'accepted' ? 'Scheduling request accepted. This is not a claim that active work stopped or resumed.'
84
+ : receipt.state === 'withdrawn' ? 'This unaccepted scheduling request was discarded. No accepted action was undone.'
85
+ : receipt.last_error?.message ?? 'No acceptance is recorded yet. The original request may still arrive.'}`);
86
+ if (recover) {
87
+ const receipt = await lookup();
88
+ if (action === 'control-request' || ['accepted', 'withdrawn'].includes(receipt.state)) {
89
+ show(receipt);
90
+ return;
91
+ }
92
+ }
93
+ else if (terminal.has(current.state) || current.cancel_requested || command === 'resume' && !current.scheduling_paused && current.state !== 'admission_required') {
94
+ throw new CliError('campaign_control_unavailable', 'This simulation is not accepting that scheduling action. Inspect its current report.', 2);
95
+ }
96
+ if (!recover && command === 'pause' && current.scheduling_paused) {
97
+ output('campaign_already_paused', current, 'New drill scheduling is already paused. No additional action was submitted.');
98
+ return;
99
+ }
100
+ const withdraw = action === 'withdraw-control';
101
+ output('campaign_control_review', { campaign_id: id, command, request_key: key, current_state: current.state, withdraw }, `${current.name} · ${current.state}\n${withdraw ? 'Discard only this unaccepted scheduling request. If acceptance already won, it is only inspected, not undone.' : description[command]}`);
102
+ if (!options.approve && !await selectOne(withdraw ? 'Discard this unaccepted request?' : 'Submit this scheduling request?', [{ value: false, label: 'Keep current state' }, { value: true, label: withdraw ? 'Discard request' : 'Confirm action' }], options.signal))
103
+ return;
104
+ output('campaign_control_request', { campaign_id: id, workspace_id: scope.workspace, request_key: key, command }, `Recovery: firedrill simulation control-request ${id} ${command} ${key} --workspace ${scope.workspace}\nInspect this original key after an interrupted reply. No action is retried automatically.`);
105
+ if (withdraw) {
106
+ const body = { command, action: 'withdraw' };
107
+ const receipt = checked(await api(`${prefix}/command-requests`, { ...auth, method: 'POST', idempotencyKey: key,
108
+ body }), command);
109
+ if (!['accepted', 'withdrawn'].includes(receipt.state))
110
+ throw new CliError('campaign_control_unconfirmed', 'The original request withdrawal could not be confirmed. Inspect its printed recovery key.');
111
+ show(receipt);
112
+ return;
113
+ }
114
+ const body = { command };
115
+ const updated = await api(`${prefix}/commands`, { ...auth, method: 'POST', idempotencyKey: key, body });
116
+ if (!updated || updated.id !== id || updated.world_id !== current.world_id || updated.plan_id !== current.plan_id)
117
+ throw new CliError('campaign_control_unconfirmed', 'The scheduling response could not be confirmed. Inspect the printed original request.');
118
+ const receipt = await lookup();
119
+ if (receipt.state !== 'accepted')
120
+ throw new CliError('campaign_control_unconfirmed', 'Scheduling acceptance could not be confirmed. Inspect the printed original request.');
121
+ show(receipt);
122
+ }
@@ -0,0 +1,118 @@
1
+ import { api } from './auth.js';
2
+ import { CliError } from './http.js';
3
+ import { selectedWorkspace } from './world-access.js';
4
+ import { identifier } from './world-contracts.js';
5
+ import { terminalText } from './prompts.js';
6
+ const names = { observed_behavior: 'Observed behavior', hypothesis: 'Possible explanation', tradeoff: 'Tradeoff',
7
+ acceptable_variation: 'Acceptable variation', evidence_gap: 'Missing evidence', infrastructure: 'Execution problem' };
8
+ const object = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
9
+ const invalid = () => new CliError('diagnoses_unconfirmed', 'The retained insights could not be confirmed. Reopen the simulation report.');
10
+ const text = (value, maximum, required = false) => typeof value === 'string'
11
+ && Array.from(value).length <= maximum && (!required || value.trim().length > 0);
12
+ const id = (value) => { if (typeof value !== 'string')
13
+ throw invalid(); return identifier(value); };
14
+ const hash = (value) => typeof value === 'string' && /^[a-f0-9]{64}$/.test(value);
15
+ const changes = new Set(['use_case', 'branch', 'tests', 'setup_code', 'ready_code', 'instruction', 'call_direction', 'caller_awareness',
16
+ 'answered_by', 'voicemail_style', 'keywords', 'sub_goals', 'variables', 'coverage', 'fixture', 'max_turns', 'persona', 'background_noise']);
17
+ const descriptive = new Set(['coverage', 'tests', 'keywords', 'use_case', 'branch']);
18
+ const quote = (value) => "'" + value.replaceAll("'", "'\"'\"'") + "'";
19
+ export async function campaignDiagnoses(args, options, output) {
20
+ if (!args.length || args.length > 2 || !/^[1-9][0-9]{0,8}$/.test(options.page ?? '1') || (options.search ?? '').length > 200
21
+ || /[\u0000-\u001f\u007f-\u009f]/.test(options.search ?? '') || options.kind && !Object.hasOwn(names, options.kind))
22
+ throw new CliError('arguments_invalid', 'Use report <simulation-id> diagnoses [insight-id], with optional --page, --search and --kind.', 2);
23
+ const campaign = identifier(args[0]), detail = args[1] ? identifier(args[1]) : null;
24
+ const scope = await selectedWorkspace({ ...options, interactive: !options.json && !!process.stdin.isTTY && !!process.stderr.isTTY });
25
+ const params = new URLSearchParams({ page: options.page ?? '1', q: options.search ?? '', kind: options.kind ?? '' });
26
+ const row = await api(`/api/workspaces/${scope.workspace}/campaigns/${campaign}/diagnoses${detail ? '/' + detail : '?' + params}`, { actor: scope.owner, workspace: scope.workspace, signal: options.signal });
27
+ const format = (value) => {
28
+ if (!object(value) || value.schema !== 'firedrill.simulation-diagnosis.v1' || value.campaign_id !== campaign
29
+ || !['retained', 'unavailable'].includes(String(value.state)) || !text(value.title, 200, true) || !Array.isArray(value.references)
30
+ || value.references.length > 20 || value.execution_started !== false || value.change_applied !== false
31
+ || !text(value.created_at, 100, true) || !Number.isFinite(Date.parse(value.created_at)))
32
+ throw invalid();
33
+ const insight = id(value.id), world = id(value.world_id);
34
+ const inspect = `firedrill report ${campaign} diagnoses ${insight} --workspace ${scope.workspace}`;
35
+ if (value.state === 'unavailable') {
36
+ if (value.references.length)
37
+ throw invalid();
38
+ return `Insight ${insight}\n${terminalText(value.title)}`;
39
+ }
40
+ id(value.source_id);
41
+ if (!Number.isSafeInteger(value.world_revision) || Number(value.world_revision) < 1
42
+ || typeof value.kind !== 'string' || !Object.hasOwn(names, value.kind)
43
+ || value.causal_status !== (value.kind === 'hypothesis' ? 'hypothesis' : 'not_established')
44
+ || !text(value.observation, 3000, true) || !text(value.interpretation, 3000, true)
45
+ || !text(value.follow_up, 2000) || !text(value.reproduction_limits, 2000)
46
+ || !Array.isArray(value.alternative_explanations) || value.alternative_explanations.length > 6
47
+ || value.alternative_explanations.some(one => !text(one, 1000, true)) || !value.references.length)
48
+ throw invalid();
49
+ const refs = value.references.map(ref => {
50
+ if (!object(ref) || ref.campaign_id !== campaign || !['message', 'action', 'state', 'assessment', 'execution'].includes(String(ref.kind))
51
+ || !text(ref.path, 2048, true) || /[\\\u0000-\u001f\u007f-\u009f]/.test(ref.path))
52
+ throw invalid();
53
+ const execution = id(ref.execution_id), record = id(ref.record_id);
54
+ if (ref.evidence_id !== undefined)
55
+ id(ref.evidence_id);
56
+ if (ref.comparison_id !== undefined)
57
+ id(ref.comparison_id);
58
+ const base = `/campaigns/${campaign}/trials/${execution}`;
59
+ const expected = ref.kind === 'message' ? base + `?view=conversation&record=${record}` : ref.kind === 'action' ? base + `?view=actions&record=${record}`
60
+ : ref.kind === 'assessment' ? base + `?view=assessment&assessment=${record}`
61
+ : ref.kind === 'state' && ref.comparison_id ? base + `?view=state&comparison=${id(ref.comparison_id)}&change=${record}`
62
+ : ref.kind === 'execution' && record === execution ? base : null;
63
+ if (ref.path !== expected)
64
+ throw invalid();
65
+ return ` ${terminalText(ref.kind)} ${record}: ${terminalText(ref.path)}`
66
+ + (ref.kind === 'message' || ref.kind === 'action'
67
+ ? `\n Read: firedrill report ${campaign} drill ${execution} ${ref.kind === 'message' ? 'messages' : 'actions'} ${record} --workspace ${scope.workspace}` : '');
68
+ });
69
+ const variation = [];
70
+ if (value.counterexample !== null) {
71
+ const draft = value.counterexample;
72
+ if (!object(draft) || draft.kind !== 'targeted_variation' || draft.requires_user_review !== true || draft.execution_started !== false
73
+ || !text(draft.title, 255, true) || !Array.isArray(draft.changes) || !draft.changes.length || draft.changes.length > changes.size)
74
+ throw invalid();
75
+ const draftId = id(draft.draft_id), baseline = id(draft.baseline_scenario_id), fields = new Set();
76
+ let substantive = false;
77
+ const edited = draft.changes.map(change => {
78
+ if (!object(change) || typeof change.field !== 'string' || !changes.has(change.field) || fields.has(change.field)
79
+ || !Object.hasOwn(change, 'before') || !Object.hasOwn(change, 'after') || typeof change.presentation_omitted !== 'boolean'
80
+ || !hash(change.before_sha256) || !hash(change.after_sha256) || change.before_sha256 === change.after_sha256)
81
+ throw invalid();
82
+ fields.add(change.field);
83
+ substantive ||= !descriptive.has(change.field);
84
+ return change.field.replaceAll('_', ' ') + (change.presentation_omitted ? ' (inspect saved values)' : '');
85
+ });
86
+ if (!substantive)
87
+ throw invalid();
88
+ variation.push(`Targeted variation: ${terminalText(draft.title)}`, `Changed: ${edited.join(', ')}`, `Original: firedrill scenarios definition ${baseline} --world ${world} --workspace ${scope.workspace}`, `Review: firedrill scenarios draft ${draftId} --world ${world} --workspace ${scope.workspace}`, 'Adding the scenario and running it require separate review.');
89
+ }
90
+ const alternatives = value.alternative_explanations;
91
+ return [`${names[value.kind]} · ${insight}`, terminalText(value.title), `Observed: ${terminalText(value.observation)}`,
92
+ `${value.kind === 'hypothesis' ? 'Possible explanation' : 'Interpretation (cause not established)'}: ${terminalText(value.interpretation)}`,
93
+ value.follow_up ? `Next step: ${terminalText(value.follow_up)}` : '',
94
+ ...(alternatives.length ? detail ? ['Alternative explanations:', ...alternatives.map(one => ` ${terminalText(one)}`)]
95
+ : [`${alternatives.length} alternative explanation${alternatives.length === 1 ? '' : 's'}. Inspect this insight for details.`] : []),
96
+ value.reproduction_limits ? `Replay limits: ${terminalText(value.reproduction_limits)}` : '', ...variation, ...refs,
97
+ ...(!detail ? [`Inspect: ${inspect}`] : [])].filter(Boolean).join('\n');
98
+ };
99
+ if (detail) {
100
+ if (!object(row) || row.id !== detail)
101
+ throw invalid();
102
+ output('simulation_insight', row, format(row));
103
+ }
104
+ else {
105
+ if (!object(row) || row.campaign_id !== campaign || !Array.isArray(row.results) || row.results.length > 100
106
+ || !Number.isSafeInteger(row.count) || Number(row.count) < 0 || row.page !== Number(options.page ?? '1')
107
+ || !Number.isSafeInteger(row.page_size) || Number(row.page_size) < 1 || Number(row.page_size) > 100
108
+ || row.results.length > Number(row.page_size) || row.results.length !== Math.min(Number(row.page_size), Math.max(0, Number(row.count) - (Number(row.page) - 1) * Number(row.page_size)))
109
+ || (row.next === null) !== (Number(row.page) * Number(row.page_size) >= Number(row.count))
110
+ || (row.previous === null) !== (row.page === 1)
111
+ || row.next !== null && !text(row.next, 4096, true) || row.previous !== null && !text(row.previous, 4096, true))
112
+ throw invalid();
113
+ const next = `firedrill report ${campaign} diagnoses --workspace ${scope.workspace} --page ${Number(row.page) + 1}`
114
+ + (options.search ? ` --search ${quote(options.search)}` : '') + (options.kind ? ` --kind ${options.kind}` : '');
115
+ output('simulation_insights', row, (row.results.map(format).join('\n\n') || 'No structured insights were retained. Conversations, actions and scores remain in the report.')
116
+ + `\nPage ${row.page}; ${row.count} matching insights.${row.next ? `\nNext: ${next}` : ''}`);
117
+ }
118
+ }