firedrill-run 2.2.5 → 3.0.1

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 +176 -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 +506 -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 +1627 -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 +96 -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,220 @@
1
+ /**
2
+ * Library reuse (Plan20 R10; root `native_library_sharing.py`,
3
+ * `native_library_dependents.py`, `native_library_parameters.py`).
4
+ *
5
+ * - Sharing is per exact immutable version, with workspaces of the same
6
+ * organization only. An administrator of the owner workspace grants read or
7
+ * read-and-use and revokes. A grant never lets the recipient edit or publish
8
+ * the source, and never carries credentials.
9
+ * - Revoking stops future reads and new uses. It does not erase copies the
10
+ * recipient already made (forks, bound copies) or roll back accepted work.
11
+ * - Binding fixes a parameterized version's declared values into a new private
12
+ * immutable resource of this workspace. Values are typed scalars at declared
13
+ * content fields: no interpolation, templates or code.
14
+ * - Dependents are this workspace's own world and scenario versions that
15
+ * reference a version, never another recipient's.
16
+ * Definitions stay cloud-owned: nothing here writes or keeps a local body.
17
+ */
18
+ import { api } from '../auth.js';
19
+ import { CliError } from '../http.js';
20
+ import { SHA256_HEX } from './contracts.js';
21
+ import { libraryRow } from './cloud-resources.js';
22
+ export const DEPENDENT_KINDS = ['world', 'scenario'];
23
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
24
+ const RESPONSE_LIMIT = 4 * 1024 * 1024;
25
+ const PAGE = 25;
26
+ const PAGE_KEYS = 'count,next,page,page_size,previous,results';
27
+ const GRANT_KEYS = 'allow_use,created_at,id,recipient_workspace_id,request_key,revision_id,revoked_at';
28
+ const DEPENDENT_KEYS = 'created_at,digest,id,kind,name,revision,world_id';
29
+ /** Root's bound on a string parameter value; the definition's own grammar may be stricter. */
30
+ const STRING_MAX = 4000;
31
+ const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
32
+ const uuid = (value) => typeof value === 'string' && UUID.test(value);
33
+ const time = (value) => typeof value === 'string' && Number.isFinite(Date.parse(value));
34
+ const keys = (value) => Object.keys(value).sort().join(',');
35
+ const unconfirmed = (what) => new CliError('native_response_unconfirmed', `The ${what} response could not be confirmed. Nothing further was sent for it.`);
36
+ const scoped = (scope, signal) => ({ actor: scope.owner, workspace: scope.workspace, signal, maximumResponseBytes: RESPONSE_LIMIT });
37
+ const base = (scope) => `/api/workspaces/${scope.workspace}/native-library`;
38
+ /** A UUID argument exactly as Firedrill printed it, lowercased. */
39
+ export function libraryId(value, label) {
40
+ if (!uuid(value))
41
+ throw new CliError('arguments_invalid', `Use the ${label} exactly as Firedrill printed it. Nothing was sent.`, 2);
42
+ return value.toLowerCase();
43
+ }
44
+ function pageNumber(value) {
45
+ const page = value ?? 1;
46
+ if (!Number.isSafeInteger(page) || page < 1)
47
+ throw new CliError('arguments_invalid', 'Use --page with a positive page number.', 2);
48
+ return page;
49
+ }
50
+ /** Root's standard page envelope for the 25-row page that was asked for. */
51
+ function pageOf(raw, page, row, what) {
52
+ if (!object(raw) || keys(raw) !== PAGE_KEYS || !Number.isSafeInteger(raw.count) || raw.count < 0 || raw.page !== page
53
+ || raw.page_size !== PAGE || (raw.next !== null && typeof raw.next !== 'string') || (raw.previous !== null && typeof raw.previous !== 'string')
54
+ || !Array.isArray(raw.results) || raw.results.length > PAGE || (raw.next !== null) !== (page * PAGE < raw.count))
55
+ throw unconfirmed(what);
56
+ return { count: raw.count, page, next: raw.next, previous: raw.previous, results: raw.results.map(row) };
57
+ }
58
+ function grantRow(revisionId) {
59
+ return (value) => {
60
+ if (!object(value) || keys(value) !== GRANT_KEYS || !uuid(value.id) || value.revision_id !== revisionId || !uuid(value.recipient_workspace_id)
61
+ || typeof value.allow_use !== 'boolean' || !uuid(value.request_key) || !time(value.created_at)
62
+ || !(value.revoked_at === null || time(value.revoked_at)))
63
+ throw unconfirmed('library sharing');
64
+ return { id: value.id.toLowerCase(), revision_id: revisionId, recipient_workspace_id: value.recipient_workspace_id.toLowerCase(),
65
+ allow_use: value.allow_use, request_key: value.request_key.toLowerCase(), created_at: value.created_at, revoked_at: value.revoked_at };
66
+ };
67
+ }
68
+ function dependentRow(kind) {
69
+ return (value) => {
70
+ if (!object(value) || keys(value) !== DEPENDENT_KEYS || !uuid(value.id) || value.kind !== kind || !Number.isSafeInteger(value.revision)
71
+ || value.revision < 1 || typeof value.digest !== 'string' || !SHA256_HEX.test(value.digest) || !time(value.created_at)
72
+ || typeof value.name !== 'string' || (kind === 'world' ? !uuid(value.world_id) : value.world_id !== null))
73
+ throw unconfirmed('library dependents');
74
+ return { id: value.id.toLowerCase(), kind, revision: value.revision, digest: value.digest, created_at: value.created_at,
75
+ name: value.name, world_id: kind === 'world' ? value.world_id.toLowerCase() : null };
76
+ };
77
+ }
78
+ /** Other active workspaces of this organization that a version can be shared with (administrators only), by name prefix. */
79
+ export async function listLibraryRecipients(scope, input) {
80
+ const page = pageNumber(input.page);
81
+ const params = new URLSearchParams({ page: String(page), page_size: String(PAGE) });
82
+ if (input.search !== undefined) {
83
+ // Root counts characters (code points), not UTF-16 units.
84
+ if ([...input.search].length > 120)
85
+ throw new CliError('arguments_invalid', 'Use a workspace name prefix of up to 120 characters.', 2);
86
+ params.set('q', input.search);
87
+ }
88
+ const raw = await api(`${base(scope)}/recipients?${params}`, scoped(scope, input.signal));
89
+ const own = scope.workspace.toLowerCase();
90
+ return pageOf(raw, page, (value) => {
91
+ if (!object(value) || keys(value) !== 'id,name' || !uuid(value.id) || value.id.toLowerCase() === own || typeof value.name !== 'string') {
92
+ throw unconfirmed('library recipients');
93
+ }
94
+ return { id: value.id.toLowerCase(), name: value.name };
95
+ }, 'library recipients');
96
+ }
97
+ /** The sharing grants of one version this workspace owns, newest first, revoked ones included. */
98
+ export async function listLibraryGrants(scope, input) {
99
+ const revisionId = libraryId(input.revisionId, 'library version id');
100
+ const page = pageNumber(input.page);
101
+ const raw = await api(`${base(scope)}/revisions/${revisionId}/grants?page=${page}&page_size=${PAGE}`, scoped(scope, input.signal));
102
+ return pageOf(raw, page, grantRow(revisionId), 'library sharing');
103
+ }
104
+ /**
105
+ * Share one exact version with another workspace of this organization, under
106
+ * the caller's request key. The same key returns the original grant, revoked
107
+ * or not (never silently renewed); a different recipient or access under it is
108
+ * refused by root. Administrators only; the human must approve first.
109
+ */
110
+ export async function shareLibraryVersion(scope, input) {
111
+ const revisionId = libraryId(input.revisionId, 'library version id');
112
+ const recipient = libraryId(input.recipientWorkspaceId, 'workspace id');
113
+ const requestKey = libraryId(input.requestKey, 'request key');
114
+ if (recipient === scope.workspace.toLowerCase()) {
115
+ throw new CliError('arguments_invalid', 'Share with another workspace of this organization; this one already owns the version. Nothing was sent.', 2);
116
+ }
117
+ const row = grantRow(revisionId)(await api(`${base(scope)}/revisions/${revisionId}/grants`, {
118
+ ...scoped(scope, input.signal), method: 'POST', body: { request_key: requestKey, recipient_workspace_id: recipient, allow_use: input.allowUse }
119
+ }));
120
+ if (row.request_key !== requestKey || row.recipient_workspace_id !== recipient || row.allow_use !== input.allowUse)
121
+ throw unconfirmed('library sharing');
122
+ return row;
123
+ }
124
+ /** The caller's original grant under this key, or null when root has none (which does not prove it never arrived). */
125
+ export async function recoverLibraryGrant(scope, input) {
126
+ const revisionId = libraryId(input.revisionId, 'library version id');
127
+ const requestKey = libraryId(input.requestKey, 'request key');
128
+ try {
129
+ const row = grantRow(revisionId)(await api(`${base(scope)}/revisions/${revisionId}/grants/requests/${requestKey}`, scoped(scope, input.signal)));
130
+ if (row.request_key !== requestKey)
131
+ throw unconfirmed('library sharing');
132
+ return row;
133
+ }
134
+ catch (error) {
135
+ if (error instanceof CliError && error.httpStatus === 404)
136
+ return null;
137
+ throw error;
138
+ }
139
+ }
140
+ /** Revoke one grant after the human's approval. Idempotent: an already revoked grant is returned as it is. */
141
+ export async function revokeLibraryGrant(scope, input) {
142
+ const revisionId = libraryId(input.revisionId, 'library version id');
143
+ const grantId = libraryId(input.grantId, 'grant id');
144
+ const row = grantRow(revisionId)(await api(`${base(scope)}/revisions/${revisionId}/grants/${grantId}`, {
145
+ ...scoped(scope, input.signal), method: 'DELETE', body: { revoke_consent: true }
146
+ }));
147
+ if (row.id !== grantId || row.revoked_at === null)
148
+ throw unconfirmed('library sharing');
149
+ return row;
150
+ }
151
+ /** This workspace's own world or scenario versions that reference one exact version (25 per page). */
152
+ export async function listLibraryDependents(scope, input) {
153
+ const revisionId = libraryId(input.revisionId, 'library version id');
154
+ if (!DEPENDENT_KINDS.includes(input.kind))
155
+ throw new CliError('arguments_invalid', `Use --kind ${DEPENDENT_KINDS.join('|')} with library dependents.`, 2);
156
+ const page = pageNumber(input.page);
157
+ const raw = await api(`${base(scope)}/revisions/${revisionId}/dependents?kind=${input.kind}&page=${page}&page_size=${PAGE}`, scoped(scope, input.signal));
158
+ return pageOf(raw, page, dependentRow(input.kind), 'library dependents');
159
+ }
160
+ /**
161
+ * The values a binding would fix, checked against the version's declaration
162
+ * before anything is sent: only declared names; every required one given;
163
+ * strings and integers within their declared bounds. Optional parameters left
164
+ * out take their declared default on the service. Root revalidates all of it,
165
+ * including the definition's own grammar, which can be stricter.
166
+ */
167
+ export function checkBindingValues(schema, values) {
168
+ const fail = (detail) => new CliError('native_library_parameters_invalid', `${detail} Nothing was sent.`, 2);
169
+ if (!object(values))
170
+ throw fail('Parameter values must be a JSON object of name to value.');
171
+ const declared = new Map(schema.parameters.map((item) => [item.name, item]));
172
+ const unknown = Object.keys(values).filter((name) => !declared.has(name));
173
+ if (unknown.length)
174
+ throw fail(`These are not declared parameters of this version: ${unknown.join(', ')}.`);
175
+ for (const item of schema.parameters) {
176
+ const value = values[item.name];
177
+ if (value === undefined) {
178
+ if (item.required)
179
+ throw fail(`Parameter ${item.name} is required.`);
180
+ continue;
181
+ }
182
+ // Root counts a string's characters (code points), not its UTF-16 units.
183
+ if (item.type === 'string' ? typeof value !== 'string' || [...value].length > Math.min(item.maximum, STRING_MAX)
184
+ : !Number.isSafeInteger(value) || value < (item.minimum ?? 0) || value > item.maximum) {
185
+ throw fail(item.type === 'string' ? `Parameter ${item.name} must be a string of at most ${item.maximum} characters.`
186
+ : `Parameter ${item.name} must be a whole number from ${item.minimum} to ${item.maximum}.`);
187
+ }
188
+ }
189
+ return values;
190
+ }
191
+ /**
192
+ * Bind a parameterized version (owned here, or shared with use) into a new
193
+ * private immutable resource of this workspace with these exact values, under
194
+ * the caller's request key. A lost answer is recovered by that key through the
195
+ * ordinary library request read, never sent under a new key.
196
+ */
197
+ export async function bindLibraryVersion(scope, input) {
198
+ const revisionId = libraryId(input.source.id, 'library version id');
199
+ const requestKey = libraryId(input.requestKey, 'request key');
200
+ const row = libraryRow(true)(await api(`${base(scope)}/revisions/${revisionId}/bind`, {
201
+ ...scoped(scope, input.signal), method: 'POST', body: { request_key: requestKey, values: input.values }
202
+ }));
203
+ return { ...checkBoundVersion(scope, row, input.source), request_key: requestKey };
204
+ }
205
+ /** True when a library version records a binding of exactly this source version. */
206
+ export const boundFrom = (row, sourceId) => row.parameter_binding?.source_revision_id.toLowerCase() === sourceId.toLowerCase();
207
+ /**
208
+ * A bound version as root creates it: revision 1 of a new private draft
209
+ * resource of this workspace, forked from and bound to exactly this source,
210
+ * with no declaration of its own. The source's kind and digest are checked
211
+ * when known (an original read back by its key may outlive access to the source).
212
+ */
213
+ export function checkBoundVersion(scope, row, source) {
214
+ const sourceId = source.id.toLowerCase();
215
+ if ((source.kind !== undefined && row.kind !== source.kind) || row.revision !== 1 || row.state !== 'draft' || row.forked_from?.toLowerCase() !== sourceId
216
+ || row.owner_workspace_id.toLowerCase() !== scope.workspace.toLowerCase() || !row.parameter_binding || !boundFrom(row, sourceId)
217
+ || (source.digest !== undefined && row.parameter_binding.source_digest !== source.digest) || row.parameter_schema !== null)
218
+ throw unconfirmed('library binding');
219
+ return row;
220
+ }