blacksmith-organization-system 1.0.0-dev.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +77 -70
  3. package/dist/bridges/git.d.ts +9 -0
  4. package/dist/bridges/git.js +30 -0
  5. package/dist/bridges/git.js.map +1 -0
  6. package/dist/bridges/github.d.ts +28 -0
  7. package/dist/bridges/github.js +71 -0
  8. package/dist/bridges/github.js.map +1 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.js +53 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/core/context.d.ts +18 -0
  13. package/dist/core/context.js +14 -0
  14. package/dist/core/context.js.map +1 -0
  15. package/dist/core/element.d.ts +49 -0
  16. package/dist/core/element.js +97 -0
  17. package/dist/core/element.js.map +1 -0
  18. package/dist/core/host.d.ts +32 -0
  19. package/dist/core/host.js +5 -0
  20. package/dist/core/host.js.map +1 -0
  21. package/dist/core/paths.d.ts +5 -0
  22. package/dist/core/paths.js +42 -0
  23. package/dist/core/paths.js.map +1 -0
  24. package/dist/core/procedure.d.ts +11 -0
  25. package/dist/core/procedure.js +24 -0
  26. package/dist/core/procedure.js.map +1 -0
  27. package/dist/core/tool.d.ts +33 -0
  28. package/dist/core/tool.js +44 -0
  29. package/dist/core/tool.js.map +1 -0
  30. package/dist/core/version.d.ts +6 -0
  31. package/dist/core/version.js +37 -0
  32. package/dist/core/version.js.map +1 -0
  33. package/dist/hosts/node.d.ts +21 -0
  34. package/dist/hosts/node.js +76 -0
  35. package/dist/hosts/node.js.map +1 -0
  36. package/dist/hosts/watch-tree.d.ts +8 -0
  37. package/dist/hosts/watch-tree.js +86 -0
  38. package/dist/hosts/watch-tree.js.map +1 -0
  39. package/dist/index.d.ts +14 -0
  40. package/dist/index.js +18 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/main.d.ts +55 -0
  43. package/dist/main.js +99 -0
  44. package/dist/main.js.map +1 -0
  45. package/dist/models/_index.d.ts +20 -0
  46. package/dist/models/_index.js +22 -0
  47. package/dist/models/_index.js.map +1 -0
  48. package/dist/models/archive/class.d.ts +5 -0
  49. package/dist/models/archive/class.js +7 -0
  50. package/dist/models/archive/class.js.map +1 -0
  51. package/dist/models/authors/entry.d.ts +20 -0
  52. package/dist/models/authors/entry.js +73 -0
  53. package/dist/models/authors/entry.js.map +1 -0
  54. package/dist/models/authors/file.d.ts +9 -0
  55. package/dist/models/authors/file.js +19 -0
  56. package/dist/models/authors/file.js.map +1 -0
  57. package/dist/models/craftbook/class.d.ts +10 -0
  58. package/dist/models/craftbook/class.js +13 -0
  59. package/dist/models/craftbook/class.js.map +1 -0
  60. package/dist/models/devarmory/class.d.ts +11 -0
  61. package/dist/models/devarmory/class.js +8 -0
  62. package/dist/models/devarmory/class.js.map +1 -0
  63. package/dist/models/devlog/class.d.ts +19 -0
  64. package/dist/models/devlog/class.js +61 -0
  65. package/dist/models/devlog/class.js.map +1 -0
  66. package/dist/models/forge/class.d.ts +9 -0
  67. package/dist/models/forge/class.js +24 -0
  68. package/dist/models/forge/class.js.map +1 -0
  69. package/dist/models/loop/class.d.ts +16 -0
  70. package/dist/models/loop/class.js +56 -0
  71. package/dist/models/loop/class.js.map +1 -0
  72. package/dist/models/loop/data.d.ts +12 -0
  73. package/dist/models/loop/data.js +20 -0
  74. package/dist/models/loop/data.js.map +1 -0
  75. package/dist/models/loop/load.d.ts +5 -0
  76. package/dist/models/loop/load.js +14 -0
  77. package/dist/models/loop/load.js.map +1 -0
  78. package/dist/models/project/anatomy.d.ts +2 -0
  79. package/dist/models/project/anatomy.js +15 -0
  80. package/dist/models/project/anatomy.js.map +1 -0
  81. package/dist/models/project/around.d.ts +3 -0
  82. package/dist/models/project/around.js +13 -0
  83. package/dist/models/project/around.js.map +1 -0
  84. package/dist/models/project/class.d.ts +21 -0
  85. package/dist/models/project/class.js +23 -0
  86. package/dist/models/project/class.js.map +1 -0
  87. package/dist/models/project/git.d.ts +8 -0
  88. package/dist/models/project/git.js +26 -0
  89. package/dist/models/project/git.js.map +1 -0
  90. package/dist/models/project/version.d.ts +6 -0
  91. package/dist/models/project/version.js +23 -0
  92. package/dist/models/project/version.js.map +1 -0
  93. package/dist/models/scope/class.d.ts +21 -0
  94. package/dist/models/scope/class.js +49 -0
  95. package/dist/models/scope/class.js.map +1 -0
  96. package/dist/models/settings/data.d.ts +12 -0
  97. package/dist/models/settings/data.js +9 -0
  98. package/dist/models/settings/data.js.map +1 -0
  99. package/dist/models/settings/load.d.ts +9 -0
  100. package/dist/models/settings/load.js +32 -0
  101. package/dist/models/settings/load.js.map +1 -0
  102. package/dist/models/system/class.d.ts +16 -0
  103. package/dist/models/system/class.js +21 -0
  104. package/dist/models/system/class.js.map +1 -0
  105. package/dist/models/system/parts.d.ts +21 -0
  106. package/dist/models/system/parts.js +22 -0
  107. package/dist/models/system/parts.js.map +1 -0
  108. package/dist/models/system/storylines.d.ts +39 -0
  109. package/dist/models/system/storylines.js +42 -0
  110. package/dist/models/system/storylines.js.map +1 -0
  111. package/dist/models/workshop/class.d.ts +20 -0
  112. package/dist/models/workshop/class.js +43 -0
  113. package/dist/models/workshop/class.js.map +1 -0
  114. package/dist/models/workshop/locate.d.ts +16 -0
  115. package/dist/models/workshop/locate.js +54 -0
  116. package/dist/models/workshop/locate.js.map +1 -0
  117. package/dist/procedures/_index.d.ts +8 -0
  118. package/dist/procedures/_index.js +11 -0
  119. package/dist/procedures/_index.js.map +1 -0
  120. package/dist/procedures/automerging/_index.d.ts +4 -0
  121. package/dist/procedures/automerging/_index.js +8 -0
  122. package/dist/procedures/automerging/_index.js.map +1 -0
  123. package/dist/procedures/automerging/context.d.ts +11 -0
  124. package/dist/procedures/automerging/context.js +2 -0
  125. package/dist/procedures/automerging/context.js.map +1 -0
  126. package/dist/procedures/automerging/steps.d.ts +4 -0
  127. package/dist/procedures/automerging/steps.js +34 -0
  128. package/dist/procedures/automerging/steps.js.map +1 -0
  129. package/dist/procedures/bootstrapping/_index.d.ts +4 -0
  130. package/dist/procedures/bootstrapping/_index.js +8 -0
  131. package/dist/procedures/bootstrapping/_index.js.map +1 -0
  132. package/dist/procedures/bootstrapping/context.d.ts +5 -0
  133. package/dist/procedures/bootstrapping/context.js +2 -0
  134. package/dist/procedures/bootstrapping/context.js.map +1 -0
  135. package/dist/procedures/bootstrapping/ensure-tree.d.ts +2 -0
  136. package/dist/procedures/bootstrapping/ensure-tree.js +5 -0
  137. package/dist/procedures/bootstrapping/ensure-tree.js.map +1 -0
  138. package/dist/procedures/bootstrapping/record.d.ts +2 -0
  139. package/dist/procedures/bootstrapping/record.js +12 -0
  140. package/dist/procedures/bootstrapping/record.js.map +1 -0
  141. package/dist/procedures/bumping/_index.d.ts +4 -0
  142. package/dist/procedures/bumping/_index.js +9 -0
  143. package/dist/procedures/bumping/_index.js.map +1 -0
  144. package/dist/procedures/bumping/context.d.ts +18 -0
  145. package/dist/procedures/bumping/context.js +4 -0
  146. package/dist/procedures/bumping/context.js.map +1 -0
  147. package/dist/procedures/bumping/steps.d.ts +4 -0
  148. package/dist/procedures/bumping/steps.js +50 -0
  149. package/dist/procedures/bumping/steps.js.map +1 -0
  150. package/dist/procedures/crediting/_index.d.ts +4 -0
  151. package/dist/procedures/crediting/_index.js +9 -0
  152. package/dist/procedures/crediting/_index.js.map +1 -0
  153. package/dist/procedures/crediting/context.d.ts +17 -0
  154. package/dist/procedures/crediting/context.js +4 -0
  155. package/dist/procedures/crediting/context.js.map +1 -0
  156. package/dist/procedures/crediting/steps.d.ts +4 -0
  157. package/dist/procedures/crediting/steps.js +51 -0
  158. package/dist/procedures/crediting/steps.js.map +1 -0
  159. package/dist/procedures/inspecting/_index.d.ts +4 -0
  160. package/dist/procedures/inspecting/_index.js +11 -0
  161. package/dist/procedures/inspecting/_index.js.map +1 -0
  162. package/dist/procedures/inspecting/judge.d.ts +2 -0
  163. package/dist/procedures/inspecting/judge.js +6 -0
  164. package/dist/procedures/inspecting/judge.js.map +1 -0
  165. package/dist/procedures/inspecting/read-areas.d.ts +2 -0
  166. package/dist/procedures/inspecting/read-areas.js +5 -0
  167. package/dist/procedures/inspecting/read-areas.js.map +1 -0
  168. package/dist/procedures/inspecting/read-forge.d.ts +2 -0
  169. package/dist/procedures/inspecting/read-forge.js +14 -0
  170. package/dist/procedures/inspecting/read-forge.js.map +1 -0
  171. package/dist/procedures/inspecting/report.d.ts +32 -0
  172. package/dist/procedures/inspecting/report.js +11 -0
  173. package/dist/procedures/inspecting/report.js.map +1 -0
  174. package/dist/procedures/inspecting/rules.d.ts +12 -0
  175. package/dist/procedures/inspecting/rules.js +75 -0
  176. package/dist/procedures/inspecting/rules.js.map +1 -0
  177. package/dist/procedures/proposing/_index.d.ts +4 -0
  178. package/dist/procedures/proposing/_index.js +9 -0
  179. package/dist/procedures/proposing/_index.js.map +1 -0
  180. package/dist/procedures/proposing/context.d.ts +16 -0
  181. package/dist/procedures/proposing/context.js +4 -0
  182. package/dist/procedures/proposing/context.js.map +1 -0
  183. package/dist/procedures/proposing/steps.d.ts +4 -0
  184. package/dist/procedures/proposing/steps.js +46 -0
  185. package/dist/procedures/proposing/steps.js.map +1 -0
  186. package/dist/procedures/versioning/_index.d.ts +16 -0
  187. package/dist/procedures/versioning/_index.js +22 -0
  188. package/dist/procedures/versioning/_index.js.map +1 -0
  189. package/dist/procedures/watching/_index.d.ts +5 -0
  190. package/dist/procedures/watching/_index.js +9 -0
  191. package/dist/procedures/watching/_index.js.map +1 -0
  192. package/dist/procedures/watching/classify.d.ts +5 -0
  193. package/dist/procedures/watching/classify.js +30 -0
  194. package/dist/procedures/watching/classify.js.map +1 -0
  195. package/dist/procedures/watching/context.d.ts +21 -0
  196. package/dist/procedures/watching/context.js +2 -0
  197. package/dist/procedures/watching/context.js.map +1 -0
  198. package/dist/procedures/watching/start.d.ts +2 -0
  199. package/dist/procedures/watching/start.js +24 -0
  200. package/dist/procedures/watching/start.js.map +1 -0
  201. package/dist/procedures/watching/wait.d.ts +2 -0
  202. package/dist/procedures/watching/wait.js +12 -0
  203. package/dist/procedures/watching/wait.js.map +1 -0
  204. package/dist/tools/_index.d.ts +3 -0
  205. package/dist/tools/_index.js +25 -0
  206. package/dist/tools/_index.js.map +1 -0
  207. package/dist/tools/devlog.d.ts +1 -0
  208. package/dist/tools/devlog.js +43 -0
  209. package/dist/tools/devlog.js.map +1 -0
  210. package/dist/tools/flow.d.ts +1 -0
  211. package/dist/tools/flow.js +81 -0
  212. package/dist/tools/flow.js.map +1 -0
  213. package/dist/tools/project.d.ts +1 -0
  214. package/dist/tools/project.js +18 -0
  215. package/dist/tools/project.js.map +1 -0
  216. package/dist/tools/scope.d.ts +1 -0
  217. package/dist/tools/scope.js +51 -0
  218. package/dist/tools/scope.js.map +1 -0
  219. package/dist/tools/version.d.ts +1 -0
  220. package/dist/tools/version.js +23 -0
  221. package/dist/tools/version.js.map +1 -0
  222. package/dist/tools/workshop.d.ts +1 -0
  223. package/dist/tools/workshop.js +56 -0
  224. package/dist/tools/workshop.js.map +1 -0
  225. package/dist/views/devlog.d.ts +15 -0
  226. package/dist/views/devlog.js +31 -0
  227. package/dist/views/devlog.js.map +1 -0
  228. package/dist/views/event.d.ts +2 -0
  229. package/dist/views/event.js +6 -0
  230. package/dist/views/event.js.map +1 -0
  231. package/dist/views/flow.d.ts +12 -0
  232. package/dist/views/flow.js +26 -0
  233. package/dist/views/flow.js.map +1 -0
  234. package/dist/views/help.d.ts +2 -0
  235. package/dist/views/help.js +22 -0
  236. package/dist/views/help.js.map +1 -0
  237. package/dist/views/project.d.ts +2 -0
  238. package/dist/views/project.js +11 -0
  239. package/dist/views/project.js.map +1 -0
  240. package/dist/views/status.d.ts +5 -0
  241. package/dist/views/status.js +50 -0
  242. package/dist/views/status.js.map +1 -0
  243. package/package.json +31 -54
  244. package/resources/cli-art/big-logo-title.txt +24 -0
  245. package/resources/cli-art/big-shortcut-logo-title.txt +10 -0
  246. package/resources/cli-art/medium-logo-title.txt +13 -0
  247. package/resources/cli-art/minimenu-header.ptxml +13 -0
  248. package/resources/cli-art/minimenu-header.txt +11 -0
  249. package/resources/cli-art/small-logo-title.txt +10 -0
  250. package/resources/cli-art/wellcome.txt +10 -0
  251. package/resources/docs-templates/Home.md +7 -0
  252. package/resources/docs-templates/README.md +14 -0
  253. package/resources/docs-templates/_Footer.md +1 -0
  254. package/resources/docs-templates/_Sidebar.md +7 -0
  255. package/.claude-plugin/marketplace.json +0 -17
  256. package/.claude-plugin/mcp.json +0 -8
  257. package/.claude-plugin/plugin.json +0 -16
  258. package/AGENTS.md +0 -114
  259. package/CLAUDE.md +0 -1
  260. package/bin/bos +0 -3
  261. package/hooks/hooks.json +0 -40
  262. package/resources/house/HOUSE.md +0 -22
  263. package/resources/house/bloodlines.json +0 -35
  264. package/resources/house/children/deepseeks-of-anubis.json +0 -4
  265. package/resources/house/children/eon.json +0 -7
  266. package/resources/house/children/hermetic-officer.json +0 -1
  267. package/resources/house/children/ifrit.json +0 -1
  268. package/resources/house/children/license-keepers.json +0 -4
  269. package/resources/house/children/sebas.json +0 -10
  270. package/resources/house/children/shakespeare.json +0 -10
  271. package/resources/house/orders/ravensarmy.json +0 -6
  272. package/resources/house/orders/seiaic-ucdi.json +0 -5
  273. package/resources/ravens/skryba.md +0 -19
  274. package/resources/workshop-root/AGENTS.md +0 -92
  275. package/resources/workshop-root/CLAUDE.md +0 -1
  276. package/resources/workshop.default.json +0 -6
  277. package/skills/bos-archive/SKILL.md +0 -28
  278. package/skills/bos-craftbook/SKILL.md +0 -32
  279. package/skills/bos-craftset/SKILL.md +0 -36
  280. package/skills/bos-devarmory/SKILL.md +0 -34
  281. package/skills/bos-exhibit/SKILL.md +0 -28
  282. package/skills/bos-forge/SKILL.md +0 -28
  283. package/skills/bos-house/SKILL.md +0 -52
  284. package/skills/bos-project/SKILL.md +0 -27
  285. package/skills/bos-sarcophag/SKILL.md +0 -26
  286. package/skills/bos-scope/SKILL.md +0 -33
  287. package/skills/bos-sheme/SKILL.md +0 -38
  288. package/skills/bos-throwbox/SKILL.md +0 -27
  289. package/skills/bos-workshop/SKILL.md +0 -65
  290. package/skills/bos-workshop/assets/.gitkeep +0 -0
  291. package/skills/bos-workshop/references/bos-codebase.md +0 -116
  292. package/skills/bos-workshop/references/bos-concept.md +0 -121
  293. package/skills/bos-workshop/scripts/find-workshop.sh +0 -30
  294. package/src/agent-hook.mjs +0 -28
  295. package/src/bridge/_index.mjs +0 -24
  296. package/src/bridge/bos-instances-link/_index.mjs +0 -18
  297. package/src/bridge/docker-host/_index.mjs +0 -43
  298. package/src/bridge/docker-host/container.mjs +0 -32
  299. package/src/bridge/docker-host/image.mjs +0 -23
  300. package/src/bridge/docker-host/volume.mjs +0 -12
  301. package/src/bridge/docker-publish/_index.mjs +0 -24
  302. package/src/bridge/git-client/_index.mjs +0 -121
  303. package/src/bridge/git-client/author.mjs +0 -26
  304. package/src/bridge/gitea-api/_index.mjs +0 -62
  305. package/src/bridge/github-api/_index.mjs +0 -45
  306. package/src/bridge/npm-publish/_index.mjs +0 -19
  307. package/src/bridge/ollama-link/_index.mjs +0 -93
  308. package/src/bridge/ollama-link/ravens.mjs +0 -29
  309. package/src/bridge/ssh-link/_index.mjs +0 -33
  310. package/src/bridge/subprocess-runner/_index.mjs +0 -33
  311. package/src/cli.mjs +0 -29
  312. package/src/commands/_index.mjs +0 -51
  313. package/src/commands/bootstrap/exec.mjs +0 -7
  314. package/src/commands/bootstrap/help.md +0 -5
  315. package/src/commands/bootstrap/index.json +0 -7
  316. package/src/commands/close/exec.mjs +0 -4
  317. package/src/commands/close/help.md +0 -5
  318. package/src/commands/close/index.json +0 -7
  319. package/src/commands/describe/exec.mjs +0 -11
  320. package/src/commands/describe/help.md +0 -5
  321. package/src/commands/describe/index.json +0 -7
  322. package/src/commands/help/exec.mjs +0 -6
  323. package/src/commands/help/help.md +0 -3
  324. package/src/commands/help/index.json +0 -6
  325. package/src/commands/hook/exec.mjs +0 -3
  326. package/src/commands/hook/help.md +0 -4
  327. package/src/commands/hook/index.json +0 -7
  328. package/src/commands/hooks/exec.mjs +0 -5
  329. package/src/commands/hooks/help.md +0 -4
  330. package/src/commands/hooks/index.json +0 -7
  331. package/src/commands/house/exec.mjs +0 -8
  332. package/src/commands/house/help.md +0 -8
  333. package/src/commands/house/index.json +0 -7
  334. package/src/commands/locate/exec.mjs +0 -2
  335. package/src/commands/locate/help.md +0 -6
  336. package/src/commands/locate/index.json +0 -6
  337. package/src/commands/mode/exec.mjs +0 -17
  338. package/src/commands/mode/help.md +0 -14
  339. package/src/commands/mode/index.json +0 -8
  340. package/src/commands/mode/repl.mjs +0 -18
  341. package/src/commands/open/exec.mjs +0 -5
  342. package/src/commands/open/help.md +0 -4
  343. package/src/commands/open/index.json +0 -7
  344. package/src/commands/promote/exec.mjs +0 -5
  345. package/src/commands/promote/help.md +0 -6
  346. package/src/commands/promote/index.json +0 -7
  347. package/src/commands/repl/exec.mjs +0 -3
  348. package/src/commands/repl/help.md +0 -4
  349. package/src/commands/repl/index.json +0 -6
  350. package/src/commands/seal/exec.mjs +0 -8
  351. package/src/commands/seal/help.md +0 -4
  352. package/src/commands/seal/index.json +0 -7
  353. package/src/commands/sink/exec.mjs +0 -2
  354. package/src/commands/sink/help.md +0 -6
  355. package/src/commands/sink/index.json +0 -7
  356. package/src/commands/skills/exec.mjs +0 -5
  357. package/src/commands/skills/help.md +0 -5
  358. package/src/commands/skills/index.json +0 -7
  359. package/src/commands/status/exec.mjs +0 -2
  360. package/src/commands/status/help.md +0 -6
  361. package/src/commands/status/index.json +0 -7
  362. package/src/commands/status/repl.mjs +0 -14
  363. package/src/commands/verify/exec.mjs +0 -9
  364. package/src/commands/verify/help.md +0 -4
  365. package/src/commands/verify/index.json +0 -7
  366. package/src/controllers/_index.mjs +0 -5
  367. package/src/controllers/skills-controll.mjs +0 -13
  368. package/src/controllers/workshop-controll.mjs +0 -48
  369. package/src/core/basic-bridge.mjs +0 -29
  370. package/src/core/basic-controll.mjs +0 -26
  371. package/src/core/basic-element.mjs +0 -149
  372. package/src/core/basic-model.mjs +0 -7
  373. package/src/core/basic-procedure.mjs +0 -37
  374. package/src/core/basic-submodule.mjs +0 -21
  375. package/src/core/basic-view.mjs +0 -21
  376. package/src/core/self.mjs +0 -10
  377. package/src/index.mjs +0 -24
  378. package/src/main.ts +0 -82
  379. package/src/mcp.mjs +0 -8
  380. package/src/models/_index.mjs +0 -43
  381. package/src/models/archive/class.mjs +0 -9
  382. package/src/models/craftbook/class.mjs +0 -11
  383. package/src/models/craftbook/hang.scrapnotes.mjs +0 -10
  384. package/src/models/craftset/class.mjs +0 -14
  385. package/src/models/devarmory/class.mjs +0 -10
  386. package/src/models/exhibit/class.mjs +0 -8
  387. package/src/models/forge/class.mjs +0 -19
  388. package/src/models/house/bloodlines.mjs +0 -27
  389. package/src/models/house/class.mjs +0 -53
  390. package/src/models/house/groups.mjs +0 -38
  391. package/src/models/project/anatomy.mjs +0 -11
  392. package/src/models/project/class.mjs +0 -20
  393. package/src/models/sarcophag/class.mjs +0 -8
  394. package/src/models/scope/class.mjs +0 -19
  395. package/src/models/sheme/class.mjs +0 -8
  396. package/src/models/throwbox/class.mjs +0 -9
  397. package/src/models/workshop/class.mjs +0 -30
  398. package/src/models/workshop/hang.data.mjs +0 -10
  399. package/src/models/workshop/hang.nests.mjs +0 -14
  400. package/src/models/workshop/hang.setup.mjs +0 -10
  401. package/src/models/workshop/hang.storylines.logs.mjs +0 -10
  402. package/src/models/workshop/hang.storylines.manifests.mjs +0 -10
  403. package/src/models/workshop/hang.storylines.mjs +0 -39
  404. package/src/models/workshop/hang.storylines.ttystories.mjs +0 -10
  405. package/src/models/workshop/hang.system.mjs +0 -25
  406. package/src/models/workshop/host-roles.mjs +0 -9
  407. package/src/models/workshop/locate.mjs +0 -60
  408. package/src/models/workshop/modes.mjs +0 -31
  409. package/src/models/workshop/taskfile.mjs +0 -21
  410. package/src/procedures/_index.mjs +0 -32
  411. package/src/procedures/agent-recording/_index.mjs +0 -34
  412. package/src/procedures/agent-recording/situate.mjs +0 -11
  413. package/src/procedures/bootstrapping/DESCRIPTION.md +0 -6
  414. package/src/procedures/bootstrapping/_index.mjs +0 -13
  415. package/src/procedures/bootstrapping/deploy-guides.mjs +0 -15
  416. package/src/procedures/bootstrapping/ensure-tree.mjs +0 -4
  417. package/src/procedures/closing/DESCRIPTION.md +0 -6
  418. package/src/procedures/closing/_index.mjs +0 -11
  419. package/src/procedures/closing/capture-ttystory.mjs +0 -14
  420. package/src/procedures/closing/record-closing.mjs +0 -6
  421. package/src/procedures/describing/DESCRIPTION.md +0 -23
  422. package/src/procedures/describing/_index.mjs +0 -15
  423. package/src/procedures/describing/ask-skryba.mjs +0 -82
  424. package/src/procedures/describing/compose-message.mjs +0 -25
  425. package/src/procedures/describing/read-staged.mjs +0 -7
  426. package/src/procedures/describing/scopes.mjs +0 -38
  427. package/src/procedures/describing/staged-diff.mjs +0 -25
  428. package/src/procedures/describing/write-message.mjs +0 -15
  429. package/src/procedures/gathering/DESCRIPTION.md +0 -13
  430. package/src/procedures/gathering/_index.mjs +0 -13
  431. package/src/procedures/gathering/list-served.mjs +0 -9
  432. package/src/procedures/gathering/merge-residents.mjs +0 -31
  433. package/src/procedures/gathering/read-registry.mjs +0 -7
  434. package/src/procedures/hooking/DESCRIPTION.md +0 -6
  435. package/src/procedures/hooking/_index.mjs +0 -12
  436. package/src/procedures/hooking/hooks.mjs +0 -10
  437. package/src/procedures/hooking/install-hooks.mjs +0 -34
  438. package/src/procedures/hooking/record-hook.mjs +0 -13
  439. package/src/procedures/inspecting/DESCRIPTION.md +0 -3
  440. package/src/procedures/inspecting/_index.mjs +0 -9
  441. package/src/procedures/loading/DESCRIPTION.md +0 -4
  442. package/src/procedures/loading/_index.mjs +0 -15
  443. package/src/procedures/loading/load-config.mjs +0 -16
  444. package/src/procedures/loading/validate-mode.mjs +0 -8
  445. package/src/procedures/loading/validate-role.mjs +0 -8
  446. package/src/procedures/locating/DESCRIPTION.md +0 -6
  447. package/src/procedures/locating/_index.mjs +0 -13
  448. package/src/procedures/locating/locate-self.mjs +0 -7
  449. package/src/procedures/locating/locate-workshop.mjs +0 -16
  450. package/src/procedures/locating/read-environment.mjs +0 -12
  451. package/src/procedures/mode-switching/DESCRIPTION.md +0 -7
  452. package/src/procedures/mode-switching/_index.mjs +0 -10
  453. package/src/procedures/mode-switching/record-mode.mjs +0 -8
  454. package/src/procedures/mode-switching/switch-mode.mjs +0 -16
  455. package/src/procedures/opening/DESCRIPTION.md +0 -6
  456. package/src/procedures/opening/_index.mjs +0 -8
  457. package/src/procedures/opening/record-opening.mjs +0 -4
  458. package/src/procedures/promoting/DESCRIPTION.md +0 -8
  459. package/src/procedures/promoting/_index.mjs +0 -14
  460. package/src/procedures/promoting/apply.mjs +0 -28
  461. package/src/procedures/promoting/branch-flow.mjs +0 -23
  462. package/src/procedures/promoting/plan.mjs +0 -14
  463. package/src/procedures/promoting/read-position.mjs +0 -15
  464. package/src/procedures/sinking/DESCRIPTION.md +0 -8
  465. package/src/procedures/sinking/_index.mjs +0 -12
  466. package/src/procedures/sinking/inventory-forge.mjs +0 -18
  467. package/src/procedures/sinking/inventory-tools.mjs +0 -7
  468. package/src/procedures/skilling/DESCRIPTION.md +0 -11
  469. package/src/procedures/skilling/_index.mjs +0 -15
  470. package/src/procedures/skilling/collect-models.mjs +0 -15
  471. package/src/procedures/skilling/compose-skill.mjs +0 -49
  472. package/src/procedures/skilling/glossary.mjs +0 -23
  473. package/src/procedures/skilling/register-skills.mjs +0 -21
  474. package/src/procedures/skilling/write-skills.mjs +0 -19
  475. package/src/views/_index.mjs +0 -23
  476. package/src/views/agent/_index.mjs +0 -2
  477. package/src/views/agent/brief.mjs +0 -34
  478. package/src/views/help/_index.mjs +0 -41
  479. package/src/views/house/_index.mjs +0 -56
  480. package/src/views/inventory/_index.mjs +0 -27
  481. package/src/views/mcp/_index.mjs +0 -31
  482. package/src/views/mcp/tools.mjs +0 -87
  483. package/src/views/mode/_index.mjs +0 -34
  484. package/src/views/mode/chooser.mjs +0 -37
  485. package/src/views/promotion/_index.mjs +0 -20
  486. package/src/views/repl/_index.mjs +0 -30
  487. package/src/views/skills/_index.mjs +0 -24
  488. package/src/views/status/_index.mjs +0 -57
  489. package/src/views/status/tree.mjs +0 -19
  490. package/src/views/terminal/paint.mjs +0 -22
  491. package/template/SKILL.md +0 -16
@@ -0,0 +1,42 @@
1
+ // POSIX paths without node:path, so the core runs wherever a Host can be written.
2
+ // Every path the core keeps is absolute and uses "/".
3
+ export function join(...parts) {
4
+ return normalize(parts.filter(Boolean).join("/"));
5
+ }
6
+ export function normalize(path) {
7
+ const absolute = path.startsWith("/");
8
+ const out = [];
9
+ for (const part of path.split("/")) {
10
+ if (!part || part === ".")
11
+ continue;
12
+ if (part === "..") {
13
+ if (out.length && out[out.length - 1] !== "..")
14
+ out.pop();
15
+ else if (!absolute)
16
+ out.push("..");
17
+ continue;
18
+ }
19
+ out.push(part);
20
+ }
21
+ const body = out.join("/");
22
+ return absolute ? `/${body}` : body || ".";
23
+ }
24
+ export function basename(path) {
25
+ return normalize(path).split("/").pop() ?? "";
26
+ }
27
+ export function dirname(path) {
28
+ const parts = normalize(path).split("/");
29
+ parts.pop();
30
+ const parent = parts.join("/");
31
+ return parent || "/";
32
+ }
33
+ // "a/b" when target = root/a/b; "" when equal; null when target is outside root
34
+ export function inside(root, target) {
35
+ const base = normalize(root);
36
+ const path = normalize(target);
37
+ if (path === base)
38
+ return "";
39
+ const prefix = base === "/" ? "/" : `${base}/`;
40
+ return path.startsWith(prefix) ? path.slice(prefix.length) : null;
41
+ }
42
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sDAAsD;AAEtD,MAAM,UAAU,IAAI,CAAC,GAAG,KAAe;IACrC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG;YAAE,SAAS;QACpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,GAAG,CAAC,GAAG,EAAE,CAAC;iBACrD,IAAI,CAAC,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,KAAK,CAAC,GAAG,EAAE,CAAC;IACZ,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,MAAM,IAAI,GAAG,CAAC;AACvB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,MAAc;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;IAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Context } from "./context.ts";
2
+ export type Step<C extends Context> = {
3
+ name: string;
4
+ run: (context: C) => void | Promise<void>;
5
+ };
6
+ export declare class Procedure<C extends Context = Context> {
7
+ readonly name: string;
8
+ readonly steps: Step<C>[];
9
+ constructor(name: string, steps: Step<C>[]);
10
+ run(context: C): Promise<C>;
11
+ }
@@ -0,0 +1,24 @@
1
+ export class Procedure {
2
+ name;
3
+ steps;
4
+ constructor(name, steps) {
5
+ this.name = name;
6
+ this.steps = steps;
7
+ }
8
+ async run(context) {
9
+ for (const step of this.steps) {
10
+ const started = context.host.now();
11
+ try {
12
+ await step.run(context);
13
+ context.trace.push({ procedure: this.name, step: step.name, ok: true, ms: context.host.now() - started });
14
+ }
15
+ catch (error) {
16
+ const message = error instanceof Error ? error.message : String(error);
17
+ context.trace.push({ procedure: this.name, step: step.name, ok: false, error: message });
18
+ throw new Error(`${this.name} › ${step.name}: ${message}`, { cause: error });
19
+ }
20
+ }
21
+ return context;
22
+ }
23
+ }
24
+ //# sourceMappingURL=procedure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"procedure.js","sourceRoot":"","sources":["../../src/core/procedure.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,SAAS;IACX,IAAI,CAAS;IACb,KAAK,CAAY;IAE1B,YAAY,IAAY,EAAE,KAAgB;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAU;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YAC5G,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { BOS } from "../main.ts";
2
+ export type Arg = {
3
+ name: string;
4
+ type: "string" | "boolean";
5
+ info: string;
6
+ positional?: boolean;
7
+ required?: boolean;
8
+ };
9
+ export type Input = Record<string, string | boolean | undefined>;
10
+ export type IO = {
11
+ print: (line: string) => void;
12
+ signal: AbortSignal;
13
+ };
14
+ export type Tool = {
15
+ model: string;
16
+ name: string;
17
+ info: string;
18
+ readOnly: boolean;
19
+ args: Arg[];
20
+ run: (bos: BOS, input: Input, io: IO) => unknown | Promise<unknown>;
21
+ render?: (result: never, input: Input) => string;
22
+ };
23
+ export declare function tool<R>(definition: Omit<Tool, "run" | "render" | "args" | "readOnly"> & {
24
+ args?: Arg[];
25
+ readOnly?: boolean;
26
+ run: (bos: BOS, input: Input, io: IO) => R | Promise<R>;
27
+ render?: (result: Awaited<R>, input: Input) => string;
28
+ }): Tool;
29
+ export declare function parseArgs(argv: string[]): {
30
+ operands: string[];
31
+ flags: Record<string, string | boolean>;
32
+ };
33
+ export declare function inputFor(entry: Tool, operands: string[], flags: Record<string, string | boolean>): Input;
@@ -0,0 +1,44 @@
1
+ export function tool(definition) {
2
+ return { args: [], readOnly: true, ...definition };
3
+ }
4
+ // "--dry-run --workshop=/x a b" → flags { dryRun: true, workshop: "/x" }, operands [a, b]
5
+ export function parseArgs(argv) {
6
+ const flags = {};
7
+ const operands = [];
8
+ for (const arg of argv) {
9
+ if (!arg.startsWith("--")) {
10
+ operands.push(arg);
11
+ continue;
12
+ }
13
+ const [key = "", value] = arg.slice(2).split(/=(.*)/s);
14
+ flags[key.replace(/-(\w)/g, (_, c) => c.toUpperCase())] = value ?? true;
15
+ }
16
+ return { operands, flags };
17
+ }
18
+ // operands and flags → the tool's input, checked against its args
19
+ export function inputFor(entry, operands, flags) {
20
+ const input = {};
21
+ const positional = entry.args.filter((arg) => arg.positional);
22
+ positional.forEach((arg, index) => {
23
+ if (operands[index] !== undefined)
24
+ input[arg.name] = operands[index];
25
+ });
26
+ if (operands.length > positional.length)
27
+ throw new Error(`too many operands for ${entry.model} ${entry.name}: ${operands.slice(positional.length).join(" ")}`);
28
+ for (const arg of entry.args) {
29
+ const value = flags[arg.name];
30
+ if (value === undefined)
31
+ continue;
32
+ if (arg.type === "boolean")
33
+ input[arg.name] = value === true || value === "true";
34
+ else if (value === true)
35
+ throw new Error(`--${arg.name} needs a value: --${arg.name}=<${arg.name}>`);
36
+ else
37
+ input[arg.name] = value;
38
+ }
39
+ const missing = entry.args.filter((arg) => arg.required && input[arg.name] === undefined).map((arg) => arg.name);
40
+ if (missing.length)
41
+ throw new Error(`${entry.model} ${entry.name} needs: ${missing.join(", ")}`);
42
+ return input;
43
+ }
44
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/core/tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const EVENTS: readonly ["step", "phase", "milestone", "flip"];
2
+ export type LoopEvent = (typeof EVENTS)[number];
3
+ export declare function isLoopEvent(value: string): value is LoopEvent;
4
+ export declare function bumpSemver(version: string, event: LoopEvent): string;
5
+ export declare function bumpGrih(version: string, event: LoopEvent): string;
6
+ export declare const GRIH_START = "0.0.0.0";
@@ -0,0 +1,37 @@
1
+ // The two version schemes of BOS (docs/devlog/ROADMAP.md):
2
+ // a project: semver vX.Y.Z
3
+ // a scope: GRIH vG.R.I.H
4
+ // and the four events of the craft loop that bump them.
5
+ //
6
+ // | event | semver | GRIH |
7
+ // | step | Z | H |
8
+ // | phase | Y | I |
9
+ // | milestone | X | R |
10
+ // | flip | X | G | the script flips: pre-alpha → alpha, a key concept changes
11
+ export const EVENTS = ["step", "phase", "milestone", "flip"];
12
+ export function isLoopEvent(value) {
13
+ return EVENTS.includes(value);
14
+ }
15
+ function parse(version, count, scheme) {
16
+ const parts = version.replace(/^v/, "").split(".");
17
+ const numbers = parts.map(Number);
18
+ if (parts.length !== count || numbers.some((n) => !Number.isInteger(n) || n < 0))
19
+ throw new Error(`"${version}" is not a ${scheme} version (${count} whole numbers joined by dots)`);
20
+ return numbers;
21
+ }
22
+ // raise the digit at index, zero every digit after it
23
+ function raise(numbers, index) {
24
+ return numbers.map((n, i) => (i < index ? n : i === index ? n + 1 : 0)).join(".");
25
+ }
26
+ const SEMVER_DIGIT = { flip: 0, milestone: 0, phase: 1, step: 2 };
27
+ const GRIH_DIGIT = { flip: 0, milestone: 1, phase: 2, step: 3 };
28
+ // "0.6.1" + phase → "0.7.0"; pre-release or build suffixes are not part of the core's scheme
29
+ export function bumpSemver(version, event) {
30
+ return raise(parse(version, 3, "semver"), SEMVER_DIGIT[event]);
31
+ }
32
+ // "0.1.2.3" + milestone → "0.2.0.0"
33
+ export function bumpGrih(version, event) {
34
+ return raise(parse(version, 4, "GRIH"), GRIH_DIGIT[event]);
35
+ }
36
+ export const GRIH_START = "0.0.0.0";
37
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,8BAA8B;AAC9B,gCAAgC;AAChC,wDAAwD;AACxD,EAAE;AACF,gCAAgC;AAChC,gCAAgC;AAChC,gCAAgC;AAChC,gCAAgC;AAChC,6FAA6F;AAE7F,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGtE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAQ,MAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,KAAK,CAAC,OAAe,EAAE,KAAa,EAAE,MAAc;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,cAAc,MAAM,aAAa,KAAK,gCAAgC,CAAC,CAAC;IACrG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sDAAsD;AACtD,SAAS,KAAK,CAAC,OAAiB,EAAE,KAAa;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,YAAY,GAA8B,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7F,MAAM,UAAU,GAA8B,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAE3F,6FAA6F;AAC7F,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAgB;IAC1D,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAgB;IACxD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Change, Entry, Host, RunResult } from "../core/host.ts";
2
+ export { WATCH_LIMIT } from "./watch-tree.ts";
3
+ export declare class NodeHost implements Host {
4
+ exists(path: string): boolean;
5
+ isDirectory(path: string): boolean;
6
+ list(path: string): Entry[];
7
+ readText(path: string): string | null;
8
+ writeText(path: string, text: string): void;
9
+ appendText(path: string, text: string): void;
10
+ mkdir(path: string): void;
11
+ watch(root: string, onChange: (change: Change) => void, onError: (error: Error) => void, skip?: (relative: string) => boolean): () => void;
12
+ run(command: string, args: string[], options?: {
13
+ cwd?: string;
14
+ }): RunResult;
15
+ env(name: string): string | undefined;
16
+ home(): string;
17
+ cwd(): string;
18
+ hostname(): string;
19
+ user(): string;
20
+ now(): number;
21
+ }
@@ -0,0 +1,76 @@
1
+ // Host for Node.js: the real file system, clock and environment.
2
+ import { spawnSync } from "node:child_process";
3
+ import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
4
+ import { homedir, hostname, userInfo } from "node:os";
5
+ import { resolve } from "node:path";
6
+ import { watchTree } from "./watch-tree.js";
7
+ export { WATCH_LIMIT } from "./watch-tree.js";
8
+ export class NodeHost {
9
+ exists(path) {
10
+ return existsSync(path);
11
+ }
12
+ isDirectory(path) {
13
+ try {
14
+ return statSync(path).isDirectory();
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ list(path) {
21
+ try {
22
+ return readdirSync(path, { withFileTypes: true }).map((entry) => ({
23
+ name: entry.name,
24
+ directory: entry.isDirectory(),
25
+ }));
26
+ }
27
+ catch {
28
+ return [];
29
+ }
30
+ }
31
+ readText(path) {
32
+ try {
33
+ return readFileSync(path, "utf8");
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ writeText(path, text) {
40
+ writeFileSync(path, text);
41
+ }
42
+ appendText(path, text) {
43
+ appendFileSync(path, text);
44
+ }
45
+ mkdir(path) {
46
+ mkdirSync(path, { recursive: true });
47
+ }
48
+ watch(root, onChange, onError, skip = () => false) {
49
+ return watchTree(root, { onChange, onError, skip });
50
+ }
51
+ run(command, args, options = {}) {
52
+ const result = spawnSync(command, args, { cwd: options.cwd, encoding: "utf8", maxBuffer: 64 * 1024 * 1024 });
53
+ if (result.error)
54
+ return { status: 127, stdout: "", stderr: `${command}: ${result.error.message}` };
55
+ return { status: result.status ?? 1, stdout: result.stdout, stderr: result.stderr };
56
+ }
57
+ env(name) {
58
+ return process.env[name];
59
+ }
60
+ home() {
61
+ return homedir();
62
+ }
63
+ cwd() {
64
+ return resolve(process.cwd());
65
+ }
66
+ hostname() {
67
+ return hostname();
68
+ }
69
+ user() {
70
+ return userInfo().username;
71
+ }
72
+ now() {
73
+ return Date.now();
74
+ }
75
+ }
76
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/hosts/node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Change } from "../core/host.ts";
2
+ export declare const WATCH_LIMIT = "no file watches left on this system (fs.inotify.max_user_watches); close other watchers (editors) or raise the limit";
3
+ export type TreeHandlers = {
4
+ onChange: (change: Change) => void;
5
+ onError: (error: Error) => void;
6
+ skip: (relative: string) => boolean;
7
+ };
8
+ export declare function watchTree(root: string, { onChange, onError, skip }: TreeHandlers): () => void;
@@ -0,0 +1,86 @@
1
+ // A recursive watch built from one watcher per directory. Node's own recursive watch
2
+ // on Linux watches every file and, when inotify runs out, stops reporting without an
3
+ // error. Here a skipped directory (.git, node_modules…) costs no watch at all, a new
4
+ // directory is watched as soon as it appears, and running out of watches is an error.
5
+ import { readdirSync, statSync, watch } from "node:fs";
6
+ // Linux gives every user a fixed number of inotify watches; editors watching big trees can take them all
7
+ export const WATCH_LIMIT = "no file watches left on this system (fs.inotify.max_user_watches); close other watchers (editors) or raise the limit";
8
+ function asError(error) {
9
+ const code = error?.code;
10
+ if (code === "ENOSPC")
11
+ return new Error(WATCH_LIMIT);
12
+ return error instanceof Error ? error : new Error(String(error));
13
+ }
14
+ function isDirectory(path) {
15
+ try {
16
+ return statSync(path).isDirectory();
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ export function watchTree(root, { onChange, onError, skip }) {
23
+ const watchers = new Map();
24
+ let failed = false;
25
+ const fail = (error) => {
26
+ if (failed)
27
+ return;
28
+ failed = true;
29
+ stop();
30
+ onError(asError(error));
31
+ };
32
+ // relative: "" for the root, else "a/b"
33
+ const add = (relative) => {
34
+ if (failed || watchers.has(relative) || (relative && skip(relative)))
35
+ return;
36
+ const path = relative ? `${root}/${relative}` : root;
37
+ let watcher;
38
+ try {
39
+ watcher = watch(path, (kind, filename) => {
40
+ if (!filename)
41
+ return;
42
+ const changed = relative ? `${relative}/${filename}` : String(filename);
43
+ if (kind === "rename" && isDirectory(`${root}/${changed}`))
44
+ add(changed);
45
+ if (kind === "rename" && !watchers.has(changed))
46
+ drop(changed);
47
+ onChange({ path: changed, kind: kind === "rename" ? "rename" : "change" });
48
+ });
49
+ }
50
+ catch (error) {
51
+ // the directory vanished between listing and watching: nothing to watch
52
+ if (error.code === "ENOENT")
53
+ return;
54
+ return fail(error);
55
+ }
56
+ watcher.on("error", fail);
57
+ watchers.set(relative, watcher);
58
+ let entries = [];
59
+ try {
60
+ entries = readdirSync(path, { withFileTypes: true })
61
+ .filter((entry) => entry.isDirectory())
62
+ .map((entry) => entry.name);
63
+ }
64
+ catch { }
65
+ for (const name of entries)
66
+ add(relative ? `${relative}/${name}` : name);
67
+ };
68
+ // a removed directory: close its watcher and those below it
69
+ const drop = (relative) => {
70
+ if (isDirectory(`${root}/${relative}`))
71
+ return;
72
+ for (const [key, watcher] of watchers)
73
+ if (key === relative || key.startsWith(`${relative}/`)) {
74
+ watcher.close();
75
+ watchers.delete(key);
76
+ }
77
+ };
78
+ const stop = () => {
79
+ for (const watcher of watchers.values())
80
+ watcher.close();
81
+ watchers.clear();
82
+ };
83
+ add("");
84
+ return stop;
85
+ }
86
+ //# sourceMappingURL=watch-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-tree.js","sourceRoot":"","sources":["../../src/hosts/watch-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export { Git } from "./bridges/git.ts";
2
+ export { type Comparison, GitHub, type PullRequest } from "./bridges/github.ts";
3
+ export { type Context, createContext, createIfMissing, type TraceEntry } from "./core/context.ts";
4
+ export { Element, type ElementClass, type ElementNode } from "./core/element.ts";
5
+ export type { Change, Entry, Host, RunResult } from "./core/host.ts";
6
+ export * as paths from "./core/paths.ts";
7
+ export { Procedure, type Step } from "./core/procedure.ts";
8
+ export { type Arg, type Input, type IO, inputFor, parseArgs, type Tool, tool } from "./core/tool.ts";
9
+ export { bumpGrih, bumpSemver, EVENTS, GRIH_START, isLoopEvent, type LoopEvent } from "./core/version.ts";
10
+ export { NodeHost, WATCH_LIMIT } from "./hosts/node.ts";
11
+ export { BOS, type BOSOptions, type WatchOptions } from "./main.ts";
12
+ export * from "./models/_index.ts";
13
+ export * from "./procedures/_index.ts";
14
+ export { findTool, TOOLS } from "./tools/_index.ts";
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ // Library entry.
2
+ // import { BOS, NodeHost } from "blacksmith-organization-system";
3
+ // const bos = new BOS(new NodeHost());
4
+ // await bos.bootstrap(); const report = await bos.inspect();
5
+ export { Git } from "./bridges/git.js";
6
+ export { GitHub } from "./bridges/github.js";
7
+ export { createContext, createIfMissing } from "./core/context.js";
8
+ export { Element } from "./core/element.js";
9
+ export * as paths from "./core/paths.js";
10
+ export { Procedure } from "./core/procedure.js";
11
+ export { inputFor, parseArgs, tool } from "./core/tool.js";
12
+ export { bumpGrih, bumpSemver, EVENTS, GRIH_START, isLoopEvent } from "./core/version.js";
13
+ export { NodeHost, WATCH_LIMIT } from "./hosts/node.js";
14
+ export { BOS } from "./main.js";
15
+ export * from "./models/_index.js";
16
+ export * from "./procedures/_index.js";
17
+ export { findTool, TOOLS } from "./tools/_index.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,oEAAoE;AACpE,yCAAyC;AACzC,gEAAgE;AAEhE,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAmB,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAgB,aAAa,EAAE,eAAe,EAAmB,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,OAAO,EAAuC,MAAM,mBAAmB,CAAC;AAEjF,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAa,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAiC,QAAQ,EAAE,SAAS,EAAa,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAsC,MAAM,WAAW,CAAC;AACpE,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,55 @@
1
+ import type { Host } from "./core/host.ts";
2
+ import type { LoopEvent } from "./core/version.ts";
3
+ import { type Loop, type Project, type Settings, type VersioningData, Workshop } from "./models/_index.ts";
4
+ import { type BootstrapContext, type BumpOutcome, type CreditOutcome, type FlowOutcome, type VersionContext, type WorkshopEvent, type WorkshopReport } from "./procedures/_index.ts";
5
+ export type BOSOptions = {
6
+ workshop?: string;
7
+ };
8
+ export type WatchOptions = {
9
+ signal: AbortSignal;
10
+ onEvent: (event: WorkshopEvent) => void;
11
+ record?: boolean;
12
+ quietMs?: number;
13
+ };
14
+ export declare class BOS {
15
+ #private;
16
+ readonly host: Host;
17
+ readonly options: BOSOptions;
18
+ constructor(host: Host, options?: BOSOptions);
19
+ get workshop(): Workshop;
20
+ bootstrap({ dryRun }?: {
21
+ dryRun?: boolean | undefined;
22
+ }): Promise<BootstrapContext>;
23
+ inspect(): Promise<WorkshopReport>;
24
+ watch({ signal, onEvent, record, quietMs }: WatchOptions): Promise<void>;
25
+ bumpScope(name: string, event: LoopEvent, { dryRun }?: {
26
+ dryRun?: boolean | undefined;
27
+ }): Promise<VersionContext>;
28
+ settings(dir?: string): {
29
+ project: Project;
30
+ settings: Settings;
31
+ loop: Loop;
32
+ versioning: VersioningData;
33
+ };
34
+ loop(dir?: string): {
35
+ project: Project;
36
+ loop: Loop;
37
+ };
38
+ bump(station: string, { dir, dryRun }?: {
39
+ dir?: string;
40
+ dryRun?: boolean;
41
+ }): Promise<BumpOutcome>;
42
+ authors({ dir, dryRun }?: {
43
+ dir?: string;
44
+ dryRun?: boolean;
45
+ }): Promise<CreditOutcome>;
46
+ propose(branch: string, { dir, dryRun }?: {
47
+ dir?: string;
48
+ dryRun?: boolean;
49
+ }): Promise<FlowOutcome>;
50
+ automerge(number: number, { dir, dryRun }?: {
51
+ dir?: string;
52
+ dryRun?: boolean;
53
+ }): Promise<FlowOutcome>;
54
+ toString(): string;
55
+ }
package/dist/main.js ADDED
@@ -0,0 +1,99 @@
1
+ // The spine of BOS: one object that holds the host, finds the workshop and runs
2
+ // the procedures on it. Every face of BOS (CLI, library, later MCP and HTTP) goes
3
+ // through these methods.
4
+ // const bos = new BOS(new NodeHost()); const report = await bos.inspect();
5
+ import { Git } from "./bridges/git.js";
6
+ import { GitHub } from "./bridges/github.js";
7
+ import { createContext } from "./core/context.js";
8
+ import { authorsFile, loopOfSettings, projectAround, settingsOf, versioningOf, Workshop, } from "./models/_index.js";
9
+ import { automerging, bootstrapping, bumping, crediting, emptyReport, inspecting, proposing, unbumped, uncredited, undecided, versioning, watching, } from "./procedures/_index.js";
10
+ export class BOS {
11
+ host;
12
+ options;
13
+ #workshop = null;
14
+ constructor(host, options = {}) {
15
+ this.host = host;
16
+ this.options = options;
17
+ }
18
+ // the active workshop: --workshop, $BOS_WORKSHOP, $WORKSHOP_ROOT/__WORKSHOP, an ancestor __WORKSHOP,
19
+ // or ~/__WORKSHOP ($WORKSHOP_RENAME changes the name)
20
+ get workshop() {
21
+ this.#workshop ??= Workshop.locate(this.host, this.options.workshop);
22
+ return this.#workshop;
23
+ }
24
+ // build the base of the environment: create what is missing, never overwrite
25
+ async bootstrap({ dryRun = false } = {}) {
26
+ return bootstrapping.run({ ...createContext(this.host, { dryRun }), workshop: this.workshop });
27
+ }
28
+ // the whole workshop as one coherent environment, with findings; reads only
29
+ async inspect() {
30
+ const context = { ...createContext(this.host), workshop: this.workshop, report: emptyReport(this.workshop) };
31
+ return (await inspecting.run(context)).report;
32
+ }
33
+ // listen to every change in the workshop until options.signal aborts
34
+ async watch({ signal, onEvent, record = false, quietMs = 250 }) {
35
+ await watching.run({ ...createContext(this.host), workshop: this.workshop, signal, onEvent, record, quietMs });
36
+ }
37
+ // raise a scope's GRIH version for one loop event
38
+ async bumpScope(name, event, { dryRun = false } = {}) {
39
+ const scope = this.workshop.forge.scope(name);
40
+ return versioning.run({ ...createContext(this.host, { dryRun }), workshop: this.workshop, scope, event });
41
+ }
42
+ // the settings of the project around dir (default: the current directory): .github/bos.json
43
+ settings(dir) {
44
+ const project = projectAround(this.host, dir);
45
+ const settings = settingsOf(this.host, project.path);
46
+ return { project, settings, loop: loopOfSettings(settings), versioning: versioningOf(settings) };
47
+ }
48
+ // the craft loop of the project around dir
49
+ loop(dir) {
50
+ const { project, loop } = this.settings(dir);
51
+ return { project, loop };
52
+ }
53
+ // bump the project's version for work landing on a station (only a released version moves)
54
+ async bump(station, { dir, dryRun = false } = {}) {
55
+ const { project, versioning } = this.settings(dir);
56
+ const git = new Git(this.host, project.path);
57
+ const context = {
58
+ ...createContext(this.host, { dryRun }),
59
+ projectPath: project.path,
60
+ station,
61
+ versioning,
62
+ git,
63
+ outcome: unbumped(),
64
+ };
65
+ return (await bumping.run(context)).outcome;
66
+ }
67
+ // name everyone of the project's commits in its .github/AUTHORS
68
+ async authors({ dir, dryRun = false } = {}) {
69
+ const { project } = this.loop(dir);
70
+ const file = authorsFile(project.path);
71
+ const context = {
72
+ ...createContext(this.host, { dryRun }),
73
+ file,
74
+ git: new Git(this.host, project.path),
75
+ lines: [],
76
+ identities: [],
77
+ outcome: uncredited(file),
78
+ };
79
+ return (await crediting.run(context)).outcome;
80
+ }
81
+ // open the pull request of a branch's forward step on GitHub
82
+ async propose(branch, { dir, dryRun = false } = {}) {
83
+ const { project, loop } = this.loop(dir);
84
+ const github = new GitHub(this.host, project.path);
85
+ const context = { ...createContext(this.host, { dryRun }), loop, github, branch, outcome: undecided() };
86
+ return (await proposing.run(context)).outcome;
87
+ }
88
+ // merge a loop pull request when the loop allows it
89
+ async automerge(number, { dir, dryRun = false } = {}) {
90
+ const { project, loop } = this.loop(dir);
91
+ const github = new GitHub(this.host, project.path);
92
+ const context = { ...createContext(this.host, { dryRun }), loop, github, number, outcome: undecided() };
93
+ return (await automerging.run(context)).outcome;
94
+ }
95
+ toString() {
96
+ return `[<Blacksmith_Organization_System::${this.workshop.path}>]`;
97
+ }
98
+ }
99
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}