oh-my-second-brain 0.1.8 → 0.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/CHANGELOG.md +89 -0
- package/README.ko.md +127 -0
- package/README.md +128 -0
- package/adapters/README.md +8 -8
- package/adapters/claude-code/.claude-plugin/plugin.json +3 -2
- package/adapters/claude-code/.mcp.json +8 -0
- package/adapters/claude-code/CLAUDE.md +5 -6
- package/adapters/claude-code/skills/compile/SKILL.md +10 -35
- package/adapters/claude-code/skills/distill/SKILL.md +6 -26
- package/adapters/claude-code/skills/link/SKILL.md +87 -0
- package/adapters/claude-code/skills/retrieve/SKILL.md +4 -7
- package/adapters/claude-code/skills/setup/SKILL.md +5 -6
- package/adapters/claude-code/skills/uninstall/SKILL.md +1 -1
- package/adapters/claude-code/skills/wiki/SKILL.md +49 -24
- package/adapters/claude-code/skills/write/SKILL.md +16 -0
- package/adapters/codex/.codex-plugin/plugin.json +1 -1
- package/adapters/codex/AGENTS.md +2 -2
- package/adapters/codex/rules/oms.md +1 -1
- package/adapters/codex/skills/oms-compile/SKILL.md +7 -9
- package/adapters/codex/skills/oms-distill/SKILL.md +4 -9
- package/adapters/codex/skills/oms-link/SKILL.md +35 -0
- package/adapters/codex/skills/oms-retrieve/SKILL.md +5 -6
- package/adapters/codex/skills/oms-wiki/SKILL.md +28 -8
- package/adapters/codex/skills/oms-write/SKILL.md +10 -0
- package/adapters/hermes/README.md +3 -1
- package/adapters/hermes/SOUL.md +2 -3
- package/adapters/hermes/manifest.json +1 -1
- package/adapters/hermes/skills/compile/SKILL.md +5 -7
- package/adapters/hermes/skills/distill/SKILL.md +1 -3
- package/adapters/hermes/skills/link/SKILL.md +18 -0
- package/adapters/hermes/skills/retrieve/SKILL.md +5 -6
- package/adapters/hermes/skills/setup/SKILL.md +5 -2
- package/adapters/hermes/skills/wiki/SKILL.md +4 -2
- package/adapters/hermes/skills/write/SKILL.md +10 -0
- package/core/AGENTS.md +4 -2
- package/core/agents/librarian.md +3 -2
- package/core/ontology/concepts/term.yaml +12 -0
- package/core/ontology/taxonomy.yaml +3 -0
- package/core/skills/compile/SKILL.md +19 -18
- package/core/skills/distill/SKILL.md +13 -24
- package/core/skills/link/SKILL.md +130 -0
- package/core/skills/retrieve/SKILL.md +0 -1
- package/core/skills/setup/SKILL.md +12 -14
- package/core/skills/vault-lint/SKILL.md +1 -1
- package/core/skills/wiki/SKILL.md +109 -30
- package/core/skills/write/SKILL.md +15 -0
- package/dist/capture/safe.d.ts +61 -1
- package/dist/capture/safe.js +489 -66
- package/dist/capture/safe.js.map +1 -1
- package/dist/cli/args.d.ts +29 -0
- package/dist/cli/args.js +156 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/audit.d.ts +6 -0
- package/dist/cli/audit.js +93 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/claude-install-plan.d.ts +10 -0
- package/dist/cli/claude-install-plan.js +26 -0
- package/dist/cli/claude-install-plan.js.map +1 -0
- package/dist/cli/doctor-lint.d.ts +11 -0
- package/dist/cli/doctor-lint.js +86 -0
- package/dist/cli/doctor-lint.js.map +1 -0
- package/dist/cli/global-writeback.d.ts +31 -0
- package/dist/cli/global-writeback.js +73 -0
- package/dist/cli/global-writeback.js.map +1 -0
- package/dist/cli/host-commands.d.ts +30 -0
- package/dist/cli/host-commands.js +89 -0
- package/dist/cli/host-commands.js.map +1 -0
- package/dist/cli/link-command.d.ts +9 -0
- package/dist/cli/link-command.js +47 -0
- package/dist/cli/link-command.js.map +1 -0
- package/dist/cli/linkify.d.ts +23 -0
- package/dist/cli/linkify.js +118 -0
- package/dist/cli/linkify.js.map +1 -0
- package/dist/cli/oms.d.ts +8 -32
- package/dist/cli/oms.js +100 -703
- package/dist/cli/oms.js.map +1 -1
- package/dist/cli/semantic-args.d.ts +1 -2
- package/dist/cli/semantic-args.js +4 -7
- package/dist/cli/semantic-args.js.map +1 -1
- package/dist/cli/semantic-http.d.ts +0 -3
- package/dist/cli/semantic-http.js +40 -45
- package/dist/cli/semantic-http.js.map +1 -1
- package/dist/cli/semantic-usage.js +10 -9
- package/dist/cli/semantic-usage.js.map +1 -1
- package/dist/cli/semantic.js +99 -137
- package/dist/cli/semantic.js.map +1 -1
- package/dist/cli/setup-command.d.ts +11 -0
- package/dist/cli/setup-command.js +196 -0
- package/dist/cli/setup-command.js.map +1 -0
- package/dist/cli/setup-documents.d.ts +15 -0
- package/dist/cli/setup-documents.js +149 -0
- package/dist/cli/setup-documents.js.map +1 -0
- package/dist/cli/update-notice.d.ts +10 -0
- package/dist/cli/update-notice.js +42 -0
- package/dist/cli/update-notice.js.map +1 -0
- package/dist/cli/usage.d.ts +4 -0
- package/dist/cli/usage.js +102 -0
- package/dist/cli/usage.js.map +1 -0
- package/dist/conventions/lint.js +12 -33
- package/dist/conventions/lint.js.map +1 -1
- package/dist/conventions/report.d.ts +62 -0
- package/dist/conventions/report.js +217 -0
- package/dist/conventions/report.js.map +1 -0
- package/dist/conventions/validate.d.ts +1 -1
- package/dist/conventions/vault-walk.d.ts +38 -0
- package/dist/conventions/vault-walk.js +80 -0
- package/dist/conventions/vault-walk.js.map +1 -0
- package/dist/conventions/write-contract.d.ts +27 -0
- package/dist/conventions/write-contract.js +91 -0
- package/dist/conventions/write-contract.js.map +1 -0
- package/dist/conventions/write-protocol.d.ts +39 -0
- package/dist/conventions/write-protocol.js +44 -0
- package/dist/conventions/write-protocol.js.map +1 -0
- package/dist/core/ontology/loader.d.ts +2 -0
- package/dist/{ontology → core/ontology}/loader.js +11 -20
- package/dist/core/ontology/loader.js.map +1 -0
- package/dist/core/ontology/resolver.d.ts +2 -0
- package/dist/{ontology → core/ontology}/resolver.js +1 -15
- package/dist/core/ontology/resolver.js.map +1 -0
- package/dist/core/ontology/types.d.ts +47 -0
- package/dist/core/ontology/types.js +2 -0
- package/dist/core/ontology/types.js.map +1 -0
- package/dist/core/runtime/assets.d.ts +20 -0
- package/dist/core/runtime/assets.js +66 -0
- package/dist/core/runtime/assets.js.map +1 -0
- package/dist/engine/assemble.d.ts +28 -72
- package/dist/engine/assemble.js +77 -61
- package/dist/engine/assemble.js.map +1 -1
- package/dist/engine/conventions/vault-lint.d.ts +30 -2
- package/dist/engine/conventions/vault-lint.js +93 -97
- package/dist/engine/conventions/vault-lint.js.map +1 -1
- package/dist/engine/embed/deferred.d.ts +3 -4
- package/dist/engine/embed/deferred.js +10 -7
- package/dist/engine/embed/deferred.js.map +1 -1
- package/dist/engine/embed/identity.d.ts +11 -0
- package/dist/engine/embed/identity.js +15 -0
- package/dist/engine/embed/identity.js.map +1 -0
- package/dist/engine/embed/provider.d.ts +12 -13
- package/dist/engine/embed/provider.js +30 -27
- package/dist/engine/embed/provider.js.map +1 -1
- package/dist/engine/embed/store.d.ts +48 -27
- package/dist/engine/embed/store.js +281 -98
- package/dist/engine/embed/store.js.map +1 -1
- package/dist/engine/embed/sync.d.ts +17 -47
- package/dist/engine/embed/sync.js +233 -69
- package/dist/engine/embed/sync.js.map +1 -1
- package/dist/engine/graph/builder.d.ts +1 -1
- package/dist/engine/graph/builder.js +1 -1
- package/dist/engine/graph/explore.d.ts +2 -2
- package/dist/engine/graph/explore.js +0 -0
- package/dist/engine/graph/resolver.d.ts +17 -0
- package/dist/engine/graph/resolver.js +46 -11
- package/dist/engine/graph/resolver.js.map +1 -1
- package/dist/engine/linkify/apply.d.ts +56 -0
- package/dist/engine/linkify/apply.js +65 -0
- package/dist/engine/linkify/apply.js.map +1 -0
- package/dist/engine/linkify/josa.d.ts +58 -0
- package/dist/engine/linkify/josa.js +133 -0
- package/dist/engine/linkify/josa.js.map +1 -0
- package/dist/engine/linkify/mask.d.ts +29 -0
- package/dist/engine/linkify/mask.js +173 -0
- package/dist/engine/linkify/mask.js.map +1 -0
- package/dist/engine/linkify/suggest.d.ts +52 -0
- package/dist/engine/linkify/suggest.js +181 -0
- package/dist/engine/linkify/suggest.js.map +1 -0
- package/dist/engine/linkify/types.d.ts +68 -0
- package/dist/engine/linkify/types.js +12 -0
- package/dist/engine/linkify/types.js.map +1 -0
- package/dist/engine/mcp/facade.d.ts +12 -18
- package/dist/engine/mcp/facade.js +30 -80
- package/dist/engine/mcp/facade.js.map +1 -1
- package/dist/engine/mcp/op-mappers.d.ts +3 -9
- package/dist/engine/mcp/op-mappers.js +2 -30
- package/dist/engine/mcp/op-mappers.js.map +1 -1
- package/dist/engine/mcp/types.d.ts +5 -29
- package/dist/engine/tracer.js +6 -2
- package/dist/engine/tracer.js.map +1 -1
- package/dist/engine/types.d.ts +8 -3
- package/dist/graph/cache.d.ts +1 -11
- package/dist/graph/cache.js +1 -44
- package/dist/graph/cache.js.map +1 -1
- package/dist/graph/explore.js +88 -137
- package/dist/graph/explore.js.map +1 -1
- package/dist/harness/surface-registry.d.ts +56 -0
- package/dist/harness/surface-registry.js +397 -0
- package/dist/harness/surface-registry.js.map +1 -0
- package/dist/harness/validation.d.ts +9 -0
- package/dist/harness/validation.js +201 -0
- package/dist/harness/validation.js.map +1 -0
- package/dist/hook/post-tool-use.js +2 -2
- package/dist/hook/post-tool-use.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/install/adapter-source.d.ts +14 -0
- package/dist/install/adapter-source.js +45 -0
- package/dist/install/adapter-source.js.map +1 -0
- package/dist/install/claude-hooks.d.ts +13 -0
- package/dist/install/claude-hooks.js +411 -0
- package/dist/install/claude-hooks.js.map +1 -0
- package/dist/install/claude-marketplace.d.ts +44 -0
- package/dist/install/claude-marketplace.js +89 -0
- package/dist/install/claude-marketplace.js.map +1 -0
- package/dist/install/claude.d.ts +4 -0
- package/dist/install/claude.js +216 -0
- package/dist/install/claude.js.map +1 -0
- package/dist/install/codex.d.ts +24 -0
- package/dist/install/codex.js +193 -0
- package/dist/install/codex.js.map +1 -0
- package/dist/install/common.d.ts +34 -0
- package/dist/install/common.js +122 -0
- package/dist/install/common.js.map +1 -0
- package/dist/install/hermes.d.ts +4 -0
- package/dist/install/hermes.js +78 -0
- package/dist/install/hermes.js.map +1 -0
- package/dist/install/hosts.d.ts +6 -56
- package/dist/install/hosts.js +65 -610
- package/dist/install/hosts.js.map +1 -1
- package/dist/install/types.d.ts +34 -0
- package/dist/install/types.js +2 -0
- package/dist/install/types.js.map +1 -0
- package/dist/link/convention-note.d.ts +10 -0
- package/dist/link/convention-note.js +59 -0
- package/dist/link/convention-note.js.map +1 -0
- package/dist/link/global-config.d.ts +22 -0
- package/dist/link/global-config.js +69 -0
- package/dist/link/global-config.js.map +1 -0
- package/dist/link/link.d.ts +101 -0
- package/dist/link/link.js +265 -0
- package/dist/link/link.js.map +1 -0
- package/dist/mcp/engine-morning-backend.d.ts +12 -17
- package/dist/mcp/engine-morning-backend.js +25 -131
- package/dist/mcp/engine-morning-backend.js.map +1 -1
- package/dist/mcp/link-tools.d.ts +81 -0
- package/dist/mcp/link-tools.js +157 -0
- package/dist/mcp/link-tools.js.map +1 -0
- package/dist/mcp/semantic-engine.d.ts +32 -0
- package/dist/mcp/semantic-engine.js +52 -0
- package/dist/mcp/semantic-engine.js.map +1 -0
- package/dist/mcp/semantic-retrieve-args.d.ts +1 -5
- package/dist/mcp/semantic-retrieve-args.js +1 -26
- package/dist/mcp/semantic-retrieve-args.js.map +1 -1
- package/dist/mcp/semantic-retrieve-schema.d.ts +0 -14
- package/dist/mcp/semantic-retrieve-schema.js +0 -5
- package/dist/mcp/semantic-retrieve-schema.js.map +1 -1
- package/dist/mcp/semantic-retrieve.d.ts +12 -18
- package/dist/mcp/semantic-retrieve.js +40 -71
- package/dist/mcp/semantic-retrieve.js.map +1 -1
- package/dist/mcp/semantic-tool-schemas.js +7 -24
- package/dist/mcp/semantic-tool-schemas.js.map +1 -1
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.js +224 -162
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/update-notice.d.ts +51 -0
- package/dist/mcp/update-notice.js +196 -0
- package/dist/mcp/update-notice.js.map +1 -0
- package/dist/ontology/active.d.ts +7 -0
- package/dist/ontology/active.js +41 -0
- package/dist/ontology/active.js.map +1 -0
- package/dist/retrieve/morning.d.ts +10 -18
- package/dist/retrieve/morning.js +2 -26
- package/dist/retrieve/morning.js.map +1 -1
- package/dist/retrieve/semantic-contract.d.ts +10 -0
- package/dist/retrieve/semantic-contract.js +2 -0
- package/dist/retrieve/semantic-contract.js.map +1 -0
- package/dist/setup/axis.d.ts +22 -3
- package/dist/setup/axis.js +82 -35
- package/dist/setup/axis.js.map +1 -1
- package/dist/update/update.d.ts +12 -0
- package/dist/update/update.js +2 -2
- package/dist/update/update.js.map +1 -1
- package/docs/install.md +43 -7
- package/docs/release.md +109 -17
- package/package.json +11 -3
- package/scripts/install.sh +1 -1
- package/adapters/claude-code/skills/capture/SKILL.md +0 -50
- package/adapters/codex/skills/oms-capture/SKILL.md +0 -16
- package/adapters/hermes/skills/capture/SKILL.md +0 -16
- package/core/skills/capture/SKILL.md +0 -50
- package/dist/adapt/HostAdapter.d.ts +0 -21
- package/dist/adapt/HostAdapter.js +0 -10
- package/dist/adapt/HostAdapter.js.map +0 -1
- package/dist/adapt/claudeCode.d.ts +0 -9
- package/dist/adapt/claudeCode.js +0 -15
- package/dist/adapt/claudeCode.js.map +0 -1
- package/dist/adapt/codex.d.ts +0 -9
- package/dist/adapt/codex.js +0 -15
- package/dist/adapt/codex.js.map +0 -1
- package/dist/adapt/hermes.d.ts +0 -9
- package/dist/adapt/hermes.js +0 -15
- package/dist/adapt/hermes.js.map +0 -1
- package/dist/cli/semantic-metadata-commands.d.ts +0 -3
- package/dist/cli/semantic-metadata-commands.js +0 -115
- package/dist/cli/semantic-metadata-commands.js.map +0 -1
- package/dist/engine/compile/cascade.d.ts +0 -35
- package/dist/engine/compile/cascade.js +0 -59
- package/dist/engine/compile/cascade.js.map +0 -1
- package/dist/engine/compile/cot.d.ts +0 -30
- package/dist/engine/compile/cot.js +0 -153
- package/dist/engine/compile/cot.js.map +0 -1
- package/dist/engine/compile/phases.d.ts +0 -47
- package/dist/engine/compile/phases.js +0 -101
- package/dist/engine/compile/phases.js.map +0 -1
- package/dist/engine/compile/provenance.d.ts +0 -45
- package/dist/engine/compile/provenance.js +0 -103
- package/dist/engine/compile/provenance.js.map +0 -1
- package/dist/engine/compile/sha-cache.d.ts +0 -42
- package/dist/engine/compile/sha-cache.js +0 -86
- package/dist/engine/compile/sha-cache.js.map +0 -1
- package/dist/engine/compile/types.d.ts +0 -71
- package/dist/engine/compile/types.js +0 -9
- package/dist/engine/compile/types.js.map +0 -1
- package/dist/engine/compile/worker.d.ts +0 -47
- package/dist/engine/compile/worker.js +0 -75
- package/dist/engine/compile/worker.js.map +0 -1
- package/dist/engine/distill/analyzer.d.ts +0 -51
- package/dist/engine/distill/analyzer.js +0 -279
- package/dist/engine/distill/analyzer.js.map +0 -1
- package/dist/engine/distill/clean-room.d.ts +0 -46
- package/dist/engine/distill/clean-room.js +0 -131
- package/dist/engine/distill/clean-room.js.map +0 -1
- package/dist/engine/distill/report.d.ts +0 -23
- package/dist/engine/distill/report.js +0 -107
- package/dist/engine/distill/report.js.map +0 -1
- package/dist/engine/distill/types.d.ts +0 -89
- package/dist/engine/distill/types.js +0 -9
- package/dist/engine/distill/types.js.map +0 -1
- package/dist/engine/embed/pull.d.ts +0 -51
- package/dist/engine/embed/pull.js +0 -90
- package/dist/engine/embed/pull.js.map +0 -1
- package/dist/engine/graph/community.d.ts +0 -38
- package/dist/engine/graph/community.js +0 -122
- package/dist/engine/graph/community.js.map +0 -1
- package/dist/engine/index.d.ts +0 -5
- package/dist/engine/index.js +0 -2
- package/dist/engine/index.js.map +0 -1
- package/dist/engine/mcp/index.d.ts +0 -15
- package/dist/engine/mcp/index.js +0 -19
- package/dist/engine/mcp/index.js.map +0 -1
- package/dist/engine/mcp/retrieve-mapper.d.ts +0 -38
- package/dist/engine/mcp/retrieve-mapper.js +0 -96
- package/dist/engine/mcp/retrieve-mapper.js.map +0 -1
- package/dist/engine/setup/ambiguity.d.ts +0 -39
- package/dist/engine/setup/ambiguity.js +0 -50
- package/dist/engine/setup/ambiguity.js.map +0 -1
- package/dist/engine/setup/types.d.ts +0 -71
- package/dist/engine/setup/types.js +0 -22
- package/dist/engine/setup/types.js.map +0 -1
- package/dist/engine/setup/writer.d.ts +0 -32
- package/dist/engine/setup/writer.js +0 -77
- package/dist/engine/setup/writer.js.map +0 -1
- package/dist/engine/wiki/collection.d.ts +0 -91
- package/dist/engine/wiki/collection.js +0 -188
- package/dist/engine/wiki/collection.js.map +0 -1
- package/dist/engine/wiki/ledger.d.ts +0 -59
- package/dist/engine/wiki/ledger.js +0 -130
- package/dist/engine/wiki/ledger.js.map +0 -1
- package/dist/engine/wiki/lint.d.ts +0 -38
- package/dist/engine/wiki/lint.js +0 -186
- package/dist/engine/wiki/lint.js.map +0 -1
- package/dist/engine/wiki/navigation.d.ts +0 -40
- package/dist/engine/wiki/navigation.js +0 -83
- package/dist/engine/wiki/navigation.js.map +0 -1
- package/dist/engine/wiki/types.d.ts +0 -54
- package/dist/engine/wiki/types.js +0 -7
- package/dist/engine/wiki/types.js.map +0 -1
- package/dist/ontology/loader.d.ts +0 -13
- package/dist/ontology/loader.js.map +0 -1
- package/dist/ontology/resolver.d.ts +0 -13
- package/dist/ontology/resolver.js.map +0 -1
- package/dist/ontology/types.d.ts +0 -72
- package/dist/ontology/types.js +0 -12
- package/dist/ontology/types.js.map +0 -1
- package/dist/retrieve/embedding-sync.d.ts +0 -3
- package/dist/retrieve/embedding-sync.js +0 -21
- package/dist/retrieve/embedding-sync.js.map +0 -1
- package/dist/runtime/assets.d.ts +0 -7
- package/dist/runtime/assets.js +0 -13
- package/dist/runtime/assets.js.map +0 -1
- package/dist/search/semantic-collections.d.ts +0 -32
- package/dist/search/semantic-collections.js +0 -68
- package/dist/search/semantic-collections.js.map +0 -1
- package/dist/search/semantic-contexts.d.ts +0 -21
- package/dist/search/semantic-contexts.js +0 -28
- package/dist/search/semantic-contexts.js.map +0 -1
- package/dist/search/semantic-diagnostics.d.ts +0 -16
- package/dist/search/semantic-diagnostics.js +0 -110
- package/dist/search/semantic-diagnostics.js.map +0 -1
- package/dist/search/semantic-documents.d.ts +0 -3
- package/dist/search/semantic-documents.js +0 -150
- package/dist/search/semantic-documents.js.map +0 -1
- package/dist/search/semantic-embedding-hash.d.ts +0 -3
- package/dist/search/semantic-embedding-hash.js +0 -30
- package/dist/search/semantic-embedding-hash.js.map +0 -1
- package/dist/search/semantic-embedding-provider.d.ts +0 -9
- package/dist/search/semantic-embedding-provider.js +0 -58
- package/dist/search/semantic-embedding-provider.js.map +0 -1
- package/dist/search/semantic-index-build.d.ts +0 -13
- package/dist/search/semantic-index-build.js +0 -101
- package/dist/search/semantic-index-build.js.map +0 -1
- package/dist/search/semantic-index-core.d.ts +0 -21
- package/dist/search/semantic-index-core.js +0 -106
- package/dist/search/semantic-index-core.js.map +0 -1
- package/dist/search/semantic-index-io.d.ts +0 -19
- package/dist/search/semantic-index-io.js +0 -214
- package/dist/search/semantic-index-io.js.map +0 -1
- package/dist/search/semantic-index-types.d.ts +0 -50
- package/dist/search/semantic-index-types.js +0 -2
- package/dist/search/semantic-index-types.js.map +0 -1
- package/dist/search/semantic-index.d.ts +0 -4
- package/dist/search/semantic-index.js +0 -4
- package/dist/search/semantic-index.js.map +0 -1
- package/dist/search/semantic-listing.d.ts +0 -12
- package/dist/search/semantic-listing.js +0 -64
- package/dist/search/semantic-listing.js.map +0 -1
- package/dist/search/semantic-maintenance-shared.d.ts +0 -15
- package/dist/search/semantic-maintenance-shared.js +0 -43
- package/dist/search/semantic-maintenance-shared.js.map +0 -1
- package/dist/search/semantic-maintenance-types.d.ts +0 -103
- package/dist/search/semantic-maintenance-types.js +0 -2
- package/dist/search/semantic-maintenance-types.js.map +0 -1
- package/dist/search/semantic-maintenance.d.ts +0 -4
- package/dist/search/semantic-maintenance.js +0 -5
- package/dist/search/semantic-maintenance.js.map +0 -1
- package/dist/search/semantic-provider-types.d.ts +0 -34
- package/dist/search/semantic-provider-types.js +0 -2
- package/dist/search/semantic-provider-types.js.map +0 -1
- package/dist/search/semantic-query-types.d.ts +0 -83
- package/dist/search/semantic-query-types.js +0 -2
- package/dist/search/semantic-query-types.js.map +0 -1
- package/dist/search/semantic-query.d.ts +0 -2
- package/dist/search/semantic-query.js +0 -188
- package/dist/search/semantic-query.js.map +0 -1
- package/dist/search/semantic-sqlite-db.d.ts +0 -18
- package/dist/search/semantic-sqlite-db.js +0 -87
- package/dist/search/semantic-sqlite-db.js.map +0 -1
- package/dist/search/semantic-sqlite-query.d.ts +0 -2
- package/dist/search/semantic-sqlite-query.js +0 -128
- package/dist/search/semantic-sqlite-query.js.map +0 -1
- package/dist/search/semantic-sqlite-read.d.ts +0 -5
- package/dist/search/semantic-sqlite-read.js +0 -104
- package/dist/search/semantic-sqlite-read.js.map +0 -1
- package/dist/search/semantic-sqlite-write.d.ts +0 -7
- package/dist/search/semantic-sqlite-write.js +0 -66
- package/dist/search/semantic-sqlite-write.js.map +0 -1
- package/dist/search/semantic-store.d.ts +0 -15
- package/dist/search/semantic-store.js +0 -17
- package/dist/search/semantic-store.js.map +0 -1
- package/dist/search/semantic-sync-types.d.ts +0 -47
- package/dist/search/semantic-sync-types.js +0 -2
- package/dist/search/semantic-sync-types.js.map +0 -1
- package/dist/search/semantic-sync.d.ts +0 -13
- package/dist/search/semantic-sync.js +0 -131
- package/dist/search/semantic-sync.js.map +0 -1
- package/dist/search/semantic-test-fixtures.d.ts +0 -1
- package/dist/search/semantic-test-fixtures.js +0 -38
- package/dist/search/semantic-test-fixtures.js.map +0 -1
- package/dist/search/semantic-token.d.ts +0 -25
- package/dist/search/semantic-token.js +0 -114
- package/dist/search/semantic-token.js.map +0 -1
- package/dist/search/semantic-types.d.ts +0 -5
- package/dist/search/semantic-types.js +0 -2
- package/dist/search/semantic-types.js.map +0 -1
- package/dist/search/semantic.d.ts +0 -6
- package/dist/search/semantic.js +0 -6
- package/dist/search/semantic.js.map +0 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { isRecord, runExternal } from "./common.js";
|
|
4
|
+
/**
|
|
5
|
+
* Published marketplace source used when the running install has no repo
|
|
6
|
+
* checkout on disk. The npm package ships `adapters/` but not
|
|
7
|
+
* `.claude-plugin/marketplace.json`, so a released install resolves the
|
|
8
|
+
* marketplace from GitHub rather than from a local path.
|
|
9
|
+
*/
|
|
10
|
+
const PUBLISHED_MARKETPLACE_REPO = "GoBeromsu/oh-my-second-brain";
|
|
11
|
+
/**
|
|
12
|
+
* Marketplace name published in `.claude-plugin/marketplace.json`. Only used
|
|
13
|
+
* when that manifest is not readable locally; a local checkout always wins so
|
|
14
|
+
* a renamed marketplace cannot drift from the commands OMS prints.
|
|
15
|
+
*/
|
|
16
|
+
const PUBLISHED_MARKETPLACE_NAME = "oms";
|
|
17
|
+
const MARKETPLACE_MANIFEST = path.join(".claude-plugin", "marketplace.json");
|
|
18
|
+
/**
|
|
19
|
+
* Claude leaves `autoUpdate` off for third-party marketplaces, and
|
|
20
|
+
* `claude plugin marketplace add` writes the `extraKnownMarketplaces` entry
|
|
21
|
+
* itself. OMS therefore never touches that key: enabling background updates
|
|
22
|
+
* for a third-party source stays an explicit user decision.
|
|
23
|
+
*/
|
|
24
|
+
export const MARKETPLACE_AUTO_UPDATE_MESSAGE = "Claude keeps autoUpdate off for third-party marketplaces. To let this marketplace update itself, set " +
|
|
25
|
+
'`extraKnownMarketplaces.<name>.autoUpdate` to true in ~/.claude/settings.json; otherwise run ' +
|
|
26
|
+
"`claude plugin marketplace update` when you want a refresh. OMS does not change this setting for you.";
|
|
27
|
+
/**
|
|
28
|
+
* Reads the marketplace name a repo root declares. Returns null when the
|
|
29
|
+
* manifest is missing, unreadable, or declares no string `name`, so callers can
|
|
30
|
+
* fall back instead of printing a command with a guessed marketplace id.
|
|
31
|
+
*/
|
|
32
|
+
export async function readMarketplaceName(repoRoot) {
|
|
33
|
+
let parsed;
|
|
34
|
+
try {
|
|
35
|
+
parsed = JSON.parse(await readFile(path.join(repoRoot, MARKETPLACE_MANIFEST), "utf-8"));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
if (!isRecord(parsed))
|
|
41
|
+
return null;
|
|
42
|
+
const name = parsed["name"];
|
|
43
|
+
return typeof name === "string" && name.length > 0 ? name : null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolves the marketplace Claude should add. A repo checkout containing the
|
|
47
|
+
* manifest above `adapters/` is preferred (dev and offline installs); otherwise
|
|
48
|
+
* the published GitHub repo is used.
|
|
49
|
+
*/
|
|
50
|
+
export async function resolveClaudeMarketplaceSource(pluginPath) {
|
|
51
|
+
const repoRoot = path.resolve(pluginPath, "..", "..");
|
|
52
|
+
const localName = await readMarketplaceName(repoRoot);
|
|
53
|
+
if (localName !== null) {
|
|
54
|
+
return { kind: "local", source: repoRoot, marketplaceName: localName };
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
kind: "github",
|
|
58
|
+
source: PUBLISHED_MARKETPLACE_REPO,
|
|
59
|
+
marketplaceName: PUBLISHED_MARKETPLACE_NAME,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Installs the plugin through the marketplace, falling back to the local plugin
|
|
64
|
+
* path whenever the marketplace flow does not complete (offline, private
|
|
65
|
+
* checkout, or a Claude build without the marketplace surface). The fallback is
|
|
66
|
+
* the pre-marketplace behavior and must stay reachable.
|
|
67
|
+
*/
|
|
68
|
+
export function runClaudePluginInstall(plan) {
|
|
69
|
+
const messages = [];
|
|
70
|
+
const addResult = runExternal("claude", ["plugin", "marketplace", "add", plan.marketplace.source]);
|
|
71
|
+
messages.push(addResult.ok
|
|
72
|
+
? `Executed: ${addResult.message}`
|
|
73
|
+
: "Claude marketplace add failed [claude_marketplace_add_failed]; falling back to the local plugin path.");
|
|
74
|
+
if (addResult.ok) {
|
|
75
|
+
const pluginId = `oms@${plan.marketplace.marketplaceName}`;
|
|
76
|
+
const installResult = runExternal("claude", ["plugin", "install", pluginId]);
|
|
77
|
+
if (installResult.ok) {
|
|
78
|
+
messages.push(`Executed: ${installResult.message}`);
|
|
79
|
+
return { installed: true, messages };
|
|
80
|
+
}
|
|
81
|
+
messages.push(`Claude marketplace install of ${pluginId} failed [claude_marketplace_install_failed]; falling back to the local plugin path.`);
|
|
82
|
+
}
|
|
83
|
+
const fallbackResult = runExternal("claude", ["plugin", "install", plan.pluginPath]);
|
|
84
|
+
messages.push(fallbackResult.ok
|
|
85
|
+
? `Executed: ${fallbackResult.message} (local plugin path fallback).`
|
|
86
|
+
: plan.describeFailure(fallbackResult));
|
|
87
|
+
return { installed: fallbackResult.ok, messages };
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=claude-marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-marketplace.js","sourceRoot":"","sources":["../../src/install/claude-marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HarnessHostSurface } from "../harness/surface-registry.js";
|
|
2
|
+
import type { HostOperationOptions, HostOperationResult } from "./types.js";
|
|
3
|
+
export declare function installClaude(options: HostOperationOptions, host: HarnessHostSurface): Promise<HostOperationResult>;
|
|
4
|
+
export declare function uninstallClaude(options: HostOperationOptions): Promise<HostOperationResult>;
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { resolveHostAdapterSource } from "./adapter-source.js";
|
|
4
|
+
import { commandExists, hostHome, isRecord, runExternal } from "./common.js";
|
|
5
|
+
import { removeClaudeHooks, replaceRootJsonPropertyPreservingBytes, upsertClaudeHooks } from "./claude-hooks.js";
|
|
6
|
+
import { MARKETPLACE_AUTO_UPDATE_MESSAGE, resolveClaudeMarketplaceSource, runClaudePluginInstall, } from "./claude-marketplace.js";
|
|
7
|
+
const CLAUDE_MCP_SCOPES = ["local", "project", "user"];
|
|
8
|
+
function claudeMcpRemoveCommand(scope) {
|
|
9
|
+
return `claude mcp remove oms --scope ${scope}`;
|
|
10
|
+
}
|
|
11
|
+
function classifyCleanupResult(scope, result) {
|
|
12
|
+
const manualCommand = claudeMcpRemoveCommand(scope);
|
|
13
|
+
if (result.ok) {
|
|
14
|
+
return { scope, status: "removed", reasonCode: "legacy_removed", manualCommand };
|
|
15
|
+
}
|
|
16
|
+
const stderr = result.stderr;
|
|
17
|
+
const localNotFound = scope === "local" && /No local mcp server found with name:\s*oms/i.test(stderr);
|
|
18
|
+
const projectNotFound = scope === "project" &&
|
|
19
|
+
/No MCP server found with name:\s*oms/i.test(stderr) &&
|
|
20
|
+
/\.mcp\.json|project/i.test(stderr);
|
|
21
|
+
if (localNotFound || projectNotFound) {
|
|
22
|
+
return { scope, status: "not_found", reasonCode: "legacy_not_found", manualCommand };
|
|
23
|
+
}
|
|
24
|
+
return { scope, status: "failed", reasonCode: "legacy_cleanup_failed", manualCommand };
|
|
25
|
+
}
|
|
26
|
+
function cleanupMessage(result) {
|
|
27
|
+
if (result.status === "removed") {
|
|
28
|
+
return `Claude MCP cleanup (${result.scope}): removed stale oms registration.`;
|
|
29
|
+
}
|
|
30
|
+
if (result.status === "not_found") {
|
|
31
|
+
return `Claude MCP cleanup (${result.scope}): no stale oms registration found.`;
|
|
32
|
+
}
|
|
33
|
+
return `WARNING: Claude MCP cleanup (${result.scope}) failed [${result.reasonCode}]. Install continued. Manual step: ${result.manualCommand}`;
|
|
34
|
+
}
|
|
35
|
+
function plannedCleanupMessages(dryRun) {
|
|
36
|
+
const prefix = dryRun ? "dry-run: would execute" : "planned external cleanup";
|
|
37
|
+
return CLAUDE_MCP_SCOPES.map((scope) => `Claude MCP cleanup (${scope}): ${prefix} ${claudeMcpRemoveCommand(scope)}.`);
|
|
38
|
+
}
|
|
39
|
+
function externalLifecycleFailure(action, result) {
|
|
40
|
+
const reasonCode = result.exitCode === null ? "claude_cli_spawn_failed" : `claude_plugin_${action}_failed`;
|
|
41
|
+
return `WARNING: Claude plugin ${action} failed [${reasonCode}]. Plugin-owned MCP activation remains a manual step.`;
|
|
42
|
+
}
|
|
43
|
+
function runClaudeMcpCleanup(options) {
|
|
44
|
+
if (options.dryRun) {
|
|
45
|
+
return { results: [], messages: plannedCleanupMessages(true), changed: false };
|
|
46
|
+
}
|
|
47
|
+
if (!options.executeExternal) {
|
|
48
|
+
return {
|
|
49
|
+
results: [],
|
|
50
|
+
messages: [
|
|
51
|
+
"Claude MCP cleanup was not executed; pass --execute to remove stale registrations through the Claude CLI.",
|
|
52
|
+
...plannedCleanupMessages(false),
|
|
53
|
+
],
|
|
54
|
+
changed: false,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (!commandExists("claude")) {
|
|
58
|
+
const results = CLAUDE_MCP_SCOPES.map((scope) => ({
|
|
59
|
+
scope,
|
|
60
|
+
status: "failed",
|
|
61
|
+
reasonCode: "claude_cli_unavailable",
|
|
62
|
+
manualCommand: claudeMcpRemoveCommand(scope),
|
|
63
|
+
}));
|
|
64
|
+
return {
|
|
65
|
+
results,
|
|
66
|
+
messages: results.map(cleanupMessage),
|
|
67
|
+
changed: false,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const results = CLAUDE_MCP_SCOPES.map((scope) => {
|
|
71
|
+
const result = runExternal("claude", ["mcp", "remove", "oms", "--scope", scope]);
|
|
72
|
+
return classifyCleanupResult(scope, result);
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
results,
|
|
76
|
+
messages: results.map(cleanupMessage),
|
|
77
|
+
changed: results.some((result) => result.status === "removed"),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async function removeClaudeMcp(options, claudeDir) {
|
|
81
|
+
const mcpPath = path.join(claudeDir, "mcp.json");
|
|
82
|
+
let raw;
|
|
83
|
+
try {
|
|
84
|
+
raw = await readFile(mcpPath, "utf-8");
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT")
|
|
88
|
+
return { changed: false };
|
|
89
|
+
return { changed: false, message: `WARNING: Could not read ${mcpPath}; direct MCP cleanup skipped. Remove stale oms manually.` };
|
|
90
|
+
}
|
|
91
|
+
let data;
|
|
92
|
+
try {
|
|
93
|
+
const parsed = JSON.parse(raw);
|
|
94
|
+
if (!isRecord(parsed)) {
|
|
95
|
+
return { changed: false, message: `WARNING: ${mcpPath} is not a JSON object; direct MCP cleanup skipped.` };
|
|
96
|
+
}
|
|
97
|
+
data = parsed;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return { changed: false, message: `WARNING: ${mcpPath} is malformed JSON; direct MCP cleanup skipped.` };
|
|
101
|
+
}
|
|
102
|
+
const existingServers = data["mcpServers"];
|
|
103
|
+
if (existingServers !== undefined && !isRecord(existingServers)) {
|
|
104
|
+
return { changed: false, message: `WARNING: ${mcpPath} has unsupported mcpServers metadata; direct MCP cleanup skipped.` };
|
|
105
|
+
}
|
|
106
|
+
if (!isRecord(existingServers) || !("oms" in existingServers)) {
|
|
107
|
+
return { changed: false };
|
|
108
|
+
}
|
|
109
|
+
delete existingServers["oms"];
|
|
110
|
+
const next = replaceRootJsonPropertyPreservingBytes(raw, "mcpServers", existingServers);
|
|
111
|
+
if (next === null) {
|
|
112
|
+
return { changed: false, message: `WARNING: Could not preserve unmanaged MCP config bytes in ${mcpPath}; direct cleanup skipped.` };
|
|
113
|
+
}
|
|
114
|
+
if (!options.dryRun) {
|
|
115
|
+
try {
|
|
116
|
+
await writeFile(mcpPath, next, "utf-8");
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return { changed: false, message: `WARNING: Could not write ${mcpPath}; direct MCP cleanup skipped. Remove stale oms manually.` };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return { changed: !options.dryRun };
|
|
123
|
+
}
|
|
124
|
+
export async function installClaude(options, host) {
|
|
125
|
+
const claudeDir = hostHome(options.homeDir, ".claude", "OMS_CLAUDE_HOME");
|
|
126
|
+
const pluginPath = resolveHostAdapterSource(options.adapterRoot, host);
|
|
127
|
+
const marketplace = await resolveClaudeMarketplaceSource(pluginPath);
|
|
128
|
+
const commands = [
|
|
129
|
+
...CLAUDE_MCP_SCOPES.map(claudeMcpRemoveCommand),
|
|
130
|
+
`claude plugin marketplace add ${marketplace.source}`,
|
|
131
|
+
`claude plugin install oms@${marketplace.marketplaceName}`,
|
|
132
|
+
`claude plugin install ${pluginPath}`,
|
|
133
|
+
];
|
|
134
|
+
const messages = [
|
|
135
|
+
"Claude Code adapter is installed through the plugin-owned MCP surface declared in .mcp.json.",
|
|
136
|
+
`Claude marketplace source: ${marketplace.source} (${marketplace.kind}); the local plugin path stays available as an offline fallback.`,
|
|
137
|
+
MARKETPLACE_AUTO_UPDATE_MESSAGE,
|
|
138
|
+
];
|
|
139
|
+
const directCleanup = await removeClaudeMcp(options, claudeDir);
|
|
140
|
+
let changed = directCleanup.changed;
|
|
141
|
+
if (directCleanup.changed)
|
|
142
|
+
messages.push("Removed stale direct oms MCP registration from Claude local config.");
|
|
143
|
+
if (directCleanup.message)
|
|
144
|
+
messages.push(directCleanup.message);
|
|
145
|
+
let pluginInstalled = false;
|
|
146
|
+
const cleanup = runClaudeMcpCleanup(options);
|
|
147
|
+
messages.push(...cleanup.messages);
|
|
148
|
+
changed = cleanup.changed || changed;
|
|
149
|
+
if (options.executeExternal) {
|
|
150
|
+
if (!commandExists("claude")) {
|
|
151
|
+
messages.push("Claude CLI was not found; no plugin or MCP activation was performed. Run the listed plugin command manually.");
|
|
152
|
+
}
|
|
153
|
+
else if (!options.dryRun) {
|
|
154
|
+
const install = runClaudePluginInstall({
|
|
155
|
+
marketplace,
|
|
156
|
+
pluginPath,
|
|
157
|
+
describeFailure: (result) => externalLifecycleFailure("install", result),
|
|
158
|
+
});
|
|
159
|
+
messages.push(...install.messages);
|
|
160
|
+
changed = changed || install.installed;
|
|
161
|
+
pluginInstalled = install.installed;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (!pluginInstalled)
|
|
165
|
+
messages.push("Claude plugin was not installed; plugin-owned MCP activation remains a manual step.");
|
|
166
|
+
const hookResult = await upsertClaudeHooks(options, claudeDir);
|
|
167
|
+
changed = hookResult.changed || changed;
|
|
168
|
+
messages.push(...hookResult.messages);
|
|
169
|
+
return {
|
|
170
|
+
runtime: "claude",
|
|
171
|
+
action: "install",
|
|
172
|
+
changed: changed && !options.dryRun,
|
|
173
|
+
skipped: false,
|
|
174
|
+
paths: [pluginPath, path.join(claudeDir, "settings.json")],
|
|
175
|
+
commands,
|
|
176
|
+
messages,
|
|
177
|
+
cleanup: cleanup.results,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
export async function uninstallClaude(options) {
|
|
181
|
+
const claudeDir = hostHome(options.homeDir, ".claude", "OMS_CLAUDE_HOME");
|
|
182
|
+
const commands = [
|
|
183
|
+
...CLAUDE_MCP_SCOPES.map(claudeMcpRemoveCommand),
|
|
184
|
+
"claude plugin uninstall oms",
|
|
185
|
+
];
|
|
186
|
+
const messages = ["Claude Code uninstall removes the Oh My Second Brain MCP entry and, when requested, asks Claude CLI to uninstall the plugin."];
|
|
187
|
+
const directCleanup = await removeClaudeMcp(options, claudeDir);
|
|
188
|
+
let changed = directCleanup.changed;
|
|
189
|
+
if (directCleanup.message)
|
|
190
|
+
messages.push(directCleanup.message);
|
|
191
|
+
const cleanup = runClaudeMcpCleanup(options);
|
|
192
|
+
messages.push(...cleanup.messages);
|
|
193
|
+
changed = cleanup.changed || changed;
|
|
194
|
+
const hookResult = await removeClaudeHooks(options, claudeDir);
|
|
195
|
+
changed = hookResult.changed || changed;
|
|
196
|
+
messages.push(...hookResult.messages);
|
|
197
|
+
if (options.executeExternal && commandExists("claude") && !options.dryRun) {
|
|
198
|
+
const externalCommands = [["claude", "plugin", "uninstall", "oms"]];
|
|
199
|
+
for (const [command, ...args] of externalCommands) {
|
|
200
|
+
const result = runExternal(command, args);
|
|
201
|
+
messages.push(result.ok ? `Executed: ${result.message}` : externalLifecycleFailure("uninstall", result));
|
|
202
|
+
changed = changed || result.ok;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
runtime: "claude",
|
|
207
|
+
action: "uninstall",
|
|
208
|
+
changed: changed && !options.dryRun,
|
|
209
|
+
skipped: false,
|
|
210
|
+
paths: [path.join(claudeDir, "mcp.json")],
|
|
211
|
+
commands,
|
|
212
|
+
messages,
|
|
213
|
+
cleanup: cleanup.results,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/install/claude.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HarnessHostSurface } from "../harness/surface-registry.js";
|
|
2
|
+
import type { HostOperationOptions, HostOperationResult } from "./types.js";
|
|
3
|
+
export declare class CodexSkillNamespaceError extends Error {
|
|
4
|
+
readonly skillDir: string;
|
|
5
|
+
readonly prefix: string;
|
|
6
|
+
constructor(skillDir: string, prefix: string);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Codex install stays file-copy based on purpose.
|
|
10
|
+
*
|
|
11
|
+
* `codex plugin marketplace add <repo>` does consume the same root
|
|
12
|
+
* `.claude-plugin/marketplace.json` (verified against codex-cli 0.147.0: the
|
|
13
|
+
* marketplace resolves as `oms` and `codex plugin add oms@oms` succeeds), but
|
|
14
|
+
* the manifest's plugin entry declares `"source": "./"`, so Codex caches the
|
|
15
|
+
* whole repository and finds no `rules/` or `skills/` at the cached root —
|
|
16
|
+
* those live under `adapters/codex/`. A marketplace install would therefore
|
|
17
|
+
* register a plugin that delivers none of the Codex-native surfaces this
|
|
18
|
+
* function installs, on top of the managed MCP block it already writes.
|
|
19
|
+
*
|
|
20
|
+
* Wiring Codex to the shared manifest needs a Codex-native descriptor whose
|
|
21
|
+
* source points at `adapters/codex`; that is a follow-up, not this change.
|
|
22
|
+
*/
|
|
23
|
+
export declare function installCodex(options: HostOperationOptions, host: HarnessHostSurface): Promise<HostOperationResult>;
|
|
24
|
+
export declare function uninstallCodex(options: HostOperationOptions): Promise<HostOperationResult>;
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { cp, mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { resolveHostAdapterSource } from "./adapter-source.js";
|
|
5
|
+
import { hostHome, jsonString, mcpArgs, replaceDirectory } from "./common.js";
|
|
6
|
+
const MANAGED_CODEX_START = "# BEGIN OMS MANAGED MCP";
|
|
7
|
+
const MANAGED_CODEX_END = "# END OMS MANAGED MCP";
|
|
8
|
+
const CODEX_SKILL_PREFIX = "oms-";
|
|
9
|
+
const CODEX_RULE_FILENAME = "oms.md";
|
|
10
|
+
export class CodexSkillNamespaceError extends Error {
|
|
11
|
+
skillDir;
|
|
12
|
+
prefix;
|
|
13
|
+
constructor(skillDir, prefix) {
|
|
14
|
+
super(`Codex skill directory must be namespaced ${prefix}*: ${skillDir}`);
|
|
15
|
+
this.name = "CodexSkillNamespaceError";
|
|
16
|
+
this.skillDir = skillDir;
|
|
17
|
+
this.prefix = prefix;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function codexManagedBlock(options) {
|
|
21
|
+
const args = mcpArgs(options).map(jsonString).join(", ");
|
|
22
|
+
return [
|
|
23
|
+
MANAGED_CODEX_START,
|
|
24
|
+
"# OMS MCP hookup for Codex CLI. Managed by `oms install/uninstall`.",
|
|
25
|
+
"# Codex-native rules live in ~/.codex/rules/oms.md; skills live in ~/.codex/skills/oms-*.",
|
|
26
|
+
"[mcp_servers.oms]",
|
|
27
|
+
'command = "oms"',
|
|
28
|
+
`args = [${args}]`,
|
|
29
|
+
"",
|
|
30
|
+
"[mcp_servers.oms.env]",
|
|
31
|
+
'OMS_AGENT_RUNTIME = "codex"',
|
|
32
|
+
MANAGED_CODEX_END,
|
|
33
|
+
"",
|
|
34
|
+
].join("\n");
|
|
35
|
+
}
|
|
36
|
+
function isCodexOMSTable(line) {
|
|
37
|
+
return line === "[mcp_servers.oms]" || line.startsWith("[mcp_servers.oms.");
|
|
38
|
+
}
|
|
39
|
+
function removeManagedCodexBlock(content) {
|
|
40
|
+
const start = MANAGED_CODEX_START.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
41
|
+
const end = MANAGED_CODEX_END.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
42
|
+
const markerPattern = new RegExp(`\\n?${start}[\\s\\S]*?${end}\\n?`, "g");
|
|
43
|
+
const withoutMarkers = content.replace(markerPattern, "\n");
|
|
44
|
+
const markerRemoved = withoutMarkers !== content;
|
|
45
|
+
const lines = withoutMarkers.split(/\r?\n/);
|
|
46
|
+
const output = [];
|
|
47
|
+
let removedLegacy = false;
|
|
48
|
+
for (let i = 0; i < lines.length; i++) {
|
|
49
|
+
const line = lines[i] ?? "";
|
|
50
|
+
const trimmed = line.trim();
|
|
51
|
+
if (isCodexOMSTable(trimmed)) {
|
|
52
|
+
removedLegacy = true;
|
|
53
|
+
i++;
|
|
54
|
+
while (i < lines.length) {
|
|
55
|
+
const next = (lines[i] ?? "").trim();
|
|
56
|
+
const isTable = /^\[[^\]]+\]$/.test(next);
|
|
57
|
+
if (isTable && !isCodexOMSTable(next)) {
|
|
58
|
+
i--;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
i++;
|
|
62
|
+
}
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (line.includes("OMS MCP hookup for Codex CLI")) {
|
|
66
|
+
removedLegacy = true;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
output.push(line);
|
|
70
|
+
}
|
|
71
|
+
return { content: `${output.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd()}\n`, removed: markerRemoved || removedLegacy };
|
|
72
|
+
}
|
|
73
|
+
async function installCodexNativeArtifacts(codexDir, options, adapterSource) {
|
|
74
|
+
const paths = [];
|
|
75
|
+
const rulesSource = path.join(adapterSource, "rules", CODEX_RULE_FILENAME);
|
|
76
|
+
const rulesTarget = path.join(codexDir, "rules", CODEX_RULE_FILENAME);
|
|
77
|
+
const skillsSource = path.join(adapterSource, "skills");
|
|
78
|
+
const skillsTargetRoot = path.join(codexDir, "skills");
|
|
79
|
+
if (!options.dryRun) {
|
|
80
|
+
await mkdir(path.dirname(rulesTarget), { recursive: true });
|
|
81
|
+
await cp(rulesSource, rulesTarget);
|
|
82
|
+
await mkdir(skillsTargetRoot, { recursive: true });
|
|
83
|
+
const entries = await readdir(skillsSource, { withFileTypes: true });
|
|
84
|
+
const desired = new Set(entries.filter((entry) => entry.isDirectory()).map((entry) => entry.name));
|
|
85
|
+
for (const entry of entries) {
|
|
86
|
+
if (!entry.isDirectory())
|
|
87
|
+
continue;
|
|
88
|
+
const target = path.join(skillsTargetRoot, entry.name);
|
|
89
|
+
if (!entry.name.startsWith(CODEX_SKILL_PREFIX)) {
|
|
90
|
+
throw new CodexSkillNamespaceError(entry.name, CODEX_SKILL_PREFIX);
|
|
91
|
+
}
|
|
92
|
+
await replaceDirectory(path.join(skillsSource, entry.name), target, false);
|
|
93
|
+
paths.push(target);
|
|
94
|
+
}
|
|
95
|
+
const installed = await readdir(skillsTargetRoot, { withFileTypes: true });
|
|
96
|
+
for (const entry of installed) {
|
|
97
|
+
if (entry.isDirectory() && entry.name.startsWith(CODEX_SKILL_PREFIX) && !desired.has(entry.name)) {
|
|
98
|
+
await rm(path.join(skillsTargetRoot, entry.name), { recursive: true, force: true });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
paths.push(path.join(skillsTargetRoot, `${CODEX_SKILL_PREFIX}setup`));
|
|
104
|
+
}
|
|
105
|
+
return [rulesTarget, ...paths];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Codex install stays file-copy based on purpose.
|
|
109
|
+
*
|
|
110
|
+
* `codex plugin marketplace add <repo>` does consume the same root
|
|
111
|
+
* `.claude-plugin/marketplace.json` (verified against codex-cli 0.147.0: the
|
|
112
|
+
* marketplace resolves as `oms` and `codex plugin add oms@oms` succeeds), but
|
|
113
|
+
* the manifest's plugin entry declares `"source": "./"`, so Codex caches the
|
|
114
|
+
* whole repository and finds no `rules/` or `skills/` at the cached root —
|
|
115
|
+
* those live under `adapters/codex/`. A marketplace install would therefore
|
|
116
|
+
* register a plugin that delivers none of the Codex-native surfaces this
|
|
117
|
+
* function installs, on top of the managed MCP block it already writes.
|
|
118
|
+
*
|
|
119
|
+
* Wiring Codex to the shared manifest needs a Codex-native descriptor whose
|
|
120
|
+
* source points at `adapters/codex`; that is a follow-up, not this change.
|
|
121
|
+
*/
|
|
122
|
+
export async function installCodex(options, host) {
|
|
123
|
+
const codexDir = hostHome(options.homeDir, ".codex", "OMS_CODEX_HOME");
|
|
124
|
+
const pluginSource = resolveHostAdapterSource(options.adapterRoot, host);
|
|
125
|
+
const pluginTarget = path.join(codexDir, "plugins", "oms");
|
|
126
|
+
const configPath = path.join(codexDir, "config.toml");
|
|
127
|
+
const original = existsSync(configPath) ? await readFile(configPath, "utf-8") : "";
|
|
128
|
+
const stripped = removeManagedCodexBlock(original).content;
|
|
129
|
+
const next = `${stripped.trimEnd()}\n\n${codexManagedBlock(options)}`;
|
|
130
|
+
let nativePaths = [];
|
|
131
|
+
if (!options.dryRun) {
|
|
132
|
+
await mkdir(path.dirname(configPath), { recursive: true });
|
|
133
|
+
await writeFile(configPath, next, "utf-8");
|
|
134
|
+
await replaceDirectory(pluginSource, pluginTarget, false);
|
|
135
|
+
nativePaths = await installCodexNativeArtifacts(codexDir, options, pluginSource);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
nativePaths = [
|
|
139
|
+
path.join(codexDir, "rules", CODEX_RULE_FILENAME),
|
|
140
|
+
path.join(codexDir, "skills", `${CODEX_SKILL_PREFIX}setup`),
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
runtime: "codex",
|
|
145
|
+
action: "install",
|
|
146
|
+
changed: !options.dryRun,
|
|
147
|
+
skipped: false,
|
|
148
|
+
paths: [configPath, pluginTarget, ...nativePaths],
|
|
149
|
+
commands: [`Codex MCP config: ${configPath}`],
|
|
150
|
+
messages: ["Installed Codex-native Oh My Second Brain rules, namespaced skills, plugin assets, and managed MCP/env config."],
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export async function uninstallCodex(options) {
|
|
154
|
+
const codexDir = hostHome(options.homeDir, ".codex", "OMS_CODEX_HOME");
|
|
155
|
+
const pluginTarget = path.join(codexDir, "plugins", "oms");
|
|
156
|
+
const configPath = path.join(codexDir, "config.toml");
|
|
157
|
+
const ruleTarget = path.join(codexDir, "rules", CODEX_RULE_FILENAME);
|
|
158
|
+
const skillsRoot = path.join(codexDir, "skills");
|
|
159
|
+
let changed = false;
|
|
160
|
+
if (existsSync(configPath)) {
|
|
161
|
+
const original = await readFile(configPath, "utf-8");
|
|
162
|
+
const removed = removeManagedCodexBlock(original);
|
|
163
|
+
changed = removed.removed;
|
|
164
|
+
if (removed.removed && !options.dryRun)
|
|
165
|
+
await writeFile(configPath, removed.content, "utf-8");
|
|
166
|
+
}
|
|
167
|
+
for (const target of [pluginTarget, ruleTarget]) {
|
|
168
|
+
if (existsSync(target)) {
|
|
169
|
+
changed = true;
|
|
170
|
+
if (!options.dryRun)
|
|
171
|
+
await rm(target, { recursive: true, force: true });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (existsSync(skillsRoot)) {
|
|
175
|
+
for (const entry of await readdir(skillsRoot, { withFileTypes: true })) {
|
|
176
|
+
if (entry.isDirectory() && entry.name.startsWith(CODEX_SKILL_PREFIX)) {
|
|
177
|
+
changed = true;
|
|
178
|
+
if (!options.dryRun)
|
|
179
|
+
await rm(path.join(skillsRoot, entry.name), { recursive: true, force: true });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
runtime: "codex",
|
|
185
|
+
action: "uninstall",
|
|
186
|
+
changed: changed && !options.dryRun,
|
|
187
|
+
skipped: !changed,
|
|
188
|
+
paths: [configPath, pluginTarget, ruleTarget, path.join(skillsRoot, `${CODEX_SKILL_PREFIX}*`)],
|
|
189
|
+
commands: [],
|
|
190
|
+
messages: ["Removed Codex managed MCP block, Oh My Second Brain rule, namespaced Oh My Second Brain skills, and plugin assets."],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/install/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { HostOperationOptions } from "./types.js";
|
|
2
|
+
export declare class InstallTargetSymlinkError extends Error {
|
|
3
|
+
readonly target: string;
|
|
4
|
+
constructor(target: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function commandExists(command: string): boolean;
|
|
7
|
+
export declare function hostHome(homeDir: string | undefined, dirname: string, envName: string): string;
|
|
8
|
+
export declare function mcpArgs(options: HostOperationOptions): string[];
|
|
9
|
+
export declare function jsonString(value: string): string;
|
|
10
|
+
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
11
|
+
export declare function readJsonObject(file: string): Promise<Record<string, unknown>>;
|
|
12
|
+
export declare function writeJsonObject(file: string, data: Record<string, unknown>, dryRun: boolean): Promise<boolean>;
|
|
13
|
+
export type YamlEntryEdit = {
|
|
14
|
+
readonly kind: "set";
|
|
15
|
+
readonly value: Record<string, unknown>;
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: "delete";
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Applies one `section.key` edit to a YAML file while leaving every other byte,
|
|
21
|
+
* comment, and key ordering the document already had in place.
|
|
22
|
+
*/
|
|
23
|
+
export declare function editYamlEntryPreservingComments(file: string, entryPath: readonly [string, string], edit: YamlEntryEdit): Promise<boolean>;
|
|
24
|
+
export declare function mcpServerEntry(options: HostOperationOptions): Record<string, unknown>;
|
|
25
|
+
export interface ExternalCommandResult {
|
|
26
|
+
readonly ok: boolean;
|
|
27
|
+
readonly exitCode: number | null;
|
|
28
|
+
readonly signal: NodeJS.Signals | null;
|
|
29
|
+
readonly stdout: string;
|
|
30
|
+
readonly stderr: string;
|
|
31
|
+
readonly message: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function runExternal(command: string, args: string[]): ExternalCommandResult;
|
|
34
|
+
export declare function replaceDirectory(source: string, target: string, dryRun: boolean): Promise<boolean>;
|