blacksmith-organization-system 1.0.0-dev.3 → 1.1.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 (470) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +61 -65
  3. package/dist/bridges/git.d.ts +8 -0
  4. package/dist/bridges/git.js +20 -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 +51 -0
  43. package/dist/main.js +85 -0
  44. package/dist/main.js.map +1 -0
  45. package/dist/models/_index.d.ts +18 -0
  46. package/dist/models/_index.js +20 -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/craftbook/class.d.ts +10 -0
  52. package/dist/models/craftbook/class.js +13 -0
  53. package/dist/models/craftbook/class.js.map +1 -0
  54. package/dist/models/devarmory/class.d.ts +11 -0
  55. package/dist/models/devarmory/class.js +8 -0
  56. package/dist/models/devarmory/class.js.map +1 -0
  57. package/dist/models/devlog/class.d.ts +19 -0
  58. package/dist/models/devlog/class.js +61 -0
  59. package/dist/models/devlog/class.js.map +1 -0
  60. package/dist/models/forge/class.d.ts +9 -0
  61. package/dist/models/forge/class.js +24 -0
  62. package/dist/models/forge/class.js.map +1 -0
  63. package/dist/models/loop/class.d.ts +16 -0
  64. package/dist/models/loop/class.js +56 -0
  65. package/dist/models/loop/class.js.map +1 -0
  66. package/dist/models/loop/data.d.ts +12 -0
  67. package/dist/models/loop/data.js +20 -0
  68. package/dist/models/loop/data.js.map +1 -0
  69. package/dist/models/loop/load.d.ts +5 -0
  70. package/dist/models/loop/load.js +14 -0
  71. package/dist/models/loop/load.js.map +1 -0
  72. package/dist/models/project/anatomy.d.ts +2 -0
  73. package/dist/models/project/anatomy.js +15 -0
  74. package/dist/models/project/anatomy.js.map +1 -0
  75. package/dist/models/project/around.d.ts +3 -0
  76. package/dist/models/project/around.js +13 -0
  77. package/dist/models/project/around.js.map +1 -0
  78. package/dist/models/project/class.d.ts +21 -0
  79. package/dist/models/project/class.js +23 -0
  80. package/dist/models/project/class.js.map +1 -0
  81. package/dist/models/project/git.d.ts +8 -0
  82. package/dist/models/project/git.js +26 -0
  83. package/dist/models/project/git.js.map +1 -0
  84. package/dist/models/project/version.d.ts +6 -0
  85. package/dist/models/project/version.js +23 -0
  86. package/dist/models/project/version.js.map +1 -0
  87. package/dist/models/scope/class.d.ts +21 -0
  88. package/dist/models/scope/class.js +49 -0
  89. package/dist/models/scope/class.js.map +1 -0
  90. package/dist/models/settings/data.d.ts +12 -0
  91. package/dist/models/settings/data.js +9 -0
  92. package/dist/models/settings/data.js.map +1 -0
  93. package/dist/models/settings/load.d.ts +9 -0
  94. package/dist/models/settings/load.js +32 -0
  95. package/dist/models/settings/load.js.map +1 -0
  96. package/dist/models/system/class.d.ts +16 -0
  97. package/dist/models/system/class.js +21 -0
  98. package/dist/models/system/class.js.map +1 -0
  99. package/dist/models/system/parts.d.ts +21 -0
  100. package/dist/models/system/parts.js +22 -0
  101. package/dist/models/system/parts.js.map +1 -0
  102. package/dist/models/system/storylines.d.ts +39 -0
  103. package/dist/models/system/storylines.js +42 -0
  104. package/dist/models/system/storylines.js.map +1 -0
  105. package/dist/models/workshop/class.d.ts +20 -0
  106. package/dist/models/workshop/class.js +43 -0
  107. package/dist/models/workshop/class.js.map +1 -0
  108. package/dist/models/workshop/locate.d.ts +16 -0
  109. package/dist/models/workshop/locate.js +54 -0
  110. package/dist/models/workshop/locate.js.map +1 -0
  111. package/dist/procedures/_index.d.ts +7 -0
  112. package/dist/procedures/_index.js +10 -0
  113. package/dist/procedures/_index.js.map +1 -0
  114. package/dist/procedures/automerging/_index.d.ts +4 -0
  115. package/dist/procedures/automerging/_index.js +8 -0
  116. package/dist/procedures/automerging/_index.js.map +1 -0
  117. package/dist/procedures/automerging/context.d.ts +11 -0
  118. package/dist/procedures/automerging/context.js +2 -0
  119. package/dist/procedures/automerging/context.js.map +1 -0
  120. package/dist/procedures/automerging/steps.d.ts +4 -0
  121. package/dist/procedures/automerging/steps.js +34 -0
  122. package/dist/procedures/automerging/steps.js.map +1 -0
  123. package/dist/procedures/bootstrapping/_index.d.ts +4 -0
  124. package/dist/procedures/bootstrapping/_index.js +8 -0
  125. package/dist/procedures/bootstrapping/_index.js.map +1 -0
  126. package/dist/procedures/bootstrapping/context.d.ts +5 -0
  127. package/dist/procedures/bootstrapping/context.js +2 -0
  128. package/dist/procedures/bootstrapping/context.js.map +1 -0
  129. package/dist/procedures/bootstrapping/ensure-tree.d.ts +2 -0
  130. package/dist/procedures/bootstrapping/ensure-tree.js +5 -0
  131. package/dist/procedures/bootstrapping/ensure-tree.js.map +1 -0
  132. package/dist/procedures/bootstrapping/record.d.ts +2 -0
  133. package/dist/procedures/bootstrapping/record.js +12 -0
  134. package/dist/procedures/bootstrapping/record.js.map +1 -0
  135. package/dist/procedures/bumping/_index.d.ts +4 -0
  136. package/dist/procedures/bumping/_index.js +9 -0
  137. package/dist/procedures/bumping/_index.js.map +1 -0
  138. package/dist/procedures/bumping/context.d.ts +18 -0
  139. package/dist/procedures/bumping/context.js +4 -0
  140. package/dist/procedures/bumping/context.js.map +1 -0
  141. package/dist/procedures/bumping/steps.d.ts +4 -0
  142. package/dist/procedures/bumping/steps.js +50 -0
  143. package/dist/procedures/bumping/steps.js.map +1 -0
  144. package/dist/procedures/inspecting/_index.d.ts +4 -0
  145. package/dist/procedures/inspecting/_index.js +11 -0
  146. package/dist/procedures/inspecting/_index.js.map +1 -0
  147. package/dist/procedures/inspecting/judge.d.ts +2 -0
  148. package/dist/procedures/inspecting/judge.js +6 -0
  149. package/dist/procedures/inspecting/judge.js.map +1 -0
  150. package/dist/procedures/inspecting/read-areas.d.ts +2 -0
  151. package/dist/procedures/inspecting/read-areas.js +5 -0
  152. package/dist/procedures/inspecting/read-areas.js.map +1 -0
  153. package/dist/procedures/inspecting/read-forge.d.ts +2 -0
  154. package/dist/procedures/inspecting/read-forge.js +14 -0
  155. package/dist/procedures/inspecting/read-forge.js.map +1 -0
  156. package/dist/procedures/inspecting/report.d.ts +32 -0
  157. package/dist/procedures/inspecting/report.js +11 -0
  158. package/dist/procedures/inspecting/report.js.map +1 -0
  159. package/dist/procedures/inspecting/rules.d.ts +12 -0
  160. package/dist/procedures/inspecting/rules.js +75 -0
  161. package/dist/procedures/inspecting/rules.js.map +1 -0
  162. package/dist/procedures/proposing/_index.d.ts +4 -0
  163. package/dist/procedures/proposing/_index.js +9 -0
  164. package/dist/procedures/proposing/_index.js.map +1 -0
  165. package/dist/procedures/proposing/context.d.ts +16 -0
  166. package/dist/procedures/proposing/context.js +4 -0
  167. package/dist/procedures/proposing/context.js.map +1 -0
  168. package/dist/procedures/proposing/steps.d.ts +4 -0
  169. package/dist/procedures/proposing/steps.js +46 -0
  170. package/dist/procedures/proposing/steps.js.map +1 -0
  171. package/dist/procedures/versioning/_index.d.ts +16 -0
  172. package/dist/procedures/versioning/_index.js +22 -0
  173. package/dist/procedures/versioning/_index.js.map +1 -0
  174. package/dist/procedures/watching/_index.d.ts +5 -0
  175. package/dist/procedures/watching/_index.js +9 -0
  176. package/dist/procedures/watching/_index.js.map +1 -0
  177. package/dist/procedures/watching/classify.d.ts +5 -0
  178. package/dist/procedures/watching/classify.js +30 -0
  179. package/dist/procedures/watching/classify.js.map +1 -0
  180. package/dist/procedures/watching/context.d.ts +21 -0
  181. package/dist/procedures/watching/context.js +2 -0
  182. package/dist/procedures/watching/context.js.map +1 -0
  183. package/dist/procedures/watching/start.d.ts +2 -0
  184. package/dist/procedures/watching/start.js +24 -0
  185. package/dist/procedures/watching/start.js.map +1 -0
  186. package/dist/procedures/watching/wait.d.ts +2 -0
  187. package/dist/procedures/watching/wait.js +12 -0
  188. package/dist/procedures/watching/wait.js.map +1 -0
  189. package/dist/tools/_index.d.ts +3 -0
  190. package/dist/tools/_index.js +17 -0
  191. package/dist/tools/_index.js.map +1 -0
  192. package/dist/tools/devlog.d.ts +1 -0
  193. package/dist/tools/devlog.js +43 -0
  194. package/dist/tools/devlog.js.map +1 -0
  195. package/dist/tools/flow.d.ts +1 -0
  196. package/dist/tools/flow.js +81 -0
  197. package/dist/tools/flow.js.map +1 -0
  198. package/dist/tools/scope.d.ts +1 -0
  199. package/dist/tools/scope.js +51 -0
  200. package/dist/tools/scope.js.map +1 -0
  201. package/dist/tools/version.d.ts +1 -0
  202. package/dist/tools/version.js +23 -0
  203. package/dist/tools/version.js.map +1 -0
  204. package/dist/tools/workshop.d.ts +1 -0
  205. package/dist/tools/workshop.js +56 -0
  206. package/dist/tools/workshop.js.map +1 -0
  207. package/dist/views/devlog.d.ts +15 -0
  208. package/dist/views/devlog.js +31 -0
  209. package/dist/views/devlog.js.map +1 -0
  210. package/dist/views/event.d.ts +2 -0
  211. package/dist/views/event.js +6 -0
  212. package/dist/views/event.js.map +1 -0
  213. package/dist/views/flow.d.ts +12 -0
  214. package/dist/views/flow.js +26 -0
  215. package/dist/views/flow.js.map +1 -0
  216. package/dist/views/help.d.ts +2 -0
  217. package/dist/views/help.js +22 -0
  218. package/dist/views/help.js.map +1 -0
  219. package/dist/views/status.d.ts +5 -0
  220. package/dist/views/status.js +50 -0
  221. package/dist/views/status.js.map +1 -0
  222. package/package.json +31 -54
  223. package/resources/cli-art/big-logo-title.txt +24 -0
  224. package/resources/cli-art/big-shortcut-logo-title.txt +10 -0
  225. package/resources/cli-art/medium-logo-title.txt +13 -0
  226. package/resources/cli-art/minimenu-header.ptxml +13 -0
  227. package/resources/cli-art/minimenu-header.txt +11 -0
  228. package/resources/cli-art/small-logo-title.txt +10 -0
  229. package/resources/cli-art/wellcome.txt +10 -0
  230. package/resources/docs-templates/Home.md +7 -0
  231. package/resources/docs-templates/README.md +14 -0
  232. package/resources/docs-templates/_Footer.md +1 -0
  233. package/resources/docs-templates/_Sidebar.md +7 -0
  234. package/.claude-plugin/marketplace.json +0 -17
  235. package/.claude-plugin/mcp.json +0 -8
  236. package/.claude-plugin/plugin.json +0 -16
  237. package/AGENTS.md +0 -114
  238. package/CLAUDE.md +0 -1
  239. package/bin/bos +0 -3
  240. package/hooks/hooks.json +0 -40
  241. package/resources/house/HOUSE.md +0 -22
  242. package/resources/house/bloodlines.json +0 -35
  243. package/resources/house/children/deepseeks-of-anubis.json +0 -4
  244. package/resources/house/children/eon.json +0 -7
  245. package/resources/house/children/hermetic-officer.json +0 -1
  246. package/resources/house/children/ifrit.json +0 -1
  247. package/resources/house/children/license-keepers.json +0 -4
  248. package/resources/house/children/sebas.json +0 -10
  249. package/resources/house/children/shakespeare.json +0 -10
  250. package/resources/house/orders/ravensarmy.json +0 -6
  251. package/resources/house/orders/seiaic-ucdi.json +0 -5
  252. package/resources/ravens/skryba.md +0 -19
  253. package/resources/workshop-root/AGENTS.md +0 -92
  254. package/resources/workshop-root/CLAUDE.md +0 -1
  255. package/resources/workshop.default.json +0 -6
  256. package/skills/bos-archive/SKILL.md +0 -28
  257. package/skills/bos-craftbook/SKILL.md +0 -32
  258. package/skills/bos-craftset/SKILL.md +0 -36
  259. package/skills/bos-devarmory/SKILL.md +0 -34
  260. package/skills/bos-exhibit/SKILL.md +0 -28
  261. package/skills/bos-forge/SKILL.md +0 -28
  262. package/skills/bos-house/SKILL.md +0 -52
  263. package/skills/bos-project/SKILL.md +0 -27
  264. package/skills/bos-sarcophag/SKILL.md +0 -26
  265. package/skills/bos-scope/SKILL.md +0 -33
  266. package/skills/bos-sheme/SKILL.md +0 -38
  267. package/skills/bos-throwbox/SKILL.md +0 -27
  268. package/skills/bos-workshop/SKILL.md +0 -65
  269. package/skills/bos-workshop/assets/.gitkeep +0 -0
  270. package/skills/bos-workshop/references/bos-codebase.md +0 -116
  271. package/skills/bos-workshop/references/bos-concept.md +0 -121
  272. package/skills/bos-workshop/scripts/find-workshop.sh +0 -30
  273. package/src/agent-hook.mjs +0 -28
  274. package/src/bridge/_index.mjs +0 -24
  275. package/src/bridge/bos-instances-link/_index.mjs +0 -18
  276. package/src/bridge/docker-host/_index.mjs +0 -43
  277. package/src/bridge/docker-host/container.mjs +0 -32
  278. package/src/bridge/docker-host/image.mjs +0 -23
  279. package/src/bridge/docker-host/volume.mjs +0 -12
  280. package/src/bridge/docker-publish/_index.mjs +0 -24
  281. package/src/bridge/git-client/_index.mjs +0 -121
  282. package/src/bridge/git-client/author.mjs +0 -26
  283. package/src/bridge/gitea-api/_index.mjs +0 -62
  284. package/src/bridge/github-api/_index.mjs +0 -45
  285. package/src/bridge/npm-publish/_index.mjs +0 -19
  286. package/src/bridge/ollama-link/_index.mjs +0 -93
  287. package/src/bridge/ollama-link/ravens.mjs +0 -29
  288. package/src/bridge/ssh-link/_index.mjs +0 -33
  289. package/src/bridge/subprocess-runner/_index.mjs +0 -33
  290. package/src/cli.mjs +0 -29
  291. package/src/commands/_index.mjs +0 -51
  292. package/src/commands/bootstrap/exec.mjs +0 -7
  293. package/src/commands/bootstrap/help.md +0 -5
  294. package/src/commands/bootstrap/index.json +0 -7
  295. package/src/commands/close/exec.mjs +0 -4
  296. package/src/commands/close/help.md +0 -5
  297. package/src/commands/close/index.json +0 -7
  298. package/src/commands/describe/exec.mjs +0 -11
  299. package/src/commands/describe/help.md +0 -5
  300. package/src/commands/describe/index.json +0 -7
  301. package/src/commands/help/exec.mjs +0 -6
  302. package/src/commands/help/help.md +0 -3
  303. package/src/commands/help/index.json +0 -6
  304. package/src/commands/hook/exec.mjs +0 -3
  305. package/src/commands/hook/help.md +0 -4
  306. package/src/commands/hook/index.json +0 -7
  307. package/src/commands/hooks/exec.mjs +0 -5
  308. package/src/commands/hooks/help.md +0 -4
  309. package/src/commands/hooks/index.json +0 -7
  310. package/src/commands/house/exec.mjs +0 -8
  311. package/src/commands/house/help.md +0 -8
  312. package/src/commands/house/index.json +0 -7
  313. package/src/commands/locate/exec.mjs +0 -2
  314. package/src/commands/locate/help.md +0 -6
  315. package/src/commands/locate/index.json +0 -6
  316. package/src/commands/mode/exec.mjs +0 -17
  317. package/src/commands/mode/help.md +0 -14
  318. package/src/commands/mode/index.json +0 -8
  319. package/src/commands/mode/repl.mjs +0 -18
  320. package/src/commands/open/exec.mjs +0 -5
  321. package/src/commands/open/help.md +0 -4
  322. package/src/commands/open/index.json +0 -7
  323. package/src/commands/promote/exec.mjs +0 -5
  324. package/src/commands/promote/help.md +0 -6
  325. package/src/commands/promote/index.json +0 -7
  326. package/src/commands/repl/exec.mjs +0 -3
  327. package/src/commands/repl/help.md +0 -4
  328. package/src/commands/repl/index.json +0 -6
  329. package/src/commands/seal/exec.mjs +0 -8
  330. package/src/commands/seal/help.md +0 -4
  331. package/src/commands/seal/index.json +0 -7
  332. package/src/commands/sink/exec.mjs +0 -2
  333. package/src/commands/sink/help.md +0 -6
  334. package/src/commands/sink/index.json +0 -7
  335. package/src/commands/skills/exec.mjs +0 -5
  336. package/src/commands/skills/help.md +0 -5
  337. package/src/commands/skills/index.json +0 -7
  338. package/src/commands/status/exec.mjs +0 -2
  339. package/src/commands/status/help.md +0 -6
  340. package/src/commands/status/index.json +0 -7
  341. package/src/commands/status/repl.mjs +0 -14
  342. package/src/commands/verify/exec.mjs +0 -9
  343. package/src/commands/verify/help.md +0 -4
  344. package/src/commands/verify/index.json +0 -7
  345. package/src/controllers/_index.mjs +0 -5
  346. package/src/controllers/skills-controll.mjs +0 -13
  347. package/src/controllers/workshop-controll.mjs +0 -48
  348. package/src/core/basic-bridge.mjs +0 -29
  349. package/src/core/basic-controll.mjs +0 -26
  350. package/src/core/basic-element.mjs +0 -149
  351. package/src/core/basic-model.mjs +0 -7
  352. package/src/core/basic-procedure.mjs +0 -37
  353. package/src/core/basic-submodule.mjs +0 -21
  354. package/src/core/basic-view.mjs +0 -21
  355. package/src/core/self.mjs +0 -10
  356. package/src/index.mjs +0 -24
  357. package/src/main.ts +0 -82
  358. package/src/mcp.mjs +0 -8
  359. package/src/models/_index.mjs +0 -43
  360. package/src/models/archive/class.mjs +0 -9
  361. package/src/models/craftbook/class.mjs +0 -11
  362. package/src/models/craftbook/hang.scrapnotes.mjs +0 -10
  363. package/src/models/craftset/class.mjs +0 -14
  364. package/src/models/devarmory/class.mjs +0 -10
  365. package/src/models/exhibit/class.mjs +0 -8
  366. package/src/models/forge/class.mjs +0 -19
  367. package/src/models/house/bloodlines.mjs +0 -27
  368. package/src/models/house/class.mjs +0 -53
  369. package/src/models/house/groups.mjs +0 -38
  370. package/src/models/project/anatomy.mjs +0 -11
  371. package/src/models/project/class.mjs +0 -20
  372. package/src/models/sarcophag/class.mjs +0 -8
  373. package/src/models/scope/class.mjs +0 -19
  374. package/src/models/sheme/class.mjs +0 -8
  375. package/src/models/throwbox/class.mjs +0 -9
  376. package/src/models/workshop/class.mjs +0 -30
  377. package/src/models/workshop/hang.data.mjs +0 -10
  378. package/src/models/workshop/hang.nests.mjs +0 -14
  379. package/src/models/workshop/hang.setup.mjs +0 -10
  380. package/src/models/workshop/hang.storylines.logs.mjs +0 -10
  381. package/src/models/workshop/hang.storylines.manifests.mjs +0 -10
  382. package/src/models/workshop/hang.storylines.mjs +0 -39
  383. package/src/models/workshop/hang.storylines.ttystories.mjs +0 -10
  384. package/src/models/workshop/hang.system.mjs +0 -25
  385. package/src/models/workshop/host-roles.mjs +0 -9
  386. package/src/models/workshop/locate.mjs +0 -60
  387. package/src/models/workshop/modes.mjs +0 -31
  388. package/src/models/workshop/taskfile.mjs +0 -21
  389. package/src/procedures/_index.mjs +0 -32
  390. package/src/procedures/agent-recording/_index.mjs +0 -34
  391. package/src/procedures/agent-recording/situate.mjs +0 -11
  392. package/src/procedures/bootstrapping/DESCRIPTION.md +0 -6
  393. package/src/procedures/bootstrapping/_index.mjs +0 -13
  394. package/src/procedures/bootstrapping/deploy-guides.mjs +0 -15
  395. package/src/procedures/bootstrapping/ensure-tree.mjs +0 -4
  396. package/src/procedures/closing/DESCRIPTION.md +0 -6
  397. package/src/procedures/closing/_index.mjs +0 -11
  398. package/src/procedures/closing/capture-ttystory.mjs +0 -14
  399. package/src/procedures/closing/record-closing.mjs +0 -6
  400. package/src/procedures/describing/DESCRIPTION.md +0 -23
  401. package/src/procedures/describing/_index.mjs +0 -15
  402. package/src/procedures/describing/ask-skryba.mjs +0 -82
  403. package/src/procedures/describing/compose-message.mjs +0 -25
  404. package/src/procedures/describing/read-staged.mjs +0 -7
  405. package/src/procedures/describing/scopes.mjs +0 -38
  406. package/src/procedures/describing/staged-diff.mjs +0 -25
  407. package/src/procedures/describing/write-message.mjs +0 -15
  408. package/src/procedures/gathering/DESCRIPTION.md +0 -13
  409. package/src/procedures/gathering/_index.mjs +0 -13
  410. package/src/procedures/gathering/list-served.mjs +0 -9
  411. package/src/procedures/gathering/merge-residents.mjs +0 -31
  412. package/src/procedures/gathering/read-registry.mjs +0 -7
  413. package/src/procedures/hooking/DESCRIPTION.md +0 -6
  414. package/src/procedures/hooking/_index.mjs +0 -12
  415. package/src/procedures/hooking/hooks.mjs +0 -10
  416. package/src/procedures/hooking/install-hooks.mjs +0 -34
  417. package/src/procedures/hooking/record-hook.mjs +0 -13
  418. package/src/procedures/inspecting/DESCRIPTION.md +0 -3
  419. package/src/procedures/inspecting/_index.mjs +0 -9
  420. package/src/procedures/loading/DESCRIPTION.md +0 -4
  421. package/src/procedures/loading/_index.mjs +0 -15
  422. package/src/procedures/loading/load-config.mjs +0 -16
  423. package/src/procedures/loading/validate-mode.mjs +0 -8
  424. package/src/procedures/loading/validate-role.mjs +0 -8
  425. package/src/procedures/locating/DESCRIPTION.md +0 -6
  426. package/src/procedures/locating/_index.mjs +0 -13
  427. package/src/procedures/locating/locate-self.mjs +0 -7
  428. package/src/procedures/locating/locate-workshop.mjs +0 -16
  429. package/src/procedures/locating/read-environment.mjs +0 -12
  430. package/src/procedures/mode-switching/DESCRIPTION.md +0 -7
  431. package/src/procedures/mode-switching/_index.mjs +0 -10
  432. package/src/procedures/mode-switching/record-mode.mjs +0 -8
  433. package/src/procedures/mode-switching/switch-mode.mjs +0 -16
  434. package/src/procedures/opening/DESCRIPTION.md +0 -6
  435. package/src/procedures/opening/_index.mjs +0 -8
  436. package/src/procedures/opening/record-opening.mjs +0 -4
  437. package/src/procedures/promoting/DESCRIPTION.md +0 -8
  438. package/src/procedures/promoting/_index.mjs +0 -14
  439. package/src/procedures/promoting/apply.mjs +0 -28
  440. package/src/procedures/promoting/branch-flow.mjs +0 -23
  441. package/src/procedures/promoting/plan.mjs +0 -14
  442. package/src/procedures/promoting/read-position.mjs +0 -15
  443. package/src/procedures/sinking/DESCRIPTION.md +0 -8
  444. package/src/procedures/sinking/_index.mjs +0 -12
  445. package/src/procedures/sinking/inventory-forge.mjs +0 -18
  446. package/src/procedures/sinking/inventory-tools.mjs +0 -7
  447. package/src/procedures/skilling/DESCRIPTION.md +0 -11
  448. package/src/procedures/skilling/_index.mjs +0 -15
  449. package/src/procedures/skilling/collect-models.mjs +0 -15
  450. package/src/procedures/skilling/compose-skill.mjs +0 -49
  451. package/src/procedures/skilling/glossary.mjs +0 -23
  452. package/src/procedures/skilling/register-skills.mjs +0 -21
  453. package/src/procedures/skilling/write-skills.mjs +0 -19
  454. package/src/views/_index.mjs +0 -23
  455. package/src/views/agent/_index.mjs +0 -2
  456. package/src/views/agent/brief.mjs +0 -34
  457. package/src/views/help/_index.mjs +0 -41
  458. package/src/views/house/_index.mjs +0 -56
  459. package/src/views/inventory/_index.mjs +0 -27
  460. package/src/views/mcp/_index.mjs +0 -31
  461. package/src/views/mcp/tools.mjs +0 -87
  462. package/src/views/mode/_index.mjs +0 -34
  463. package/src/views/mode/chooser.mjs +0 -37
  464. package/src/views/promotion/_index.mjs +0 -20
  465. package/src/views/repl/_index.mjs +0 -30
  466. package/src/views/skills/_index.mjs +0 -24
  467. package/src/views/status/_index.mjs +0 -57
  468. package/src/views/status/tree.mjs +0 -19
  469. package/src/views/terminal/paint.mjs +0 -22
  470. package/template/SKILL.md +0 -16
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Sett Sarverott
3
+ Copyright (c) 2019 Sett Sarverott
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -9,92 +9,88 @@
9
9
  ▄█ ░█░ ▄█ ░█░ ██▄ █░▀░█
10
10
  ```
11
11
  > ###### [Sett Sarverott](https://github.com/Sarverott) @ 2019-2026
12
+ ---
12
13
 
13
- # Blacksmith Organization System
14
+ # The core of the Blacksmith Organization System
14
15
 
15
- Tools, procedures and agent skills for the **Blacksmith Organization System
16
- (BOS)**: an ordered digital workshop. `~/__WORKSHOP` (per user) and
17
- `/media/**/__WORKSHOP` (per partition) are the root of code crafting, with
18
- the same shape on every host:
16
+ A programmer's work gets scattered across machines, drives and servers, and
17
+ the copies drift apart: *variantogeddon*. BOS gives every host the same fixed
18
+ shape, a **workshop**, and keeps that shape by code:
19
19
 
20
- ```
21
- __WORKSHOP/
22
- ├── .BOS/ BOS itself: setup, data, nests, storylines
23
- ├── devarmory/ tools
24
- ├── forge/ active work: <scope>/<project>
25
- ├── craftbook/ notes, recipes, procedures
26
- └── archive/ work at rest
27
- ```
20
+ - **builds the base** of the environment: `__WORKSHOP` with its areas
21
+ `.BOS`, `devarmory`, `forge`, `craftbook`, `archive`, creating only what is
22
+ missing and never overwriting;
23
+ - **listens** to every change in it and says where it happened: area › scope
24
+ › project;
25
+ - **inspects** it as one coherent environment: every scope and project in the
26
+ forge (branch, version, anatomy) and what is out of order;
27
+ - runs the **craft loop** every BOS project follows: branches, steps, phases,
28
+ milestones and their versions (semver `vX.Y.Z` for projects, GRIH
29
+ `vG.R.I.H` for scopes).
28
30
 
29
- What each element means: [docs/glossary](docs/glossary/README.md).
31
+ This is the core: a TypeScript module and the `bos` command.
30
32
 
31
- ## Quick start
33
+ ## Install
32
34
 
33
- ```bash
34
- cd ~/__WORKSHOP/forge/blacksmith-organization-system
35
- git clone https://github.com/Sarverott/blacksmith-organization-system.git bos-skillset
36
- cd bos-skillset && npm install && npm link # `bos` on PATH
35
+ Node ≥ 22.18.
37
36
 
38
- bos status # workshop tree, what is missing (read-only)
39
- bos open # create missing areas, record the opening
40
- bos close # keep shell history as a ttystory, record the closing
41
- bos repl # every command at an interactive prompt
37
+ ```sh
38
+ npm install --global blacksmith-organization-system # gives the command `bos`
39
+ npx blacksmith-organization-system help # or without installing
42
40
  ```
43
41
 
44
- Documentation site: built from `docs/` with MkDocs on Read the Docs (`task docs:serve` to preview).
42
+ ## Use
45
43
 
46
- More: [preinstall](docs/tutorials/preinstall.md) ·
47
- [installation](docs/tutorials/installation.md) ·
48
- [getting started](docs/tutorials/GETTING_STARTED.md) ·
49
- [first use](docs/tutorials/first-use-example.md) ·
50
- [logicflows](docs/tutorials/logicflow-explanation.md)
51
-
52
- ## Skills
44
+ ```sh
45
+ bos workshop status # the whole workshop: areas, scopes, projects, findings
46
+ bos workshop bootstrap --dryRun # what is missing; without --dryRun, create it
47
+ bos workshop watch --record # one line per change until Ctrl+C, kept in .BOS/storylines
48
+ bos scope bump <scope> phase # raise a scope's GRIH version: step, phase, milestone, flip
49
+ bos devlog state # where a project stands, from its docs/devlog/
50
+ bos help # every tool; --json gives machines the data
51
+ ```
53
52
 
54
- | Skill | Description |
55
- | ----- | ----------- |
56
- | [`bos-workshop`](skills/bos-workshop/SKILL.md) | Recognize workshops, their areas and elements; place work where it belongs |
57
- | `bos-devarmory` `bos-forge` `bos-craftbook` `bos-archive` | the crafting areas (drafts) |
58
- | `bos-scope` `bos-project` `bos-sheme` `bos-throwbox` `bos-sarcophag` `bos-exhibit` `bos-craftset` | the assets inside them (drafts) |
53
+ Which workshop: `--workshop=<path>`, else `$BOS_WORKSHOP`, else
54
+ `$WORKSHOP_ROOT/__WORKSHOP`, else the nearest parent `__WORKSHOP`, else
55
+ `~/__WORKSHOP`. `$WORKSHOP_RENAME` changes the name `__WORKSHOP`.
56
+ `bos workshop locate` says which one and why. Only `bootstrap` and `bump`
57
+ write, and they create only what is missing.
59
58
 
60
- A model's skill is drafted from its glossary page by `bos skills` and then grown by hand.
59
+ As a library:
61
60
 
62
- BOS is also a Claude Code plugin, an agent's suit: a session brief, read-only
63
- MCP tools over the workshop and the House, `bos` on PATH, the skills, and the
64
- agent's work recorded in storylines ([agent suit](docs/tutorials/agent-suit.md)):
61
+ ```ts
62
+ import { BOS, NodeHost } from "blacksmith-organization-system";
65
63
 
66
- ```
67
- /plugin marketplace add ~/__WORKSHOP/forge/blacksmith-organization-system/bos-skillset
68
- /plugin install bos@bos-skillset
64
+ const bos = new BOS(new NodeHost());
65
+ await bos.bootstrap();
66
+ const report = await bos.inspect();
67
+ console.log(report.forge.scopes.length, report.findings.length);
69
68
  ```
70
69
 
71
- Or link one skill manually: `ln -s "$PWD/skills/bos-workshop" ~/.claude/skills/bos-workshop`.
72
- New skills start from `template/SKILL.md` and are registered in `.claude-plugin/marketplace.json`.
70
+ ## Documentation
73
71
 
74
- ## Repository layout
72
+ https://blacksmith-organization-system.readthedocs.io/: the
73
+ [glossary](https://blacksmith-organization-system.readthedocs.io/en/latest/glossary/)
74
+ (every element of a workshop), the architecture of the core, the devlog and
75
+ the changelog. To work on BOS itself:
76
+ [CONTRIBUTING](https://github.com/Sarverott/blacksmith-organization-system/blob/development/.github/CONTRIBUTING.md).
75
77
 
76
- ```
77
- src/
78
- ├── main.ts spine (class BOS) ├── controllers/ management methods
79
- ├── core/ skeleton logic ├── commands/ index.json per command
80
- ├── bridge/ docker, github, git, gitea ├── views/ status tree, help, repl
81
- ├── models/ workshop assets ├── cli.mjs bos
82
- ├── procedures/ protocols, step per file └── index.mjs library entry
83
- resources/ tests/ docs/ skills/ template/ .claude-plugin/
84
- Taskfile.yml Dockerfile compose.yaml AGENTS.md CLAUDE.md
85
- ```
78
+ The agents' skills and the Claude Code plugin are
79
+ [bos-skillset](https://github.com/Sarverott/bos-skillset), which builds on
80
+ this core.
86
81
 
87
- Details and the reasons behind the split: [AGENTS.md](AGENTS.md).
82
+ ## Where the idea came from
88
83
 
89
- ## Branches
84
+ The basic idea was to automate repository control and make order in project
85
+ folders for better workspaces' view and control, with easier projects and
86
+ publication management. The workshop dirtree worked well in one local
87
+ workspace. Problems appeared when new workspaces joined, and variantogeddon
88
+ from desynchronized versions grew out of control; then more, when keeping up
89
+ the speed of commits and publication bundles at the same time with
90
+ conventional methods. But this was only the beginning…
90
91
 
91
- `master` (spine of canon) → `developement` (here we code) → `revision` →
92
- `testing` → `releasing` → `master` through a pull request.
93
- See [branch movement procedures](docs/infographics/branch-movement-procedures.md); `bos promote` walks it.
94
- Every push releases: `x.y.z-dev.N` from developement, `-beta.N` from testing, `-rc.N`
95
- from releasing, `x.y.z` from master, on npm, GitHub Packages and ghcr.io
96
- ([committing and releasing](docs/tutorials/committing-and-releasing.md)).
92
+ The legacy CommonJS core (v0.6.1) is kept as the git tag `legacy/v0.6.1`.
97
93
 
98
94
  ## License
99
95
 
100
- MIT — see [LICENSE](LICENSE).
96
+ Copyright (c) 2019-2026 Sett Sarverott, released on terms of the [MIT license](LICENSE).
@@ -0,0 +1,8 @@
1
+ import type { Host } from "../core/host.ts";
2
+ export declare class Git {
3
+ readonly host: Host;
4
+ readonly cwd: string;
5
+ constructor(host: Host, cwd: string);
6
+ git(args: string[]): string;
7
+ tagExists(tag: string): boolean;
8
+ }
@@ -0,0 +1,20 @@
1
+ export class Git {
2
+ host;
3
+ // the directory of the repository
4
+ cwd;
5
+ constructor(host, cwd) {
6
+ this.host = host;
7
+ this.cwd = cwd;
8
+ }
9
+ git(args) {
10
+ const { status, stdout, stderr } = this.host.run("git", args, { cwd: this.cwd });
11
+ if (status !== 0)
12
+ throw new Error(`git ${args.slice(0, 2).join(" ")}: ${(stderr || stdout).trim()}`);
13
+ return stdout.trim();
14
+ }
15
+ // is the tag in this clone (in CI: checked out with its tags)
16
+ tagExists(tag) {
17
+ return this.git(["tag", "--list", tag]) === tag;
18
+ }
19
+ }
20
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/bridges/git.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,GAAG;IACL,IAAI,CAAO;IACpB,kCAAkC;IACzB,GAAG,CAAS;IAErB,YAAY,IAAU,EAAE,GAAW;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAc;QAChB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrG,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,8DAA8D;IAC9D,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,28 @@
1
+ import type { Host } from "../core/host.ts";
2
+ export type Comparison = {
3
+ aheadBy: number;
4
+ commits: {
5
+ parents: number;
6
+ message: string;
7
+ }[];
8
+ };
9
+ export type PullRequest = {
10
+ number: number;
11
+ state: string;
12
+ base: string;
13
+ head: string;
14
+ crossRepository: boolean;
15
+ };
16
+ export declare class GitHub {
17
+ readonly host: Host;
18
+ readonly cwd: string;
19
+ constructor(host: Host, cwd: string);
20
+ gh(args: string[]): string;
21
+ json<T>(args: string[]): T;
22
+ repository(): string;
23
+ compare(base: string, head: string): Comparison;
24
+ openPullRequest(head: string, base: string): number | null;
25
+ createPullRequest(head: string, base: string, title: string, body: string): number;
26
+ pullRequest(number: number): PullRequest;
27
+ merge(number: number): void;
28
+ }
@@ -0,0 +1,71 @@
1
+ export class GitHub {
2
+ host;
3
+ // the directory of the repository; gh finds the repository from its remote
4
+ cwd;
5
+ constructor(host, cwd) {
6
+ this.host = host;
7
+ this.cwd = cwd;
8
+ }
9
+ gh(args) {
10
+ const { status, stdout, stderr } = this.host.run("gh", args, { cwd: this.cwd });
11
+ if (status !== 0)
12
+ throw new Error(`gh ${args.slice(0, 2).join(" ")}: ${(stderr || stdout).trim()}`);
13
+ return stdout.trim();
14
+ }
15
+ json(args) {
16
+ return JSON.parse(this.gh(args));
17
+ }
18
+ // owner/name: $GITHUB_REPOSITORY inside Actions, else asked from gh
19
+ repository() {
20
+ return (this.host.env("GITHUB_REPOSITORY") ||
21
+ this.gh(["repo", "view", "--json", "nameWithOwner", "--jq", ".nameWithOwner"]));
22
+ }
23
+ // what head has that base has not
24
+ compare(base, head) {
25
+ const raw = this.json([
26
+ "api",
27
+ `repos/${this.repository()}/compare/${base}...${head}`,
28
+ ]);
29
+ return {
30
+ aheadBy: raw.ahead_by,
31
+ commits: raw.commits.map((c) => ({ parents: c.parents.length, message: c.commit.message })),
32
+ };
33
+ }
34
+ // the open pull request from head into base, if any
35
+ openPullRequest(head, base) {
36
+ const found = this.json([
37
+ "pr",
38
+ "list",
39
+ "--head",
40
+ head,
41
+ "--base",
42
+ base,
43
+ "--state",
44
+ "open",
45
+ "--json",
46
+ "number",
47
+ ]);
48
+ return found[0]?.number ?? null;
49
+ }
50
+ createPullRequest(head, base, title, body) {
51
+ const url = this.gh(["pr", "create", "--head", head, "--base", base, "--title", title, "--body", body]);
52
+ const number = Number(url.replace(/\/+$/, "").split("/").pop());
53
+ if (!Number.isInteger(number))
54
+ throw new Error(`gh pr create: no pull request number in "${url}"`);
55
+ return number;
56
+ }
57
+ pullRequest(number) {
58
+ const raw = this.json(["pr", "view", String(number), "--json", "number,state,baseRefName,headRefName,isCrossRepository"]);
59
+ return {
60
+ number: raw.number,
61
+ state: raw.state,
62
+ base: raw.baseRefName,
63
+ head: raw.headRefName,
64
+ crossRepository: raw.isCrossRepository,
65
+ };
66
+ }
67
+ merge(number) {
68
+ this.gh(["pr", "merge", String(number), "--merge"]);
69
+ }
70
+ }
71
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/bridges/github.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env node
2
+ // bos <model> <tool> [operands] [--flags] · bos help · bos --version
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { inputFor, parseArgs } from "./core/tool.js";
5
+ import { NodeHost } from "./hosts/node.js";
6
+ import { BOS } from "./main.js";
7
+ import { findTool, TOOLS } from "./tools/_index.js";
8
+ import { helpText } from "./views/help.js";
9
+ const VERSION = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
10
+ // A checkout of the core may carry its own .env (see .env.example): the workshop it is developed
11
+ // against, e.g. WORKSHOP_ROOT on a test partition, so the home workshop stays out of sight.
12
+ // An installed package has none; variables already set in the shell win.
13
+ const CHECKOUT_ENV = new URL("../.env", import.meta.url);
14
+ if (existsSync(CHECKOUT_ENV))
15
+ process.loadEnvFile(CHECKOUT_ENV);
16
+ async function main(argv) {
17
+ const { operands, flags } = parseArgs(argv);
18
+ const { workshop, json, ...toolFlags } = flags;
19
+ if (flags.version) {
20
+ console.log(VERSION);
21
+ return 0;
22
+ }
23
+ const [model, name, ...rest] = operands;
24
+ if (!model || model === "help") {
25
+ console.log(helpText(TOOLS, VERSION));
26
+ return 0;
27
+ }
28
+ const entry = findTool(model, name);
29
+ if (json && entry.args.some((arg) => arg.name === "json"))
30
+ toolFlags.json = json;
31
+ const input = inputFor(entry, rest, toolFlags);
32
+ const bos = new BOS(new NodeHost(), { workshop: typeof workshop === "string" ? workshop : undefined });
33
+ const stop = new AbortController();
34
+ process.once("SIGINT", () => stop.abort());
35
+ const result = await entry.run(bos, input, { print: (line) => console.log(line), signal: stop.signal });
36
+ // a streaming tool prints its lines itself; its closing summary goes to stderr, so stdout holds only data
37
+ const streams = entry.args.some((arg) => arg.name === "json");
38
+ const text = entry.render ? entry.render(result, input) : JSON.stringify(result ?? null, null, 2);
39
+ if (streams)
40
+ console.error(text);
41
+ else if (json)
42
+ console.log(JSON.stringify(result ?? null, null, 2));
43
+ else
44
+ console.log(text);
45
+ return 0;
46
+ }
47
+ main(process.argv.slice(2)).then((code) => {
48
+ process.exitCode = code;
49
+ }, (error) => {
50
+ console.error(`bos: ${error instanceof Error ? error.message : String(error)}`);
51
+ process.exitCode = 1;
52
+ });
53
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,yEAAyE;AACzE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AAE9G,iGAAiG;AACjG,4FAA4F;AAC5F,yEAAyE;AACzE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzD,IAAI,UAAU,CAAC,YAAY,CAAC;IAAE,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAEhE,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAC/C,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,IAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;QAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC;IACjF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACvG,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxG,0GAA0G;IAC1G,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3G,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5B,IAAI,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;QAC/D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC9B,CAAC,IAAI,EAAE,EAAE;IACP,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC,CACF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Host } from "./host.ts";
2
+ export type TraceEntry = {
3
+ procedure: string;
4
+ step: string;
5
+ ok: boolean;
6
+ ms?: number;
7
+ error?: string;
8
+ };
9
+ export type Context = {
10
+ host: Host;
11
+ dryRun: boolean;
12
+ changes: string[];
13
+ trace: TraceEntry[];
14
+ };
15
+ export declare function createContext(host: Host, { dryRun }?: {
16
+ dryRun?: boolean | undefined;
17
+ }): Context;
18
+ export declare function createIfMissing(context: Context, target: string, create: () => void): boolean;
@@ -0,0 +1,14 @@
1
+ export function createContext(host, { dryRun = false } = {}) {
2
+ return { host, dryRun, changes: [], trace: [] };
3
+ }
4
+ // create target with create() only when it is missing; never overwrite.
5
+ // In a dry run nothing is written, but the plan is still recorded in changes.
6
+ export function createIfMissing(context, target, create) {
7
+ if (context.host.exists(target))
8
+ return false;
9
+ if (!context.dryRun)
10
+ create();
11
+ context.changes.push(target);
12
+ return true;
13
+ }
14
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE;IAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClD,CAAC;AAED,wEAAwE;AACxE,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,OAAgB,EAAE,MAAc,EAAE,MAAkB;IAClF,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { type Context } from "./context.ts";
2
+ import type { Host } from "./host.ts";
3
+ export type Descriptor = (element: Element, context: Context) => string | object;
4
+ export type ElementClass = {
5
+ new (host: Host, path: string, parent?: Element | null): Element;
6
+ type: string;
7
+ dirname: string | null;
8
+ mandatory: boolean;
9
+ children: ElementClass[];
10
+ descriptors: Record<string, Descriptor>;
11
+ };
12
+ export type ElementNode = {
13
+ type: string;
14
+ path: string;
15
+ exists: boolean;
16
+ mandatory: boolean;
17
+ descriptors: {
18
+ name: string;
19
+ exists: boolean;
20
+ }[];
21
+ children: ElementNode[];
22
+ };
23
+ export declare class Element {
24
+ static type: string;
25
+ static dirname: string | null;
26
+ static mandatory: boolean;
27
+ static children: ElementClass[];
28
+ static descriptors: Record<string, Descriptor>;
29
+ readonly host: Host;
30
+ readonly path: string;
31
+ readonly parent: Element | null;
32
+ constructor(host: Host, path: string, parent?: Element | null);
33
+ get kind(): ElementClass;
34
+ get type(): string;
35
+ get name(): string;
36
+ file(...names: string[]): string;
37
+ exists(): boolean;
38
+ child<T extends Element>(Kind: {
39
+ new (host: Host, path: string, parent?: Element | null): T;
40
+ dirname: string | null;
41
+ }): T;
42
+ childElements(): Element[];
43
+ ensure(context: Context): this;
44
+ inspect(parentMandatory?: boolean): ElementNode;
45
+ readJSON<T>(name: string, fallback: T): T;
46
+ writeJSON(name: string, value: object, context: Context): void;
47
+ toString(): string;
48
+ }
49
+ export declare function serialize(content: string | object): string;
@@ -0,0 +1,97 @@
1
+ // Element anatomy (glossary: element-anatomy): a directory plus descriptor files.
2
+ // Every model of the workshop is an Element. Its fixed parts are declared once,
3
+ // statically, and the same declaration drives creating (ensure) and reading (inspect).
4
+ // class Forge extends Element { static type = "forge"; static dirname = "forge"; }
5
+ import { createIfMissing } from "./context.js";
6
+ import { basename, join } from "./paths.js";
7
+ export class Element {
8
+ static type = "element";
9
+ // fixed directory name, relative to the parent; null for freely named elements (a scope, a project)
10
+ static dirname = null;
11
+ // created together with its parent when missing
12
+ static mandatory = true;
13
+ // fixed child elements (areas, organs), in the order they are shown
14
+ static children = [];
15
+ // { filename: default content } written when missing, never overwritten
16
+ static descriptors = {};
17
+ host;
18
+ path;
19
+ parent;
20
+ constructor(host, path, parent = null) {
21
+ this.host = host;
22
+ this.path = path;
23
+ this.parent = parent;
24
+ }
25
+ get kind() {
26
+ return this.constructor;
27
+ }
28
+ get type() {
29
+ return this.kind.type;
30
+ }
31
+ get name() {
32
+ return basename(this.path);
33
+ }
34
+ file(...names) {
35
+ return join(this.path, ...names);
36
+ }
37
+ exists() {
38
+ return this.host.isDirectory(this.path);
39
+ }
40
+ child(Kind) {
41
+ return new Kind(this.host, this.file(Kind.dirname ?? ""), this);
42
+ }
43
+ childElements() {
44
+ return this.kind.children.map((Kind) => this.child(Kind));
45
+ }
46
+ // create the directory, missing descriptors and mandatory children; never overwrite
47
+ ensure(context) {
48
+ createIfMissing(context, this.path, () => this.host.mkdir(this.path));
49
+ for (const [name, content] of Object.entries(this.kind.descriptors)) {
50
+ const target = this.file(name);
51
+ createIfMissing(context, target, () => this.host.writeText(target, serialize(content(this, context))));
52
+ }
53
+ for (const child of this.childElements()) {
54
+ if (child.kind.mandatory)
55
+ child.ensure(context);
56
+ }
57
+ return this;
58
+ }
59
+ // what exists of this element and its fixed parts; reads only
60
+ inspect(parentMandatory = true) {
61
+ const mandatory = parentMandatory && this.kind.mandatory;
62
+ return {
63
+ type: this.type,
64
+ path: this.path,
65
+ exists: this.exists(),
66
+ mandatory,
67
+ descriptors: Object.keys(this.kind.descriptors).map((name) => ({
68
+ name,
69
+ exists: this.host.exists(this.file(name)),
70
+ })),
71
+ children: this.childElements().map((child) => child.inspect(mandatory)),
72
+ };
73
+ }
74
+ readJSON(name, fallback) {
75
+ const text = this.host.readText(this.file(name));
76
+ if (text === null)
77
+ return fallback;
78
+ try {
79
+ return JSON.parse(text);
80
+ }
81
+ catch {
82
+ return fallback;
83
+ }
84
+ }
85
+ writeJSON(name, value, context) {
86
+ if (!context.dryRun)
87
+ this.host.writeText(this.file(name), serialize(value));
88
+ context.changes.push(this.file(name));
89
+ }
90
+ toString() {
91
+ return `[<BOS.${this.type}::${this.path}>]`;
92
+ }
93
+ }
94
+ export function serialize(content) {
95
+ return typeof content === "string" ? content : `${JSON.stringify(content, null, 2)}\n`;
96
+ }
97
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/core/element.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export type Entry = {
2
+ name: string;
3
+ directory: boolean;
4
+ };
5
+ export type Change = {
6
+ path: string;
7
+ kind: "change" | "rename";
8
+ };
9
+ export type RunResult = {
10
+ status: number;
11
+ stdout: string;
12
+ stderr: string;
13
+ };
14
+ export interface Host {
15
+ exists(path: string): boolean;
16
+ isDirectory(path: string): boolean;
17
+ list(path: string): Entry[];
18
+ readText(path: string): string | null;
19
+ writeText(path: string, text: string): void;
20
+ appendText(path: string, text: string): void;
21
+ mkdir(path: string): void;
22
+ watch(root: string, onChange: (change: Change) => void, onError: (error: Error) => void, skip?: (relative: string) => boolean): () => void;
23
+ run(command: string, args: string[], options?: {
24
+ cwd?: string;
25
+ }): RunResult;
26
+ env(name: string): string | undefined;
27
+ home(): string;
28
+ cwd(): string;
29
+ hostname(): string;
30
+ user(): string;
31
+ now(): number;
32
+ }
@@ -0,0 +1,5 @@
1
+ // The one door between the core and the machine it runs on. Models and procedures
2
+ // touch files, clocks and the environment only through a Host, so the same core can
3
+ // run on Node (hosts/node.ts) today and on other runtimes later.
4
+ export {};
5
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/core/host.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,oFAAoF;AACpF,iEAAiE"}
@@ -0,0 +1,5 @@
1
+ export declare function join(...parts: string[]): string;
2
+ export declare function normalize(path: string): string;
3
+ export declare function basename(path: string): string;
4
+ export declare function dirname(path: string): string;
5
+ export declare function inside(root: string, target: string): string | null;