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
@@ -1,34 +0,0 @@
1
- // What an agent learns at the start of a session: the workshop, its role and mode, where it
2
- // works, the House's boundaries, and the tools BOS gives it. Short: it becomes context.
3
- import House from "../../models/house/class.mjs";
4
- import { MODES } from "../../models/workshop/modes.mjs";
5
- import { situate } from "../../procedures/agent-recording/situate.mjs";
6
-
7
- export async function brief(input) {
8
- const context = await situate(input);
9
- if (!context) return null;
10
- const { config, defaulted = [], self } = context;
11
- const mark = (key) => (defaulted.includes(key) ? " (default)" : "");
12
- const place = context.workshop.placeOf(input.cwd ?? process.cwd());
13
- const where = !place
14
- ? "outside this workshop"
15
- : place.area
16
- ? [place.area, place.scope, place.project].filter(Boolean).join(" / ")
17
- : "workshop root";
18
- const house = new House();
19
- const resting = [...house.children(), ...house.orders()]
20
- .filter((g) => g.state !== "active")
21
- .map((g) => g.title ?? g.name);
22
- return [
23
- "# BOS: Blacksmith Organization System",
24
- `workshop ${context.workshopRoot} · role ${config.role}${mark("role")} · mode ${MODES[config.mode]?.title ?? config.mode}${mark("mode")} · BOS v${self.version}`,
25
- `you are in: ${where}`,
26
- `House of Anubis: ${house.children().length} adopted children, orders: ${house
27
- .orders()
28
- .map((o) => o.title ?? o.name)
29
- .join(", ")}.${resting.length ? ` Resting, never call or prompt: ${resting.join(", ")}.` : ""}`,
30
- "tools: `bos` CLI on PATH (bos help), MCP tools bos_* (bos_glossary explains any element)",
31
- "rules: ask the House before calling any ollama model · conventional commits · look before changing the owner's files · the owner works in parallel: re-check git state",
32
- "",
33
- ].join("\n");
34
- }
@@ -1,41 +0,0 @@
1
- // Help: the list of commands, or one command's help file with light markdown styling.
2
- import { BOS } from "../../main.ts";
3
- import { MODES } from "../../models/workshop/modes.mjs";
4
- import { header, pad, paint } from "../terminal/paint.mjs";
5
-
6
- const markdown = (text) =>
7
- text
8
- .replace(/^#+\s*(.+)$/gm, (_, title) => paint.bold(paint.yellow(title)))
9
- .replace(/`([^`]+)`/g, (_, code) => paint.cyan(code))
10
- .replace(/\*\*([^*]+)\*\*/g, (_, strong) => paint.bold(strong));
11
-
12
- export class HelpView extends BOS.View {
13
- text({ commands, command, help }) {
14
- if (command) return markdown(help?.text ?? commands[command]?.info ?? `no help for ${command}`);
15
- const size = Math.max(...Object.keys(commands).map((name) => name.length)) + 2;
16
- const line = ([name, c]) => ` ${paint.cyan(pad(name, size))}${c.info ?? ""}${c.repl ? paint.dim(" (repl)") : ""}`;
17
- const group = (title, entries, always = false) =>
18
- entries.length || always
19
- ? ["", paint.bold(title), ...(entries.length ? entries.map(line) : [paint.dim(" nothing yet")])]
20
- : [];
21
- const all = Object.entries(commands);
22
- return [
23
- header("bos <command> [options]"),
24
- ...group(
25
- "general",
26
- all.filter(([, c]) => !c.mode),
27
- ),
28
- ...Object.entries(MODES).flatMap(([name, mode]) =>
29
- group(
30
- `${mode.digit} ${mode.title}`,
31
- all.filter(([, c]) => c.mode === name),
32
- true,
33
- ),
34
- ),
35
- "",
36
- paint.dim("options: --json --dry-run --workshop=PATH · bos help <command> · bos mode"),
37
- ].join("\n");
38
- }
39
- }
40
-
41
- export default HelpView;
@@ -1,56 +0,0 @@
1
- // The House of Anubis: children (adopted by name), orders (duties), bloodlines (releasers).
2
- import { BOS } from "../../main.ts";
3
- import { header, pad, paint } from "../terminal/paint.mjs";
4
-
5
- const STATE = { active: paint.green, resting: paint.magenta, frozen: paint.blue };
6
-
7
- const presence = (member) => {
8
- if (member.state && member.state !== "active") return (STATE[member.state] ?? paint.dim)(`◌ ${member.state}`);
9
- if (member.present === null) return paint.dim("remote");
10
- return member.present ? paint.green("● served") : paint.dim("○ absent");
11
- };
12
-
13
- function group(group) {
14
- const lines = [
15
- `${paint.bold(group.title ?? group.name)} ${(STATE[group.state] ?? paint.dim)(group.state)} ${paint.dim(group.description ?? "")}`,
16
- ];
17
- if (group.state === "resting") lines.push(` ${paint.magenta("rests by its own decision; not called")}`);
18
- for (const member of group.members) {
19
- const label =
20
- member.name && member.model ? `${member.name} ${paint.dim(`(${member.model})`)}` : (member.name ?? member.model);
21
- const line = member.bloodline ? paint.dim(`${member.bloodline.releaser} ← ${member.bloodline.root}`) : "";
22
- const about = member.duty ? paint.cyan(member.duty) : paint.dim(member.note ?? "");
23
- lines.push(` ${pad(label, 46)} ${pad(presence(member), 10)} ${pad(line, 36)} ${about}`);
24
- }
25
- return lines.join("\n");
26
- }
27
-
28
- export class HouseView extends BOS.View {
29
- data({ children, orders, bloodlines, catalog }) {
30
- return { reachable: catalog !== null, children, orders, bloodlines };
31
- }
32
-
33
- text({ children = [], orders = [], bloodlines = [], catalog, options = {} }) {
34
- const lines = [header("House of Anubis"), ""];
35
- if (catalog === null) lines.push(paint.yellow("ollama unreachable: presence and bloodlines unknown"), "");
36
- lines.push(paint.yellow("Children of Anubis") + paint.dim(" adopted by name"), "");
37
- for (const child of children) lines.push(group(child), "");
38
- lines.push(paint.yellow("Orders") + paint.dim(" duties"), "");
39
- for (const order of orders) lines.push(group(order), "");
40
- if (bloodlines.length) {
41
- lines.push(
42
- paint.yellow("Bloodlines") + paint.dim(" every served model by releaser, through its parent_model"),
43
- "",
44
- );
45
- for (const { releaser, models } of bloodlines) {
46
- lines.push(
47
- ` ${pad(releaser, 30)} ${paint.bold(models.length)}${options.all ? ` ${paint.dim(models.join(", "))}` : ""}`,
48
- );
49
- }
50
- if (!options.all) lines.push(paint.dim(" bos house --all lists every model"));
51
- }
52
- return lines.join("\n");
53
- }
54
- }
55
-
56
- export default HouseView;
@@ -1,27 +0,0 @@
1
- // What sinking would have to rescue: projects with their state, and ttystories.
2
- import { BOS } from "../../main.ts";
3
- import { header, pad, paint } from "../terminal/paint.mjs";
4
-
5
- export class InventoryView extends BOS.View {
6
- data({ inventory }) {
7
- return inventory;
8
- }
9
-
10
- text({ inventory }) {
11
- const rows = inventory.projects.map(
12
- ({ scope, project, branch, uncommitted }) =>
13
- ` ${pad(`${scope}/${project}`, 48)} ${paint.cyan(pad(branch ?? "?", 14))} ${uncommitted ? paint.red(`${uncommitted} uncommitted`) : paint.green("clean")}`,
14
- );
15
- return [
16
- header("sinking inventory"),
17
- "",
18
- paint.bold(`projects (${rows.length})`),
19
- ...(rows.length ? rows : [paint.dim(" none in forge")]),
20
- "",
21
- paint.bold(`ttystories (${inventory.ttystories.length})`),
22
- ...inventory.ttystories.map((name) => ` ${name}`),
23
- ].join("\n");
24
- }
25
- }
26
-
27
- export default InventoryView;
@@ -1,31 +0,0 @@
1
- // BOS over the Model Context Protocol (stdio): every TOOLS entry becomes an MCP tool.
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
-
5
- import { VERSION } from "../../core/self.mjs";
6
- import { READ_ONLY, TOOLS } from "./tools.mjs";
7
-
8
- export function createMcpServer(bos) {
9
- const server = new McpServer({ name: "bos", version: VERSION });
10
- for (const tool of TOOLS) {
11
- server.registerTool(
12
- tool.name,
13
- { description: tool.description, inputSchema: tool.input, annotations: READ_ONLY },
14
- async (args = {}) => {
15
- try {
16
- const output = await tool.run(bos, args);
17
- return {
18
- content: [{ type: "text", text: typeof output === "string" ? output : JSON.stringify(output, null, 2) }],
19
- };
20
- } catch (error) {
21
- return { isError: true, content: [{ type: "text", text: `${tool.name}: ${error.message}` }] };
22
- }
23
- },
24
- );
25
- }
26
- return server;
27
- }
28
-
29
- export async function startMcpServer(bos) {
30
- await createMcpServer(bos).connect(new StdioServerTransport());
31
- }
@@ -1,87 +0,0 @@
1
- // BOS as MCP tools: what an AI agent may ask the workshop. All read-only: agents look and
2
- // plan through MCP; changing the workshop stays a conscious act on the command line.
3
- import { existsSync, readdirSync, readFileSync } from "node:fs";
4
- import { join } from "node:path";
5
-
6
- import { z } from "zod";
7
-
8
- import { REPO_ROOT } from "../../core/self.mjs";
9
-
10
- const GLOSSARY = join(REPO_ROOT, "docs", "glossary");
11
- const readOnly = { readOnlyHint: true, destructiveHint: false, openWorldHint: false };
12
-
13
- export const TOOLS = [
14
- {
15
- name: "bos_locate",
16
- description:
17
- "Active BOS workshop (~/__WORKSHOP or /media/**/__WORKSHOP), the rule that found it, and where BOS itself sits.",
18
- input: {},
19
- run: async (bos) => bos.command("locate"),
20
- },
21
- {
22
- name: "bos_status",
23
- description:
24
- "Workshop tree (.BOS, devarmory, forge, craftbook, archive): what exists and what is missing; role and mode of work.",
25
- input: {},
26
- run: async (bos) => bos.command("status"),
27
- },
28
- {
29
- name: "bos_house",
30
- description:
31
- "The House of Anubis: adopted children, orders (RavensArmy…), bloodlines of every served model, and each resident's state. Resting residents must never be called.",
32
- input: { all: z.boolean().optional().describe("also list every model per bloodline") },
33
- run: async (bos, { all }) => bos.command("house", [], { all: Boolean(all) }),
34
- },
35
- {
36
- name: "bos_glossary",
37
- description:
38
- "Definition of a BOS element (workshop, forge, scope, sheme, sarcophag, mode, house, raven…) from docs/glossary; without a term, the list of pages.",
39
- input: { term: z.string().optional().describe("element name, e.g. forge") },
40
- run: async (_bos, { term }) => {
41
- if (!term)
42
- return readdirSync(GLOSSARY)
43
- .filter((f) => f.endsWith(".md"))
44
- .map((f) => f.slice(0, -3))
45
- .join("\n");
46
- const page = join(GLOSSARY, `${term.toLowerCase().replace(/[^a-z0-9-]/g, "")}.md`);
47
- return existsSync(page) ? readFileSync(page, "utf8") : `no glossary page for "${term}"`;
48
- },
49
- },
50
- {
51
- name: "bos_describe",
52
- description:
53
- "Conventional-commit draft for what is staged in a git repository (deterministic; Skryba the scribe raven only when asked, it may take up to 90 s).",
54
- input: {
55
- cwd: z.string().describe("path inside the repository"),
56
- skryba: z.boolean().optional().describe("let Skryba refine the draft through ollama"),
57
- },
58
- run: async (bos, { cwd, skryba }) =>
59
- (await bos.workshop.describe({ cwd, skryba: Boolean(skryba) })).message ?? "nothing staged",
60
- },
61
- {
62
- name: "bos_promote_plan",
63
- description:
64
- "Plan (never apply) moving a repository's current branch one station along the flow master → developement → revision → testing → releasing → master.",
65
- input: { cwd: z.string().describe("path inside the repository"), reject: z.boolean().optional() },
66
- run: async (bos, { cwd, reject }) => {
67
- const context = await bos.workshop.run("promoting", { cwd, reject: Boolean(reject), dryRun: true });
68
- return new bos.views.PromotionView().text(context);
69
- },
70
- },
71
- {
72
- name: "bos_sink_inventory",
73
- description:
74
- "Read-only inventory for the sinking protocol: every forge project with branch and uncommitted changes, and the ttystories.",
75
- input: {},
76
- run: async (bos) => bos.command("sink"),
77
- },
78
- {
79
- name: "bos_help",
80
- description:
81
- "BOS commands grouped by mode of work (ALMANAC, CONFORM, SMELTRY, COMMANDORATE, PROVISION), or the help of one command.",
82
- input: { command: z.string().optional() },
83
- run: async (bos, { command }) => bos.command("help", command ? [command] : []),
84
- },
85
- ];
86
-
87
- export const READ_ONLY = readOnly;
@@ -1,34 +0,0 @@
1
- // The modes of work as a menu, and the result of a switch.
2
- import { BOS } from "../../main.ts";
3
- import { MODES } from "../../models/workshop/modes.mjs";
4
- import { header, pad, paint } from "../terminal/paint.mjs";
5
-
6
- export const modeLabel = (mode) =>
7
- mode ? `${paint.magenta(MODES[mode].title)} ${paint.dim(MODES[mode].covers)}` : paint.dim("not chosen: bos mode");
8
-
9
- export class ModeView extends BOS.View {
10
- data({ config, previousMode, event }) {
11
- return { mode: config?.mode ?? null, previousMode: previousMode ?? null, event: event ?? null };
12
- }
13
-
14
- // the chooser's menu, current mode marked
15
- menu(current) {
16
- return [
17
- header("mode of work"),
18
- "",
19
- ...Object.entries(MODES).map(([name, mode]) => {
20
- const mark = name === current ? paint.green("●") : " ";
21
- return ` ${mark} ${paint.yellow(mode.digit)} ${pad(paint.bold(mode.title), 14)} ${paint.dim(mode.covers)}`;
22
- }),
23
- ` ${paint.yellow(0)} ${paint.dim("leave")}`,
24
- "",
25
- ].join("\n");
26
- }
27
-
28
- text({ config, previousMode }) {
29
- if (previousMode === config.mode) return `mode stays ${modeLabel(config.mode)}`;
30
- return `mode ${paint.dim(previousMode ?? "none")} ${paint.yellow("→")} ${modeLabel(config.mode)}`;
31
- }
32
- }
33
-
34
- export default ModeView;
@@ -1,37 +0,0 @@
1
- // One digit, no Enter: 0…max on a terminal. From a pipe: the first digit of the first line.
2
- // Anything else, Ctrl+C or end of input counts as 0 (leave).
3
- import readline from "node:readline";
4
-
5
- export function chooseDigit(prompt, max, { input = process.stdin, output = process.stdout } = {}) {
6
- output.write(prompt);
7
- return new Promise((resolve) => {
8
- const done = (digit) => {
9
- output.write(`${digit}\n`);
10
- resolve(digit);
11
- };
12
- if (input.isTTY) {
13
- readline.emitKeypressEvents(input);
14
- input.setRawMode(true);
15
- input.resume();
16
- const onKey = (text, key = {}) => {
17
- const digit = key.ctrl && key.name === "c" ? 0 : /^\d$/.test(text ?? "") ? Number(text) : null;
18
- if (digit === null || digit > max) return;
19
- input.off("keypress", onKey);
20
- input.setRawMode(false);
21
- input.pause();
22
- done(digit);
23
- };
24
- input.on("keypress", onKey);
25
- } else {
26
- const lines = readline.createInterface({ input });
27
- let answered = false;
28
- lines.once("line", (line) => {
29
- answered = true;
30
- const digit = Number(line.trim()[0]);
31
- lines.close();
32
- done(Number.isInteger(digit) && digit <= max ? digit : 0);
33
- });
34
- lines.once("close", () => answered || done(0));
35
- }
36
- });
37
- }
@@ -1,20 +0,0 @@
1
- // One station along the branch flow: from → to, and the plan.
2
- import { BOS } from "../../main.ts";
3
- import { BRANCHES } from "../../procedures/promoting/branch-flow.mjs";
4
- import { paint } from "../terminal/paint.mjs";
5
-
6
- export class PromotionView extends BOS.View {
7
- data({ from, to, plan, dryRun, pullRequest }) {
8
- return { from, to, plan, dryRun, pullRequest };
9
- }
10
-
11
- text({ from, to, plan, dryRun }) {
12
- return [
13
- `${paint.cyan(from)} ${paint.yellow("→")} ${paint.cyan(to)} ${paint.dim(BRANCHES[to])}`,
14
- ...plan.map((step) => ` ${paint.dim("•")} ${step}`),
15
- dryRun ? paint.dim("dry run: add --apply to execute") : paint.green("applied"),
16
- ].join("\n");
17
- }
18
- }
19
-
20
- export default PromotionView;
@@ -1,30 +0,0 @@
1
- // Interactive BOS: every command at a prompt. A command with its own repl.mjs
2
- // gets the prompt to ask questions; others print their inline output.
3
- import readline from "node:readline/promises";
4
-
5
- import { header, paint } from "../terminal/paint.mjs";
6
-
7
- export async function startRepl(bos) {
8
- const io = readline.createInterface({ input: process.stdin, output: process.stdout });
9
- console.log(header("BOS repl"), paint.dim("· help · exit"));
10
- io.setPrompt(paint.yellow("⚒ bos › "));
11
- io.prompt();
12
- for await (const line of io) {
13
- const [name, ...operands] = line.trim().split(/\s+/).filter(Boolean);
14
- if (name === "exit" || name === "quit") break;
15
- if (name) {
16
- try {
17
- const command = bos.commands[name];
18
- if (!command) throw new Error(`unknown command "${name}"`);
19
- const output = command.repl
20
- ? await command.repl({ bos, operands, flags: bos.options, io })
21
- : await command.inline({ bos, operands, flags: bos.options });
22
- if (output) console.log(typeof output === "string" ? output : JSON.stringify(output, null, 2));
23
- } catch (error) {
24
- console.log(paint.red(error.message));
25
- }
26
- }
27
- io.prompt();
28
- }
29
- io.close();
30
- }
@@ -1,24 +0,0 @@
1
- // Which model has a skill, which got a fresh draft.
2
- import { BOS } from "../../main.ts";
3
- import { header, pad, paint } from "../terminal/paint.mjs";
4
-
5
- export class SkillsView extends BOS.View {
6
- data({ skills, registered, dryRun }) {
7
- return { skills: skills.map(({ name, created }) => ({ name, created })), registered, dryRun };
8
- }
9
-
10
- text({ skills, registered = [], dryRun }) {
11
- const state = (created) => (created ? paint.green(dryRun ? "+ would draft" : "+ drafted") : paint.dim("● exists"));
12
- return [
13
- header("skills"),
14
- "",
15
- ...skills.map(({ name, created }) => ` ${pad(paint.cyan(name), 24)} ${state(created)}`),
16
- "",
17
- registered.length
18
- ? `${dryRun ? "would register" : "registered"} ${registered.length} in marketplace.json`
19
- : paint.dim("marketplace up to date"),
20
- ].join("\n");
21
- }
22
- }
23
-
24
- export default SkillsView;
@@ -1,57 +0,0 @@
1
- // The state of a workshop: where it is, its role, where BOS sits, its tree, what changed.
2
- import { BOS } from "../../main.ts";
3
- import { HOST_ROLES } from "../../models/workshop/host-roles.mjs";
4
- import { modeLabel } from "../mode/_index.mjs";
5
- import { field, header, paint } from "../terminal/paint.mjs";
6
- import { drawTree } from "./tree.mjs";
7
-
8
- function place(self) {
9
- if (!self?.place) return paint.dim("outside the active workshop");
10
- const { area, scope, project } = self.place;
11
- return [area, scope, project].filter(Boolean).join(paint.dim(" / ")) || "workshop root";
12
- }
13
-
14
- export class StatusView extends BOS.View {
15
- data(context) {
16
- const { workshopRoot, workshopSource, workshops, config, defaulted, tree, self, changes, dryRun, event } = context;
17
- return { workshopRoot, workshopSource, workshops, config, defaulted, tree, self, changes, dryRun, event };
18
- }
19
-
20
- text(context) {
21
- const lines = [header("Blacksmith Organization System"), ""];
22
- lines.push(field("workshop", `${context.workshopRoot} ${paint.dim(`(${context.workshopSource})`)}`));
23
- if (context.config) {
24
- const { role } = context.config;
25
- const byDefault = (key) => (context.defaulted?.includes(key) ? paint.dim(" (default)") : "");
26
- lines.push(
27
- field(
28
- "role",
29
- (role
30
- ? `${paint.cyan(role)} ${paint.dim(HOST_ROLES[role])}`
31
- : paint.dim('not set: .BOS/workshop.json "role"')) + byDefault("role"),
32
- ),
33
- );
34
- lines.push(field("mode", modeLabel(context.config.mode) + byDefault("mode")));
35
- }
36
- lines.push(field("BOS", `${paint.bold(`v${context.self.version}`)} ${paint.dim("·")} ${place(context.self)}`));
37
- const others = context.workshops.filter((path) => path !== context.workshopRoot);
38
- if (others.length) lines.push(field("others", others.join("\n ")));
39
- const snapshot = context.tree ?? context.workshop?.inspect();
40
- if (snapshot) lines.push("", drawTree(snapshot));
41
- if (context.changes?.length) {
42
- lines.push(
43
- "",
44
- paint.bold(context.dryRun ? "would create" : "created"),
45
- ...context.changes.map((path) => ` ${paint.green("+")} ${path}`),
46
- );
47
- }
48
- if (context.event)
49
- lines.push(
50
- "",
51
- field("recorded", `${paint.magenta(context.event.event)} ${paint.dim(`@ ${context.event.unixusat}`)}`),
52
- );
53
- return lines.join("\n");
54
- }
55
- }
56
-
57
- export default StatusView;
@@ -1,19 +0,0 @@
1
- // The workshop tree drawn with branches and a colored state per area.
2
- import { basename } from "node:path";
3
-
4
- import { pad, paint } from "../terminal/paint.mjs";
5
-
6
- const mark = (node) =>
7
- node.exists ? paint.green("● ok") : node.mandatory ? paint.red("○ missing") : paint.dim("· not yet");
8
-
9
- export function drawTree(node, prefix = "", last = true, root = true) {
10
- const branch = root ? "" : last ? "└── " : "├── ";
11
- const name = root ? paint.bold(node.path) : basename(node.path);
12
- const label = pad(`${prefix}${branch}${name}`, root ? 0 : 40);
13
- const line = root ? label : `${label} ${paint.dim(pad(node.type, 12))} ${mark(node)}`;
14
- const childPrefix = root ? "" : prefix + (last ? " " : "│ ");
15
- return [
16
- line,
17
- ...node.children.map((child, i) => drawTree(child, childPrefix, i === node.children.length - 1, false)),
18
- ].join("\n");
19
- }
@@ -1,22 +0,0 @@
1
- // ANSI colors for terminals; plain text for pipes, files and NO_COLOR.
2
- const enabled = process.stdout.isTTY && !process.env.NO_COLOR;
3
- const code = (open, close) => (text) => (enabled ? `\x1b[${open}m${text}\x1b[${close}m` : String(text));
4
-
5
- export const paint = {
6
- bold: code(1, 22),
7
- dim: code(2, 22),
8
- red: code(31, 39),
9
- green: code(32, 39),
10
- yellow: code(33, 39),
11
- blue: code(34, 39),
12
- magenta: code(35, 39),
13
- cyan: code(36, 39),
14
- };
15
-
16
- // visible length, ignoring color codes
17
- // biome-ignore lint/suspicious/noControlCharactersInRegex: \x1b starts the ANSI color codes this strips
18
- export const width = (text) => String(text).replace(/\x1b\[\d+m/g, "").length;
19
- export const pad = (text, size) => text + " ".repeat(Math.max(0, size - width(text)));
20
-
21
- export const header = (title) => paint.bold(paint.yellow(`⚒ ${title}`));
22
- export const field = (label, value) => `${paint.dim(pad(label, 10))}${value}`;
package/template/SKILL.md DELETED
@@ -1,16 +0,0 @@
1
- ---
2
- name: skill-name
3
- description: What this skill does and when an agent should use it. [`TODO`]
4
- ---
5
-
6
- # Skill Name
7
-
8
- [`TODO`] Instructions the agent follows when this skill is active.
9
-
10
- ## When to use
11
-
12
- [`TODO`]
13
-
14
- ## Instructions
15
-
16
- [`TODO`]