blacksmith-organization-system 1.0.0-dev.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +77 -70
- package/dist/bridges/git.d.ts +9 -0
- package/dist/bridges/git.js +30 -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 +55 -0
- package/dist/main.js +99 -0
- package/dist/main.js.map +1 -0
- package/dist/models/_index.d.ts +20 -0
- package/dist/models/_index.js +22 -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/authors/entry.d.ts +20 -0
- package/dist/models/authors/entry.js +73 -0
- package/dist/models/authors/entry.js.map +1 -0
- package/dist/models/authors/file.d.ts +9 -0
- package/dist/models/authors/file.js +19 -0
- package/dist/models/authors/file.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 +8 -0
- package/dist/procedures/_index.js +11 -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/crediting/_index.d.ts +4 -0
- package/dist/procedures/crediting/_index.js +9 -0
- package/dist/procedures/crediting/_index.js.map +1 -0
- package/dist/procedures/crediting/context.d.ts +17 -0
- package/dist/procedures/crediting/context.js +4 -0
- package/dist/procedures/crediting/context.js.map +1 -0
- package/dist/procedures/crediting/steps.d.ts +4 -0
- package/dist/procedures/crediting/steps.js +51 -0
- package/dist/procedures/crediting/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 +25 -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/project.d.ts +1 -0
- package/dist/tools/project.js +18 -0
- package/dist/tools/project.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/project.d.ts +2 -0
- package/dist/views/project.js +11 -0
- package/dist/views/project.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
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// POSIX paths without node:path, so the core runs wherever a Host can be written.
|
|
2
|
+
// Every path the core keeps is absolute and uses "/".
|
|
3
|
+
export function join(...parts) {
|
|
4
|
+
return normalize(parts.filter(Boolean).join("/"));
|
|
5
|
+
}
|
|
6
|
+
export function normalize(path) {
|
|
7
|
+
const absolute = path.startsWith("/");
|
|
8
|
+
const out = [];
|
|
9
|
+
for (const part of path.split("/")) {
|
|
10
|
+
if (!part || part === ".")
|
|
11
|
+
continue;
|
|
12
|
+
if (part === "..") {
|
|
13
|
+
if (out.length && out[out.length - 1] !== "..")
|
|
14
|
+
out.pop();
|
|
15
|
+
else if (!absolute)
|
|
16
|
+
out.push("..");
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
out.push(part);
|
|
20
|
+
}
|
|
21
|
+
const body = out.join("/");
|
|
22
|
+
return absolute ? `/${body}` : body || ".";
|
|
23
|
+
}
|
|
24
|
+
export function basename(path) {
|
|
25
|
+
return normalize(path).split("/").pop() ?? "";
|
|
26
|
+
}
|
|
27
|
+
export function dirname(path) {
|
|
28
|
+
const parts = normalize(path).split("/");
|
|
29
|
+
parts.pop();
|
|
30
|
+
const parent = parts.join("/");
|
|
31
|
+
return parent || "/";
|
|
32
|
+
}
|
|
33
|
+
// "a/b" when target = root/a/b; "" when equal; null when target is outside root
|
|
34
|
+
export function inside(root, target) {
|
|
35
|
+
const base = normalize(root);
|
|
36
|
+
const path = normalize(target);
|
|
37
|
+
if (path === base)
|
|
38
|
+
return "";
|
|
39
|
+
const prefix = base === "/" ? "/" : `${base}/`;
|
|
40
|
+
return path.startsWith(prefix) ? path.slice(prefix.length) : null;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/core/paths.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,sDAAsD;AAEtD,MAAM,UAAU,IAAI,CAAC,GAAG,KAAe;IACrC,OAAO,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG;YAAE,SAAS;QACpC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI;gBAAE,GAAG,CAAC,GAAG,EAAE,CAAC;iBACrD,IAAI,CAAC,QAAQ;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,KAAK,CAAC,GAAG,EAAE,CAAC;IACZ,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,OAAO,MAAM,IAAI,GAAG,CAAC;AACvB,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,MAAc;IACjD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC;IAC/C,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Context } from "./context.ts";
|
|
2
|
+
export type Step<C extends Context> = {
|
|
3
|
+
name: string;
|
|
4
|
+
run: (context: C) => void | Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
export declare class Procedure<C extends Context = Context> {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly steps: Step<C>[];
|
|
9
|
+
constructor(name: string, steps: Step<C>[]);
|
|
10
|
+
run(context: C): Promise<C>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class Procedure {
|
|
2
|
+
name;
|
|
3
|
+
steps;
|
|
4
|
+
constructor(name, steps) {
|
|
5
|
+
this.name = name;
|
|
6
|
+
this.steps = steps;
|
|
7
|
+
}
|
|
8
|
+
async run(context) {
|
|
9
|
+
for (const step of this.steps) {
|
|
10
|
+
const started = context.host.now();
|
|
11
|
+
try {
|
|
12
|
+
await step.run(context);
|
|
13
|
+
context.trace.push({ procedure: this.name, step: step.name, ok: true, ms: context.host.now() - started });
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
17
|
+
context.trace.push({ procedure: this.name, step: step.name, ok: false, error: message });
|
|
18
|
+
throw new Error(`${this.name} › ${step.name}: ${message}`, { cause: error });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return context;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=procedure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedure.js","sourceRoot":"","sources":["../../src/core/procedure.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,SAAS;IACX,IAAI,CAAS;IACb,KAAK,CAAY;IAE1B,YAAY,IAAY,EAAE,KAAgB;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAU;QAClB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YAC5G,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACvE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;gBACzF,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { BOS } from "../main.ts";
|
|
2
|
+
export type Arg = {
|
|
3
|
+
name: string;
|
|
4
|
+
type: "string" | "boolean";
|
|
5
|
+
info: string;
|
|
6
|
+
positional?: boolean;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type Input = Record<string, string | boolean | undefined>;
|
|
10
|
+
export type IO = {
|
|
11
|
+
print: (line: string) => void;
|
|
12
|
+
signal: AbortSignal;
|
|
13
|
+
};
|
|
14
|
+
export type Tool = {
|
|
15
|
+
model: string;
|
|
16
|
+
name: string;
|
|
17
|
+
info: string;
|
|
18
|
+
readOnly: boolean;
|
|
19
|
+
args: Arg[];
|
|
20
|
+
run: (bos: BOS, input: Input, io: IO) => unknown | Promise<unknown>;
|
|
21
|
+
render?: (result: never, input: Input) => string;
|
|
22
|
+
};
|
|
23
|
+
export declare function tool<R>(definition: Omit<Tool, "run" | "render" | "args" | "readOnly"> & {
|
|
24
|
+
args?: Arg[];
|
|
25
|
+
readOnly?: boolean;
|
|
26
|
+
run: (bos: BOS, input: Input, io: IO) => R | Promise<R>;
|
|
27
|
+
render?: (result: Awaited<R>, input: Input) => string;
|
|
28
|
+
}): Tool;
|
|
29
|
+
export declare function parseArgs(argv: string[]): {
|
|
30
|
+
operands: string[];
|
|
31
|
+
flags: Record<string, string | boolean>;
|
|
32
|
+
};
|
|
33
|
+
export declare function inputFor(entry: Tool, operands: string[], flags: Record<string, string | boolean>): Input;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export function tool(definition) {
|
|
2
|
+
return { args: [], readOnly: true, ...definition };
|
|
3
|
+
}
|
|
4
|
+
// "--dry-run --workshop=/x a b" → flags { dryRun: true, workshop: "/x" }, operands [a, b]
|
|
5
|
+
export function parseArgs(argv) {
|
|
6
|
+
const flags = {};
|
|
7
|
+
const operands = [];
|
|
8
|
+
for (const arg of argv) {
|
|
9
|
+
if (!arg.startsWith("--")) {
|
|
10
|
+
operands.push(arg);
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const [key = "", value] = arg.slice(2).split(/=(.*)/s);
|
|
14
|
+
flags[key.replace(/-(\w)/g, (_, c) => c.toUpperCase())] = value ?? true;
|
|
15
|
+
}
|
|
16
|
+
return { operands, flags };
|
|
17
|
+
}
|
|
18
|
+
// operands and flags → the tool's input, checked against its args
|
|
19
|
+
export function inputFor(entry, operands, flags) {
|
|
20
|
+
const input = {};
|
|
21
|
+
const positional = entry.args.filter((arg) => arg.positional);
|
|
22
|
+
positional.forEach((arg, index) => {
|
|
23
|
+
if (operands[index] !== undefined)
|
|
24
|
+
input[arg.name] = operands[index];
|
|
25
|
+
});
|
|
26
|
+
if (operands.length > positional.length)
|
|
27
|
+
throw new Error(`too many operands for ${entry.model} ${entry.name}: ${operands.slice(positional.length).join(" ")}`);
|
|
28
|
+
for (const arg of entry.args) {
|
|
29
|
+
const value = flags[arg.name];
|
|
30
|
+
if (value === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
if (arg.type === "boolean")
|
|
33
|
+
input[arg.name] = value === true || value === "true";
|
|
34
|
+
else if (value === true)
|
|
35
|
+
throw new Error(`--${arg.name} needs a value: --${arg.name}=<${arg.name}>`);
|
|
36
|
+
else
|
|
37
|
+
input[arg.name] = value;
|
|
38
|
+
}
|
|
39
|
+
const missing = entry.args.filter((arg) => arg.required && input[arg.name] === undefined).map((arg) => arg.name);
|
|
40
|
+
if (missing.length)
|
|
41
|
+
throw new Error(`${entry.model} ${entry.name} needs: ${missing.join(", ")}`);
|
|
42
|
+
return input;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/core/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const EVENTS: readonly ["step", "phase", "milestone", "flip"];
|
|
2
|
+
export type LoopEvent = (typeof EVENTS)[number];
|
|
3
|
+
export declare function isLoopEvent(value: string): value is LoopEvent;
|
|
4
|
+
export declare function bumpSemver(version: string, event: LoopEvent): string;
|
|
5
|
+
export declare function bumpGrih(version: string, event: LoopEvent): string;
|
|
6
|
+
export declare const GRIH_START = "0.0.0.0";
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// The two version schemes of BOS (docs/devlog/ROADMAP.md):
|
|
2
|
+
// a project: semver vX.Y.Z
|
|
3
|
+
// a scope: GRIH vG.R.I.H
|
|
4
|
+
// and the four events of the craft loop that bump them.
|
|
5
|
+
//
|
|
6
|
+
// | event | semver | GRIH |
|
|
7
|
+
// | step | Z | H |
|
|
8
|
+
// | phase | Y | I |
|
|
9
|
+
// | milestone | X | R |
|
|
10
|
+
// | flip | X | G | the script flips: pre-alpha → alpha, a key concept changes
|
|
11
|
+
export const EVENTS = ["step", "phase", "milestone", "flip"];
|
|
12
|
+
export function isLoopEvent(value) {
|
|
13
|
+
return EVENTS.includes(value);
|
|
14
|
+
}
|
|
15
|
+
function parse(version, count, scheme) {
|
|
16
|
+
const parts = version.replace(/^v/, "").split(".");
|
|
17
|
+
const numbers = parts.map(Number);
|
|
18
|
+
if (parts.length !== count || numbers.some((n) => !Number.isInteger(n) || n < 0))
|
|
19
|
+
throw new Error(`"${version}" is not a ${scheme} version (${count} whole numbers joined by dots)`);
|
|
20
|
+
return numbers;
|
|
21
|
+
}
|
|
22
|
+
// raise the digit at index, zero every digit after it
|
|
23
|
+
function raise(numbers, index) {
|
|
24
|
+
return numbers.map((n, i) => (i < index ? n : i === index ? n + 1 : 0)).join(".");
|
|
25
|
+
}
|
|
26
|
+
const SEMVER_DIGIT = { flip: 0, milestone: 0, phase: 1, step: 2 };
|
|
27
|
+
const GRIH_DIGIT = { flip: 0, milestone: 1, phase: 2, step: 3 };
|
|
28
|
+
// "0.6.1" + phase → "0.7.0"; pre-release or build suffixes are not part of the core's scheme
|
|
29
|
+
export function bumpSemver(version, event) {
|
|
30
|
+
return raise(parse(version, 3, "semver"), SEMVER_DIGIT[event]);
|
|
31
|
+
}
|
|
32
|
+
// "0.1.2.3" + milestone → "0.2.0.0"
|
|
33
|
+
export function bumpGrih(version, event) {
|
|
34
|
+
return raise(parse(version, 4, "GRIH"), GRIH_DIGIT[event]);
|
|
35
|
+
}
|
|
36
|
+
export const GRIH_START = "0.0.0.0";
|
|
37
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,8BAA8B;AAC9B,gCAAgC;AAChC,wDAAwD;AACxD,EAAE;AACF,gCAAgC;AAChC,gCAAgC;AAChC,gCAAgC;AAChC,gCAAgC;AAChC,6FAA6F;AAE7F,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC;AAGtE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAQ,MAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,KAAK,CAAC,OAAe,EAAE,KAAa,EAAE,MAAc;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,cAAc,MAAM,aAAa,KAAK,gCAAgC,CAAC,CAAC;IACrG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,sDAAsD;AACtD,SAAS,KAAK,CAAC,OAAiB,EAAE,KAAa;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,YAAY,GAA8B,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC7F,MAAM,UAAU,GAA8B,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAE3F,6FAA6F;AAC7F,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,KAAgB;IAC1D,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAgB;IACxD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Change, Entry, Host, RunResult } from "../core/host.ts";
|
|
2
|
+
export { WATCH_LIMIT } from "./watch-tree.ts";
|
|
3
|
+
export declare class NodeHost implements Host {
|
|
4
|
+
exists(path: string): boolean;
|
|
5
|
+
isDirectory(path: string): boolean;
|
|
6
|
+
list(path: string): Entry[];
|
|
7
|
+
readText(path: string): string | null;
|
|
8
|
+
writeText(path: string, text: string): void;
|
|
9
|
+
appendText(path: string, text: string): void;
|
|
10
|
+
mkdir(path: string): void;
|
|
11
|
+
watch(root: string, onChange: (change: Change) => void, onError: (error: Error) => void, skip?: (relative: string) => boolean): () => void;
|
|
12
|
+
run(command: string, args: string[], options?: {
|
|
13
|
+
cwd?: string;
|
|
14
|
+
}): RunResult;
|
|
15
|
+
env(name: string): string | undefined;
|
|
16
|
+
home(): string;
|
|
17
|
+
cwd(): string;
|
|
18
|
+
hostname(): string;
|
|
19
|
+
user(): string;
|
|
20
|
+
now(): number;
|
|
21
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Host for Node.js: the real file system, clock and environment.
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { homedir, hostname, userInfo } from "node:os";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import { watchTree } from "./watch-tree.js";
|
|
7
|
+
export { WATCH_LIMIT } from "./watch-tree.js";
|
|
8
|
+
export class NodeHost {
|
|
9
|
+
exists(path) {
|
|
10
|
+
return existsSync(path);
|
|
11
|
+
}
|
|
12
|
+
isDirectory(path) {
|
|
13
|
+
try {
|
|
14
|
+
return statSync(path).isDirectory();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
list(path) {
|
|
21
|
+
try {
|
|
22
|
+
return readdirSync(path, { withFileTypes: true }).map((entry) => ({
|
|
23
|
+
name: entry.name,
|
|
24
|
+
directory: entry.isDirectory(),
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
readText(path) {
|
|
32
|
+
try {
|
|
33
|
+
return readFileSync(path, "utf8");
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
writeText(path, text) {
|
|
40
|
+
writeFileSync(path, text);
|
|
41
|
+
}
|
|
42
|
+
appendText(path, text) {
|
|
43
|
+
appendFileSync(path, text);
|
|
44
|
+
}
|
|
45
|
+
mkdir(path) {
|
|
46
|
+
mkdirSync(path, { recursive: true });
|
|
47
|
+
}
|
|
48
|
+
watch(root, onChange, onError, skip = () => false) {
|
|
49
|
+
return watchTree(root, { onChange, onError, skip });
|
|
50
|
+
}
|
|
51
|
+
run(command, args, options = {}) {
|
|
52
|
+
const result = spawnSync(command, args, { cwd: options.cwd, encoding: "utf8", maxBuffer: 64 * 1024 * 1024 });
|
|
53
|
+
if (result.error)
|
|
54
|
+
return { status: 127, stdout: "", stderr: `${command}: ${result.error.message}` };
|
|
55
|
+
return { status: result.status ?? 1, stdout: result.stdout, stderr: result.stderr };
|
|
56
|
+
}
|
|
57
|
+
env(name) {
|
|
58
|
+
return process.env[name];
|
|
59
|
+
}
|
|
60
|
+
home() {
|
|
61
|
+
return homedir();
|
|
62
|
+
}
|
|
63
|
+
cwd() {
|
|
64
|
+
return resolve(process.cwd());
|
|
65
|
+
}
|
|
66
|
+
hostname() {
|
|
67
|
+
return hostname();
|
|
68
|
+
}
|
|
69
|
+
user() {
|
|
70
|
+
return userInfo().username;
|
|
71
|
+
}
|
|
72
|
+
now() {
|
|
73
|
+
return Date.now();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/hosts/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Change } from "../core/host.ts";
|
|
2
|
+
export declare const WATCH_LIMIT = "no file watches left on this system (fs.inotify.max_user_watches); close other watchers (editors) or raise the limit";
|
|
3
|
+
export type TreeHandlers = {
|
|
4
|
+
onChange: (change: Change) => void;
|
|
5
|
+
onError: (error: Error) => void;
|
|
6
|
+
skip: (relative: string) => boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function watchTree(root: string, { onChange, onError, skip }: TreeHandlers): () => void;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// A recursive watch built from one watcher per directory. Node's own recursive watch
|
|
2
|
+
// on Linux watches every file and, when inotify runs out, stops reporting without an
|
|
3
|
+
// error. Here a skipped directory (.git, node_modules…) costs no watch at all, a new
|
|
4
|
+
// directory is watched as soon as it appears, and running out of watches is an error.
|
|
5
|
+
import { readdirSync, statSync, watch } from "node:fs";
|
|
6
|
+
// Linux gives every user a fixed number of inotify watches; editors watching big trees can take them all
|
|
7
|
+
export const WATCH_LIMIT = "no file watches left on this system (fs.inotify.max_user_watches); close other watchers (editors) or raise the limit";
|
|
8
|
+
function asError(error) {
|
|
9
|
+
const code = error?.code;
|
|
10
|
+
if (code === "ENOSPC")
|
|
11
|
+
return new Error(WATCH_LIMIT);
|
|
12
|
+
return error instanceof Error ? error : new Error(String(error));
|
|
13
|
+
}
|
|
14
|
+
function isDirectory(path) {
|
|
15
|
+
try {
|
|
16
|
+
return statSync(path).isDirectory();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function watchTree(root, { onChange, onError, skip }) {
|
|
23
|
+
const watchers = new Map();
|
|
24
|
+
let failed = false;
|
|
25
|
+
const fail = (error) => {
|
|
26
|
+
if (failed)
|
|
27
|
+
return;
|
|
28
|
+
failed = true;
|
|
29
|
+
stop();
|
|
30
|
+
onError(asError(error));
|
|
31
|
+
};
|
|
32
|
+
// relative: "" for the root, else "a/b"
|
|
33
|
+
const add = (relative) => {
|
|
34
|
+
if (failed || watchers.has(relative) || (relative && skip(relative)))
|
|
35
|
+
return;
|
|
36
|
+
const path = relative ? `${root}/${relative}` : root;
|
|
37
|
+
let watcher;
|
|
38
|
+
try {
|
|
39
|
+
watcher = watch(path, (kind, filename) => {
|
|
40
|
+
if (!filename)
|
|
41
|
+
return;
|
|
42
|
+
const changed = relative ? `${relative}/${filename}` : String(filename);
|
|
43
|
+
if (kind === "rename" && isDirectory(`${root}/${changed}`))
|
|
44
|
+
add(changed);
|
|
45
|
+
if (kind === "rename" && !watchers.has(changed))
|
|
46
|
+
drop(changed);
|
|
47
|
+
onChange({ path: changed, kind: kind === "rename" ? "rename" : "change" });
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// the directory vanished between listing and watching: nothing to watch
|
|
52
|
+
if (error.code === "ENOENT")
|
|
53
|
+
return;
|
|
54
|
+
return fail(error);
|
|
55
|
+
}
|
|
56
|
+
watcher.on("error", fail);
|
|
57
|
+
watchers.set(relative, watcher);
|
|
58
|
+
let entries = [];
|
|
59
|
+
try {
|
|
60
|
+
entries = readdirSync(path, { withFileTypes: true })
|
|
61
|
+
.filter((entry) => entry.isDirectory())
|
|
62
|
+
.map((entry) => entry.name);
|
|
63
|
+
}
|
|
64
|
+
catch { }
|
|
65
|
+
for (const name of entries)
|
|
66
|
+
add(relative ? `${relative}/${name}` : name);
|
|
67
|
+
};
|
|
68
|
+
// a removed directory: close its watcher and those below it
|
|
69
|
+
const drop = (relative) => {
|
|
70
|
+
if (isDirectory(`${root}/${relative}`))
|
|
71
|
+
return;
|
|
72
|
+
for (const [key, watcher] of watchers)
|
|
73
|
+
if (key === relative || key.startsWith(`${relative}/`)) {
|
|
74
|
+
watcher.close();
|
|
75
|
+
watchers.delete(key);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const stop = () => {
|
|
79
|
+
for (const watcher of watchers.values())
|
|
80
|
+
watcher.close();
|
|
81
|
+
watchers.clear();
|
|
82
|
+
};
|
|
83
|
+
add("");
|
|
84
|
+
return stop;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=watch-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-tree.js","sourceRoot":"","sources":["../../src/hosts/watch-tree.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { Git } from "./bridges/git.ts";
|
|
2
|
+
export { type Comparison, GitHub, type PullRequest } from "./bridges/github.ts";
|
|
3
|
+
export { type Context, createContext, createIfMissing, type TraceEntry } from "./core/context.ts";
|
|
4
|
+
export { Element, type ElementClass, type ElementNode } from "./core/element.ts";
|
|
5
|
+
export type { Change, Entry, Host, RunResult } from "./core/host.ts";
|
|
6
|
+
export * as paths from "./core/paths.ts";
|
|
7
|
+
export { Procedure, type Step } from "./core/procedure.ts";
|
|
8
|
+
export { type Arg, type Input, type IO, inputFor, parseArgs, type Tool, tool } from "./core/tool.ts";
|
|
9
|
+
export { bumpGrih, bumpSemver, EVENTS, GRIH_START, isLoopEvent, type LoopEvent } from "./core/version.ts";
|
|
10
|
+
export { NodeHost, WATCH_LIMIT } from "./hosts/node.ts";
|
|
11
|
+
export { BOS, type BOSOptions, type WatchOptions } from "./main.ts";
|
|
12
|
+
export * from "./models/_index.ts";
|
|
13
|
+
export * from "./procedures/_index.ts";
|
|
14
|
+
export { findTool, TOOLS } from "./tools/_index.ts";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Library entry.
|
|
2
|
+
// import { BOS, NodeHost } from "blacksmith-organization-system";
|
|
3
|
+
// const bos = new BOS(new NodeHost());
|
|
4
|
+
// await bos.bootstrap(); const report = await bos.inspect();
|
|
5
|
+
export { Git } from "./bridges/git.js";
|
|
6
|
+
export { GitHub } from "./bridges/github.js";
|
|
7
|
+
export { createContext, createIfMissing } from "./core/context.js";
|
|
8
|
+
export { Element } from "./core/element.js";
|
|
9
|
+
export * as paths from "./core/paths.js";
|
|
10
|
+
export { Procedure } from "./core/procedure.js";
|
|
11
|
+
export { inputFor, parseArgs, tool } from "./core/tool.js";
|
|
12
|
+
export { bumpGrih, bumpSemver, EVENTS, GRIH_START, isLoopEvent } from "./core/version.js";
|
|
13
|
+
export { NodeHost, WATCH_LIMIT } from "./hosts/node.js";
|
|
14
|
+
export { BOS } from "./main.js";
|
|
15
|
+
export * from "./models/_index.js";
|
|
16
|
+
export * from "./procedures/_index.js";
|
|
17
|
+
export { findTool, TOOLS } from "./tools/_index.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,oEAAoE;AACpE,yCAAyC;AACzC,gEAAgE;AAEhE,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAmB,MAAM,EAAoB,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAgB,aAAa,EAAE,eAAe,EAAmB,MAAM,mBAAmB,CAAC;AAClG,OAAO,EAAE,OAAO,EAAuC,MAAM,mBAAmB,CAAC;AAEjF,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAa,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAiC,QAAQ,EAAE,SAAS,EAAa,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAsC,MAAM,WAAW,CAAC;AACpE,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Host } from "./core/host.ts";
|
|
2
|
+
import type { LoopEvent } from "./core/version.ts";
|
|
3
|
+
import { type Loop, type Project, type Settings, type VersioningData, Workshop } from "./models/_index.ts";
|
|
4
|
+
import { type BootstrapContext, type BumpOutcome, type CreditOutcome, type FlowOutcome, type VersionContext, type WorkshopEvent, type WorkshopReport } from "./procedures/_index.ts";
|
|
5
|
+
export type BOSOptions = {
|
|
6
|
+
workshop?: string;
|
|
7
|
+
};
|
|
8
|
+
export type WatchOptions = {
|
|
9
|
+
signal: AbortSignal;
|
|
10
|
+
onEvent: (event: WorkshopEvent) => void;
|
|
11
|
+
record?: boolean;
|
|
12
|
+
quietMs?: number;
|
|
13
|
+
};
|
|
14
|
+
export declare class BOS {
|
|
15
|
+
#private;
|
|
16
|
+
readonly host: Host;
|
|
17
|
+
readonly options: BOSOptions;
|
|
18
|
+
constructor(host: Host, options?: BOSOptions);
|
|
19
|
+
get workshop(): Workshop;
|
|
20
|
+
bootstrap({ dryRun }?: {
|
|
21
|
+
dryRun?: boolean | undefined;
|
|
22
|
+
}): Promise<BootstrapContext>;
|
|
23
|
+
inspect(): Promise<WorkshopReport>;
|
|
24
|
+
watch({ signal, onEvent, record, quietMs }: WatchOptions): Promise<void>;
|
|
25
|
+
bumpScope(name: string, event: LoopEvent, { dryRun }?: {
|
|
26
|
+
dryRun?: boolean | undefined;
|
|
27
|
+
}): Promise<VersionContext>;
|
|
28
|
+
settings(dir?: string): {
|
|
29
|
+
project: Project;
|
|
30
|
+
settings: Settings;
|
|
31
|
+
loop: Loop;
|
|
32
|
+
versioning: VersioningData;
|
|
33
|
+
};
|
|
34
|
+
loop(dir?: string): {
|
|
35
|
+
project: Project;
|
|
36
|
+
loop: Loop;
|
|
37
|
+
};
|
|
38
|
+
bump(station: string, { dir, dryRun }?: {
|
|
39
|
+
dir?: string;
|
|
40
|
+
dryRun?: boolean;
|
|
41
|
+
}): Promise<BumpOutcome>;
|
|
42
|
+
authors({ dir, dryRun }?: {
|
|
43
|
+
dir?: string;
|
|
44
|
+
dryRun?: boolean;
|
|
45
|
+
}): Promise<CreditOutcome>;
|
|
46
|
+
propose(branch: string, { dir, dryRun }?: {
|
|
47
|
+
dir?: string;
|
|
48
|
+
dryRun?: boolean;
|
|
49
|
+
}): Promise<FlowOutcome>;
|
|
50
|
+
automerge(number: number, { dir, dryRun }?: {
|
|
51
|
+
dir?: string;
|
|
52
|
+
dryRun?: boolean;
|
|
53
|
+
}): Promise<FlowOutcome>;
|
|
54
|
+
toString(): string;
|
|
55
|
+
}
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// The spine of BOS: one object that holds the host, finds the workshop and runs
|
|
2
|
+
// the procedures on it. Every face of BOS (CLI, library, later MCP and HTTP) goes
|
|
3
|
+
// through these methods.
|
|
4
|
+
// const bos = new BOS(new NodeHost()); const report = await bos.inspect();
|
|
5
|
+
import { Git } from "./bridges/git.js";
|
|
6
|
+
import { GitHub } from "./bridges/github.js";
|
|
7
|
+
import { createContext } from "./core/context.js";
|
|
8
|
+
import { authorsFile, loopOfSettings, projectAround, settingsOf, versioningOf, Workshop, } from "./models/_index.js";
|
|
9
|
+
import { automerging, bootstrapping, bumping, crediting, emptyReport, inspecting, proposing, unbumped, uncredited, undecided, versioning, watching, } from "./procedures/_index.js";
|
|
10
|
+
export class BOS {
|
|
11
|
+
host;
|
|
12
|
+
options;
|
|
13
|
+
#workshop = null;
|
|
14
|
+
constructor(host, options = {}) {
|
|
15
|
+
this.host = host;
|
|
16
|
+
this.options = options;
|
|
17
|
+
}
|
|
18
|
+
// the active workshop: --workshop, $BOS_WORKSHOP, $WORKSHOP_ROOT/__WORKSHOP, an ancestor __WORKSHOP,
|
|
19
|
+
// or ~/__WORKSHOP ($WORKSHOP_RENAME changes the name)
|
|
20
|
+
get workshop() {
|
|
21
|
+
this.#workshop ??= Workshop.locate(this.host, this.options.workshop);
|
|
22
|
+
return this.#workshop;
|
|
23
|
+
}
|
|
24
|
+
// build the base of the environment: create what is missing, never overwrite
|
|
25
|
+
async bootstrap({ dryRun = false } = {}) {
|
|
26
|
+
return bootstrapping.run({ ...createContext(this.host, { dryRun }), workshop: this.workshop });
|
|
27
|
+
}
|
|
28
|
+
// the whole workshop as one coherent environment, with findings; reads only
|
|
29
|
+
async inspect() {
|
|
30
|
+
const context = { ...createContext(this.host), workshop: this.workshop, report: emptyReport(this.workshop) };
|
|
31
|
+
return (await inspecting.run(context)).report;
|
|
32
|
+
}
|
|
33
|
+
// listen to every change in the workshop until options.signal aborts
|
|
34
|
+
async watch({ signal, onEvent, record = false, quietMs = 250 }) {
|
|
35
|
+
await watching.run({ ...createContext(this.host), workshop: this.workshop, signal, onEvent, record, quietMs });
|
|
36
|
+
}
|
|
37
|
+
// raise a scope's GRIH version for one loop event
|
|
38
|
+
async bumpScope(name, event, { dryRun = false } = {}) {
|
|
39
|
+
const scope = this.workshop.forge.scope(name);
|
|
40
|
+
return versioning.run({ ...createContext(this.host, { dryRun }), workshop: this.workshop, scope, event });
|
|
41
|
+
}
|
|
42
|
+
// the settings of the project around dir (default: the current directory): .github/bos.json
|
|
43
|
+
settings(dir) {
|
|
44
|
+
const project = projectAround(this.host, dir);
|
|
45
|
+
const settings = settingsOf(this.host, project.path);
|
|
46
|
+
return { project, settings, loop: loopOfSettings(settings), versioning: versioningOf(settings) };
|
|
47
|
+
}
|
|
48
|
+
// the craft loop of the project around dir
|
|
49
|
+
loop(dir) {
|
|
50
|
+
const { project, loop } = this.settings(dir);
|
|
51
|
+
return { project, loop };
|
|
52
|
+
}
|
|
53
|
+
// bump the project's version for work landing on a station (only a released version moves)
|
|
54
|
+
async bump(station, { dir, dryRun = false } = {}) {
|
|
55
|
+
const { project, versioning } = this.settings(dir);
|
|
56
|
+
const git = new Git(this.host, project.path);
|
|
57
|
+
const context = {
|
|
58
|
+
...createContext(this.host, { dryRun }),
|
|
59
|
+
projectPath: project.path,
|
|
60
|
+
station,
|
|
61
|
+
versioning,
|
|
62
|
+
git,
|
|
63
|
+
outcome: unbumped(),
|
|
64
|
+
};
|
|
65
|
+
return (await bumping.run(context)).outcome;
|
|
66
|
+
}
|
|
67
|
+
// name everyone of the project's commits in its .github/AUTHORS
|
|
68
|
+
async authors({ dir, dryRun = false } = {}) {
|
|
69
|
+
const { project } = this.loop(dir);
|
|
70
|
+
const file = authorsFile(project.path);
|
|
71
|
+
const context = {
|
|
72
|
+
...createContext(this.host, { dryRun }),
|
|
73
|
+
file,
|
|
74
|
+
git: new Git(this.host, project.path),
|
|
75
|
+
lines: [],
|
|
76
|
+
identities: [],
|
|
77
|
+
outcome: uncredited(file),
|
|
78
|
+
};
|
|
79
|
+
return (await crediting.run(context)).outcome;
|
|
80
|
+
}
|
|
81
|
+
// open the pull request of a branch's forward step on GitHub
|
|
82
|
+
async propose(branch, { dir, dryRun = false } = {}) {
|
|
83
|
+
const { project, loop } = this.loop(dir);
|
|
84
|
+
const github = new GitHub(this.host, project.path);
|
|
85
|
+
const context = { ...createContext(this.host, { dryRun }), loop, github, branch, outcome: undecided() };
|
|
86
|
+
return (await proposing.run(context)).outcome;
|
|
87
|
+
}
|
|
88
|
+
// merge a loop pull request when the loop allows it
|
|
89
|
+
async automerge(number, { dir, dryRun = false } = {}) {
|
|
90
|
+
const { project, loop } = this.loop(dir);
|
|
91
|
+
const github = new GitHub(this.host, project.path);
|
|
92
|
+
const context = { ...createContext(this.host, { dryRun }), loop, github, number, outcome: undecided() };
|
|
93
|
+
return (await automerging.run(context)).outcome;
|
|
94
|
+
}
|
|
95
|
+
toString() {
|
|
96
|
+
return `[<Blacksmith_Organization_System::${this.workshop.path}>]`;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|