@hasna/skills 0.1.62 → 0.1.64

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 (541) hide show
  1. package/README.md +38 -12
  2. package/bin/index.js +15743 -21709
  3. package/bin/mcp.js +3866 -11522
  4. package/bin/migrate.js +281 -35
  5. package/bin/server.js +5805 -2682
  6. package/bin/worker.js +5280 -2388
  7. package/dist/cli/commands/publish.d.ts +2 -0
  8. package/dist/cli/commands/registry-reconcile.d.ts +2 -0
  9. package/dist/cli/components/App.d.ts +2 -1
  10. package/dist/cli/components/CategorySelect.d.ts +2 -1
  11. package/dist/cli/components/Header.d.ts +2 -1
  12. package/dist/cli/components/InstallProgress.d.ts +2 -1
  13. package/dist/cli/components/SearchView.d.ts +2 -1
  14. package/dist/cli/components/SkillSelect.d.ts +2 -1
  15. package/dist/index.d.ts +5 -2
  16. package/dist/index.js +5386 -13739
  17. package/dist/lib/agent-sync.d.ts +61 -6
  18. package/dist/lib/auth-store.d.ts +37 -0
  19. package/dist/lib/config.d.ts +51 -0
  20. package/dist/lib/home-adoption.d.ts +91 -0
  21. package/dist/lib/home-census.d.ts +26 -0
  22. package/dist/lib/home-migration.d.ts +60 -0
  23. package/dist/lib/native-storage.d.ts +1 -1
  24. package/dist/lib/portable-skills-files.d.ts +21 -1
  25. package/dist/lib/portable-skills-types.d.ts +46 -0
  26. package/dist/lib/portable-skills.d.ts +35 -6
  27. package/dist/lib/pull.d.ts +97 -0
  28. package/dist/lib/registry-reconcile.d.ts +114 -0
  29. package/dist/lib/registry.d.ts +7 -4
  30. package/dist/lib/remote-client.d.ts +124 -1
  31. package/dist/lib/remote-registry.d.ts +26 -0
  32. package/dist/lib/revision.d.ts +29 -0
  33. package/dist/lib/run-state.d.ts +5 -0
  34. package/dist/lib/skill-bundles.d.ts +54 -0
  35. package/dist/lib/skill-contract.d.ts +35 -0
  36. package/dist/lib/skill-hash.d.ts +77 -0
  37. package/dist/sdk/cancel.d.ts +30 -0
  38. package/dist/sdk/dispatcher.d.ts +40 -0
  39. package/dist/sdk/event-sink.d.ts +2 -0
  40. package/dist/sdk/events.d.ts +79 -0
  41. package/dist/sdk/execution/admission.d.ts +44 -0
  42. package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
  43. package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
  44. package/dist/sdk/execution/image-profile.d.ts +73 -0
  45. package/dist/sdk/execution/index.d.ts +15 -0
  46. package/dist/sdk/execution/receipts.d.ts +44 -0
  47. package/dist/sdk/execution/state-machine.d.ts +38 -0
  48. package/dist/sdk/execution/storage.d.ts +158 -0
  49. package/dist/sdk/execution/types.d.ts +130 -0
  50. package/dist/sdk/executor.d.ts +17 -0
  51. package/dist/sdk/governance-store.d.ts +156 -0
  52. package/dist/sdk/governance.d.ts +92 -0
  53. package/dist/sdk/index.d.ts +26 -0
  54. package/dist/sdk/index.js +49728 -0
  55. package/dist/sdk/offline.d.ts +16 -0
  56. package/dist/sdk/outputs.d.ts +71 -0
  57. package/dist/sdk/registry.d.ts +28 -0
  58. package/dist/sdk/runs.d.ts +229 -0
  59. package/dist/sdk/server.d.ts +35 -0
  60. package/dist/sdk/spend.d.ts +36 -0
  61. package/dist/sdk/storage.d.ts +25 -0
  62. package/dist/server/app.d.ts +42 -0
  63. package/dist/server/artifact-storage.d.ts +102 -0
  64. package/dist/server/auth.d.ts +5 -0
  65. package/dist/server/config.d.ts +50 -0
  66. package/dist/server/database-url.d.ts +42 -0
  67. package/dist/server/handlers.d.ts +3 -0
  68. package/dist/server/index.d.ts +2 -0
  69. package/dist/server/migrate.d.ts +13 -0
  70. package/dist/server/migrations-dir.d.ts +18 -0
  71. package/dist/server/redaction.d.ts +1 -0
  72. package/dist/server/registry.d.ts +5 -0
  73. package/dist/server/rows.d.ts +24 -0
  74. package/dist/server/skills-api.d.ts +170 -0
  75. package/dist/server/sqlite-store.d.ts +131 -0
  76. package/dist/server/store-fixtures.d.ts +25 -0
  77. package/dist/server/store.d.ts +170 -0
  78. package/dist/server/types.d.ts +337 -0
  79. package/dist/server/worker.d.ts +4 -0
  80. package/dist/storage.js +39 -2
  81. package/docs/skill-standard.md +211 -39
  82. package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
  83. package/migrations/postgres/0004_hosted_pins.sql +28 -0
  84. package/migrations/postgres/0005_revision_tombstone_registry.sql +37 -0
  85. package/migrations/postgres/0005_tag_projection.sql +36 -0
  86. package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
  87. package/migrations/sqlite/0004_hosted_pins.sql +21 -0
  88. package/migrations/sqlite/0005_revision_tombstone_registry.sql +18 -0
  89. package/migrations/sqlite/0005_tag_projection.sql +25 -0
  90. package/package.json +12 -8
  91. package/schemas/skill.schema.json +181 -0
  92. package/agent-skills/README.md +0 -41
  93. package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
  94. package/agent-skills/inbox/SKILL.md +0 -25
  95. package/agent-skills/inbox/scripts/inbox +0 -109
  96. package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
  97. package/agent-skills/inbox-monitor/SKILL.md +0 -41
  98. package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
  99. package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
  100. package/agent-skills/merge-pr/SKILL.md +0 -85
  101. package/agent-skills/merge-pr/references/merge-safety.md +0 -82
  102. package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
  103. package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
  104. package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
  105. package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
  106. package/agent-skills/skill-goal-execute/SKILL.md +0 -115
  107. package/agent-skills/skill-login/SKILL.md +0 -109
  108. package/agent-skills/skill-project-create/SKILL.md +0 -91
  109. package/agent-skills/skill-publish/SKILL.md +0 -254
  110. package/agent-skills/skill-publish/scripts/capture_registry.js +0 -47
  111. package/agent-skills/skill-publish/scripts/publish_with_git_head.sh +0 -143
  112. package/agent-skills/skill-publish/scripts/test_publish_with_git_head.sh +0 -231
  113. package/skills/_common/auth.ts +0 -45
  114. package/skills/_common/http-client.ts +0 -143
  115. package/skills/_common/index.ts +0 -26
  116. package/skills/_common/install.sh +0 -7
  117. package/skills/_common/installer.ts +0 -72
  118. package/skills/_common/skill-install.ts +0 -37
  119. package/skills/_common/vision.ts +0 -374
  120. package/skills/ad-creative-pack/SKILL.md +0 -55
  121. package/skills/ad-creative-pack/package.json +0 -10
  122. package/skills/analyze-data/CLAUDE.md +0 -16
  123. package/skills/analyze-data/SKILL.md +0 -112
  124. package/skills/analyze-data/package.json +0 -23
  125. package/skills/analyze-data/src/analysis.ts +0 -401
  126. package/skills/analyze-data/src/cli.ts +0 -66
  127. package/skills/analyze-data/src/formatters.ts +0 -235
  128. package/skills/analyze-data/src/index.ts +0 -74
  129. package/skills/analyze-data/src/logger.ts +0 -36
  130. package/skills/analyze-data/src/parsers.ts +0 -57
  131. package/skills/analyze-data/src/stats.ts +0 -151
  132. package/skills/analyze-data/src/types.ts +0 -85
  133. package/skills/analyze-data/tsconfig.json +0 -19
  134. package/skills/api-docs-portal/SKILL.md +0 -84
  135. package/skills/api-docs-portal/package.json +0 -35
  136. package/skills/api-docs-portal/src/index.ts +0 -919
  137. package/skills/api-docs-portal/tsconfig.json +0 -17
  138. package/skills/api-test-suite/CLAUDE.md +0 -19
  139. package/skills/api-test-suite/package.json +0 -27
  140. package/skills/api-test-suite/src/index.ts +0 -381
  141. package/skills/api-test-suite/tsconfig.json +0 -10
  142. package/skills/audio-extract/CLAUDE.md +0 -9
  143. package/skills/audio-extract/SKILL.md +0 -73
  144. package/skills/audio-extract/package.json +0 -23
  145. package/skills/audio-extract/src/index.ts +0 -323
  146. package/skills/audio-extract/tsconfig.json +0 -11
  147. package/skills/bio-sequence-tool/CLAUDE.md +0 -19
  148. package/skills/bio-sequence-tool/package.json +0 -27
  149. package/skills/bio-sequence-tool/src/index.ts +0 -85
  150. package/skills/bio-sequence-tool/tsconfig.json +0 -10
  151. package/skills/blog-article/CLAUDE.md +0 -12
  152. package/skills/blog-article/SKILL.md +0 -55
  153. package/skills/blog-article/package.json +0 -10
  154. package/skills/blog-article/tsconfig.json +0 -10
  155. package/skills/brand-assets/SKILL.md +0 -118
  156. package/skills/brand-assets/package.json +0 -35
  157. package/skills/brand-assets/src/cli.ts +0 -155
  158. package/skills/brand-assets/src/constants.ts +0 -8
  159. package/skills/brand-assets/src/extract.ts +0 -236
  160. package/skills/brand-assets/src/index.ts +0 -668
  161. package/skills/brand-assets/src/types.ts +0 -59
  162. package/skills/brand-assets/tsconfig.json +0 -17
  163. package/skills/brand-kit/SKILL.md +0 -54
  164. package/skills/brand-kit/package.json +0 -10
  165. package/skills/businessactivity/CLAUDE.md +0 -176
  166. package/skills/businessactivity/LICENSE +0 -192
  167. package/skills/businessactivity/README.md +0 -287
  168. package/skills/businessactivity/package.json +0 -25
  169. package/skills/businessactivity/scripts/publish.ts +0 -210
  170. package/skills/businessactivity/src/commands/activity.ts +0 -211
  171. package/skills/businessactivity/src/commands/function.ts +0 -227
  172. package/skills/businessactivity/src/commands/owner.ts +0 -193
  173. package/skills/businessactivity/src/commands/profile.ts +0 -121
  174. package/skills/businessactivity/src/commands/responsibility.ts +0 -264
  175. package/skills/businessactivity/src/commands/team.ts +0 -244
  176. package/skills/businessactivity/src/commands/workflow.ts +0 -359
  177. package/skills/businessactivity/src/index.ts +0 -3
  178. package/skills/businessactivity/src/lib/config.ts +0 -167
  179. package/skills/businessactivity/src/lib/output.ts +0 -76
  180. package/skills/businessactivity/src/lib/paths.ts +0 -79
  181. package/skills/businessactivity/src/lib/storage.ts +0 -95
  182. package/skills/businessactivity/src/types/index.ts +0 -86
  183. package/skills/businessactivity/tsconfig.json +0 -29
  184. package/skills/codefix/LICENSE +0 -192
  185. package/skills/codefix/README.md +0 -232
  186. package/skills/codefix/SKILL.md +0 -94
  187. package/skills/codefix/package.json +0 -21
  188. package/skills/codefix/src/fixers/batch.ts +0 -213
  189. package/skills/codefix/src/fixers/detector.ts +0 -160
  190. package/skills/codefix/src/fixers/index.ts +0 -7
  191. package/skills/codefix/src/fixers/runner.ts +0 -522
  192. package/skills/codefix/src/index-local.ts +0 -431
  193. package/skills/codefix/src/index.ts +0 -4
  194. package/skills/codefix/src/types.ts +0 -211
  195. package/skills/codefix/tsconfig.json +0 -15
  196. package/skills/commitpush/SKILL.md +0 -57
  197. package/skills/commitpush/package.json +0 -33
  198. package/skills/commitpush/src/index.ts +0 -34
  199. package/skills/commitpush/tsconfig.json +0 -17
  200. package/skills/commitpushpr/SKILL.md +0 -55
  201. package/skills/commitpushpr/package.json +0 -33
  202. package/skills/commitpushpr/src/index.ts +0 -34
  203. package/skills/commitpushpr/tsconfig.json +0 -17
  204. package/skills/compress-video/CLAUDE.md +0 -9
  205. package/skills/compress-video/SKILL.md +0 -79
  206. package/skills/compress-video/package.json +0 -23
  207. package/skills/compress-video/src/index.ts +0 -473
  208. package/skills/compress-video/tsconfig.json +0 -11
  209. package/skills/contract-review-report/SKILL.md +0 -52
  210. package/skills/contract-review-report/package.json +0 -10
  211. package/skills/customer-feedback-report/SKILL.md +0 -52
  212. package/skills/customer-feedback-report/package.json +0 -10
  213. package/skills/dashboard-builder/CLAUDE.md +0 -19
  214. package/skills/dashboard-builder/package.json +0 -29
  215. package/skills/dashboard-builder/src/index.ts +0 -150
  216. package/skills/dashboard-builder/tsconfig.json +0 -10
  217. package/skills/data-anonymizer/CLAUDE.md +0 -19
  218. package/skills/data-anonymizer/package.json +0 -27
  219. package/skills/data-anonymizer/src/index.ts +0 -183
  220. package/skills/data-anonymizer/tsconfig.json +0 -10
  221. package/skills/database-explorer/CLAUDE.md +0 -19
  222. package/skills/database-explorer/package.json +0 -29
  223. package/skills/database-explorer/src/index.ts +0 -95
  224. package/skills/database-explorer/tsconfig.json +0 -10
  225. package/skills/diff-viewer/CLAUDE.md +0 -19
  226. package/skills/diff-viewer/package.json +0 -30
  227. package/skills/diff-viewer/src/index.ts +0 -164
  228. package/skills/diff-viewer/tsconfig.json +0 -10
  229. package/skills/doc-read/SKILL.md +0 -45
  230. package/skills/doc-read/package.json +0 -29
  231. package/skills/doc-read/src/index.ts +0 -324
  232. package/skills/doc-read/tsconfig.json +0 -8
  233. package/skills/domainpurchase/LICENSE +0 -192
  234. package/skills/domainpurchase/SKILL.md +0 -29
  235. package/skills/domainpurchase/package.json +0 -30
  236. package/skills/domainpurchase/src/index.ts +0 -3
  237. package/skills/domainpurchase/tsconfig.json +0 -21
  238. package/skills/email-sequence/SKILL.md +0 -53
  239. package/skills/email-sequence/package.json +0 -10
  240. package/skills/experiment-power-calculator/CLAUDE.md +0 -19
  241. package/skills/experiment-power-calculator/package.json +0 -29
  242. package/skills/experiment-power-calculator/src/index.ts +0 -86
  243. package/skills/experiment-power-calculator/tsconfig.json +0 -10
  244. package/skills/extract-frames/CLAUDE.md +0 -19
  245. package/skills/extract-frames/package.json +0 -27
  246. package/skills/extract-frames/src/index.ts +0 -616
  247. package/skills/extract-frames/tsconfig.json +0 -10
  248. package/skills/file-organizer/CLAUDE.md +0 -19
  249. package/skills/file-organizer/package.json +0 -27
  250. package/skills/file-organizer/src/index.ts +0 -91
  251. package/skills/file-organizer/tsconfig.json +0 -10
  252. package/skills/folder-tree/CLAUDE.md +0 -19
  253. package/skills/folder-tree/package.json +0 -29
  254. package/skills/folder-tree/src/index.ts +0 -568
  255. package/skills/folder-tree/tsconfig.json +0 -10
  256. package/skills/form-filler/CLAUDE.md +0 -19
  257. package/skills/form-filler/package.json +0 -29
  258. package/skills/form-filler/src/index.ts +0 -81
  259. package/skills/form-filler/tsconfig.json +0 -10
  260. package/skills/generate-api-client/CLAUDE.md +0 -19
  261. package/skills/generate-api-client/package.json +0 -29
  262. package/skills/generate-api-client/src/generator.ts +0 -47
  263. package/skills/generate-api-client/src/index.ts +0 -92
  264. package/skills/generate-api-client/src/logger.ts +0 -34
  265. package/skills/generate-api-client/src/python-generator.ts +0 -245
  266. package/skills/generate-api-client/src/spec-loader.ts +0 -48
  267. package/skills/generate-api-client/src/type-mappers.ts +0 -79
  268. package/skills/generate-api-client/src/types.ts +0 -76
  269. package/skills/generate-api-client/src/typescript-generator.ts +0 -247
  270. package/skills/generate-api-client/tsconfig.json +0 -10
  271. package/skills/generate-chart/CLAUDE.md +0 -19
  272. package/skills/generate-chart/package.json +0 -27
  273. package/skills/generate-chart/src/index.ts +0 -510
  274. package/skills/generate-chart/tsconfig.json +0 -10
  275. package/skills/generate-dockerfile/CLAUDE.md +0 -19
  276. package/skills/generate-dockerfile/package.json +0 -27
  277. package/skills/generate-dockerfile/src/cli.ts +0 -78
  278. package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
  279. package/skills/generate-dockerfile/src/index.ts +0 -81
  280. package/skills/generate-dockerfile/src/logger.ts +0 -30
  281. package/skills/generate-dockerfile/src/project-detection.ts +0 -68
  282. package/skills/generate-dockerfile/src/support-files.ts +0 -171
  283. package/skills/generate-dockerfile/src/types.ts +0 -29
  284. package/skills/generate-dockerfile/tsconfig.json +0 -10
  285. package/skills/generate-env/CLAUDE.md +0 -19
  286. package/skills/generate-env/package.json +0 -29
  287. package/skills/generate-env/src/cli.ts +0 -85
  288. package/skills/generate-env/src/detection.ts +0 -161
  289. package/skills/generate-env/src/env-data.ts +0 -66
  290. package/skills/generate-env/src/generators.ts +0 -240
  291. package/skills/generate-env/src/index.ts +0 -120
  292. package/skills/generate-env/src/runtime.ts +0 -30
  293. package/skills/generate-env/src/types.ts +0 -32
  294. package/skills/generate-env/tsconfig.json +0 -10
  295. package/skills/generate-favicon/CLAUDE.md +0 -19
  296. package/skills/generate-favicon/package.json +0 -29
  297. package/skills/generate-favicon/src/index.ts +0 -421
  298. package/skills/generate-favicon/tsconfig.json +0 -10
  299. package/skills/generate-qrcode/CLAUDE.md +0 -19
  300. package/skills/generate-qrcode/package.json +0 -30
  301. package/skills/generate-qrcode/src/index.ts +0 -584
  302. package/skills/generate-qrcode/tsconfig.json +0 -10
  303. package/skills/generate-resume/CLAUDE.md +0 -19
  304. package/skills/generate-resume/package.json +0 -27
  305. package/skills/generate-resume/src/cli.ts +0 -157
  306. package/skills/generate-resume/src/index.ts +0 -178
  307. package/skills/generate-resume/src/parsers.ts +0 -95
  308. package/skills/generate-resume/src/renderers.ts +0 -538
  309. package/skills/generate-resume/src/security.ts +0 -39
  310. package/skills/generate-resume/src/types.ts +0 -86
  311. package/skills/generate-resume/tsconfig.json +0 -10
  312. package/skills/generate-sitemap/CLAUDE.md +0 -19
  313. package/skills/generate-sitemap/package.json +0 -27
  314. package/skills/generate-sitemap/src/index.ts +0 -626
  315. package/skills/generate-sitemap/tsconfig.json +0 -10
  316. package/skills/gif-maker/CLAUDE.md +0 -19
  317. package/skills/gif-maker/package.json +0 -30
  318. package/skills/gif-maker/src/index.ts +0 -600
  319. package/skills/gif-maker/tsconfig.json +0 -10
  320. package/skills/hook/LICENSE +0 -192
  321. package/skills/hook/README.md +0 -74
  322. package/skills/hook/SKILL.md +0 -85
  323. package/skills/hook/bunfig.toml +0 -5
  324. package/skills/hook/package.json +0 -28
  325. package/skills/hook/src/commands/create.ts +0 -112
  326. package/skills/hook/src/commands/events.ts +0 -37
  327. package/skills/hook/src/commands/validate.ts +0 -117
  328. package/skills/hook/src/index.ts +0 -118
  329. package/skills/hook/src/templates/root.ts +0 -196
  330. package/skills/hook/src/templates/source.ts +0 -647
  331. package/skills/hook/tsconfig.json +0 -18
  332. package/skills/http-server/CLAUDE.md +0 -19
  333. package/skills/http-server/package.json +0 -29
  334. package/skills/http-server/src/index.ts +0 -51
  335. package/skills/http-server/tsconfig.json +0 -10
  336. package/skills/implementation/LICENSE +0 -192
  337. package/skills/implementation/README.md +0 -53
  338. package/skills/implementation/SKILL.md +0 -57
  339. package/skills/implementation/bunfig.toml +0 -5
  340. package/skills/implementation/package.json +0 -28
  341. package/skills/implementation/src/commands/create.ts +0 -187
  342. package/skills/implementation/src/index.ts +0 -62
  343. package/skills/implementation/tsconfig.json +0 -18
  344. package/skills/implementation-plan/CLAUDE.md +0 -19
  345. package/skills/implementation-plan/package.json +0 -29
  346. package/skills/implementation-plan/src/index.ts +0 -520
  347. package/skills/implementation-plan/tsconfig.json +0 -10
  348. package/skills/implementation-todo/CLAUDE.md +0 -19
  349. package/skills/implementation-todo/package.json +0 -29
  350. package/skills/implementation-todo/src/index.ts +0 -429
  351. package/skills/implementation-todo/tsconfig.json +0 -10
  352. package/skills/invoice/.env.example +0 -3
  353. package/skills/invoice/CLAUDE.md +0 -31
  354. package/skills/invoice/LICENSE +0 -192
  355. package/skills/invoice/README.md +0 -70
  356. package/skills/invoice/package.json +0 -26
  357. package/skills/invoice/src/commands/companies.ts +0 -202
  358. package/skills/invoice/src/commands/config.ts +0 -132
  359. package/skills/invoice/src/commands/generate.ts +0 -177
  360. package/skills/invoice/src/commands/invoices.ts +0 -218
  361. package/skills/invoice/src/index.ts +0 -3
  362. package/skills/invoice/src/lib/api.ts +0 -124
  363. package/skills/invoice/src/lib/storage.ts +0 -171
  364. package/skills/invoice/src/types/index.ts +0 -86
  365. package/skills/invoice/src/utils/logger.ts +0 -33
  366. package/skills/invoice/src/utils/paths.ts +0 -25
  367. package/skills/invoice/tsconfig.json +0 -23
  368. package/skills/invoice-reconciliation/SKILL.md +0 -98
  369. package/skills/invoice-reconciliation/package.json +0 -36
  370. package/skills/invoice-reconciliation/src/index.ts +0 -743
  371. package/skills/invoice-reconciliation/tsconfig.json +0 -17
  372. package/skills/landing-page-pack/SKILL.md +0 -55
  373. package/skills/landing-page-pack/package.json +0 -10
  374. package/skills/latex-table-generator/CLAUDE.md +0 -19
  375. package/skills/latex-table-generator/package.json +0 -29
  376. package/skills/latex-table-generator/src/index.ts +0 -113
  377. package/skills/latex-table-generator/tsconfig.json +0 -10
  378. package/skills/logo-design/SKILL.md +0 -94
  379. package/skills/logo-design/package.json +0 -35
  380. package/skills/logo-design/src/cli.ts +0 -132
  381. package/skills/logo-design/src/constants.ts +0 -5
  382. package/skills/logo-design/src/docs.ts +0 -102
  383. package/skills/logo-design/src/geometry.ts +0 -324
  384. package/skills/logo-design/src/index.ts +0 -212
  385. package/skills/logo-design/src/palette.ts +0 -258
  386. package/skills/logo-design/src/types.ts +0 -50
  387. package/skills/logo-design/tsconfig.json +0 -17
  388. package/skills/lorem-generator/CLAUDE.md +0 -19
  389. package/skills/lorem-generator/package.json +0 -29
  390. package/skills/lorem-generator/src/index.ts +0 -59
  391. package/skills/lorem-generator/tsconfig.json +0 -10
  392. package/skills/managemcp/CLAUDE.md +0 -14
  393. package/skills/managemcp/README.md +0 -24
  394. package/skills/managemcp/package.json +0 -16
  395. package/skills/managemcp/src/index.ts +0 -3
  396. package/skills/managemcp/tsconfig.json +0 -27
  397. package/skills/markdown-validator/CLAUDE.md +0 -19
  398. package/skills/markdown-validator/package.json +0 -29
  399. package/skills/markdown-validator/src/index.ts +0 -92
  400. package/skills/markdown-validator/tsconfig.json +0 -10
  401. package/skills/market-research-report/SKILL.md +0 -51
  402. package/skills/market-research-report/package.json +0 -10
  403. package/skills/meeting-pack/SKILL.md +0 -52
  404. package/skills/meeting-pack/package.json +0 -10
  405. package/skills/merge-pdfs/CLAUDE.md +0 -19
  406. package/skills/merge-pdfs/package.json +0 -31
  407. package/skills/merge-pdfs/src/index.ts +0 -427
  408. package/skills/merge-pdfs/tsconfig.json +0 -10
  409. package/skills/migration-plan-pack/SKILL.md +0 -56
  410. package/skills/migration-plan-pack/package.json +0 -10
  411. package/skills/monitor/SKILL.md +0 -69
  412. package/skills/monitor/package.json +0 -33
  413. package/skills/monitor/src/index.ts +0 -34
  414. package/skills/monitor/tsconfig.json +0 -17
  415. package/skills/one-page-website/SKILL.md +0 -128
  416. package/skills/one-page-website/package.json +0 -34
  417. package/skills/one-page-website/src/design.ts +0 -336
  418. package/skills/one-page-website/src/docs.ts +0 -159
  419. package/skills/one-page-website/src/index.ts +0 -357
  420. package/skills/one-page-website/src/page.ts +0 -340
  421. package/skills/one-page-website/src/styles.ts +0 -508
  422. package/skills/one-page-website/src/types.ts +0 -78
  423. package/skills/one-page-website/tsconfig.json +0 -17
  424. package/skills/pdf-generate/CLAUDE.md +0 -19
  425. package/skills/pdf-generate/SKILL.md +0 -86
  426. package/skills/pdf-generate/package.json +0 -21
  427. package/skills/pdf-generate/src/cli.ts +0 -162
  428. package/skills/pdf-generate/src/html.ts +0 -84
  429. package/skills/pdf-generate/src/index.ts +0 -62
  430. package/skills/pdf-generate/src/markdown.ts +0 -27
  431. package/skills/pdf-generate/src/pdf-writer.ts +0 -78
  432. package/skills/pdf-generate/src/runtime.ts +0 -34
  433. package/skills/pdf-generate/src/security.ts +0 -37
  434. package/skills/pdf-generate/src/templates.ts +0 -311
  435. package/skills/pdf-generate/src/types.ts +0 -28
  436. package/skills/pdf-generate/tsconfig.json +0 -16
  437. package/skills/pdf-to-dataset/SKILL.md +0 -88
  438. package/skills/pdf-to-dataset/package.json +0 -37
  439. package/skills/pdf-to-dataset/src/index.ts +0 -790
  440. package/skills/pdf-to-dataset/tsconfig.json +0 -17
  441. package/skills/pdf-to-markdown/SKILL.md +0 -81
  442. package/skills/pdf-to-markdown/package.json +0 -35
  443. package/skills/pdf-to-markdown/src/index.ts +0 -694
  444. package/skills/pdf-to-markdown/tsconfig.json +0 -17
  445. package/skills/performance-audit-report/SKILL.md +0 -49
  446. package/skills/performance-audit-report/package.json +0 -10
  447. package/skills/pitch-deck/SKILL.md +0 -51
  448. package/skills/pitch-deck/package.json +0 -10
  449. package/skills/product-mockup/SKILL.md +0 -107
  450. package/skills/product-mockup/package.json +0 -32
  451. package/skills/product-mockup/src/cli.ts +0 -150
  452. package/skills/product-mockup/src/design.ts +0 -151
  453. package/skills/product-mockup/src/docs.ts +0 -134
  454. package/skills/product-mockup/src/index.ts +0 -182
  455. package/skills/product-mockup/src/render.ts +0 -407
  456. package/skills/product-mockup/src/types.ts +0 -66
  457. package/skills/product-mockup/tsconfig.json +0 -17
  458. package/skills/proposal-pack/SKILL.md +0 -53
  459. package/skills/proposal-pack/package.json +0 -10
  460. package/skills/read-csv/SKILL.md +0 -62
  461. package/skills/read-csv/package.json +0 -37
  462. package/skills/read-csv/src/index.ts +0 -356
  463. package/skills/read-csv/tsconfig.json +0 -17
  464. package/skills/read-excel/SKILL.md +0 -64
  465. package/skills/read-excel/package.json +0 -36
  466. package/skills/read-excel/src/index.ts +0 -266
  467. package/skills/read-excel/tsconfig.json +0 -17
  468. package/skills/regex-tester/CLAUDE.md +0 -19
  469. package/skills/regex-tester/package.json +0 -27
  470. package/skills/regex-tester/src/index.ts +0 -183
  471. package/skills/regex-tester/tsconfig.json +0 -10
  472. package/skills/repo-onboarding-report/SKILL.md +0 -52
  473. package/skills/repo-onboarding-report/package.json +0 -10
  474. package/skills/scancommitpr/SKILL.md +0 -178
  475. package/skills/scancommitpr/package.json +0 -34
  476. package/skills/scancommitpr/src/index.ts +0 -44
  477. package/skills/scancommitpr/tsconfig.json +0 -13
  478. package/skills/scancommitpush/SKILL.md +0 -174
  479. package/skills/scancommitpush/package.json +0 -32
  480. package/skills/scancommitpush/src/index.ts +0 -44
  481. package/skills/scancommitpush/tsconfig.json +0 -13
  482. package/skills/scientific-figure-check/CLAUDE.md +0 -19
  483. package/skills/scientific-figure-check/package.json +0 -29
  484. package/skills/scientific-figure-check/src/index.ts +0 -83
  485. package/skills/scientific-figure-check/tsconfig.json +0 -10
  486. package/skills/security-audit/CLAUDE.md +0 -19
  487. package/skills/security-audit/package.json +0 -27
  488. package/skills/security-audit/src/index.ts +0 -145
  489. package/skills/security-audit/tsconfig.json +0 -10
  490. package/skills/security-audit-report/SKILL.md +0 -52
  491. package/skills/security-audit-report/package.json +0 -10
  492. package/skills/seo-content-pack/SKILL.md +0 -54
  493. package/skills/seo-content-pack/package.json +0 -10
  494. package/skills/siteanalyze/SKILL.md +0 -25
  495. package/skills/siteanalyze/package.json +0 -27
  496. package/skills/siteanalyze/src/index.ts +0 -592
  497. package/skills/slide-deck-generator/SKILL.md +0 -93
  498. package/skills/slide-deck-generator/package.json +0 -38
  499. package/skills/slide-deck-generator/src/cli.ts +0 -133
  500. package/skills/slide-deck-generator/src/index.ts +0 -148
  501. package/skills/slide-deck-generator/src/model.ts +0 -307
  502. package/skills/slide-deck-generator/src/pptx.ts +0 -143
  503. package/skills/slide-deck-generator/src/render.ts +0 -248
  504. package/skills/slide-deck-generator/src/types.ts +0 -114
  505. package/skills/slide-deck-generator/src/utils.ts +0 -53
  506. package/skills/slide-deck-generator/tsconfig.json +0 -17
  507. package/skills/social-content-calendar/SKILL.md +0 -54
  508. package/skills/social-content-calendar/package.json +0 -10
  509. package/skills/split-pdf/CLAUDE.md +0 -19
  510. package/skills/split-pdf/package.json +0 -30
  511. package/skills/split-pdf/src/index.ts +0 -301
  512. package/skills/split-pdf/tsconfig.json +0 -10
  513. package/skills/statistical-test-selector/CLAUDE.md +0 -19
  514. package/skills/statistical-test-selector/package.json +0 -27
  515. package/skills/statistical-test-selector/src/index.ts +0 -75
  516. package/skills/statistical-test-selector/tsconfig.json +0 -10
  517. package/skills/test-suite-generator/SKILL.md +0 -51
  518. package/skills/test-suite-generator/package.json +0 -10
  519. package/skills/tmux-session/SKILL.md +0 -109
  520. package/skills/tmux-session/package.json +0 -33
  521. package/skills/tmux-session/src/index.ts +0 -34
  522. package/skills/tmux-session/tsconfig.json +0 -17
  523. package/skills/todos-plan/SKILL.md +0 -363
  524. package/skills/todos-plan/agents/openai.yaml +0 -4
  525. package/skills/todos-plan/package.json +0 -9
  526. package/skills/todos-plan/src/index.ts +0 -68
  527. package/skills/tsconfig.base.json +0 -12
  528. package/skills/validate-config/CLAUDE.md +0 -19
  529. package/skills/validate-config/package.json +0 -29
  530. package/skills/validate-config/src/index.ts +0 -56
  531. package/skills/validate-config/tsconfig.json +0 -10
  532. package/skills/video-downloader/CLAUDE.md +0 -19
  533. package/skills/video-downloader/package.json +0 -29
  534. package/skills/video-downloader/src/index.ts +0 -561
  535. package/skills/video-downloader/tsconfig.json +0 -10
  536. package/skills/video-highlight-pack/SKILL.md +0 -54
  537. package/skills/video-highlight-pack/package.json +0 -10
  538. package/skills/watermark/CLAUDE.md +0 -19
  539. package/skills/watermark/package.json +0 -32
  540. package/skills/watermark/src/index.ts +0 -587
  541. 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;