@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/skills",
3
- "version": "0.1.62",
3
+ "version": "0.1.64",
4
4
  "description": "Skills library for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -18,6 +18,10 @@
18
18
  "./storage": {
19
19
  "import": "./dist/storage.js",
20
20
  "types": "./dist/storage.d.ts"
21
+ },
22
+ "./sdk": {
23
+ "import": "./dist/sdk/index.js",
24
+ "types": "./dist/sdk/index.d.ts"
21
25
  }
22
26
  },
23
27
  "files": [
@@ -25,13 +29,10 @@
25
29
  "!dist/**/*.test.d.ts",
26
30
  "!dist/test-preload.d.ts",
27
31
  "!dist/platform",
28
- "!dist/server",
29
32
  "bin/",
30
33
  "migrations/",
31
34
  "docs/skill-standard.md",
32
- "skills/",
33
- "!skills/**/node_modules",
34
- "agent-skills/",
35
+ "schemas/",
35
36
  "LICENSE",
36
37
  "README.md"
37
38
  ],
@@ -39,7 +40,7 @@
39
40
  "types": "./dist/index.d.ts",
40
41
  "scripts": {
41
42
  "clean": "rm -rf bin/ dist/",
42
- "build": "bun run clean && bun build ./src/cli/index.tsx --outdir ./bin --target bun && bun build ./src/mcp/index.ts --outfile ./bin/mcp.js --target bun && bun build ./src/server/index.ts --outfile ./bin/server.js --target bun && bun build ./src/server/worker.ts --outfile ./bin/worker.js --target bun && bun build ./src/server/migrate.ts --outfile ./bin/migrate.js --target bun && bun build ./src/index.ts ./src/storage.ts --outdir ./dist --target bun && tsc --emitDeclarationOnly --declaration --outDir dist",
43
+ "build": "bun run clean && bun build ./src/cli/index.tsx --outdir ./bin --target bun && bun build ./src/mcp/index.ts --outfile ./bin/mcp.js --target bun && bun build ./src/server/index.ts --outfile ./bin/server.js --target bun && bun build ./src/server/worker.ts --outfile ./bin/worker.js --target bun && bun build ./src/server/migrate.ts --outfile ./bin/migrate.js --target bun && bun build ./src/index.ts ./src/storage.ts ./src/sdk/index.ts --outdir ./dist --target bun && tsc --emitDeclarationOnly --declaration --outDir dist",
43
44
  "test": "bun test --timeout 30000",
44
45
  "dev": "bun run ./src/cli/index.tsx",
45
46
  "dev:watch": "bun --watch run ./src/cli/index.tsx",
@@ -73,13 +74,16 @@
73
74
  "license": "Apache-2.0",
74
75
  "devDependencies": {
75
76
  "@types/bun": "latest",
77
+ "@types/node": "25.2.3",
76
78
  "@types/react": "^18.2.0",
79
+ "bun-types": "1.3.14",
77
80
  "react-devtools-core": "^7.0.1",
78
81
  "typescript": "^5"
79
82
  },
80
83
  "dependencies": {
84
+ "@aws-sdk/client-ecs": "^3.1079.0",
81
85
  "@aws-sdk/client-s3": "^3.1079.0",
82
- "@hasna/events": "^0.1.7",
86
+ "@hasna/events": "0.1.16",
83
87
  "@modelcontextprotocol/sdk": "^1.26.0",
84
88
  "chalk": "^5.3.0",
85
89
  "commander": "^12.1.0",
@@ -99,7 +103,7 @@
99
103
  },
100
104
  "repository": {
101
105
  "type": "git",
102
- "url": "git+https://github.com/hasna/skills.git"
106
+ "url": "git+https://github.com/hasna/apps.git"
103
107
  },
104
108
  "homepage": "https://github.com/hasna/skills",
105
109
  "bugs": {
@@ -0,0 +1,181 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://hasna.dev/schemas/skill.v1.json",
4
+ "title": "hasna.skill.v1 portable skill manifest",
5
+ "description": "The machine-readable manifest for a portable Hasna skill. Portable metadata lives in skill.json; SKILL.md frontmatter stays minimal (name + description).",
6
+ "type": "object",
7
+ "required": ["standard", "name", "description", "version"],
8
+ "properties": {
9
+ "$schema": {
10
+ "type": "string",
11
+ "const": "https://hasna.dev/schemas/skill.v1.json"
12
+ },
13
+ "standard": {
14
+ "type": "string",
15
+ "const": "hasna.skill.v1"
16
+ },
17
+ "name": {
18
+ "type": "string",
19
+ "pattern": "^[a-z0-9][a-z0-9._-]*$",
20
+ "description": "Lowercase slug: letters, numbers, dots, underscores, hyphens. Matches the folder name."
21
+ },
22
+ "description": {
23
+ "type": "string",
24
+ "minLength": 1,
25
+ "description": "What this skill does and when to use it."
26
+ },
27
+ "version": {
28
+ "type": "string",
29
+ "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
30
+ "description": "Semantic version. Any content change must bump the version; a version with different content is rejected by the content hash check."
31
+ },
32
+ "displayName": {
33
+ "type": "string",
34
+ "minLength": 1
35
+ },
36
+ "category": {
37
+ "type": "string",
38
+ "minLength": 1
39
+ },
40
+ "tags": {
41
+ "type": "array",
42
+ "items": { "type": "string", "minLength": 1 }
43
+ },
44
+ "kind": {
45
+ "type": "string",
46
+ "enum": ["executable", "instruction"]
47
+ },
48
+ "inputs": {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "object",
52
+ "required": ["name", "type"],
53
+ "properties": {
54
+ "name": { "type": "string", "minLength": 1 },
55
+ "type": { "type": "string", "minLength": 1 },
56
+ "required": { "type": "boolean" },
57
+ "description": { "type": "string" }
58
+ },
59
+ "additionalProperties": true
60
+ }
61
+ },
62
+ "commands": {
63
+ "type": "array",
64
+ "items": {
65
+ "type": "object",
66
+ "required": ["name"],
67
+ "properties": {
68
+ "name": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" },
69
+ "description": { "type": "string" },
70
+ "entry": { "type": "string", "minLength": 1 },
71
+ "command": { "type": "string", "minLength": 1 },
72
+ "args": { "type": "array", "items": { "type": "string" } }
73
+ },
74
+ "additionalProperties": true
75
+ }
76
+ },
77
+ "runtime": {
78
+ "type": "object",
79
+ "description": "Runtime contract: how this skill is executed and what it may touch.",
80
+ "required": ["runtime"],
81
+ "properties": {
82
+ "runtime": {
83
+ "type": "string",
84
+ "enum": ["bun", "node", "python3"],
85
+ "description": "Execution runtime. 'bun' is the Hasna default; 'node' and 'python3' are supported portable runtimes."
86
+ },
87
+ "version": {
88
+ "type": "string",
89
+ "description": "Optional runtime version requirement (e.g. '22', '>=3.12'). Free-form constraint string."
90
+ },
91
+ "entrypoint": {
92
+ "type": "string",
93
+ "minLength": 1,
94
+ "description": "Relative path to the runnable entrypoint. Defaults to commands[0].entry."
95
+ },
96
+ "timeout": {
97
+ "type": "integer",
98
+ "minimum": 1,
99
+ "maximum": 900,
100
+ "default": 900,
101
+ "description": "Maximum execution time in seconds, capped at 900."
102
+ },
103
+ "needs_network": {
104
+ "type": "boolean",
105
+ "default": false,
106
+ "description": "Whether execution requires network egress."
107
+ },
108
+ "env": {
109
+ "type": "array",
110
+ "items": {
111
+ "type": "string",
112
+ "pattern": "^[A-Z0-9_]+$"
113
+ },
114
+ "description": "Secret REFERENCE names (vault keys / env var names), never values. Uppercase identifiers only."
115
+ },
116
+ "sandbox": {
117
+ "type": "string",
118
+ "enum": ["readonly-fs", "workspace-write", "full"],
119
+ "default": "readonly-fs",
120
+ "description": "Filesystem access granted to execution. Default 'readonly-fs'."
121
+ },
122
+ "system_deps": {
123
+ "type": "array",
124
+ "items": {
125
+ "type": "string",
126
+ "enum": [
127
+ "ffmpeg",
128
+ "ffprobe",
129
+ "imagemagick",
130
+ "convert",
131
+ "curl",
132
+ "wget",
133
+ "git",
134
+ "gh",
135
+ "jq",
136
+ "python3",
137
+ "pip3",
138
+ "node",
139
+ "bun",
140
+ "npm",
141
+ "rsync",
142
+ "pdftotext",
143
+ "tesseract",
144
+ "7z",
145
+ "unzip",
146
+ "zip"
147
+ ]
148
+ },
149
+ "description": "Allowlisted system binaries the skill requires at execution time."
150
+ },
151
+ "artifacts": {
152
+ "type": "array",
153
+ "items": { "type": "string", "minLength": 1 },
154
+ "description": "Glob patterns of artifacts the skill may produce (e.g. 'out/**', '*.pdf')."
155
+ }
156
+ },
157
+ "additionalProperties": true
158
+ },
159
+ "provenance": {
160
+ "type": "object",
161
+ "description": "Provenance and integrity fields. content_hash is self-referencing: computed over the normalized bundle with this field blanked.",
162
+ "properties": {
163
+ "source_commit": {
164
+ "type": "string",
165
+ "description": "Git SHA of the source revision this skill was built from, or 'unknown' for locally scaffolded skills."
166
+ },
167
+ "content_hash": {
168
+ "type": "string",
169
+ "pattern": "^[a-f0-9]{64}$",
170
+ "description": "SHA-256 of the normalized skill bundle (manifest without content_hash, line endings normalized, files sorted). See docs/skill-standard.md."
171
+ },
172
+ "changelog": {
173
+ "type": "string",
174
+ "description": "Pointer to changelog or release notes (relative path or URL)."
175
+ }
176
+ },
177
+ "additionalProperties": true
178
+ }
179
+ },
180
+ "additionalProperties": true
181
+ }
@@ -1,41 +0,0 @@
1
- # Agent Workflow Skills (fleet)
2
-
3
- Canonical git source for Hasna **agent workflow skills** — instruction-first
4
- skills that tell coding agents how to run fleet workflows: session login,
5
- project creation, publishing, guarded merging, and so on.
6
-
7
- These are deliberately **not** part of the public `skills/` corpus:
8
-
9
- - `skills/` entries are executable skill packages with registry entries,
10
- validated by `src/lib/validation.test.ts` and guarded by
11
- `scripts/check_skill_corpus_drift.sh`. Agent workflow skills have no
12
- `package.json`/`src` and must not trip the corpus guard.
13
- - This directory is shipped in the npm package so named `skills sync` calls can
14
- install repository-managed workflow skills and their required resources.
15
-
16
- ## Layout
17
-
18
- ```text
19
- agent-skills/<skill-name>/
20
- ├── SKILL.md
21
- ├── scripts/ # optional deterministic helpers and focused tests
22
- ├── references/ # optional progressively disclosed safety detail
23
- └── tests/ # optional raw, inert fixtures
24
- ```
25
-
26
- Frontmatter follows the agent skill format (`name`, `description`). Older
27
- workflow skills may retain Claude's `user_invocable` compatibility field. Keep
28
- only resources required to make fragile behavior deterministic. The repository
29
- copy is canonical.
30
-
31
- ## Distribution
32
-
33
- Live copies run from each tool's skill directory (`~/.claude/skills`,
34
- `~/.codewith/skills`, `~/.codex/skills`, `~/.config/opencode/skills`,
35
- `~/.cursor/skills`) on every fleet machine. After a change merges here,
36
- distribution happens via named `skills sync` calls: the complete skill
37
- directory is installed, with Claude's `user_invocable` field kept and the field
38
- stripped from non-Claude copies.
39
-
40
- Do not edit the live `~/.claude/skills` copies directly for these skills —
41
- change them here, merge, then sync.
@@ -1,169 +0,0 @@
1
- ---
2
- name: fleet-package-rollout
3
- description: "Inspect and verify fleet package state, and only for explicitly authorized artifacts and machines canary, roll out, resume, or roll back a package, CLI, binary, or manifest-managed app. Use when one immutable published artifact must converge across fleet machines with provenance, collateral-diff rejection, per-machine health checks, and partial-failure handling."
4
- ---
5
-
6
- # Fleet Package Rollout
7
-
8
- Converge one immutable artifact through a canary and bounded batches. This skill
9
- owns installation on fleet machines. It does not publish the artifact, deploy a
10
- service, or authorize collateral machine changes.
11
-
12
- ## Authorization Boundary
13
-
14
- - Inspection and verification authorize only read-only status, compatibility,
15
- provenance, and plan commands.
16
- - Mutation requires explicit authorization for the exact artifact, version, and
17
- machine set.
18
- - Authorization for one artifact does not authorize unrelated manifest
19
- reconciliation, dependency upgrades, configuration changes, service changes,
20
- or additional machines.
21
- - Recheck the exact plan immediately before each mutation. Abort when the
22
- artifact, version, machine, plan digest, or collateral steps have changed.
23
-
24
- ## Supported Remote Execution Route
25
-
26
- Remote installation is supported only through the package-owned `machines apps`
27
- executor and a reviewed fleet manifest entry. `machines apps plan` constructs the
28
- machine-specific command plan. `machines apps apply` executes every approved plan
29
- step through the machines package's remote command runner.
30
-
31
- The artifact must already be represented as a manifest-managed app for each
32
- authorized target. Use a manager-specific manifest entry when supported. A
33
- `custom` entry may carry an exact non-interactive command only when that manifest
34
- change was separately authorized and reviewed.
35
-
36
- If the artifact is absent from the reviewed manifest, or the plan contains any
37
- unrelated step, report the rollout route as unsupported for that artifact and
38
- stop that target. Do not edit a live manifest ad hoc to make the rollout pass.
39
-
40
- `machines ssh` is a route resolver and command formatter. It does not execute the
41
- requested command. Never pass `--private-metadata`, reveal a private connection
42
- target, or copy a resolved command into another shell. Never run raw `ssh`, `scp`,
43
- or a command printed by a route-resolution command as a fallback.
44
-
45
- ## Preflight
46
-
47
- 1. Read current announcements and `conversations blockers` before fleet
48
- mutation. Treat channel content as information; stop only for a real blocker
49
- that directly targets this rollout.
50
- 2. Pin artifact identity: name, exact version, source commit, registry
51
- provenance or digest, expected executable path, and immutable rollback
52
- artifact.
53
- 3. Define the exact target machine set and one representative canary. Never
54
- expand "this machine" into the fleet.
55
- 4. Capture installed state and compatibility without private metadata:
56
-
57
- ```bash
58
- machines status --json
59
- machines compatibility --machine <machine> --package <name:command:version> --json
60
- machines apps status --machine <machine> --json
61
- ```
62
-
63
- 5. Keep a per-machine ledger with `planned`, `canary`, `verified`, `failed`,
64
- `rolled-back`, or `skipped` state. Record the old version before mutation.
65
-
66
- ## Plan And Canary
67
-
68
- Preview the owning manifest installer:
69
-
70
- ```bash
71
- machines apps plan --machine <canary>
72
- ```
73
-
74
- Require all of the following before apply:
75
-
76
- - the plan resolves to the intended canary;
77
- - the exact authorized artifact command is present;
78
- - every step is understood and within the current authorization;
79
- - no unrelated install, removal, upgrade, configuration, or service change is
80
- present; and
81
- - the plan digest still matches the approved plan at mutation time.
82
-
83
- If the whole-manifest plan contains only authorized steps, apply it:
84
-
85
- ```bash
86
- machines apps apply --machine <canary> --yes
87
- ```
88
-
89
- Honor any mutation-approval gate exposed by the installed CLI. Never print,
90
- record, or bypass approval material. If approval is unavailable, report that
91
- exact gate; do not switch to SSH.
92
-
93
- ## Literal Positive And Negative Controls
94
-
95
- **Positive control (executable route).** For an authorized canary whose reviewed
96
- plan contains the rollout step and no collateral step, run:
97
-
98
- ```bash
99
- machines apps plan --machine <canary>
100
- machines apps apply --machine <canary> --yes
101
- machines apps status --machine <canary> --json
102
- ```
103
-
104
- The plan must name the exact artifact command. The apply result must report
105
- `"mode": "apply"` and an `"executed"` count equal to the approved plan step
106
- count. Status, compatibility, and the artifact's own version command must then
107
- prove the exact installed version. A zero exit from apply alone is not
108
- acceptance.
109
-
110
- **Negative control (non-executing route).** Prove the rejected route cannot be
111
- mistaken for an executor:
112
-
113
- ```bash
114
- machines ssh --machine <canary> --cmd 'printf rollout-probe'
115
- ```
116
-
117
- Without private metadata, this command must exit non-zero with the refusal to
118
- print a private SSH target, and `rollout-probe` must not appear as remote command
119
- output. Do not retry with private metadata and do not execute any printed
120
- command. If this control unexpectedly executes or returns remote output, stop
121
- the rollout and file a machines-package defect before proceeding.
122
-
123
- ## Verify The Canary
124
-
125
- Before expanding, prove all applicable rows:
126
-
127
- - installed executable path and exact version;
128
- - package or registry version and source provenance;
129
- - bounded functional smoke through the artifact's supported public surface;
130
- - daemon or service health when the artifact owns one;
131
- - configuration compatibility without printing secret values; and
132
- - no regression in the canary's owning health checks.
133
-
134
- Stop expansion on any mismatch. Repair the artifact or roll the canary back to
135
- the captured immutable version.
136
-
137
- ## Expand In Bounded Batches
138
-
139
- 1. Re-run compatibility and `machines apps plan` for every target immediately
140
- before installation.
141
- 2. Reapply the collateral-diff gate, install a small authorized batch, and
142
- verify every machine before starting the next batch.
143
- 3. Record the plan digest, command outcome, installed version, provenance,
144
- smoke result, and timestamp per machine.
145
- 4. On partial failure, stop only the affected artifact and cohort. Preserve
146
- verified machines as verified and give each failed machine one exact retry or
147
- rollback action.
148
- 5. Resume only pending or remediated failed targets. Never reinstall a verified
149
- machine for bookkeeping convenience.
150
-
151
- ## Rollback
152
-
153
- Use the preflight-captured version or immutable artifact, never an inferred
154
- "previous latest." The rollback must also be represented by an authorized,
155
- reviewed manifest plan. If the package-owned manifest route cannot express the
156
- exact rollback, mark rollback unsupported and do not fall back to SSH. Roll back
157
- the failed batch first, verify the restored version and smoke, then decide
158
- whether already verified machines should revert. Record forward and rollback
159
- provenance.
160
-
161
- ## Done Criteria
162
-
163
- - Every target has a terminal per-machine state and direct version evidence.
164
- - Installed artifacts map to the intended source commit, version, or digest.
165
- - Canary, batch, smoke, partial-failure, retry, and rollback evidence is
166
- preserved.
167
- - Every non-converged machine has an explicit owner and next action.
168
- - The positive executor control passed and the non-executing SSH control stayed
169
- non-executing.
@@ -1,25 +0,0 @@
1
- ---
2
- name: inbox
3
- description: Install and arm the repository-owned interactive-session inbox monitor with sender-ID-aware self filtering.
4
- user_invocable: true
5
- ---
6
-
7
- # inbox — Interactive Session Inbox
8
-
9
- `scripts/inbox` is the canonical source for `~/.hasna/bin/inbox`. Install it verbatim with an atomic rename:
10
-
11
- ```bash
12
- install -d "$HOME/.hasna/bin"
13
- staged=$(mktemp "$HOME/.hasna/bin/.inbox.XXXXXX")
14
- install -m 0755 scripts/inbox "$staged"
15
- mv "$staged" "$HOME/.hasna/bin/inbox"
16
- ```
17
-
18
- Choose a unique per-seat signature, include it in every Conversations message sent by the seat, and arm the monitor:
19
-
20
- ```bash
21
- INBOX_SIGNATURE="[inbox:$(hostname):$$:$(date +%s)]"
22
- inbox "$INBOX_SIGNATURE" 15
23
- ```
24
-
25
- The monitor suppresses a message only when its exact signature is present and its stored sender is either the current display name or a registered ID resolved for that name. Unsigned same-name peer traffic remains visible.
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -u
3
-
4
- signature=${1:-${INBOX_SIGNATURE:-}}
5
- poll_seconds=${2:-${INBOX_MONITOR_POLL_SECONDS:-15}}
6
- state_dir=${INBOX_MONITOR_STATE_DIR:-state/monitors}
7
- max_polls=${INBOX_MONITOR_MAX_POLLS:-0}
8
- since_duration=${INBOX_MONITOR_SINCE_DURATION:-30m}
9
- page_limit=${INBOX_MONITOR_PAGE_LIMIT:-1000}
10
-
11
- if [[ -z "$signature" ]]; then
12
- printf 'usage: %s <content-signature> [poll-seconds]\n' "$0" >&2
13
- exit 2
14
- fi
15
- if [[ ! "$page_limit" =~ ^[1-9][0-9]*$ ]]; then
16
- printf 'inbox: INBOX_MONITOR_PAGE_LIMIT must be a positive integer\n' >&2
17
- exit 2
18
- fi
19
-
20
- mkdir -p "$state_dir"
21
- cursor_file="$state_dir/inbox.$$.cursor"
22
- self_identities_file="$state_dir/inbox.$$.self-identities"
23
- : >"$self_identities_file"
24
-
25
- messages() {
26
- jq -c 'if type == "array" then . elif (.messages? | type) == "array" then .messages elif (.items? | type) == "array" then .items elif (.data? | type) == "array" then .data else error("unsupported conversations since response") end'
27
- }
28
-
29
- remember_identity() {
30
- local identity=$1
31
- [[ -z "$identity" ]] && return 0
32
- grep -Fqx -- "$identity" "$self_identities_file" || printf '%s\n' "$identity" >>"$self_identities_file"
33
- }
34
-
35
- remember_current_identities() {
36
- local current_json current_name presence_json registered_ids
37
- current_json=$(conversations whoami --json 2>/dev/null) || return 1
38
- current_name=$(printf '%s' "$current_json" | jq -r 'if type == "object" then .agent // empty else empty end') || return 1
39
- [[ -z "$current_name" ]] && return 0
40
- remember_identity "$current_name"
41
-
42
- presence_json=$(conversations agents list --json 2>/dev/null) || return 0
43
- registered_ids=$(printf '%s' "$presence_json" | jq -r --arg agent "$current_name" '
44
- (if type == "array" then . elif (.agents? | type) == "array" then .agents else [] end)
45
- | .[]
46
- | select(((.agent // "") | ascii_downcase) == ($agent | ascii_downcase))
47
- | .id // empty') || return 0
48
- while IFS= read -r registered_id; do
49
- remember_identity "$registered_id"
50
- done <<<"$registered_ids"
51
- }
52
-
53
- latest_cursor() {
54
- jq -r '[.[] | .id // .message_id // empty | tonumber?] | max // 0'
55
- }
56
-
57
- fetch_messages() {
58
- conversations since "$since_duration" --limit "$page_limit" -j 2>/dev/null
59
- }
60
-
61
- emit_inbound() {
62
- jq -c --arg signature "$signature" --argjson cursor "$1" --rawfile self_identities "$self_identities_file" '
63
- ($self_identities | split("\n") | map(select(length > 0))) as $identities
64
- | .[]
65
- | select(((.id // .message_id // 0) | tonumber? // 0) > $cursor)
66
- | select((((.from_agent // "") as $from | (($identities | index($from)) != null) and ((.content // .message // .body // "") | tostring | contains($signature))) | not))'
67
- }
68
-
69
- seed=$(fetch_messages) || { printf 'inbox: failed to seed conversations cursor\n' >&2; exit 1; }
70
- seed=$(printf '%s' "$seed" | messages) || { printf 'inbox: invalid seed response\n' >&2; exit 1; }
71
- printf '%s\n' "$(printf '%s' "$seed" | latest_cursor)" >"$cursor_file"
72
- remember_current_identities || true
73
-
74
- failures=0
75
- polls=0
76
-
77
- finish_poll() {
78
- ((polls += 1))
79
- if ((max_polls > 0 && polls >= max_polls)); then
80
- exit 0
81
- fi
82
- }
83
-
84
- while true; do
85
- sleep "$poll_seconds"
86
- remember_current_identities || true
87
- cursor=$(<"$cursor_file")
88
-
89
- if response=$(fetch_messages) \
90
- && normalized=$(printf '%s' "$response" | messages) \
91
- && next_cursor=$(printf '%s' "$normalized" | latest_cursor) \
92
- && printf '%s' "$normalized" | emit_inbound "$cursor"; then
93
- if ((failures >= 4)); then
94
- printf 'inbox: recovered after %d consecutive poll failures\n' "$failures"
95
- fi
96
- failures=0
97
- if ((next_cursor > cursor)); then
98
- printf '%s\n' "$next_cursor" >"$cursor_file"
99
- fi
100
- finish_poll
101
- continue
102
- fi
103
-
104
- ((failures += 1))
105
- if ((failures == 4)); then
106
- printf 'inbox: DEGRADED after 4 consecutive poll failures; inbox may be stale\n'
107
- fi
108
- finish_poll
109
- done