@hasna/skills 0.1.62 → 0.1.63

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 (526) hide show
  1. package/README.md +10 -6
  2. package/bin/index.js +14271 -21602
  3. package/bin/mcp.js +3527 -11449
  4. package/bin/migrate.js +53 -3
  5. package/bin/server.js +5140 -2675
  6. package/bin/worker.js +4542 -2129
  7. package/dist/cli/commands/publish.d.ts +2 -0
  8. package/dist/cli/components/App.d.ts +2 -1
  9. package/dist/cli/components/CategorySelect.d.ts +2 -1
  10. package/dist/cli/components/Header.d.ts +2 -1
  11. package/dist/cli/components/InstallProgress.d.ts +2 -1
  12. package/dist/cli/components/SearchView.d.ts +2 -1
  13. package/dist/cli/components/SkillSelect.d.ts +2 -1
  14. package/dist/index.d.ts +4 -1
  15. package/dist/index.js +5094 -13755
  16. package/dist/lib/agent-sync.d.ts +38 -3
  17. package/dist/lib/home-adoption.d.ts +91 -0
  18. package/dist/lib/home-census.d.ts +22 -0
  19. package/dist/lib/home-migration.d.ts +61 -0
  20. package/dist/lib/portable-skills-files.d.ts +21 -1
  21. package/dist/lib/portable-skills-types.d.ts +46 -0
  22. package/dist/lib/pull.d.ts +66 -0
  23. package/dist/lib/remote-client.d.ts +6 -0
  24. package/dist/lib/run-state.d.ts +5 -0
  25. package/dist/lib/skill-bundles.d.ts +54 -0
  26. package/dist/lib/skill-contract.d.ts +35 -0
  27. package/dist/lib/skill-hash.d.ts +77 -0
  28. package/dist/sdk/cancel.d.ts +30 -0
  29. package/dist/sdk/dispatcher.d.ts +40 -0
  30. package/dist/sdk/event-sink.d.ts +2 -0
  31. package/dist/sdk/events.d.ts +79 -0
  32. package/dist/sdk/execution/admission.d.ts +44 -0
  33. package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
  34. package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
  35. package/dist/sdk/execution/image-profile.d.ts +73 -0
  36. package/dist/sdk/execution/index.d.ts +15 -0
  37. package/dist/sdk/execution/receipts.d.ts +44 -0
  38. package/dist/sdk/execution/state-machine.d.ts +38 -0
  39. package/dist/sdk/execution/storage.d.ts +158 -0
  40. package/dist/sdk/execution/types.d.ts +130 -0
  41. package/dist/sdk/executor.d.ts +17 -0
  42. package/dist/sdk/governance-store.d.ts +156 -0
  43. package/dist/sdk/governance.d.ts +92 -0
  44. package/dist/sdk/index.d.ts +26 -0
  45. package/dist/sdk/index.js +48730 -0
  46. package/dist/sdk/offline.d.ts +16 -0
  47. package/dist/sdk/outputs.d.ts +71 -0
  48. package/dist/sdk/registry.d.ts +28 -0
  49. package/dist/sdk/runs.d.ts +229 -0
  50. package/dist/sdk/server.d.ts +35 -0
  51. package/dist/sdk/spend.d.ts +36 -0
  52. package/dist/sdk/storage.d.ts +25 -0
  53. package/dist/server/app.d.ts +42 -0
  54. package/dist/server/artifact-storage.d.ts +102 -0
  55. package/dist/server/auth.d.ts +5 -0
  56. package/dist/server/config.d.ts +40 -0
  57. package/dist/server/database-url.d.ts +42 -0
  58. package/dist/server/handlers.d.ts +3 -0
  59. package/dist/server/index.d.ts +2 -0
  60. package/dist/server/migrate.d.ts +13 -0
  61. package/dist/server/migrations-dir.d.ts +18 -0
  62. package/dist/server/redaction.d.ts +1 -0
  63. package/dist/server/registry.d.ts +5 -0
  64. package/dist/server/rows.d.ts +23 -0
  65. package/dist/server/skills-api.d.ts +68 -0
  66. package/dist/server/sqlite-store.d.ts +114 -0
  67. package/dist/server/store-fixtures.d.ts +25 -0
  68. package/dist/server/store.d.ts +144 -0
  69. package/dist/server/types.d.ts +242 -0
  70. package/dist/server/worker.d.ts +4 -0
  71. package/dist/storage.js +32 -0
  72. package/docs/skill-standard.md +211 -39
  73. package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
  74. package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
  75. package/package.json +11 -8
  76. package/schemas/skill.schema.json +181 -0
  77. package/agent-skills/README.md +0 -41
  78. package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
  79. package/agent-skills/inbox/SKILL.md +0 -25
  80. package/agent-skills/inbox/scripts/inbox +0 -109
  81. package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
  82. package/agent-skills/inbox-monitor/SKILL.md +0 -41
  83. package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
  84. package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
  85. package/agent-skills/merge-pr/SKILL.md +0 -85
  86. package/agent-skills/merge-pr/references/merge-safety.md +0 -82
  87. package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
  88. package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
  89. package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
  90. package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
  91. package/agent-skills/skill-goal-execute/SKILL.md +0 -115
  92. package/agent-skills/skill-login/SKILL.md +0 -109
  93. package/agent-skills/skill-project-create/SKILL.md +0 -91
  94. package/agent-skills/skill-publish/SKILL.md +0 -254
  95. package/agent-skills/skill-publish/scripts/capture_registry.js +0 -47
  96. package/agent-skills/skill-publish/scripts/publish_with_git_head.sh +0 -143
  97. package/agent-skills/skill-publish/scripts/test_publish_with_git_head.sh +0 -231
  98. package/skills/_common/auth.ts +0 -45
  99. package/skills/_common/http-client.ts +0 -143
  100. package/skills/_common/index.ts +0 -26
  101. package/skills/_common/install.sh +0 -7
  102. package/skills/_common/installer.ts +0 -72
  103. package/skills/_common/skill-install.ts +0 -37
  104. package/skills/_common/vision.ts +0 -374
  105. package/skills/ad-creative-pack/SKILL.md +0 -55
  106. package/skills/ad-creative-pack/package.json +0 -10
  107. package/skills/analyze-data/CLAUDE.md +0 -16
  108. package/skills/analyze-data/SKILL.md +0 -112
  109. package/skills/analyze-data/package.json +0 -23
  110. package/skills/analyze-data/src/analysis.ts +0 -401
  111. package/skills/analyze-data/src/cli.ts +0 -66
  112. package/skills/analyze-data/src/formatters.ts +0 -235
  113. package/skills/analyze-data/src/index.ts +0 -74
  114. package/skills/analyze-data/src/logger.ts +0 -36
  115. package/skills/analyze-data/src/parsers.ts +0 -57
  116. package/skills/analyze-data/src/stats.ts +0 -151
  117. package/skills/analyze-data/src/types.ts +0 -85
  118. package/skills/analyze-data/tsconfig.json +0 -19
  119. package/skills/api-docs-portal/SKILL.md +0 -84
  120. package/skills/api-docs-portal/package.json +0 -35
  121. package/skills/api-docs-portal/src/index.ts +0 -919
  122. package/skills/api-docs-portal/tsconfig.json +0 -17
  123. package/skills/api-test-suite/CLAUDE.md +0 -19
  124. package/skills/api-test-suite/package.json +0 -27
  125. package/skills/api-test-suite/src/index.ts +0 -381
  126. package/skills/api-test-suite/tsconfig.json +0 -10
  127. package/skills/audio-extract/CLAUDE.md +0 -9
  128. package/skills/audio-extract/SKILL.md +0 -73
  129. package/skills/audio-extract/package.json +0 -23
  130. package/skills/audio-extract/src/index.ts +0 -323
  131. package/skills/audio-extract/tsconfig.json +0 -11
  132. package/skills/bio-sequence-tool/CLAUDE.md +0 -19
  133. package/skills/bio-sequence-tool/package.json +0 -27
  134. package/skills/bio-sequence-tool/src/index.ts +0 -85
  135. package/skills/bio-sequence-tool/tsconfig.json +0 -10
  136. package/skills/blog-article/CLAUDE.md +0 -12
  137. package/skills/blog-article/SKILL.md +0 -55
  138. package/skills/blog-article/package.json +0 -10
  139. package/skills/blog-article/tsconfig.json +0 -10
  140. package/skills/brand-assets/SKILL.md +0 -118
  141. package/skills/brand-assets/package.json +0 -35
  142. package/skills/brand-assets/src/cli.ts +0 -155
  143. package/skills/brand-assets/src/constants.ts +0 -8
  144. package/skills/brand-assets/src/extract.ts +0 -236
  145. package/skills/brand-assets/src/index.ts +0 -668
  146. package/skills/brand-assets/src/types.ts +0 -59
  147. package/skills/brand-assets/tsconfig.json +0 -17
  148. package/skills/brand-kit/SKILL.md +0 -54
  149. package/skills/brand-kit/package.json +0 -10
  150. package/skills/businessactivity/CLAUDE.md +0 -176
  151. package/skills/businessactivity/LICENSE +0 -192
  152. package/skills/businessactivity/README.md +0 -287
  153. package/skills/businessactivity/package.json +0 -25
  154. package/skills/businessactivity/scripts/publish.ts +0 -210
  155. package/skills/businessactivity/src/commands/activity.ts +0 -211
  156. package/skills/businessactivity/src/commands/function.ts +0 -227
  157. package/skills/businessactivity/src/commands/owner.ts +0 -193
  158. package/skills/businessactivity/src/commands/profile.ts +0 -121
  159. package/skills/businessactivity/src/commands/responsibility.ts +0 -264
  160. package/skills/businessactivity/src/commands/team.ts +0 -244
  161. package/skills/businessactivity/src/commands/workflow.ts +0 -359
  162. package/skills/businessactivity/src/index.ts +0 -3
  163. package/skills/businessactivity/src/lib/config.ts +0 -167
  164. package/skills/businessactivity/src/lib/output.ts +0 -76
  165. package/skills/businessactivity/src/lib/paths.ts +0 -79
  166. package/skills/businessactivity/src/lib/storage.ts +0 -95
  167. package/skills/businessactivity/src/types/index.ts +0 -86
  168. package/skills/businessactivity/tsconfig.json +0 -29
  169. package/skills/codefix/LICENSE +0 -192
  170. package/skills/codefix/README.md +0 -232
  171. package/skills/codefix/SKILL.md +0 -94
  172. package/skills/codefix/package.json +0 -21
  173. package/skills/codefix/src/fixers/batch.ts +0 -213
  174. package/skills/codefix/src/fixers/detector.ts +0 -160
  175. package/skills/codefix/src/fixers/index.ts +0 -7
  176. package/skills/codefix/src/fixers/runner.ts +0 -522
  177. package/skills/codefix/src/index-local.ts +0 -431
  178. package/skills/codefix/src/index.ts +0 -4
  179. package/skills/codefix/src/types.ts +0 -211
  180. package/skills/codefix/tsconfig.json +0 -15
  181. package/skills/commitpush/SKILL.md +0 -57
  182. package/skills/commitpush/package.json +0 -33
  183. package/skills/commitpush/src/index.ts +0 -34
  184. package/skills/commitpush/tsconfig.json +0 -17
  185. package/skills/commitpushpr/SKILL.md +0 -55
  186. package/skills/commitpushpr/package.json +0 -33
  187. package/skills/commitpushpr/src/index.ts +0 -34
  188. package/skills/commitpushpr/tsconfig.json +0 -17
  189. package/skills/compress-video/CLAUDE.md +0 -9
  190. package/skills/compress-video/SKILL.md +0 -79
  191. package/skills/compress-video/package.json +0 -23
  192. package/skills/compress-video/src/index.ts +0 -473
  193. package/skills/compress-video/tsconfig.json +0 -11
  194. package/skills/contract-review-report/SKILL.md +0 -52
  195. package/skills/contract-review-report/package.json +0 -10
  196. package/skills/customer-feedback-report/SKILL.md +0 -52
  197. package/skills/customer-feedback-report/package.json +0 -10
  198. package/skills/dashboard-builder/CLAUDE.md +0 -19
  199. package/skills/dashboard-builder/package.json +0 -29
  200. package/skills/dashboard-builder/src/index.ts +0 -150
  201. package/skills/dashboard-builder/tsconfig.json +0 -10
  202. package/skills/data-anonymizer/CLAUDE.md +0 -19
  203. package/skills/data-anonymizer/package.json +0 -27
  204. package/skills/data-anonymizer/src/index.ts +0 -183
  205. package/skills/data-anonymizer/tsconfig.json +0 -10
  206. package/skills/database-explorer/CLAUDE.md +0 -19
  207. package/skills/database-explorer/package.json +0 -29
  208. package/skills/database-explorer/src/index.ts +0 -95
  209. package/skills/database-explorer/tsconfig.json +0 -10
  210. package/skills/diff-viewer/CLAUDE.md +0 -19
  211. package/skills/diff-viewer/package.json +0 -30
  212. package/skills/diff-viewer/src/index.ts +0 -164
  213. package/skills/diff-viewer/tsconfig.json +0 -10
  214. package/skills/doc-read/SKILL.md +0 -45
  215. package/skills/doc-read/package.json +0 -29
  216. package/skills/doc-read/src/index.ts +0 -324
  217. package/skills/doc-read/tsconfig.json +0 -8
  218. package/skills/domainpurchase/LICENSE +0 -192
  219. package/skills/domainpurchase/SKILL.md +0 -29
  220. package/skills/domainpurchase/package.json +0 -30
  221. package/skills/domainpurchase/src/index.ts +0 -3
  222. package/skills/domainpurchase/tsconfig.json +0 -21
  223. package/skills/email-sequence/SKILL.md +0 -53
  224. package/skills/email-sequence/package.json +0 -10
  225. package/skills/experiment-power-calculator/CLAUDE.md +0 -19
  226. package/skills/experiment-power-calculator/package.json +0 -29
  227. package/skills/experiment-power-calculator/src/index.ts +0 -86
  228. package/skills/experiment-power-calculator/tsconfig.json +0 -10
  229. package/skills/extract-frames/CLAUDE.md +0 -19
  230. package/skills/extract-frames/package.json +0 -27
  231. package/skills/extract-frames/src/index.ts +0 -616
  232. package/skills/extract-frames/tsconfig.json +0 -10
  233. package/skills/file-organizer/CLAUDE.md +0 -19
  234. package/skills/file-organizer/package.json +0 -27
  235. package/skills/file-organizer/src/index.ts +0 -91
  236. package/skills/file-organizer/tsconfig.json +0 -10
  237. package/skills/folder-tree/CLAUDE.md +0 -19
  238. package/skills/folder-tree/package.json +0 -29
  239. package/skills/folder-tree/src/index.ts +0 -568
  240. package/skills/folder-tree/tsconfig.json +0 -10
  241. package/skills/form-filler/CLAUDE.md +0 -19
  242. package/skills/form-filler/package.json +0 -29
  243. package/skills/form-filler/src/index.ts +0 -81
  244. package/skills/form-filler/tsconfig.json +0 -10
  245. package/skills/generate-api-client/CLAUDE.md +0 -19
  246. package/skills/generate-api-client/package.json +0 -29
  247. package/skills/generate-api-client/src/generator.ts +0 -47
  248. package/skills/generate-api-client/src/index.ts +0 -92
  249. package/skills/generate-api-client/src/logger.ts +0 -34
  250. package/skills/generate-api-client/src/python-generator.ts +0 -245
  251. package/skills/generate-api-client/src/spec-loader.ts +0 -48
  252. package/skills/generate-api-client/src/type-mappers.ts +0 -79
  253. package/skills/generate-api-client/src/types.ts +0 -76
  254. package/skills/generate-api-client/src/typescript-generator.ts +0 -247
  255. package/skills/generate-api-client/tsconfig.json +0 -10
  256. package/skills/generate-chart/CLAUDE.md +0 -19
  257. package/skills/generate-chart/package.json +0 -27
  258. package/skills/generate-chart/src/index.ts +0 -510
  259. package/skills/generate-chart/tsconfig.json +0 -10
  260. package/skills/generate-dockerfile/CLAUDE.md +0 -19
  261. package/skills/generate-dockerfile/package.json +0 -27
  262. package/skills/generate-dockerfile/src/cli.ts +0 -78
  263. package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
  264. package/skills/generate-dockerfile/src/index.ts +0 -81
  265. package/skills/generate-dockerfile/src/logger.ts +0 -30
  266. package/skills/generate-dockerfile/src/project-detection.ts +0 -68
  267. package/skills/generate-dockerfile/src/support-files.ts +0 -171
  268. package/skills/generate-dockerfile/src/types.ts +0 -29
  269. package/skills/generate-dockerfile/tsconfig.json +0 -10
  270. package/skills/generate-env/CLAUDE.md +0 -19
  271. package/skills/generate-env/package.json +0 -29
  272. package/skills/generate-env/src/cli.ts +0 -85
  273. package/skills/generate-env/src/detection.ts +0 -161
  274. package/skills/generate-env/src/env-data.ts +0 -66
  275. package/skills/generate-env/src/generators.ts +0 -240
  276. package/skills/generate-env/src/index.ts +0 -120
  277. package/skills/generate-env/src/runtime.ts +0 -30
  278. package/skills/generate-env/src/types.ts +0 -32
  279. package/skills/generate-env/tsconfig.json +0 -10
  280. package/skills/generate-favicon/CLAUDE.md +0 -19
  281. package/skills/generate-favicon/package.json +0 -29
  282. package/skills/generate-favicon/src/index.ts +0 -421
  283. package/skills/generate-favicon/tsconfig.json +0 -10
  284. package/skills/generate-qrcode/CLAUDE.md +0 -19
  285. package/skills/generate-qrcode/package.json +0 -30
  286. package/skills/generate-qrcode/src/index.ts +0 -584
  287. package/skills/generate-qrcode/tsconfig.json +0 -10
  288. package/skills/generate-resume/CLAUDE.md +0 -19
  289. package/skills/generate-resume/package.json +0 -27
  290. package/skills/generate-resume/src/cli.ts +0 -157
  291. package/skills/generate-resume/src/index.ts +0 -178
  292. package/skills/generate-resume/src/parsers.ts +0 -95
  293. package/skills/generate-resume/src/renderers.ts +0 -538
  294. package/skills/generate-resume/src/security.ts +0 -39
  295. package/skills/generate-resume/src/types.ts +0 -86
  296. package/skills/generate-resume/tsconfig.json +0 -10
  297. package/skills/generate-sitemap/CLAUDE.md +0 -19
  298. package/skills/generate-sitemap/package.json +0 -27
  299. package/skills/generate-sitemap/src/index.ts +0 -626
  300. package/skills/generate-sitemap/tsconfig.json +0 -10
  301. package/skills/gif-maker/CLAUDE.md +0 -19
  302. package/skills/gif-maker/package.json +0 -30
  303. package/skills/gif-maker/src/index.ts +0 -600
  304. package/skills/gif-maker/tsconfig.json +0 -10
  305. package/skills/hook/LICENSE +0 -192
  306. package/skills/hook/README.md +0 -74
  307. package/skills/hook/SKILL.md +0 -85
  308. package/skills/hook/bunfig.toml +0 -5
  309. package/skills/hook/package.json +0 -28
  310. package/skills/hook/src/commands/create.ts +0 -112
  311. package/skills/hook/src/commands/events.ts +0 -37
  312. package/skills/hook/src/commands/validate.ts +0 -117
  313. package/skills/hook/src/index.ts +0 -118
  314. package/skills/hook/src/templates/root.ts +0 -196
  315. package/skills/hook/src/templates/source.ts +0 -647
  316. package/skills/hook/tsconfig.json +0 -18
  317. package/skills/http-server/CLAUDE.md +0 -19
  318. package/skills/http-server/package.json +0 -29
  319. package/skills/http-server/src/index.ts +0 -51
  320. package/skills/http-server/tsconfig.json +0 -10
  321. package/skills/implementation/LICENSE +0 -192
  322. package/skills/implementation/README.md +0 -53
  323. package/skills/implementation/SKILL.md +0 -57
  324. package/skills/implementation/bunfig.toml +0 -5
  325. package/skills/implementation/package.json +0 -28
  326. package/skills/implementation/src/commands/create.ts +0 -187
  327. package/skills/implementation/src/index.ts +0 -62
  328. package/skills/implementation/tsconfig.json +0 -18
  329. package/skills/implementation-plan/CLAUDE.md +0 -19
  330. package/skills/implementation-plan/package.json +0 -29
  331. package/skills/implementation-plan/src/index.ts +0 -520
  332. package/skills/implementation-plan/tsconfig.json +0 -10
  333. package/skills/implementation-todo/CLAUDE.md +0 -19
  334. package/skills/implementation-todo/package.json +0 -29
  335. package/skills/implementation-todo/src/index.ts +0 -429
  336. package/skills/implementation-todo/tsconfig.json +0 -10
  337. package/skills/invoice/.env.example +0 -3
  338. package/skills/invoice/CLAUDE.md +0 -31
  339. package/skills/invoice/LICENSE +0 -192
  340. package/skills/invoice/README.md +0 -70
  341. package/skills/invoice/package.json +0 -26
  342. package/skills/invoice/src/commands/companies.ts +0 -202
  343. package/skills/invoice/src/commands/config.ts +0 -132
  344. package/skills/invoice/src/commands/generate.ts +0 -177
  345. package/skills/invoice/src/commands/invoices.ts +0 -218
  346. package/skills/invoice/src/index.ts +0 -3
  347. package/skills/invoice/src/lib/api.ts +0 -124
  348. package/skills/invoice/src/lib/storage.ts +0 -171
  349. package/skills/invoice/src/types/index.ts +0 -86
  350. package/skills/invoice/src/utils/logger.ts +0 -33
  351. package/skills/invoice/src/utils/paths.ts +0 -25
  352. package/skills/invoice/tsconfig.json +0 -23
  353. package/skills/invoice-reconciliation/SKILL.md +0 -98
  354. package/skills/invoice-reconciliation/package.json +0 -36
  355. package/skills/invoice-reconciliation/src/index.ts +0 -743
  356. package/skills/invoice-reconciliation/tsconfig.json +0 -17
  357. package/skills/landing-page-pack/SKILL.md +0 -55
  358. package/skills/landing-page-pack/package.json +0 -10
  359. package/skills/latex-table-generator/CLAUDE.md +0 -19
  360. package/skills/latex-table-generator/package.json +0 -29
  361. package/skills/latex-table-generator/src/index.ts +0 -113
  362. package/skills/latex-table-generator/tsconfig.json +0 -10
  363. package/skills/logo-design/SKILL.md +0 -94
  364. package/skills/logo-design/package.json +0 -35
  365. package/skills/logo-design/src/cli.ts +0 -132
  366. package/skills/logo-design/src/constants.ts +0 -5
  367. package/skills/logo-design/src/docs.ts +0 -102
  368. package/skills/logo-design/src/geometry.ts +0 -324
  369. package/skills/logo-design/src/index.ts +0 -212
  370. package/skills/logo-design/src/palette.ts +0 -258
  371. package/skills/logo-design/src/types.ts +0 -50
  372. package/skills/logo-design/tsconfig.json +0 -17
  373. package/skills/lorem-generator/CLAUDE.md +0 -19
  374. package/skills/lorem-generator/package.json +0 -29
  375. package/skills/lorem-generator/src/index.ts +0 -59
  376. package/skills/lorem-generator/tsconfig.json +0 -10
  377. package/skills/managemcp/CLAUDE.md +0 -14
  378. package/skills/managemcp/README.md +0 -24
  379. package/skills/managemcp/package.json +0 -16
  380. package/skills/managemcp/src/index.ts +0 -3
  381. package/skills/managemcp/tsconfig.json +0 -27
  382. package/skills/markdown-validator/CLAUDE.md +0 -19
  383. package/skills/markdown-validator/package.json +0 -29
  384. package/skills/markdown-validator/src/index.ts +0 -92
  385. package/skills/markdown-validator/tsconfig.json +0 -10
  386. package/skills/market-research-report/SKILL.md +0 -51
  387. package/skills/market-research-report/package.json +0 -10
  388. package/skills/meeting-pack/SKILL.md +0 -52
  389. package/skills/meeting-pack/package.json +0 -10
  390. package/skills/merge-pdfs/CLAUDE.md +0 -19
  391. package/skills/merge-pdfs/package.json +0 -31
  392. package/skills/merge-pdfs/src/index.ts +0 -427
  393. package/skills/merge-pdfs/tsconfig.json +0 -10
  394. package/skills/migration-plan-pack/SKILL.md +0 -56
  395. package/skills/migration-plan-pack/package.json +0 -10
  396. package/skills/monitor/SKILL.md +0 -69
  397. package/skills/monitor/package.json +0 -33
  398. package/skills/monitor/src/index.ts +0 -34
  399. package/skills/monitor/tsconfig.json +0 -17
  400. package/skills/one-page-website/SKILL.md +0 -128
  401. package/skills/one-page-website/package.json +0 -34
  402. package/skills/one-page-website/src/design.ts +0 -336
  403. package/skills/one-page-website/src/docs.ts +0 -159
  404. package/skills/one-page-website/src/index.ts +0 -357
  405. package/skills/one-page-website/src/page.ts +0 -340
  406. package/skills/one-page-website/src/styles.ts +0 -508
  407. package/skills/one-page-website/src/types.ts +0 -78
  408. package/skills/one-page-website/tsconfig.json +0 -17
  409. package/skills/pdf-generate/CLAUDE.md +0 -19
  410. package/skills/pdf-generate/SKILL.md +0 -86
  411. package/skills/pdf-generate/package.json +0 -21
  412. package/skills/pdf-generate/src/cli.ts +0 -162
  413. package/skills/pdf-generate/src/html.ts +0 -84
  414. package/skills/pdf-generate/src/index.ts +0 -62
  415. package/skills/pdf-generate/src/markdown.ts +0 -27
  416. package/skills/pdf-generate/src/pdf-writer.ts +0 -78
  417. package/skills/pdf-generate/src/runtime.ts +0 -34
  418. package/skills/pdf-generate/src/security.ts +0 -37
  419. package/skills/pdf-generate/src/templates.ts +0 -311
  420. package/skills/pdf-generate/src/types.ts +0 -28
  421. package/skills/pdf-generate/tsconfig.json +0 -16
  422. package/skills/pdf-to-dataset/SKILL.md +0 -88
  423. package/skills/pdf-to-dataset/package.json +0 -37
  424. package/skills/pdf-to-dataset/src/index.ts +0 -790
  425. package/skills/pdf-to-dataset/tsconfig.json +0 -17
  426. package/skills/pdf-to-markdown/SKILL.md +0 -81
  427. package/skills/pdf-to-markdown/package.json +0 -35
  428. package/skills/pdf-to-markdown/src/index.ts +0 -694
  429. package/skills/pdf-to-markdown/tsconfig.json +0 -17
  430. package/skills/performance-audit-report/SKILL.md +0 -49
  431. package/skills/performance-audit-report/package.json +0 -10
  432. package/skills/pitch-deck/SKILL.md +0 -51
  433. package/skills/pitch-deck/package.json +0 -10
  434. package/skills/product-mockup/SKILL.md +0 -107
  435. package/skills/product-mockup/package.json +0 -32
  436. package/skills/product-mockup/src/cli.ts +0 -150
  437. package/skills/product-mockup/src/design.ts +0 -151
  438. package/skills/product-mockup/src/docs.ts +0 -134
  439. package/skills/product-mockup/src/index.ts +0 -182
  440. package/skills/product-mockup/src/render.ts +0 -407
  441. package/skills/product-mockup/src/types.ts +0 -66
  442. package/skills/product-mockup/tsconfig.json +0 -17
  443. package/skills/proposal-pack/SKILL.md +0 -53
  444. package/skills/proposal-pack/package.json +0 -10
  445. package/skills/read-csv/SKILL.md +0 -62
  446. package/skills/read-csv/package.json +0 -37
  447. package/skills/read-csv/src/index.ts +0 -356
  448. package/skills/read-csv/tsconfig.json +0 -17
  449. package/skills/read-excel/SKILL.md +0 -64
  450. package/skills/read-excel/package.json +0 -36
  451. package/skills/read-excel/src/index.ts +0 -266
  452. package/skills/read-excel/tsconfig.json +0 -17
  453. package/skills/regex-tester/CLAUDE.md +0 -19
  454. package/skills/regex-tester/package.json +0 -27
  455. package/skills/regex-tester/src/index.ts +0 -183
  456. package/skills/regex-tester/tsconfig.json +0 -10
  457. package/skills/repo-onboarding-report/SKILL.md +0 -52
  458. package/skills/repo-onboarding-report/package.json +0 -10
  459. package/skills/scancommitpr/SKILL.md +0 -178
  460. package/skills/scancommitpr/package.json +0 -34
  461. package/skills/scancommitpr/src/index.ts +0 -44
  462. package/skills/scancommitpr/tsconfig.json +0 -13
  463. package/skills/scancommitpush/SKILL.md +0 -174
  464. package/skills/scancommitpush/package.json +0 -32
  465. package/skills/scancommitpush/src/index.ts +0 -44
  466. package/skills/scancommitpush/tsconfig.json +0 -13
  467. package/skills/scientific-figure-check/CLAUDE.md +0 -19
  468. package/skills/scientific-figure-check/package.json +0 -29
  469. package/skills/scientific-figure-check/src/index.ts +0 -83
  470. package/skills/scientific-figure-check/tsconfig.json +0 -10
  471. package/skills/security-audit/CLAUDE.md +0 -19
  472. package/skills/security-audit/package.json +0 -27
  473. package/skills/security-audit/src/index.ts +0 -145
  474. package/skills/security-audit/tsconfig.json +0 -10
  475. package/skills/security-audit-report/SKILL.md +0 -52
  476. package/skills/security-audit-report/package.json +0 -10
  477. package/skills/seo-content-pack/SKILL.md +0 -54
  478. package/skills/seo-content-pack/package.json +0 -10
  479. package/skills/siteanalyze/SKILL.md +0 -25
  480. package/skills/siteanalyze/package.json +0 -27
  481. package/skills/siteanalyze/src/index.ts +0 -592
  482. package/skills/slide-deck-generator/SKILL.md +0 -93
  483. package/skills/slide-deck-generator/package.json +0 -38
  484. package/skills/slide-deck-generator/src/cli.ts +0 -133
  485. package/skills/slide-deck-generator/src/index.ts +0 -148
  486. package/skills/slide-deck-generator/src/model.ts +0 -307
  487. package/skills/slide-deck-generator/src/pptx.ts +0 -143
  488. package/skills/slide-deck-generator/src/render.ts +0 -248
  489. package/skills/slide-deck-generator/src/types.ts +0 -114
  490. package/skills/slide-deck-generator/src/utils.ts +0 -53
  491. package/skills/slide-deck-generator/tsconfig.json +0 -17
  492. package/skills/social-content-calendar/SKILL.md +0 -54
  493. package/skills/social-content-calendar/package.json +0 -10
  494. package/skills/split-pdf/CLAUDE.md +0 -19
  495. package/skills/split-pdf/package.json +0 -30
  496. package/skills/split-pdf/src/index.ts +0 -301
  497. package/skills/split-pdf/tsconfig.json +0 -10
  498. package/skills/statistical-test-selector/CLAUDE.md +0 -19
  499. package/skills/statistical-test-selector/package.json +0 -27
  500. package/skills/statistical-test-selector/src/index.ts +0 -75
  501. package/skills/statistical-test-selector/tsconfig.json +0 -10
  502. package/skills/test-suite-generator/SKILL.md +0 -51
  503. package/skills/test-suite-generator/package.json +0 -10
  504. package/skills/tmux-session/SKILL.md +0 -109
  505. package/skills/tmux-session/package.json +0 -33
  506. package/skills/tmux-session/src/index.ts +0 -34
  507. package/skills/tmux-session/tsconfig.json +0 -17
  508. package/skills/todos-plan/SKILL.md +0 -363
  509. package/skills/todos-plan/agents/openai.yaml +0 -4
  510. package/skills/todos-plan/package.json +0 -9
  511. package/skills/todos-plan/src/index.ts +0 -68
  512. package/skills/tsconfig.base.json +0 -12
  513. package/skills/validate-config/CLAUDE.md +0 -19
  514. package/skills/validate-config/package.json +0 -29
  515. package/skills/validate-config/src/index.ts +0 -56
  516. package/skills/validate-config/tsconfig.json +0 -10
  517. package/skills/video-downloader/CLAUDE.md +0 -19
  518. package/skills/video-downloader/package.json +0 -29
  519. package/skills/video-downloader/src/index.ts +0 -561
  520. package/skills/video-downloader/tsconfig.json +0 -10
  521. package/skills/video-highlight-pack/SKILL.md +0 -54
  522. package/skills/video-highlight-pack/package.json +0 -10
  523. package/skills/watermark/CLAUDE.md +0 -19
  524. package/skills/watermark/package.json +0 -32
  525. package/skills/watermark/src/index.ts +0 -587
  526. package/skills/watermark/tsconfig.json +0 -10
@@ -0,0 +1,30 @@
1
+ import type { ApiPrincipal, ServerArtifact, ServerRunRecord, SkillsProductStore } from "../server/types.js";
2
+ import type { GovernanceStore, LifecycleReceipt } from "./governance-store.js";
3
+ import type { RunObjectStore } from "./outputs.js";
4
+ export interface CancelOutcome {
5
+ run: ServerRunRecord;
6
+ /** The generation the cancellation fenced. */
7
+ fencedGeneration: number;
8
+ /** Artifacts moved to the quarantine prefix (or recorded for quarantine). */
9
+ quarantined: ServerArtifact[];
10
+ receipt: LifecycleReceipt;
11
+ /** True when the run was already terminal and cancellation was a no-op. */
12
+ alreadyTerminal: boolean;
13
+ }
14
+ export interface CancelServiceOptions {
15
+ store: SkillsProductStore;
16
+ governanceStore: GovernanceStore;
17
+ storage?: RunObjectStore;
18
+ }
19
+ export interface CancelService {
20
+ cancel(principal: ApiPrincipal, runId: string, requestedBy: string): Promise<CancelOutcome>;
21
+ }
22
+ /**
23
+ * Build the cancel service.
24
+ *
25
+ * Requires a store that implements transitionRun (generation fencing). A store
26
+ * without one cannot cancel safely - an unfenced cancel would let the worker's
27
+ * late write move a cancelled run back to succeeded - so the service refuses
28
+ * with FENCING_UNSUPPORTED rather than pretending.
29
+ */
30
+ export declare function createCancelService(options: CancelServiceOptions): CancelService;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Dispatcher adapter seam: how admitted runs leave this process.
3
+ *
4
+ * The interface is the contract — submit a run, cancel a run. The ECS adapter
5
+ * is the real implementation (execution/dispatchers/ecs.ts): CAS-claimed
6
+ * attempts, persisted launch intents, deterministic RunTask clientTokens, and
7
+ * lost-response reconciliation. The E2B lane is a typed stub pending the
8
+ * infinity integration.
9
+ *
10
+ * submit() takes the EXECUTION-domain admission (`FrozenAdmission`), whose
11
+ * `runId` (`run_<ts>_<hex>`) is the execution store's own key — NOT the
12
+ * server run record (`ServerRunRecord.id`, a UUID), which the execution store
13
+ * cannot resolve and would silently no-admit. Intended wiring: the
14
+ * POST /api/v1/runs handler creates a server run through `store.createRun`
15
+ * (billing/audit record, UUID id); the execution lane bridges it to this seam
16
+ * through `createSubmitRunService` (idempotent admission), which mints or
17
+ * returns the `FrozenAdmission`; then `dispatcher.submit(admission)` launches
18
+ * it. The bridge is mandatory — passing a server record here is a type error.
19
+ */
20
+ import type { FrozenAdmission } from "./execution/types.js";
21
+ import { EcsDispatcher, E2bDispatcher } from "./execution/index.js";
22
+ export { EcsDispatcher, E2bDispatcher };
23
+ export type { EcsDispatcherConfig, EcsDispatcherOptions, EcsRunTaskClient, EcsRunTaskInput, EcsRunTaskResult, EcsTaskState, LaunchOutcome } from "./execution/dispatchers/ecs.js";
24
+ /** Outcome of a dispatch attempt. */
25
+ export interface DispatchResult {
26
+ accepted: boolean;
27
+ /** Where the run was dispatched to, when known. */
28
+ target?: string;
29
+ /** Human-readable detail, credential-free. */
30
+ detail?: string;
31
+ }
32
+ /** A dispatcher takes admitted execution runs and puts them in front of an executor. */
33
+ export interface Dispatcher {
34
+ submit(run: FrozenAdmission): Promise<DispatchResult>;
35
+ cancel(runId: string): Promise<DispatchResult>;
36
+ }
37
+ /** Raised by adapters whose launch machinery is not implemented yet. */
38
+ export declare class DispatcherNotImplementedError extends Error {
39
+ constructor(adapter: string, capability: string);
40
+ }
@@ -0,0 +1,2 @@
1
+ import type { RunEventSink } from "./events.js";
2
+ export declare function defaultEventsSink(): RunEventSink;
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Run lifecycle events through @hasna/events — bounded metadata and stable
3
+ * pointers ONLY.
4
+ *
5
+ * The boundary is structural: buildRunLifecycleEvent starts from an allowlist
6
+ * of fields (run_id, skill, version, status, timestamps, correlation_id,
7
+ * attempt/lease pointers) and validateRunLifecycleEvent refuses anything else
8
+ * before it can be emitted - unknown keys, nested payloads, and any value that
9
+ * matches the credential patterns. Raw logs, artifact payloads, and inputs
10
+ * cannot reach the event bus by construction, and the negative fixture proves
11
+ * the guard fires rather than being asserted by prose.
12
+ */
13
+ import { type EventEnvelope } from "@hasna/events";
14
+ import type { ServerRunRecord } from "../server/types.js";
15
+ export declare const RUN_LIFECYCLE_EVENT_TYPES: readonly ["skills.run.admitted", "skills.run.started", "skills.run.terminal", "skills.run.cancelled"];
16
+ export type RunLifecycleEventType = (typeof RUN_LIFECYCLE_EVENT_TYPES)[number];
17
+ /**
18
+ * The full allowlist of data fields a run lifecycle event may carry.
19
+ *
20
+ * Every field is either a stable pointer or bounded metadata. Anything not in
21
+ * this list is a payload violation; any value matching the redaction patterns
22
+ * is a secret leak. Both checks run before emission.
23
+ */
24
+ export declare const RUN_LIFECYCLE_EVENT_FIELDS: readonly ["run_id", "attempt_id", "lease_generation", "correlation_id", "skill", "version", "status", "at"];
25
+ export interface RunLifecycleEventData {
26
+ run_id: string;
27
+ attempt_id: string;
28
+ lease_generation: number;
29
+ correlation_id?: string;
30
+ skill: string;
31
+ version?: string;
32
+ status: string;
33
+ at: string;
34
+ /**
35
+ * @hasna/events constrains event data to Record<string, unknown>. The index
36
+ * signature is required to satisfy it; the RUNTIME allowlist is the guard
37
+ * that actually bounds the payload (see RUN_LIFECYCLE_EVENT_FIELDS and
38
+ * validateRunLifecycleEvent) - this type cannot be the fence, only the
39
+ * shape of the legitimate payload.
40
+ */
41
+ [key: string]: unknown;
42
+ }
43
+ /** Build a bounded lifecycle event envelope for a run state. Never carries inputs, logs, or payloads. */
44
+ export declare function buildRunLifecycleEvent(type: RunLifecycleEventType, run: Pick<ServerRunRecord, "id" | "skill" | "status" | "correlationId" | "leaseGeneration" | "createdAt" | "completedAt">, options?: {
45
+ version?: string;
46
+ at?: string;
47
+ source?: string;
48
+ }): EventEnvelope<RunLifecycleEventData>;
49
+ /**
50
+ * Refuse any event payload that is not bounded metadata + stable pointers.
51
+ *
52
+ * Rejects, with EVENT_PAYLOAD_REJECTED:
53
+ * - unknown top-level data keys (an input, a log array, an artifact body);
54
+ * - non-scalar values outside the allowlist;
55
+ * - any value whose text matches the credential patterns.
56
+ */
57
+ export declare function validateRunLifecycleEvent(event: EventEnvelope<RunLifecycleEventData>): void;
58
+ /** A sink for lifecycle events; swap in a recording sink in tests. */
59
+ export type RunEventSink = (event: EventEnvelope<RunLifecycleEventData>) => Promise<void>;
60
+ export interface RunEventEmitterOptions {
61
+ /** Emission sink. Defaults to @hasna/events' EventsClient over a JsonEventsStore. */
62
+ sink?: RunEventSink;
63
+ versionFor?: (run: Pick<ServerRunRecord, "skill">) => Promise<string | undefined>;
64
+ /** When false (default), a sink failure is reported but never fails the run transition. */
65
+ failOpen?: boolean;
66
+ }
67
+ export interface RunEventEmitter {
68
+ emit(type: RunLifecycleEventType, run: ServerRunRecord): Promise<void>;
69
+ }
70
+ /**
71
+ * Emit one validated lifecycle event.
72
+ *
73
+ * Validation is mandatory and runs before the sink is touched; a payload that
74
+ * fails validation throws EVEN when failOpen is set - a secret must never be
75
+ * dropped into a fail-open hole. Sink failures (an unreachable events store)
76
+ * are reported via the returned boolean / an optional error and do not fail
77
+ * the run itself, because a run that succeeded is still a run that succeeded.
78
+ */
79
+ export declare function createRunEventEmitter(options?: RunEventEmitterOptions): RunEventEmitter;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Idempotent admission: the submitRun service.
3
+ *
4
+ * Every input that must not change between attempts is frozen into the
5
+ * admission record under one stable run_id: tenant, skill id + version,
6
+ * canonical bundle digest, runtime-image digest, input digest, and the policy
7
+ * + limits the run executes under. A duplicate submission — same
8
+ * Idempotency-Key, or the same (tenant, skill, version, bundle digest, input
9
+ * digest) tuple — returns the existing run instead of minting a second one.
10
+ */
11
+ import type { ImageProfileRegistry } from "./image-profile.js";
12
+ import type { RunExecutionStore } from "./storage.js";
13
+ import { type FrozenAdmission, type RunLimits, type RunPolicy, type RuntimeName } from "./types.js";
14
+ export interface SubmitRunInput {
15
+ tenantId: string;
16
+ skillId: string;
17
+ skillVersion: string;
18
+ /** Canonical sha256 of the skill bundle. */
19
+ bundleDigest: string;
20
+ input: unknown;
21
+ idempotencyKey: string;
22
+ runtime: RuntimeName;
23
+ /** system_deps declared by the skill manifest. */
24
+ systemDeps?: string[];
25
+ policy?: Partial<RunPolicy>;
26
+ limits?: Partial<RunLimits>;
27
+ }
28
+ export interface SubmitRunResult {
29
+ run: FrozenAdmission;
30
+ created: boolean;
31
+ }
32
+ export declare const DEFAULT_RUN_POLICY: RunPolicy;
33
+ export declare const DEFAULT_RUN_LIMITS: RunLimits;
34
+ export interface SubmitRunService {
35
+ submit(input: SubmitRunInput): Promise<SubmitRunResult>;
36
+ }
37
+ export interface SubmitRunServiceOptions {
38
+ store: RunExecutionStore;
39
+ imageProfiles: ImageProfileRegistry;
40
+ now?: () => Date;
41
+ }
42
+ export declare function createSubmitRunService(options: SubmitRunServiceOptions): SubmitRunService;
43
+ /** Canonical digest of a run input: stable serialization, sha256. */
44
+ export declare function digestInput(input: unknown): string;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * E2B-lane dispatcher stub.
3
+ *
4
+ * Implements the sdk `Dispatcher` interface with submit/cancel typed and
5
+ * present, but the launch machinery is NOT built: the latency-sensitive E2B
6
+ * lane is a TODO for the infinity integration (plan P5: "Fargate RunTask
7
+ * first, E2B second"). Every call fails closed with `accepted: false` — a
8
+ * run is never reported as dispatched by a lane that cannot dispatch it.
9
+ */
10
+ import type { DispatchResult, Dispatcher } from "../../dispatcher.js";
11
+ import type { FrozenAdmission } from "../types.js";
12
+ /** Marker so callers and tests can detect the unimplemented lane by type. */
13
+ export declare const E2B_LANE_STATUS: "e2b-lane-todo-infinity";
14
+ export declare class E2bDispatcher implements Dispatcher {
15
+ submit(_run: FrozenAdmission): Promise<DispatchResult>;
16
+ cancel(_runId: string): Promise<DispatchResult>;
17
+ }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * ECS dispatcher adapter.
3
+ *
4
+ * Implements the sdk `Dispatcher` interface (submit/cancel) with the launch
5
+ * machinery the interface seam leaves to this module:
6
+ *
7
+ * 1. CAS-claim the next attempt's `attempt_id` + `lease_generation`
8
+ * (stale generation rejected),
9
+ * 2. persist the launch intent (clientToken, startedBy, request digest)
10
+ * BEFORE calling ECS,
11
+ * 3. call RunTask with a deterministic clientToken derived from
12
+ * (run_id, attempt_id) and an immutable request digest,
13
+ * 4. on a lost RunTask response, reconcile the SAME token — list tasks by
14
+ * startedBy, describe them — before any new attempt; a new attempt is
15
+ * forbidden until the previous launch is proven absent or terminal.
16
+ *
17
+ * The AWS SDK is never called from tests: the `EcsRunTaskClient` interface is
18
+ * the seam, `createAwsEcsClient` is the only place the real SDK is imported,
19
+ * and every test injects a mock client.
20
+ *
21
+ * Nothing here names a concrete cluster, task definition, subnet, or account:
22
+ * all infrastructure identifiers come from configuration (R4).
23
+ */
24
+ import type { DispatchResult, Dispatcher } from "../../dispatcher.js";
25
+ import type { RunExecutionStore } from "../storage.js";
26
+ import type { AttemptRecord, FrozenAdmission } from "../types.js";
27
+ import { type RunStateMachine } from "../state-machine.js";
28
+ import { type ReceiptService } from "../receipts.js";
29
+ /** ClientToken bound: ECS RunTask accepts up to 32 ASCII characters. */
30
+ export declare const CLIENT_TOKEN_BYTES = 16;
31
+ export interface EcsTaskState {
32
+ taskArn: string;
33
+ lastStatus: string;
34
+ /** Set when the task reached a terminal status. */
35
+ stopCode?: string | null;
36
+ exitCode?: number | null;
37
+ }
38
+ export interface EcsRunTaskInput {
39
+ cluster: string;
40
+ taskDefinition: string;
41
+ containerName: string;
42
+ clientToken: string;
43
+ startedBy: string;
44
+ launchType: "FARGATE";
45
+ cpu: string;
46
+ memory: string;
47
+ subnets: string[];
48
+ securityGroups: string[];
49
+ environment: {
50
+ name: string;
51
+ value: string;
52
+ }[];
53
+ }
54
+ export interface EcsRunTaskResult {
55
+ taskArn: string;
56
+ }
57
+ /** The seam every test mocks; the real implementation lives in createAwsEcsClient. */
58
+ export interface EcsRunTaskClient {
59
+ runTask(input: EcsRunTaskInput): Promise<EcsRunTaskResult>;
60
+ /** Task arns launched with a given startedBy token. */
61
+ listTasksByStartedBy(startedBy: string): Promise<string[]>;
62
+ describeTasks(taskArns: string[]): Promise<EcsTaskState[]>;
63
+ stopTask(taskArn: string): Promise<void>;
64
+ }
65
+ export interface EcsDispatcherConfig {
66
+ cluster: string;
67
+ taskDefinition: string;
68
+ containerName: string;
69
+ subnets: string[];
70
+ securityGroups: string[];
71
+ region: string;
72
+ }
73
+ export interface EcsDispatcherOptions {
74
+ store: RunExecutionStore;
75
+ stateMachine?: RunStateMachine;
76
+ receipts?: ReceiptService;
77
+ /** Claim identity; defaults to "dispatcher". */
78
+ workerId?: string;
79
+ now?: () => Date;
80
+ }
81
+ export type LaunchOutcome = {
82
+ kind: "launched";
83
+ attemptId: string;
84
+ taskId: string;
85
+ } | {
86
+ kind: "already-launched";
87
+ attemptId: string;
88
+ taskId: string;
89
+ } | {
90
+ kind: "previous-terminal";
91
+ attemptId: string;
92
+ } | {
93
+ kind: "ambiguous";
94
+ attemptId: string;
95
+ } | {
96
+ kind: "launch-failed-absent";
97
+ attemptId: string;
98
+ } | {
99
+ kind: "claim-refused";
100
+ attemptId: string;
101
+ reason: string;
102
+ } | {
103
+ kind: "no-admission";
104
+ } | {
105
+ kind: "run-terminal";
106
+ status: string;
107
+ };
108
+ /**
109
+ * Deterministic ECS clientToken derived from (run_id, attempt_id). Same input
110
+ * always yields the same token, so a retried or reconciled launch is
111
+ * idempotent from ECS's point of view.
112
+ */
113
+ export declare function clientTokenFor(runId: string, attemptId: string): string;
114
+ /** startedBy token, the durable handle reconciliation lists tasks by. */
115
+ export declare function startedByFor(runId: string, attemptNumber: number): string;
116
+ /** Immutable digest of the frozen request this attempt launches. */
117
+ export declare function requestDigestFor(admission: FrozenAdmission, attemptId: string): string;
118
+ export declare class EcsDispatcher implements Dispatcher {
119
+ private readonly config;
120
+ private readonly client;
121
+ private readonly store;
122
+ private readonly stateMachine;
123
+ private readonly receipts;
124
+ private readonly workerId;
125
+ private readonly now;
126
+ constructor(config: EcsDispatcherConfig, client: EcsRunTaskClient, options: EcsDispatcherOptions);
127
+ /** sdk Dispatcher surface: submit an ADMITTED run (execution domain) to the launch machinery. */
128
+ submit(run: FrozenAdmission): Promise<DispatchResult>;
129
+ /** sdk Dispatcher surface: fence the current generation and stop the task. */
130
+ cancel(runId: string): Promise<DispatchResult>;
131
+ /**
132
+ * Launch the next attempt of a run.
133
+ *
134
+ * A previous attempt whose launch outcome is unknown (launching / ambiguous /
135
+ * launched) is reconciled FIRST. Only when the previous launch is proven
136
+ * absent or terminal is a new attempt minted and claimed.
137
+ */
138
+ launchAttempt(runId: string): Promise<LaunchOutcome>;
139
+ /** Reconcile an attempt whose launch outcome is unknown. */
140
+ reconcile(admission: FrozenAdmission, attempt: AttemptRecord): Promise<LaunchOutcome>;
141
+ /** Resolve the task arn for the current attempt, reconciling if needed. */
142
+ private resolveTaskArn;
143
+ private runTaskInput;
144
+ private writeCancellationReceipt;
145
+ }
146
+ /**
147
+ * The one place the real AWS SDK is wired in. Returns a client bound to the
148
+ * configured region; credentials resolve through the standard SDK chain.
149
+ * Tests never construct this — they inject a mock `EcsRunTaskClient`.
150
+ */
151
+ export declare function createAwsEcsClient(region: string): EcsRunTaskClient;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Immutable image profiles.
3
+ *
4
+ * A run's image is the union of (a) a pinned runtime image — bun, node, or
5
+ * python3 at an exact version, carrying the supervisor and NO skills corpus;
6
+ * the bundle is fetched by digest at run time — and (b) an optional prebuilt
7
+ * dependency layer built at publish time when the skill manifest's
8
+ * `system_deps` are allowlisted. Nothing is installed at execution time.
9
+ *
10
+ * Version pins live in code; image digests and the system_deps allowlist are
11
+ * deployment configuration, because a digest names a concrete artifact in a
12
+ * concrete registry. An un-pinned runtime or an unknown system_deps entry
13
+ * fails closed at admission — a launch never carries a guess.
14
+ */
15
+ import type { FrozenAdmission, RuntimeName } from "./types.js";
16
+ export type { RuntimeName };
17
+ export interface PinnedRuntime {
18
+ runtime: RuntimeName;
19
+ /** Exact pinned runtime version. */
20
+ version: string;
21
+ /** Image digest; null until deployment config supplies one. */
22
+ imageDigest: string | null;
23
+ }
24
+ export interface DependencyLayerRule {
25
+ /** Canonical system_deps key: sorted, unique, comma-joined. */
26
+ canonicalKey: string;
27
+ /** Prebuilt layer tag produced at publish time. */
28
+ layerTag: string;
29
+ }
30
+ export interface ImageProfileRegistryConfig {
31
+ runtimes: PinnedRuntime[];
32
+ /** system_deps allowlist: canonical key -> prebuilt layer tag. */
33
+ dependencyLayers: Record<string, string>;
34
+ }
35
+ export interface ResolvedImageProfile {
36
+ runtime: PinnedRuntime;
37
+ runtimeImageDigest: string;
38
+ dependencyLayerTag: string | null;
39
+ }
40
+ export type ImageProfileResolutionFailure = {
41
+ reason: "UNKNOWN_RUNTIME";
42
+ runtime: string;
43
+ } | {
44
+ reason: "UNPINNED_RUNTIME";
45
+ runtime: RuntimeName;
46
+ } | {
47
+ reason: "UNALLOWED_SYSTEM_DEPS";
48
+ systemDeps: string[];
49
+ };
50
+ export declare class ImageProfileResolutionError extends Error {
51
+ readonly failure: ImageProfileResolutionFailure;
52
+ constructor(failure: ImageProfileResolutionFailure);
53
+ }
54
+ /**
55
+ * Pinned runtime versions. These match what the package itself is built with
56
+ * (bun 1.3.14) plus the node and python lines the corpus's runtime contracts
57
+ * name. Digests are deployment configuration and start null: admission refuses
58
+ * an unpinned launch.
59
+ */
60
+ export declare const DEFAULT_IMAGE_PROFILES: ImageProfileRegistryConfig;
61
+ export interface ImageProfileRegistry {
62
+ resolve(runtime: RuntimeName, systemDeps: string[]): ResolvedImageProfile;
63
+ }
64
+ export declare function createImageProfileRegistry(config?: ImageProfileRegistryConfig): ImageProfileRegistry;
65
+ /** Canonical system_deps key: sorted, unique, comma-joined. */
66
+ export declare function canonicalSystemDepsKey(systemDeps: string[]): string;
67
+ /** Build an allowlist entry from a manifest's declared system_deps. */
68
+ export declare function dependencyLayerRule(layerTag: string, systemDeps: string[]): DependencyLayerRule;
69
+ /** Resolve + freeze the image half of an admission. */
70
+ export declare function resolveImageProfile(registry: ImageProfileRegistry, input: {
71
+ runtime: RuntimeName;
72
+ systemDeps: string[];
73
+ }): Pick<FrozenAdmission, "runtime" | "runtimeImageDigest" | "dependencyLayerTag">;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Cloud-run execution machinery, exported through the sdk surface.
3
+ *
4
+ * Idempotent admission, the run state machine (admitted → leased → running →
5
+ * terminal), the immutable image-profile registry, per-attempt receipts, and
6
+ * the dispatcher adapters (ECS with atomic-launch reconciliation, E2B stub).
7
+ */
8
+ export * from "./types.js";
9
+ export * from "./storage.js";
10
+ export * from "./admission.js";
11
+ export * from "./state-machine.js";
12
+ export * from "./image-profile.js";
13
+ export * from "./receipts.js";
14
+ export * from "./dispatchers/ecs.js";
15
+ export * from "./dispatchers/e2b.js";
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Per-attempt receipts.
3
+ *
4
+ * Every attempt gets an immutable receipt: run_id, attempt_id,
5
+ * lease_generation, launch token (clientToken + startedBy), task id,
6
+ * timestamps, image + bundle digests, the frozen policy, and — once the
7
+ * attempt reaches a terminal outcome — exit code and artifact/log pointers.
8
+ * Receipts are written through the storage adapter; the terminal receipt
9
+ * finalizes the run row.
10
+ */
11
+ import type { RunExecutionStore } from "./storage.js";
12
+ import type { AttemptReceipt, AttemptRecord, FrozenAdmission, TerminalRunStatus } from "./types.js";
13
+ export type { AttemptReceipt };
14
+ export interface CreateAttemptReceiptInput {
15
+ admission: FrozenAdmission;
16
+ attempt: AttemptRecord;
17
+ /** ECS task arn, when the launch is confirmed. */
18
+ taskId: string | null;
19
+ launchedAt: string;
20
+ artifactPointers?: string[];
21
+ logPointers?: string[];
22
+ }
23
+ export interface FinalizeAttemptReceiptInput {
24
+ runId: string;
25
+ attemptId: string;
26
+ status: TerminalRunStatus;
27
+ exitCode: number | null;
28
+ completedAt: string;
29
+ artifactPointers?: string[];
30
+ logPointers?: string[];
31
+ costCents?: number | null;
32
+ }
33
+ export interface ReceiptService {
34
+ /** Persist the launch-time receipt before (or right after) the launch call. */
35
+ recordLaunch(input: CreateAttemptReceiptInput): Promise<AttemptReceipt>;
36
+ /** Finalize the attempt's receipt; also finalizes the run row. */
37
+ finalize(input: FinalizeAttemptReceiptInput): Promise<{
38
+ receipt: AttemptReceipt | null;
39
+ runId: string;
40
+ status: TerminalRunStatus;
41
+ }>;
42
+ get(runId: string, attemptId: string): Promise<AttemptReceipt | null>;
43
+ }
44
+ export declare function createReceiptService(store: RunExecutionStore): ReceiptService;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Run state machine: admitted → leased → running → terminal.
3
+ *
4
+ * Every transition is recorded through the storage adapter. Claims are CAS on
5
+ * the attempt's lease_generation; a stale claim is rejected. Retries keep the
6
+ * run_id and mint a new attempt_id with a fresh lease_generation counter.
7
+ */
8
+ import type { ClaimAttemptInput, ClaimResult, ExecutionRunStatus, RunExecutionStore } from "./storage.js";
9
+ import type { TerminalRunStatus } from "./types.js";
10
+ export type { ClaimResult };
11
+ /** The only legal edges of the state machine. */
12
+ export declare const LEGAL_TRANSITIONS: Record<ExecutionRunStatus, ExecutionRunStatus[]>;
13
+ export type TransitionFailure = "NO_SUCH_RUN" | "NO_SUCH_ATTEMPT" | "INVALID_TRANSITION" | "ATTEMPT_TERMINAL" | "RUN_TERMINAL" | "RUN_CANCELLED";
14
+ export type TransitionResult = {
15
+ ok: true;
16
+ } | {
17
+ ok: false;
18
+ reason: TransitionFailure;
19
+ };
20
+ export interface RunStateMachine {
21
+ /** CAS-claim an attempt: expectedLeaseGeneration must match. */
22
+ claim(input: ClaimAttemptInput): Promise<ClaimResult>;
23
+ /** admitted → leased (claim recorded as a transition). */
24
+ lease(input: ClaimAttemptInput): Promise<ClaimResult>;
25
+ /** leased → running. */
26
+ start(runId: string, attemptId: string): Promise<TransitionResult>;
27
+ /** running → terminal; finalizes the run row. */
28
+ terminate(input: {
29
+ runId: string;
30
+ attemptId: string;
31
+ status: TerminalRunStatus;
32
+ }): Promise<TransitionResult>;
33
+ /** Cancel a run: fences the current generation and moves it to terminal. */
34
+ cancel(runId: string): Promise<TransitionResult>;
35
+ transition(runId: string, from: ExecutionRunStatus, to: ExecutionRunStatus, attemptId?: string | null): Promise<TransitionResult>;
36
+ getStatus(runId: string): Promise<ExecutionRunStatus | null>;
37
+ }
38
+ export declare function createRunStateMachine(store: RunExecutionStore): RunStateMachine;