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.
- package/LICENSE +1 -1
- package/README.md +61 -65
- package/dist/bridges/git.d.ts +8 -0
- package/dist/bridges/git.js +20 -0
- package/dist/bridges/git.js.map +1 -0
- package/dist/bridges/github.d.ts +28 -0
- package/dist/bridges/github.js +71 -0
- package/dist/bridges/github.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +53 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/context.d.ts +18 -0
- package/dist/core/context.js +14 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/element.d.ts +49 -0
- package/dist/core/element.js +97 -0
- package/dist/core/element.js.map +1 -0
- package/dist/core/host.d.ts +32 -0
- package/dist/core/host.js +5 -0
- package/dist/core/host.js.map +1 -0
- package/dist/core/paths.d.ts +5 -0
- package/dist/core/paths.js +42 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/procedure.d.ts +11 -0
- package/dist/core/procedure.js +24 -0
- package/dist/core/procedure.js.map +1 -0
- package/dist/core/tool.d.ts +33 -0
- package/dist/core/tool.js +44 -0
- package/dist/core/tool.js.map +1 -0
- package/dist/core/version.d.ts +6 -0
- package/dist/core/version.js +37 -0
- package/dist/core/version.js.map +1 -0
- package/dist/hosts/node.d.ts +21 -0
- package/dist/hosts/node.js +76 -0
- package/dist/hosts/node.js.map +1 -0
- package/dist/hosts/watch-tree.d.ts +8 -0
- package/dist/hosts/watch-tree.js +86 -0
- package/dist/hosts/watch-tree.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +51 -0
- package/dist/main.js +85 -0
- package/dist/main.js.map +1 -0
- package/dist/models/_index.d.ts +18 -0
- package/dist/models/_index.js +20 -0
- package/dist/models/_index.js.map +1 -0
- package/dist/models/archive/class.d.ts +5 -0
- package/dist/models/archive/class.js +7 -0
- package/dist/models/archive/class.js.map +1 -0
- package/dist/models/craftbook/class.d.ts +10 -0
- package/dist/models/craftbook/class.js +13 -0
- package/dist/models/craftbook/class.js.map +1 -0
- package/dist/models/devarmory/class.d.ts +11 -0
- package/dist/models/devarmory/class.js +8 -0
- package/dist/models/devarmory/class.js.map +1 -0
- package/dist/models/devlog/class.d.ts +19 -0
- package/dist/models/devlog/class.js +61 -0
- package/dist/models/devlog/class.js.map +1 -0
- package/dist/models/forge/class.d.ts +9 -0
- package/dist/models/forge/class.js +24 -0
- package/dist/models/forge/class.js.map +1 -0
- package/dist/models/loop/class.d.ts +16 -0
- package/dist/models/loop/class.js +56 -0
- package/dist/models/loop/class.js.map +1 -0
- package/dist/models/loop/data.d.ts +12 -0
- package/dist/models/loop/data.js +20 -0
- package/dist/models/loop/data.js.map +1 -0
- package/dist/models/loop/load.d.ts +5 -0
- package/dist/models/loop/load.js +14 -0
- package/dist/models/loop/load.js.map +1 -0
- package/dist/models/project/anatomy.d.ts +2 -0
- package/dist/models/project/anatomy.js +15 -0
- package/dist/models/project/anatomy.js.map +1 -0
- package/dist/models/project/around.d.ts +3 -0
- package/dist/models/project/around.js +13 -0
- package/dist/models/project/around.js.map +1 -0
- package/dist/models/project/class.d.ts +21 -0
- package/dist/models/project/class.js +23 -0
- package/dist/models/project/class.js.map +1 -0
- package/dist/models/project/git.d.ts +8 -0
- package/dist/models/project/git.js +26 -0
- package/dist/models/project/git.js.map +1 -0
- package/dist/models/project/version.d.ts +6 -0
- package/dist/models/project/version.js +23 -0
- package/dist/models/project/version.js.map +1 -0
- package/dist/models/scope/class.d.ts +21 -0
- package/dist/models/scope/class.js +49 -0
- package/dist/models/scope/class.js.map +1 -0
- package/dist/models/settings/data.d.ts +12 -0
- package/dist/models/settings/data.js +9 -0
- package/dist/models/settings/data.js.map +1 -0
- package/dist/models/settings/load.d.ts +9 -0
- package/dist/models/settings/load.js +32 -0
- package/dist/models/settings/load.js.map +1 -0
- package/dist/models/system/class.d.ts +16 -0
- package/dist/models/system/class.js +21 -0
- package/dist/models/system/class.js.map +1 -0
- package/dist/models/system/parts.d.ts +21 -0
- package/dist/models/system/parts.js +22 -0
- package/dist/models/system/parts.js.map +1 -0
- package/dist/models/system/storylines.d.ts +39 -0
- package/dist/models/system/storylines.js +42 -0
- package/dist/models/system/storylines.js.map +1 -0
- package/dist/models/workshop/class.d.ts +20 -0
- package/dist/models/workshop/class.js +43 -0
- package/dist/models/workshop/class.js.map +1 -0
- package/dist/models/workshop/locate.d.ts +16 -0
- package/dist/models/workshop/locate.js +54 -0
- package/dist/models/workshop/locate.js.map +1 -0
- package/dist/procedures/_index.d.ts +7 -0
- package/dist/procedures/_index.js +10 -0
- package/dist/procedures/_index.js.map +1 -0
- package/dist/procedures/automerging/_index.d.ts +4 -0
- package/dist/procedures/automerging/_index.js +8 -0
- package/dist/procedures/automerging/_index.js.map +1 -0
- package/dist/procedures/automerging/context.d.ts +11 -0
- package/dist/procedures/automerging/context.js +2 -0
- package/dist/procedures/automerging/context.js.map +1 -0
- package/dist/procedures/automerging/steps.d.ts +4 -0
- package/dist/procedures/automerging/steps.js +34 -0
- package/dist/procedures/automerging/steps.js.map +1 -0
- package/dist/procedures/bootstrapping/_index.d.ts +4 -0
- package/dist/procedures/bootstrapping/_index.js +8 -0
- package/dist/procedures/bootstrapping/_index.js.map +1 -0
- package/dist/procedures/bootstrapping/context.d.ts +5 -0
- package/dist/procedures/bootstrapping/context.js +2 -0
- package/dist/procedures/bootstrapping/context.js.map +1 -0
- package/dist/procedures/bootstrapping/ensure-tree.d.ts +2 -0
- package/dist/procedures/bootstrapping/ensure-tree.js +5 -0
- package/dist/procedures/bootstrapping/ensure-tree.js.map +1 -0
- package/dist/procedures/bootstrapping/record.d.ts +2 -0
- package/dist/procedures/bootstrapping/record.js +12 -0
- package/dist/procedures/bootstrapping/record.js.map +1 -0
- package/dist/procedures/bumping/_index.d.ts +4 -0
- package/dist/procedures/bumping/_index.js +9 -0
- package/dist/procedures/bumping/_index.js.map +1 -0
- package/dist/procedures/bumping/context.d.ts +18 -0
- package/dist/procedures/bumping/context.js +4 -0
- package/dist/procedures/bumping/context.js.map +1 -0
- package/dist/procedures/bumping/steps.d.ts +4 -0
- package/dist/procedures/bumping/steps.js +50 -0
- package/dist/procedures/bumping/steps.js.map +1 -0
- package/dist/procedures/inspecting/_index.d.ts +4 -0
- package/dist/procedures/inspecting/_index.js +11 -0
- package/dist/procedures/inspecting/_index.js.map +1 -0
- package/dist/procedures/inspecting/judge.d.ts +2 -0
- package/dist/procedures/inspecting/judge.js +6 -0
- package/dist/procedures/inspecting/judge.js.map +1 -0
- package/dist/procedures/inspecting/read-areas.d.ts +2 -0
- package/dist/procedures/inspecting/read-areas.js +5 -0
- package/dist/procedures/inspecting/read-areas.js.map +1 -0
- package/dist/procedures/inspecting/read-forge.d.ts +2 -0
- package/dist/procedures/inspecting/read-forge.js +14 -0
- package/dist/procedures/inspecting/read-forge.js.map +1 -0
- package/dist/procedures/inspecting/report.d.ts +32 -0
- package/dist/procedures/inspecting/report.js +11 -0
- package/dist/procedures/inspecting/report.js.map +1 -0
- package/dist/procedures/inspecting/rules.d.ts +12 -0
- package/dist/procedures/inspecting/rules.js +75 -0
- package/dist/procedures/inspecting/rules.js.map +1 -0
- package/dist/procedures/proposing/_index.d.ts +4 -0
- package/dist/procedures/proposing/_index.js +9 -0
- package/dist/procedures/proposing/_index.js.map +1 -0
- package/dist/procedures/proposing/context.d.ts +16 -0
- package/dist/procedures/proposing/context.js +4 -0
- package/dist/procedures/proposing/context.js.map +1 -0
- package/dist/procedures/proposing/steps.d.ts +4 -0
- package/dist/procedures/proposing/steps.js +46 -0
- package/dist/procedures/proposing/steps.js.map +1 -0
- package/dist/procedures/versioning/_index.d.ts +16 -0
- package/dist/procedures/versioning/_index.js +22 -0
- package/dist/procedures/versioning/_index.js.map +1 -0
- package/dist/procedures/watching/_index.d.ts +5 -0
- package/dist/procedures/watching/_index.js +9 -0
- package/dist/procedures/watching/_index.js.map +1 -0
- package/dist/procedures/watching/classify.d.ts +5 -0
- package/dist/procedures/watching/classify.js +30 -0
- package/dist/procedures/watching/classify.js.map +1 -0
- package/dist/procedures/watching/context.d.ts +21 -0
- package/dist/procedures/watching/context.js +2 -0
- package/dist/procedures/watching/context.js.map +1 -0
- package/dist/procedures/watching/start.d.ts +2 -0
- package/dist/procedures/watching/start.js +24 -0
- package/dist/procedures/watching/start.js.map +1 -0
- package/dist/procedures/watching/wait.d.ts +2 -0
- package/dist/procedures/watching/wait.js +12 -0
- package/dist/procedures/watching/wait.js.map +1 -0
- package/dist/tools/_index.d.ts +3 -0
- package/dist/tools/_index.js +17 -0
- package/dist/tools/_index.js.map +1 -0
- package/dist/tools/devlog.d.ts +1 -0
- package/dist/tools/devlog.js +43 -0
- package/dist/tools/devlog.js.map +1 -0
- package/dist/tools/flow.d.ts +1 -0
- package/dist/tools/flow.js +81 -0
- package/dist/tools/flow.js.map +1 -0
- package/dist/tools/scope.d.ts +1 -0
- package/dist/tools/scope.js +51 -0
- package/dist/tools/scope.js.map +1 -0
- package/dist/tools/version.d.ts +1 -0
- package/dist/tools/version.js +23 -0
- package/dist/tools/version.js.map +1 -0
- package/dist/tools/workshop.d.ts +1 -0
- package/dist/tools/workshop.js +56 -0
- package/dist/tools/workshop.js.map +1 -0
- package/dist/views/devlog.d.ts +15 -0
- package/dist/views/devlog.js +31 -0
- package/dist/views/devlog.js.map +1 -0
- package/dist/views/event.d.ts +2 -0
- package/dist/views/event.js +6 -0
- package/dist/views/event.js.map +1 -0
- package/dist/views/flow.d.ts +12 -0
- package/dist/views/flow.js +26 -0
- package/dist/views/flow.js.map +1 -0
- package/dist/views/help.d.ts +2 -0
- package/dist/views/help.js +22 -0
- package/dist/views/help.js.map +1 -0
- package/dist/views/status.d.ts +5 -0
- package/dist/views/status.js +50 -0
- package/dist/views/status.js.map +1 -0
- package/package.json +31 -54
- package/resources/cli-art/big-logo-title.txt +24 -0
- package/resources/cli-art/big-shortcut-logo-title.txt +10 -0
- package/resources/cli-art/medium-logo-title.txt +13 -0
- package/resources/cli-art/minimenu-header.ptxml +13 -0
- package/resources/cli-art/minimenu-header.txt +11 -0
- package/resources/cli-art/small-logo-title.txt +10 -0
- package/resources/cli-art/wellcome.txt +10 -0
- package/resources/docs-templates/Home.md +7 -0
- package/resources/docs-templates/README.md +14 -0
- package/resources/docs-templates/_Footer.md +1 -0
- package/resources/docs-templates/_Sidebar.md +7 -0
- package/.claude-plugin/marketplace.json +0 -17
- package/.claude-plugin/mcp.json +0 -8
- package/.claude-plugin/plugin.json +0 -16
- package/AGENTS.md +0 -114
- package/CLAUDE.md +0 -1
- package/bin/bos +0 -3
- package/hooks/hooks.json +0 -40
- package/resources/house/HOUSE.md +0 -22
- package/resources/house/bloodlines.json +0 -35
- package/resources/house/children/deepseeks-of-anubis.json +0 -4
- package/resources/house/children/eon.json +0 -7
- package/resources/house/children/hermetic-officer.json +0 -1
- package/resources/house/children/ifrit.json +0 -1
- package/resources/house/children/license-keepers.json +0 -4
- package/resources/house/children/sebas.json +0 -10
- package/resources/house/children/shakespeare.json +0 -10
- package/resources/house/orders/ravensarmy.json +0 -6
- package/resources/house/orders/seiaic-ucdi.json +0 -5
- package/resources/ravens/skryba.md +0 -19
- package/resources/workshop-root/AGENTS.md +0 -92
- package/resources/workshop-root/CLAUDE.md +0 -1
- package/resources/workshop.default.json +0 -6
- package/skills/bos-archive/SKILL.md +0 -28
- package/skills/bos-craftbook/SKILL.md +0 -32
- package/skills/bos-craftset/SKILL.md +0 -36
- package/skills/bos-devarmory/SKILL.md +0 -34
- package/skills/bos-exhibit/SKILL.md +0 -28
- package/skills/bos-forge/SKILL.md +0 -28
- package/skills/bos-house/SKILL.md +0 -52
- package/skills/bos-project/SKILL.md +0 -27
- package/skills/bos-sarcophag/SKILL.md +0 -26
- package/skills/bos-scope/SKILL.md +0 -33
- package/skills/bos-sheme/SKILL.md +0 -38
- package/skills/bos-throwbox/SKILL.md +0 -27
- package/skills/bos-workshop/SKILL.md +0 -65
- package/skills/bos-workshop/assets/.gitkeep +0 -0
- package/skills/bos-workshop/references/bos-codebase.md +0 -116
- package/skills/bos-workshop/references/bos-concept.md +0 -121
- package/skills/bos-workshop/scripts/find-workshop.sh +0 -30
- package/src/agent-hook.mjs +0 -28
- package/src/bridge/_index.mjs +0 -24
- package/src/bridge/bos-instances-link/_index.mjs +0 -18
- package/src/bridge/docker-host/_index.mjs +0 -43
- package/src/bridge/docker-host/container.mjs +0 -32
- package/src/bridge/docker-host/image.mjs +0 -23
- package/src/bridge/docker-host/volume.mjs +0 -12
- package/src/bridge/docker-publish/_index.mjs +0 -24
- package/src/bridge/git-client/_index.mjs +0 -121
- package/src/bridge/git-client/author.mjs +0 -26
- package/src/bridge/gitea-api/_index.mjs +0 -62
- package/src/bridge/github-api/_index.mjs +0 -45
- package/src/bridge/npm-publish/_index.mjs +0 -19
- package/src/bridge/ollama-link/_index.mjs +0 -93
- package/src/bridge/ollama-link/ravens.mjs +0 -29
- package/src/bridge/ssh-link/_index.mjs +0 -33
- package/src/bridge/subprocess-runner/_index.mjs +0 -33
- package/src/cli.mjs +0 -29
- package/src/commands/_index.mjs +0 -51
- package/src/commands/bootstrap/exec.mjs +0 -7
- package/src/commands/bootstrap/help.md +0 -5
- package/src/commands/bootstrap/index.json +0 -7
- package/src/commands/close/exec.mjs +0 -4
- package/src/commands/close/help.md +0 -5
- package/src/commands/close/index.json +0 -7
- package/src/commands/describe/exec.mjs +0 -11
- package/src/commands/describe/help.md +0 -5
- package/src/commands/describe/index.json +0 -7
- package/src/commands/help/exec.mjs +0 -6
- package/src/commands/help/help.md +0 -3
- package/src/commands/help/index.json +0 -6
- package/src/commands/hook/exec.mjs +0 -3
- package/src/commands/hook/help.md +0 -4
- package/src/commands/hook/index.json +0 -7
- package/src/commands/hooks/exec.mjs +0 -5
- package/src/commands/hooks/help.md +0 -4
- package/src/commands/hooks/index.json +0 -7
- package/src/commands/house/exec.mjs +0 -8
- package/src/commands/house/help.md +0 -8
- package/src/commands/house/index.json +0 -7
- package/src/commands/locate/exec.mjs +0 -2
- package/src/commands/locate/help.md +0 -6
- package/src/commands/locate/index.json +0 -6
- package/src/commands/mode/exec.mjs +0 -17
- package/src/commands/mode/help.md +0 -14
- package/src/commands/mode/index.json +0 -8
- package/src/commands/mode/repl.mjs +0 -18
- package/src/commands/open/exec.mjs +0 -5
- package/src/commands/open/help.md +0 -4
- package/src/commands/open/index.json +0 -7
- package/src/commands/promote/exec.mjs +0 -5
- package/src/commands/promote/help.md +0 -6
- package/src/commands/promote/index.json +0 -7
- package/src/commands/repl/exec.mjs +0 -3
- package/src/commands/repl/help.md +0 -4
- package/src/commands/repl/index.json +0 -6
- package/src/commands/seal/exec.mjs +0 -8
- package/src/commands/seal/help.md +0 -4
- package/src/commands/seal/index.json +0 -7
- package/src/commands/sink/exec.mjs +0 -2
- package/src/commands/sink/help.md +0 -6
- package/src/commands/sink/index.json +0 -7
- package/src/commands/skills/exec.mjs +0 -5
- package/src/commands/skills/help.md +0 -5
- package/src/commands/skills/index.json +0 -7
- package/src/commands/status/exec.mjs +0 -2
- package/src/commands/status/help.md +0 -6
- package/src/commands/status/index.json +0 -7
- package/src/commands/status/repl.mjs +0 -14
- package/src/commands/verify/exec.mjs +0 -9
- package/src/commands/verify/help.md +0 -4
- package/src/commands/verify/index.json +0 -7
- package/src/controllers/_index.mjs +0 -5
- package/src/controllers/skills-controll.mjs +0 -13
- package/src/controllers/workshop-controll.mjs +0 -48
- package/src/core/basic-bridge.mjs +0 -29
- package/src/core/basic-controll.mjs +0 -26
- package/src/core/basic-element.mjs +0 -149
- package/src/core/basic-model.mjs +0 -7
- package/src/core/basic-procedure.mjs +0 -37
- package/src/core/basic-submodule.mjs +0 -21
- package/src/core/basic-view.mjs +0 -21
- package/src/core/self.mjs +0 -10
- package/src/index.mjs +0 -24
- package/src/main.ts +0 -82
- package/src/mcp.mjs +0 -8
- package/src/models/_index.mjs +0 -43
- package/src/models/archive/class.mjs +0 -9
- package/src/models/craftbook/class.mjs +0 -11
- package/src/models/craftbook/hang.scrapnotes.mjs +0 -10
- package/src/models/craftset/class.mjs +0 -14
- package/src/models/devarmory/class.mjs +0 -10
- package/src/models/exhibit/class.mjs +0 -8
- package/src/models/forge/class.mjs +0 -19
- package/src/models/house/bloodlines.mjs +0 -27
- package/src/models/house/class.mjs +0 -53
- package/src/models/house/groups.mjs +0 -38
- package/src/models/project/anatomy.mjs +0 -11
- package/src/models/project/class.mjs +0 -20
- package/src/models/sarcophag/class.mjs +0 -8
- package/src/models/scope/class.mjs +0 -19
- package/src/models/sheme/class.mjs +0 -8
- package/src/models/throwbox/class.mjs +0 -9
- package/src/models/workshop/class.mjs +0 -30
- package/src/models/workshop/hang.data.mjs +0 -10
- package/src/models/workshop/hang.nests.mjs +0 -14
- package/src/models/workshop/hang.setup.mjs +0 -10
- package/src/models/workshop/hang.storylines.logs.mjs +0 -10
- package/src/models/workshop/hang.storylines.manifests.mjs +0 -10
- package/src/models/workshop/hang.storylines.mjs +0 -39
- package/src/models/workshop/hang.storylines.ttystories.mjs +0 -10
- package/src/models/workshop/hang.system.mjs +0 -25
- package/src/models/workshop/host-roles.mjs +0 -9
- package/src/models/workshop/locate.mjs +0 -60
- package/src/models/workshop/modes.mjs +0 -31
- package/src/models/workshop/taskfile.mjs +0 -21
- package/src/procedures/_index.mjs +0 -32
- package/src/procedures/agent-recording/_index.mjs +0 -34
- package/src/procedures/agent-recording/situate.mjs +0 -11
- package/src/procedures/bootstrapping/DESCRIPTION.md +0 -6
- package/src/procedures/bootstrapping/_index.mjs +0 -13
- package/src/procedures/bootstrapping/deploy-guides.mjs +0 -15
- package/src/procedures/bootstrapping/ensure-tree.mjs +0 -4
- package/src/procedures/closing/DESCRIPTION.md +0 -6
- package/src/procedures/closing/_index.mjs +0 -11
- package/src/procedures/closing/capture-ttystory.mjs +0 -14
- package/src/procedures/closing/record-closing.mjs +0 -6
- package/src/procedures/describing/DESCRIPTION.md +0 -23
- package/src/procedures/describing/_index.mjs +0 -15
- package/src/procedures/describing/ask-skryba.mjs +0 -82
- package/src/procedures/describing/compose-message.mjs +0 -25
- package/src/procedures/describing/read-staged.mjs +0 -7
- package/src/procedures/describing/scopes.mjs +0 -38
- package/src/procedures/describing/staged-diff.mjs +0 -25
- package/src/procedures/describing/write-message.mjs +0 -15
- package/src/procedures/gathering/DESCRIPTION.md +0 -13
- package/src/procedures/gathering/_index.mjs +0 -13
- package/src/procedures/gathering/list-served.mjs +0 -9
- package/src/procedures/gathering/merge-residents.mjs +0 -31
- package/src/procedures/gathering/read-registry.mjs +0 -7
- package/src/procedures/hooking/DESCRIPTION.md +0 -6
- package/src/procedures/hooking/_index.mjs +0 -12
- package/src/procedures/hooking/hooks.mjs +0 -10
- package/src/procedures/hooking/install-hooks.mjs +0 -34
- package/src/procedures/hooking/record-hook.mjs +0 -13
- package/src/procedures/inspecting/DESCRIPTION.md +0 -3
- package/src/procedures/inspecting/_index.mjs +0 -9
- package/src/procedures/loading/DESCRIPTION.md +0 -4
- package/src/procedures/loading/_index.mjs +0 -15
- package/src/procedures/loading/load-config.mjs +0 -16
- package/src/procedures/loading/validate-mode.mjs +0 -8
- package/src/procedures/loading/validate-role.mjs +0 -8
- package/src/procedures/locating/DESCRIPTION.md +0 -6
- package/src/procedures/locating/_index.mjs +0 -13
- package/src/procedures/locating/locate-self.mjs +0 -7
- package/src/procedures/locating/locate-workshop.mjs +0 -16
- package/src/procedures/locating/read-environment.mjs +0 -12
- package/src/procedures/mode-switching/DESCRIPTION.md +0 -7
- package/src/procedures/mode-switching/_index.mjs +0 -10
- package/src/procedures/mode-switching/record-mode.mjs +0 -8
- package/src/procedures/mode-switching/switch-mode.mjs +0 -16
- package/src/procedures/opening/DESCRIPTION.md +0 -6
- package/src/procedures/opening/_index.mjs +0 -8
- package/src/procedures/opening/record-opening.mjs +0 -4
- package/src/procedures/promoting/DESCRIPTION.md +0 -8
- package/src/procedures/promoting/_index.mjs +0 -14
- package/src/procedures/promoting/apply.mjs +0 -28
- package/src/procedures/promoting/branch-flow.mjs +0 -23
- package/src/procedures/promoting/plan.mjs +0 -14
- package/src/procedures/promoting/read-position.mjs +0 -15
- package/src/procedures/sinking/DESCRIPTION.md +0 -8
- package/src/procedures/sinking/_index.mjs +0 -12
- package/src/procedures/sinking/inventory-forge.mjs +0 -18
- package/src/procedures/sinking/inventory-tools.mjs +0 -7
- package/src/procedures/skilling/DESCRIPTION.md +0 -11
- package/src/procedures/skilling/_index.mjs +0 -15
- package/src/procedures/skilling/collect-models.mjs +0 -15
- package/src/procedures/skilling/compose-skill.mjs +0 -49
- package/src/procedures/skilling/glossary.mjs +0 -23
- package/src/procedures/skilling/register-skills.mjs +0 -21
- package/src/procedures/skilling/write-skills.mjs +0 -19
- package/src/views/_index.mjs +0 -23
- package/src/views/agent/_index.mjs +0 -2
- package/src/views/agent/brief.mjs +0 -34
- package/src/views/help/_index.mjs +0 -41
- package/src/views/house/_index.mjs +0 -56
- package/src/views/inventory/_index.mjs +0 -27
- package/src/views/mcp/_index.mjs +0 -31
- package/src/views/mcp/tools.mjs +0 -87
- package/src/views/mode/_index.mjs +0 -34
- package/src/views/mode/chooser.mjs +0 -37
- package/src/views/promotion/_index.mjs +0 -20
- package/src/views/repl/_index.mjs +0 -30
- package/src/views/skills/_index.mjs +0 -24
- package/src/views/status/_index.mjs +0 -57
- package/src/views/status/tree.mjs +0 -19
- package/src/views/terminal/paint.mjs +0 -22
- package/template/SKILL.md +0 -16
package/LICENSE
CHANGED
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
31
|
+
This is the core: a TypeScript module and the `bos` command.
|
|
30
32
|
|
|
31
|
-
##
|
|
33
|
+
## Install
|
|
32
34
|
|
|
33
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
42
|
+
## Use
|
|
45
43
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
59
|
+
As a library:
|
|
61
60
|
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
72
|
-
New skills start from `template/SKILL.md` and are registered in `.claude-plugin/marketplace.json`.
|
|
70
|
+
## Documentation
|
|
73
71
|
|
|
74
|
-
|
|
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
|
-
|
|
78
|
-
|
|
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
|
-
|
|
82
|
+
## Where the idea came from
|
|
88
83
|
|
|
89
|
-
|
|
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
|
-
|
|
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
|
-
|
|
96
|
+
Copyright (c) 2019-2026 Sett Sarverott, released on terms of the [MIT license](LICENSE).
|
|
@@ -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
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|