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,149 @@
|
|
|
1
|
+
import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { parse as yamlParse, stringify as yamlStringify } from "yaml";
|
|
4
|
+
function isRecord(value) {
|
|
5
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
|
+
}
|
|
7
|
+
function parseConceptRef(value) {
|
|
8
|
+
if (value === null || value === undefined)
|
|
9
|
+
return null;
|
|
10
|
+
if (typeof value === "string")
|
|
11
|
+
return value;
|
|
12
|
+
if (Array.isArray(value) && value.every((item) => typeof item === "string"))
|
|
13
|
+
return value;
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
function parseFolderBinding(value) {
|
|
17
|
+
if (!isRecord(value))
|
|
18
|
+
return null;
|
|
19
|
+
const rawIntent = value["intent"];
|
|
20
|
+
return {
|
|
21
|
+
intent: typeof rawIntent === "string" && rawIntent.trim() ? rawIntent : "",
|
|
22
|
+
concept: parseConceptRef(value["concept"]),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function parseConceptDocument(filePath, parsed) {
|
|
26
|
+
const concept = {
|
|
27
|
+
concept: typeof parsed["concept"] === "string" ? parsed["concept"] : path.basename(filePath, path.extname(filePath)),
|
|
28
|
+
intent: typeof parsed["intent"] === "string" ? parsed["intent"] : "",
|
|
29
|
+
folder: typeof parsed["folder"] === "string" ? parsed["folder"] : "",
|
|
30
|
+
fields: Array.isArray(parsed["fields"]) ? parsed["fields"] : [],
|
|
31
|
+
lenses: Array.isArray(parsed["lenses"]) ? parsed["lenses"] : [],
|
|
32
|
+
};
|
|
33
|
+
return { filePath, raw: parsed, concept };
|
|
34
|
+
}
|
|
35
|
+
export async function readConceptDocuments(omsDir) {
|
|
36
|
+
const documents = new Map();
|
|
37
|
+
const conceptsDir = path.join(omsDir, "concepts");
|
|
38
|
+
let entries;
|
|
39
|
+
try {
|
|
40
|
+
entries = await readdir(conceptsDir);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (error instanceof Error)
|
|
44
|
+
return documents;
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
for (const file of entries) {
|
|
48
|
+
if (!file.endsWith(".yaml") && !file.endsWith(".yml"))
|
|
49
|
+
continue;
|
|
50
|
+
const filePath = path.join(conceptsDir, file);
|
|
51
|
+
const parsed = yamlParse(await readFile(filePath, "utf-8"));
|
|
52
|
+
if (!isRecord(parsed))
|
|
53
|
+
continue;
|
|
54
|
+
const document = parseConceptDocument(filePath, parsed);
|
|
55
|
+
documents.set(document.concept.concept, document);
|
|
56
|
+
}
|
|
57
|
+
return documents;
|
|
58
|
+
}
|
|
59
|
+
export function buildPromptConcepts(shippedConcepts, localDocuments) {
|
|
60
|
+
const concepts = new Map(shippedConcepts);
|
|
61
|
+
for (const [name, document] of localDocuments) {
|
|
62
|
+
concepts.set(name, document.concept);
|
|
63
|
+
}
|
|
64
|
+
return concepts;
|
|
65
|
+
}
|
|
66
|
+
export function defaultConceptForFolder(concepts, folder) {
|
|
67
|
+
for (const [name, concept] of concepts) {
|
|
68
|
+
if (concept.folder === folder)
|
|
69
|
+
return name;
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
export function conceptRefToPromptDefault(concept) {
|
|
74
|
+
if (Array.isArray(concept))
|
|
75
|
+
return concept[0] ?? null;
|
|
76
|
+
return concept;
|
|
77
|
+
}
|
|
78
|
+
export function isFieldType(value) {
|
|
79
|
+
switch (value) {
|
|
80
|
+
case "string":
|
|
81
|
+
case "url":
|
|
82
|
+
case "date":
|
|
83
|
+
case "list":
|
|
84
|
+
case "number":
|
|
85
|
+
case "boolean":
|
|
86
|
+
return true;
|
|
87
|
+
default:
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export async function readExistingTaxonomy(omsDir) {
|
|
92
|
+
try {
|
|
93
|
+
const raw = await readFile(path.join(omsDir, "taxonomy.yaml"), "utf-8");
|
|
94
|
+
const parsed = yamlParse(raw);
|
|
95
|
+
if (!isRecord(parsed))
|
|
96
|
+
return null;
|
|
97
|
+
const rawFolders = parsed["folders"];
|
|
98
|
+
const folders = {};
|
|
99
|
+
if (isRecord(rawFolders)) {
|
|
100
|
+
for (const [folder, binding] of Object.entries(rawFolders)) {
|
|
101
|
+
const parsedBinding = parseFolderBinding(binding);
|
|
102
|
+
if (parsedBinding !== null) {
|
|
103
|
+
folders[folder] = parsedBinding;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
version: typeof parsed["version"] === "number" ? parsed["version"] : 0,
|
|
109
|
+
folders,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error instanceof Error)
|
|
114
|
+
return null;
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export function mergeAdditionalFields(concept, fields) {
|
|
119
|
+
const existing = new Set(concept.fields.map((field) => field.name));
|
|
120
|
+
const additions = fields.filter((field) => !existing.has(field.name));
|
|
121
|
+
return {
|
|
122
|
+
...concept,
|
|
123
|
+
fields: [...concept.fields, ...additions],
|
|
124
|
+
lenses: concept.lenses ?? [],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export function mergeAdditionalLenses(concept, lenses) {
|
|
128
|
+
const existing = new Set((concept.lenses ?? []).map((lens) => lens.name));
|
|
129
|
+
const additions = lenses.filter((lens) => !existing.has(lens.name));
|
|
130
|
+
return {
|
|
131
|
+
...concept,
|
|
132
|
+
fields: concept.fields,
|
|
133
|
+
lenses: [...(concept.lenses ?? []), ...additions],
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
export async function writeConcept(omsDir, concept, existingDocument) {
|
|
137
|
+
const conceptsOutDir = path.join(omsDir, "concepts");
|
|
138
|
+
await mkdir(conceptsOutDir, { recursive: true });
|
|
139
|
+
const document = {
|
|
140
|
+
...(existingDocument?.raw ?? {}),
|
|
141
|
+
concept: concept.concept,
|
|
142
|
+
intent: concept.intent,
|
|
143
|
+
folder: concept.folder,
|
|
144
|
+
fields: concept.fields,
|
|
145
|
+
lenses: concept.lenses ?? [],
|
|
146
|
+
};
|
|
147
|
+
await writeFile(existingDocument?.filePath ?? path.join(conceptsOutDir, `${concept.concept}.yaml`), yamlStringify(document), "utf-8");
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=setup-documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-documents.js","sourceRoot":"","sources":["../../src/cli/setup-documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type UpdateRunner } from "../update/update.js";
|
|
2
|
+
export declare function readCurrentPackageVersion(): Promise<string | null>;
|
|
3
|
+
export declare function maybePrintUpdateNotice(options?: {
|
|
4
|
+
readonly currentVersion?: string | null;
|
|
5
|
+
readonly latestVersion?: string;
|
|
6
|
+
readonly timeoutMs?: number;
|
|
7
|
+
readonly runner?: UpdateRunner;
|
|
8
|
+
readonly env?: Readonly<Record<string, string | undefined>>;
|
|
9
|
+
readonly write?: (message: string) => void;
|
|
10
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { resolveBundledAssetPaths } from "../core/runtime/assets.js";
|
|
4
|
+
import { checkUpdateNotice, formatUpdateNotice, } from "../update/update.js";
|
|
5
|
+
const bundledAssets = resolveBundledAssetPaths();
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
export async function readCurrentPackageVersion() {
|
|
10
|
+
const packageJson = JSON.parse(await readFile(path.join(bundledAssets.packageRoot, "package.json"), "utf-8"));
|
|
11
|
+
return isRecord(packageJson) && typeof packageJson["version"] === "string"
|
|
12
|
+
? packageJson["version"]
|
|
13
|
+
: null;
|
|
14
|
+
}
|
|
15
|
+
function updateNoticeDisabled(env) {
|
|
16
|
+
return env["OMS_UPDATE_NOTICE"] === "0" || env["OMS_NO_UPDATE_NOTICE"] === "1";
|
|
17
|
+
}
|
|
18
|
+
function parseUpdateNoticeTimeout(env) {
|
|
19
|
+
const raw = env["OMS_UPDATE_NOTICE_TIMEOUT_MS"];
|
|
20
|
+
if (raw === undefined)
|
|
21
|
+
return undefined;
|
|
22
|
+
const parsed = Number.parseInt(raw, 10);
|
|
23
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
|
|
24
|
+
}
|
|
25
|
+
export async function maybePrintUpdateNotice(options = {}) {
|
|
26
|
+
const env = options.env ?? process.env;
|
|
27
|
+
if (updateNoticeDisabled(env))
|
|
28
|
+
return;
|
|
29
|
+
const currentVersion = options.currentVersion ?? await readCurrentPackageVersion();
|
|
30
|
+
const notice = await checkUpdateNotice({
|
|
31
|
+
currentVersion,
|
|
32
|
+
latestVersion: options.latestVersion ?? env["OMS_UPDATE_LATEST_VERSION"],
|
|
33
|
+
timeoutMs: options.timeoutMs ?? parseUpdateNoticeTimeout(env),
|
|
34
|
+
runner: options.runner,
|
|
35
|
+
});
|
|
36
|
+
const formatted = formatUpdateNotice(notice);
|
|
37
|
+
if (formatted.length === 0)
|
|
38
|
+
return;
|
|
39
|
+
const write = options.write ?? ((message) => console.error(message));
|
|
40
|
+
write(`\n${formatted}`);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=update-notice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-notice.js","sourceRoot":"","sources":["../../src/cli/update-notice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;AAEjD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,WAAW,GAAY,IAAI,CAAC,KAAK,CACrC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC9E,CAAC;IACF,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,QAAQ;QACxE,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAiD;IAC7E,OAAO,GAAG,CAAC,mBAAmB,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,sBAAsB,CAAC,KAAK,GAAG,CAAC;AACjF,CAAC;AAED,SAAS,wBAAwB,CAC/B,GAAiD;IAEjD,MAAM,GAAG,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAChD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,UAOzC,EAAE;IACJ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,IAAI,oBAAoB,CAAC,GAAG,CAAC;QAAE,OAAO;IAEtC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,MAAM,yBAAyB,EAAE,CAAC;IACnF,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;QACrC,cAAc;QACd,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,2BAA2B,CAAC;QACxE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,wBAAwB,CAAC,GAAG,CAAC;QAC7D,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HarnessSurfaceRegistry } from "../harness/surface-registry.js";
|
|
2
|
+
export declare function mainUsageCommandNames(registry?: HarnessSurfaceRegistry): readonly string[];
|
|
3
|
+
export declare function cliUsageText(registry?: HarnessSurfaceRegistry): string;
|
|
4
|
+
export declare function printUsage(): void;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { harnessSurfaceRegistry } from "../harness/surface-registry.js";
|
|
2
|
+
const MAIN_USAGE_COMMANDS = [
|
|
3
|
+
{ name: "setup", line: " setup Adopt an existing vault into the Oh My Second Brain convention." },
|
|
4
|
+
{ name: "install", line: " install Install Oh My Second Brain host adapters and MCP registration." },
|
|
5
|
+
{ name: "uninstall", line: " uninstall Remove Oh My Second Brain host adapters and MCP registration." },
|
|
6
|
+
{ name: "update", line: " update Check for or apply an explicit package update, then refresh host adapters." },
|
|
7
|
+
{ name: "doctor", line: " doctor Validate vault frontmatter against the active ontology, aggregated by field and concept." },
|
|
8
|
+
{
|
|
9
|
+
name: "audit",
|
|
10
|
+
line: " audit CI-usable ontology lint: doctor checks with non-zero exit on violations.",
|
|
11
|
+
detailLines: [
|
|
12
|
+
" --folder <name> Restrict the scan to one top-level vault folder.",
|
|
13
|
+
" --json Emit structured JSON instead of console text.",
|
|
14
|
+
" --suggest-fields Report undeclared observed fields and enum-value drift.",
|
|
15
|
+
],
|
|
16
|
+
},
|
|
17
|
+
{ name: "lint", line: " lint Check vault link health: broken [[wikilinks]] and orphan notes." },
|
|
18
|
+
{ name: "link", line: " link Bridge an external repo to scoped vault folders via gitignored symlinks." },
|
|
19
|
+
{
|
|
20
|
+
name: "linkify",
|
|
21
|
+
line: " linkify Propose [[wikilinks]] to term notes across existing notes; report-only by default.",
|
|
22
|
+
detailLines: [
|
|
23
|
+
" --folder <name> Restrict the scan and writes to one top-level vault folder.",
|
|
24
|
+
" --apply --yes Rewrite notes in place; --apply alone refuses and writes nothing.",
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
{ name: "semantic", line: " semantic Native markdown semantic index/search/get commands." },
|
|
28
|
+
{ name: "mcp", line: " mcp Start the read/status MCP stdio server." },
|
|
29
|
+
{
|
|
30
|
+
name: "hook",
|
|
31
|
+
line: " hook Vault guard hooks for Claude Code PreToolUse / PostToolUse events.",
|
|
32
|
+
detailLines: [
|
|
33
|
+
" pre-tool-use Read PreToolUse JSON from stdin; block unregistered folder creation.",
|
|
34
|
+
" post-tool-use Read PostToolUse JSON from stdin; audit frontmatter + trigger graph build.",
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
export function mainUsageCommandNames(registry = harnessSurfaceRegistry) {
|
|
39
|
+
const registered = new Set(registry.cliCommands.map((command) => command.name));
|
|
40
|
+
return MAIN_USAGE_COMMANDS.filter((command) => registered.has(command.name)).map((command) => command.name);
|
|
41
|
+
}
|
|
42
|
+
function commandLines(registry) {
|
|
43
|
+
const registered = new Set(registry.cliCommands.map((command) => command.name));
|
|
44
|
+
const lines = [];
|
|
45
|
+
for (const command of MAIN_USAGE_COMMANDS) {
|
|
46
|
+
if (!registered.has(command.name))
|
|
47
|
+
continue;
|
|
48
|
+
lines.push(command.line);
|
|
49
|
+
if (command.detailLines !== undefined)
|
|
50
|
+
lines.push(...command.detailLines);
|
|
51
|
+
}
|
|
52
|
+
return lines.join("\n");
|
|
53
|
+
}
|
|
54
|
+
function runtimeChoices(registry) {
|
|
55
|
+
return ["auto", "all", ...registry.hosts.map((host) => host.runtime)].join("|");
|
|
56
|
+
}
|
|
57
|
+
export function cliUsageText(registry = harnessSurfaceRegistry) {
|
|
58
|
+
const runtime = runtimeChoices(registry);
|
|
59
|
+
return `
|
|
60
|
+
oh-my-second-brain — Oh My Second Brain convention layer for Obsidian vaults
|
|
61
|
+
|
|
62
|
+
Usage:
|
|
63
|
+
oh-my-second-brain setup [--vault <path>] [--yes] [--suggest-fields] [--install-claude]
|
|
64
|
+
oh-my-second-brain install [--vault <path>] [--runtime <${runtime}>] [--dry-run] [--execute] [--yes] [--json]
|
|
65
|
+
oh-my-second-brain uninstall [--runtime <all|${registry.hosts.map((host) => host.runtime).join("|")}>] [--dry-run] [--execute] [--yes] [--json]
|
|
66
|
+
oh-my-second-brain update [--check] [--dry-run] [--yes] [--runtime <${runtime}>] [--vault <path>]
|
|
67
|
+
oh-my-second-brain doctor [--vault <path>] [--verbose] [--json] [--max <n>]
|
|
68
|
+
oh-my-second-brain audit [--vault <path>] [--folder <name>] [--json] [--suggest-fields]
|
|
69
|
+
oh-my-second-brain lint [--vault <path>] [--verbose] [--json]
|
|
70
|
+
oh-my-second-brain link --vault <path> --folder <name> [--folder <name> ...] [--no-convention-note]
|
|
71
|
+
oh-my-second-brain linkify [--vault <path>] [--folder <name>] [--apply --yes]
|
|
72
|
+
oh-my-second-brain semantic <status|sync|query|search|vsearch|get|multi-get|collection> [options]
|
|
73
|
+
oh-my-second-brain mcp [--vault <path>]
|
|
74
|
+
oh-my-second-brain hook pre-tool-use [--vault <path>]
|
|
75
|
+
oh-my-second-brain hook post-tool-use [--vault <path>]
|
|
76
|
+
|
|
77
|
+
Compatibility alias: oms <command>
|
|
78
|
+
|
|
79
|
+
Commands:
|
|
80
|
+
${commandLines(registry)}
|
|
81
|
+
|
|
82
|
+
Options:
|
|
83
|
+
--vault <path> Path to the vault root (default: current directory).
|
|
84
|
+
--yes Non-interactive setup, uninstall confirmation, or update execution.
|
|
85
|
+
--suggest-fields During setup --yes, add conservative observed frontmatter fields to concepts.
|
|
86
|
+
--install-claude Print Claude Code plugin install and MCP registration commands (dry-run).
|
|
87
|
+
--runtime <name> Select host runtime (default: auto for install, all for uninstall).
|
|
88
|
+
--dry-run Preview host config changes without writing files.
|
|
89
|
+
--execute Allow external host CLIs such as \`claude\` to run when available.
|
|
90
|
+
--verbose doctor/lint: list every affected note instead of a summary.
|
|
91
|
+
--json doctor/lint/audit: emit machine-readable output as JSON.
|
|
92
|
+
--max <n> doctor --verbose: max notes listed per concept (default 50).
|
|
93
|
+
--folder <name> audit/linkify: restrict scan; link: vault folder/subpath to expose (repeatable for link).
|
|
94
|
+
--apply linkify: rewrite notes in place; must be combined with --yes.
|
|
95
|
+
--no-convention-note
|
|
96
|
+
link: skip writing the managed OMS usage block to AGENTS.md.
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
export function printUsage() {
|
|
100
|
+
console.log(cliUsageText());
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/cli/usage.ts"],"names":[],"mappings":"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"}
|
package/dist/conventions/lint.js
CHANGED
|
@@ -1,31 +1,7 @@
|
|
|
1
|
-
import { readFile
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { parseNote } from "./frontmatter.js";
|
|
4
|
-
|
|
5
|
-
const SKIP_DIRS = new Set([
|
|
6
|
-
".oms", ".obsidian", ".trash", ".git", ".claude",
|
|
7
|
-
"_archive", "node_modules",
|
|
8
|
-
]);
|
|
9
|
-
async function* walkMarkdown(dir, base) {
|
|
10
|
-
let entries;
|
|
11
|
-
try {
|
|
12
|
-
entries = await readdir(dir, { withFileTypes: true });
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
for (const entry of entries) {
|
|
18
|
-
if (entry.name.startsWith(".") || SKIP_DIRS.has(entry.name))
|
|
19
|
-
continue;
|
|
20
|
-
const full = path.join(dir, entry.name);
|
|
21
|
-
if (entry.isDirectory()) {
|
|
22
|
-
yield* walkMarkdown(full, base);
|
|
23
|
-
}
|
|
24
|
-
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
25
|
-
yield path.relative(base, full).replace(/\\/g, "/");
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
4
|
+
import { walkVaultMarkdown, mapWithConcurrency } from "./vault-walk.js";
|
|
29
5
|
const WIKILINK_RE = /\[\[([^\]|#\n]+?)(?:[#|][^\]]*?)?\]\]/g;
|
|
30
6
|
export function extractWikilinks(body) {
|
|
31
7
|
const links = new Set();
|
|
@@ -61,22 +37,25 @@ function buildNoteIndex(notePaths) {
|
|
|
61
37
|
*/
|
|
62
38
|
export async function detectLinkIssues(vault) {
|
|
63
39
|
const allPaths = [];
|
|
64
|
-
for await (const p of
|
|
40
|
+
for await (const p of walkVaultMarkdown(vault)) {
|
|
65
41
|
allPaths.push(p);
|
|
66
42
|
}
|
|
67
43
|
const noteIndex = buildNoteIndex(allPaths);
|
|
68
44
|
const brokenLinks = [];
|
|
69
45
|
const incomingCount = new Map(allPaths.map((p) => [p, 0]));
|
|
70
|
-
|
|
71
|
-
|
|
46
|
+
// Read + extract links in parallel (I/O-bound), then resolve sequentially in
|
|
47
|
+
// path order so brokenLinks ordering stays deterministic.
|
|
48
|
+
const perNote = await mapWithConcurrency(allPaths, 64, async (notePath) => {
|
|
72
49
|
try {
|
|
73
|
-
raw = await readFile(path.join(vault, notePath), "utf-8");
|
|
50
|
+
const raw = await readFile(path.join(vault, notePath), "utf-8");
|
|
51
|
+
return { notePath, targets: extractWikilinks(parseNote(raw).body) };
|
|
74
52
|
}
|
|
75
53
|
catch {
|
|
76
|
-
|
|
54
|
+
return { notePath, targets: [] };
|
|
77
55
|
}
|
|
78
|
-
|
|
79
|
-
|
|
56
|
+
});
|
|
57
|
+
for (const { notePath, targets } of perNote) {
|
|
58
|
+
for (const target of targets) {
|
|
80
59
|
const resolved = noteIndex.get(target.toLowerCase());
|
|
81
60
|
if (resolved === undefined) {
|
|
82
61
|
brokenLinks.push({ notePath, target });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/conventions/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../src/conventions/lint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Violation } from "./validate.js";
|
|
2
|
+
import type { VaultLintResult } from "./lint.js";
|
|
3
|
+
/** One scanned note and the violations found in its frontmatter (empty = clean). */
|
|
4
|
+
export interface NoteReport {
|
|
5
|
+
notePath: string;
|
|
6
|
+
concept: string;
|
|
7
|
+
violations: readonly Violation[];
|
|
8
|
+
}
|
|
9
|
+
/** Aggregated counts for a single (field, rule) pair. */
|
|
10
|
+
export interface FieldRuleAgg {
|
|
11
|
+
field: string;
|
|
12
|
+
rule: string;
|
|
13
|
+
/** Distinct notes that hit this field+rule at least once. */
|
|
14
|
+
notes: number;
|
|
15
|
+
/** Total occurrences of this field+rule across all notes. */
|
|
16
|
+
violations: number;
|
|
17
|
+
}
|
|
18
|
+
export interface ConceptAgg {
|
|
19
|
+
concept: string;
|
|
20
|
+
notes: number;
|
|
21
|
+
notesWithViolations: number;
|
|
22
|
+
violations: number;
|
|
23
|
+
/** Per (field, rule) breakdown, sorted by impact descending. */
|
|
24
|
+
fields: FieldRuleAgg[];
|
|
25
|
+
}
|
|
26
|
+
export interface DoctorAggregate {
|
|
27
|
+
totalNotes: number;
|
|
28
|
+
notesWithViolations: number;
|
|
29
|
+
totalViolations: number;
|
|
30
|
+
/** Per-concept breakdown, sorted by violation count descending. */
|
|
31
|
+
concepts: ConceptAgg[];
|
|
32
|
+
/** Flat per-frontmatter-field rollup across all concepts, most-violated first. */
|
|
33
|
+
fields: Array<FieldRuleAgg & {
|
|
34
|
+
concept: string;
|
|
35
|
+
}>;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Roll up per-note frontmatter violations into concept- and field-level
|
|
39
|
+
* aggregates. Every scanned note (clean or not) should be passed so that
|
|
40
|
+
* per-concept totals reflect coverage, not just failures.
|
|
41
|
+
*/
|
|
42
|
+
export declare function aggregateDoctor(notes: readonly NoteReport[]): DoctorAggregate;
|
|
43
|
+
export interface DoctorFormatOptions {
|
|
44
|
+
vault: string;
|
|
45
|
+
/** Append a per-note listing of every violation. */
|
|
46
|
+
verbose?: boolean;
|
|
47
|
+
/** Cap on notes listed per concept in verbose mode (default 50). */
|
|
48
|
+
maxPerConcept?: number;
|
|
49
|
+
/** Scanned notes — required for the verbose listing. */
|
|
50
|
+
notes?: readonly NoteReport[];
|
|
51
|
+
}
|
|
52
|
+
export declare function formatDoctorReport(agg: DoctorAggregate, opts: DoctorFormatOptions): string;
|
|
53
|
+
export interface LintFormatOptions {
|
|
54
|
+
vault: string;
|
|
55
|
+
/** List every broken link and orphan instead of a capped summary. */
|
|
56
|
+
verbose?: boolean;
|
|
57
|
+
/** Max offending notes listed for broken links (default 20). */
|
|
58
|
+
maxBroken?: number;
|
|
59
|
+
/** Max orphan notes listed (default 20). */
|
|
60
|
+
maxOrphans?: number;
|
|
61
|
+
}
|
|
62
|
+
export declare function formatLintReport(result: VaultLintResult, opts: LintFormatOptions): string;
|