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
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Nashsu 2-step Chain-of-Thought compile pipeline.
|
|
3
|
-
*
|
|
4
|
-
* GPL-3.0 IDEA-ONLY: The 2-step CoT approach (analysis → synthesis with
|
|
5
|
-
* [[wikilink]] insertion) is absorbed from nashsu/llm_wiki as an algorithm
|
|
6
|
-
* description only. No verbatim code from nashsu is used here.
|
|
7
|
-
* Reimplemented from scratch.
|
|
8
|
-
*
|
|
9
|
-
* Step 1 — analysis pass: extract entities / concepts / arguments /
|
|
10
|
-
* contradictions / structure from source materials.
|
|
11
|
-
* Step 2 — synthesis pass: produce source summary + concept page +
|
|
12
|
-
* [[wikilink]] insertion. Step 1 output is the context for Step 2.
|
|
13
|
-
*
|
|
14
|
-
* Always sequential: Step 1 must complete before Step 2 begins.
|
|
15
|
-
*/
|
|
16
|
-
// ---------------------------------------------------------------------------
|
|
17
|
-
// Prompt builders
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
function buildStep1Prompt(concept, formattedMaterials) {
|
|
20
|
-
return `You are a knowledge-graph analyst. Analyze the following source materials about the concept "${concept}".
|
|
21
|
-
|
|
22
|
-
MATERIALS:
|
|
23
|
-
${formattedMaterials}
|
|
24
|
-
|
|
25
|
-
Produce a structured analysis with EXACTLY these labeled sections (no extra text before ENTITIES):
|
|
26
|
-
ENTITIES: (comma-separated list of named entities mentioned)
|
|
27
|
-
CONCEPTS: (comma-separated list of related concepts)
|
|
28
|
-
ARGUMENTS:
|
|
29
|
-
- (each key claim on its own line prefixed with "- ")
|
|
30
|
-
CONTRADICTIONS:
|
|
31
|
-
- (each conflicting claim on its own line, or a single line "- none")
|
|
32
|
-
STRUCTURE: (one paragraph describing how "${concept}" relates to the above entities/concepts)`;
|
|
33
|
-
}
|
|
34
|
-
function buildStep2Prompt(concept, formattedMaterials, step1) {
|
|
35
|
-
const contradictionText = step1.contradictions.length > 0
|
|
36
|
-
? step1.contradictions.join(" | ")
|
|
37
|
-
: "none";
|
|
38
|
-
return `You are a wiki synthesis engine. Create a comprehensive concept page for "${concept}".
|
|
39
|
-
|
|
40
|
-
ANALYSIS CONTEXT (from Step 1):
|
|
41
|
-
Entities: ${step1.entities.join(", ")}
|
|
42
|
-
Concepts: ${step1.concepts.join(", ")}
|
|
43
|
-
Key Arguments: ${step1.arguments.join(" | ")}
|
|
44
|
-
Contradictions: ${contradictionText}
|
|
45
|
-
Structure: ${step1.structure}
|
|
46
|
-
|
|
47
|
-
SOURCE MATERIALS:
|
|
48
|
-
${formattedMaterials}
|
|
49
|
-
|
|
50
|
-
Write a Markdown concept page. Requirements:
|
|
51
|
-
1. Begin with a 2-3 sentence summary of ${concept}.
|
|
52
|
-
2. Use ## headings for major sections.
|
|
53
|
-
3. Insert [[wikilinks]] for all related concepts, entities, and referenced topics.
|
|
54
|
-
4. Where sources contradict, note the conflict inline: > **Conflict:** Source A claims X; Source B claims Y. Unresolved.
|
|
55
|
-
5. End with a ## See Also section listing related concept wikilinks.
|
|
56
|
-
Output ONLY the Markdown body (no YAML frontmatter, no preamble).`;
|
|
57
|
-
}
|
|
58
|
-
// ---------------------------------------------------------------------------
|
|
59
|
-
// Step 1 response parser
|
|
60
|
-
// ---------------------------------------------------------------------------
|
|
61
|
-
function parseStep1(raw) {
|
|
62
|
-
/** Extract the content of a labeled section, stopping at the next ALL-CAPS label. */
|
|
63
|
-
const extractSection = (label) => {
|
|
64
|
-
const match = raw.match(new RegExp(`${label}:[\\s\\S]*?\\n([\\s\\S]*?)(?=\\n[A-Z]+:|$)`, "i"));
|
|
65
|
-
return match?.[1]?.trim() ?? "";
|
|
66
|
-
};
|
|
67
|
-
const extractInline = (label) => {
|
|
68
|
-
const match = raw.match(new RegExp(`${label}:\\s*(.+)`, "i"));
|
|
69
|
-
return match?.[1]?.trim() ?? "";
|
|
70
|
-
};
|
|
71
|
-
const splitList = (s) => s
|
|
72
|
-
.split(/\n|,/)
|
|
73
|
-
.map((x) => x.replace(/^[-•*]\s*/, "").trim())
|
|
74
|
-
.filter(Boolean);
|
|
75
|
-
return {
|
|
76
|
-
entities: splitList(extractInline("ENTITIES")),
|
|
77
|
-
concepts: splitList(extractInline("CONCEPTS")),
|
|
78
|
-
arguments: splitList(extractSection("ARGUMENTS")),
|
|
79
|
-
contradictions: splitList(extractSection("CONTRADICTIONS")).filter((s) => s.toLowerCase() !== "none"),
|
|
80
|
-
structure: extractInline("STRUCTURE"),
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
// ---------------------------------------------------------------------------
|
|
84
|
-
// Public API
|
|
85
|
-
// ---------------------------------------------------------------------------
|
|
86
|
-
/**
|
|
87
|
-
* Run the nashsu 2-step CoT pipeline. Always sequential: Step 1 completes
|
|
88
|
-
* before Step 2 begins.
|
|
89
|
-
*
|
|
90
|
-
* @param concept - Concept name being compiled (used in prompts).
|
|
91
|
-
* @param formattedMaterials - Pre-formatted material string from provenance.formatForSynthesis.
|
|
92
|
-
* @param provider - Injected LLM provider (use createDeterministicStub in tests).
|
|
93
|
-
*/
|
|
94
|
-
export async function runCoT(concept, formattedMaterials, provider) {
|
|
95
|
-
// Step 1: analysis — must complete before Step 2
|
|
96
|
-
const step1Raw = await provider.complete(buildStep1Prompt(concept, formattedMaterials));
|
|
97
|
-
const step1 = parseStep1(step1Raw);
|
|
98
|
-
// Step 2: synthesis — uses Step 1 as context
|
|
99
|
-
const body = await provider.complete(buildStep2Prompt(concept, formattedMaterials, step1));
|
|
100
|
-
return { step1, body };
|
|
101
|
-
}
|
|
102
|
-
// ---------------------------------------------------------------------------
|
|
103
|
-
// Deterministic stub provider (for tests and offline environments)
|
|
104
|
-
// ---------------------------------------------------------------------------
|
|
105
|
-
/**
|
|
106
|
-
* A deterministic LLMProvider stub that produces predictable CoT output.
|
|
107
|
-
* Does NOT make network calls. Safe for vitest.
|
|
108
|
-
*/
|
|
109
|
-
export function createDeterministicStub() {
|
|
110
|
-
return {
|
|
111
|
-
async complete(prompt) {
|
|
112
|
-
// Detect Step 1 by the presence of the ENTITIES section label
|
|
113
|
-
if (prompt.includes("ENTITIES:") && prompt.includes("ARGUMENTS:")) {
|
|
114
|
-
const conceptMatch = /concept "([^"]+)"/.exec(prompt);
|
|
115
|
-
const concept = conceptMatch?.[1] ?? "unknown";
|
|
116
|
-
return [
|
|
117
|
-
`ENTITIES: ${concept}, entity-A, entity-B`,
|
|
118
|
-
`CONCEPTS: ${concept}-theory, ${concept}-practice, meta-${concept}`,
|
|
119
|
-
`ARGUMENTS:`,
|
|
120
|
-
`- ${concept} is fundamental to knowledge organization`,
|
|
121
|
-
`- Multiple sources confirm ${concept} utility`,
|
|
122
|
-
`CONTRADICTIONS:`,
|
|
123
|
-
`- none`,
|
|
124
|
-
`STRUCTURE: ${concept} connects entity-A and entity-B into a structured knowledge graph`,
|
|
125
|
-
].join("\n");
|
|
126
|
-
}
|
|
127
|
-
// Step 2: synthesis response
|
|
128
|
-
const conceptMatch = /concept page for "([^"]+)"/.exec(prompt);
|
|
129
|
-
const concept = conceptMatch?.[1] ?? "unknown";
|
|
130
|
-
return [
|
|
131
|
-
`## ${concept}`,
|
|
132
|
-
``,
|
|
133
|
-
`${concept} is a foundational concept in knowledge management. It connects related ideas and provides structure to information.`,
|
|
134
|
-
``,
|
|
135
|
-
`## Key Properties`,
|
|
136
|
-
``,
|
|
137
|
-
`- Relates to [[entity-A]] and [[entity-B]]`,
|
|
138
|
-
`- Supports [[${concept}-theory]] and [[${concept}-practice]]`,
|
|
139
|
-
``,
|
|
140
|
-
`## Applications`,
|
|
141
|
-
``,
|
|
142
|
-
`${concept} is applied in knowledge graphs and [[meta-${concept}]] contexts.`,
|
|
143
|
-
``,
|
|
144
|
-
`## See Also`,
|
|
145
|
-
``,
|
|
146
|
-
`- [[${concept}-theory]]`,
|
|
147
|
-
`- [[${concept}-practice]]`,
|
|
148
|
-
`- [[meta-${concept}]]`,
|
|
149
|
-
].join("\n");
|
|
150
|
-
},
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=cot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cot.js","sourceRoot":"","sources":["../../../src/engine/compile/cot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Atomicstrata 2-phase separation for compile execution.
|
|
3
|
-
*
|
|
4
|
-
* CONCEPT-ONLY: The 2-phase approach (extract-all-without-writing → generate)
|
|
5
|
-
* is absorbed from atomicstrata as a conceptual pattern. No verbatim code.
|
|
6
|
-
*
|
|
7
|
-
* Phase A = extract-all-without-writing
|
|
8
|
-
* Pure read: load all material files from disk. Zero vault mutation.
|
|
9
|
-
*
|
|
10
|
-
* Phase B = generate
|
|
11
|
-
* LLM synthesis writes to the processed/ tier ONLY. Never writes to wiki/
|
|
12
|
-
* directly. Promotion from processed/ → wiki/ is the collection owner's
|
|
13
|
-
* responsibility (M3).
|
|
14
|
-
*
|
|
15
|
-
* Hard constraint: Phase A and Phase B NEVER overlap in the same execution
|
|
16
|
-
* context. Enforced by a module-level phase lock.
|
|
17
|
-
*/
|
|
18
|
-
import type { FolderGradeMap, PhaseAResult } from "./types.js";
|
|
19
|
-
/**
|
|
20
|
-
* Reset the phase lock. For testing only — allows sequential phase tests
|
|
21
|
-
* without process restart.
|
|
22
|
-
*/
|
|
23
|
-
export declare function resetPhaseLock(): void;
|
|
24
|
-
/**
|
|
25
|
-
* Phase A: load all material files from disk and apply provenance grades.
|
|
26
|
-
*
|
|
27
|
-
* Pure read — no vault mutation. The phase lock prevents Phase B from
|
|
28
|
-
* starting while Phase A is running.
|
|
29
|
-
*
|
|
30
|
-
* @param materialPaths - Vault-relative paths to load.
|
|
31
|
-
* @param vaultPath - Absolute path to vault root.
|
|
32
|
-
* @param gradeMap - Folder->grade map resolved at setup time.
|
|
33
|
-
*/
|
|
34
|
-
export declare function phaseA(materialPaths: ReadonlyArray<string>, vaultPath: string, gradeMap: FolderGradeMap): Promise<PhaseAResult>;
|
|
35
|
-
/**
|
|
36
|
-
* Phase B: write synthesized output to the processed/ tier.
|
|
37
|
-
*
|
|
38
|
-
* NEVER writes to wiki/ directly. The path guard enforces the tier boundary:
|
|
39
|
-
* if `processedDir` contains "/wiki/" or ends with "/wiki", an error is thrown.
|
|
40
|
-
*
|
|
41
|
-
* @param conceptId - Concept identifier used as the output filename (no extension).
|
|
42
|
-
* @param body - Synthesized Markdown body from the CoT pipeline.
|
|
43
|
-
* @param processedDir - Absolute path to the processed/ output directory.
|
|
44
|
-
* @param writeFn - Injected write function; defaults replaced in tests for isolation.
|
|
45
|
-
* @returns Absolute path to the written file.
|
|
46
|
-
*/
|
|
47
|
-
export declare function phaseB(conceptId: string, body: string, processedDir: string, writeFn: (filePath: string, content: string) => Promise<void>): Promise<string>;
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Atomicstrata 2-phase separation for compile execution.
|
|
3
|
-
*
|
|
4
|
-
* CONCEPT-ONLY: The 2-phase approach (extract-all-without-writing → generate)
|
|
5
|
-
* is absorbed from atomicstrata as a conceptual pattern. No verbatim code.
|
|
6
|
-
*
|
|
7
|
-
* Phase A = extract-all-without-writing
|
|
8
|
-
* Pure read: load all material files from disk. Zero vault mutation.
|
|
9
|
-
*
|
|
10
|
-
* Phase B = generate
|
|
11
|
-
* LLM synthesis writes to the processed/ tier ONLY. Never writes to wiki/
|
|
12
|
-
* directly. Promotion from processed/ → wiki/ is the collection owner's
|
|
13
|
-
* responsibility (M3).
|
|
14
|
-
*
|
|
15
|
-
* Hard constraint: Phase A and Phase B NEVER overlap in the same execution
|
|
16
|
-
* context. Enforced by a module-level phase lock.
|
|
17
|
-
*/
|
|
18
|
-
import { readFile } from "node:fs/promises";
|
|
19
|
-
import path from "node:path";
|
|
20
|
-
import { applyGrades } from "./provenance.js";
|
|
21
|
-
let _activePhase = "none";
|
|
22
|
-
function acquirePhase(phase) {
|
|
23
|
-
if (_activePhase !== "none") {
|
|
24
|
-
throw new Error(`Phase ${phase} cannot start while Phase ${_activePhase} is active. ` +
|
|
25
|
-
`Phase A and Phase B must never overlap in the same execution context.`);
|
|
26
|
-
}
|
|
27
|
-
_activePhase = phase;
|
|
28
|
-
}
|
|
29
|
-
function releasePhase() {
|
|
30
|
-
_activePhase = "none";
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Reset the phase lock. For testing only — allows sequential phase tests
|
|
34
|
-
* without process restart.
|
|
35
|
-
*/
|
|
36
|
-
export function resetPhaseLock() {
|
|
37
|
-
_activePhase = "none";
|
|
38
|
-
}
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
// Phase A — extract-all-without-writing (pure read)
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
/**
|
|
43
|
-
* Phase A: load all material files from disk and apply provenance grades.
|
|
44
|
-
*
|
|
45
|
-
* Pure read — no vault mutation. The phase lock prevents Phase B from
|
|
46
|
-
* starting while Phase A is running.
|
|
47
|
-
*
|
|
48
|
-
* @param materialPaths - Vault-relative paths to load.
|
|
49
|
-
* @param vaultPath - Absolute path to vault root.
|
|
50
|
-
* @param gradeMap - Folder->grade map resolved at setup time.
|
|
51
|
-
*/
|
|
52
|
-
export async function phaseA(materialPaths, vaultPath, gradeMap) {
|
|
53
|
-
acquirePhase("A");
|
|
54
|
-
try {
|
|
55
|
-
const rawMaterials = await Promise.all(materialPaths.map(async (relPath) => {
|
|
56
|
-
const abs = path.join(vaultPath, relPath);
|
|
57
|
-
const text = await readFile(abs, "utf8");
|
|
58
|
-
return { path: relPath, text };
|
|
59
|
-
}));
|
|
60
|
-
const materials = applyGrades(rawMaterials, gradeMap);
|
|
61
|
-
return { materials };
|
|
62
|
-
}
|
|
63
|
-
finally {
|
|
64
|
-
releasePhase();
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// ---------------------------------------------------------------------------
|
|
68
|
-
// Phase B — generate (writes to processed/ tier only)
|
|
69
|
-
// ---------------------------------------------------------------------------
|
|
70
|
-
/**
|
|
71
|
-
* Phase B: write synthesized output to the processed/ tier.
|
|
72
|
-
*
|
|
73
|
-
* NEVER writes to wiki/ directly. The path guard enforces the tier boundary:
|
|
74
|
-
* if `processedDir` contains "/wiki/" or ends with "/wiki", an error is thrown.
|
|
75
|
-
*
|
|
76
|
-
* @param conceptId - Concept identifier used as the output filename (no extension).
|
|
77
|
-
* @param body - Synthesized Markdown body from the CoT pipeline.
|
|
78
|
-
* @param processedDir - Absolute path to the processed/ output directory.
|
|
79
|
-
* @param writeFn - Injected write function; defaults replaced in tests for isolation.
|
|
80
|
-
* @returns Absolute path to the written file.
|
|
81
|
-
*/
|
|
82
|
-
export async function phaseB(conceptId, body, processedDir, writeFn) {
|
|
83
|
-
acquirePhase("B");
|
|
84
|
-
try {
|
|
85
|
-
// Tier boundary guard: processed/ must not resolve to wiki/
|
|
86
|
-
const normalised = processedDir.replace(/\\/g, "/");
|
|
87
|
-
if (normalised.includes("/wiki/") ||
|
|
88
|
-
normalised.endsWith("/wiki")) {
|
|
89
|
-
throw new Error(`Phase B: processedDir "${processedDir}" resolves to the wiki/ tier. ` +
|
|
90
|
-
`Phase B must write ONLY to the processed/ tier. ` +
|
|
91
|
-
`Promotion from processed/ to wiki/ is the collection owner's responsibility.`);
|
|
92
|
-
}
|
|
93
|
-
const outputPath = path.join(processedDir, `${conceptId}.md`);
|
|
94
|
-
await writeFn(outputPath, body);
|
|
95
|
-
return outputPath;
|
|
96
|
-
}
|
|
97
|
-
finally {
|
|
98
|
-
releasePhase();
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=phases.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"phases.js","sourceRoot":"","sources":["../../../src/engine/compile/phases.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAO9C,IAAI,YAAY,GAAgB,MAAM,CAAC;AAEvC,SAAS,YAAY,CAAC,KAAgB;IACpC,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,6BAA6B,YAAY,cAAc;YACnE,uEAAuE,CAC1E,CAAC;IACJ,CAAC;IACD,YAAY,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,SAAS,YAAY;IACnB,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,aAAoC,EACpC,SAAiB,EACjB,QAAwB;IAExB,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QACF,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACtD,OAAO,EAAE,SAAS,EAAE,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,YAAY,EAAE,CAAC;IACjB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,SAAiB,EACjB,IAAY,EACZ,YAAoB,EACpB,OAA6D;IAE7D,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACpD,IACE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC5B,CAAC;YACD,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,gCAAgC;gBACpE,kDAAkD;gBAClD,8EAA8E,CACjF,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;QAC9D,MAAM,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,UAAU,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,YAAY,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Provenance grade resolution and synthesis context weighting.
|
|
3
|
-
*
|
|
4
|
-
* Grade derives from a folder->grade map resolved at setup-time (never hardcoded).
|
|
5
|
-
* In synthesis context: authored weight is raised to preserve individual voice.
|
|
6
|
-
* Priority: authored > curated > external-raw.
|
|
7
|
-
*
|
|
8
|
-
* Self-authored pattern from bstack `terminology` skill.
|
|
9
|
-
*/
|
|
10
|
-
import type { FolderGradeMap, Material, ProvenanceGrade } from "./types.js";
|
|
11
|
-
/**
|
|
12
|
-
* Resolve the provenance grade of a vault-relative document path using
|
|
13
|
-
* the folder->grade map. Longest-prefix match wins.
|
|
14
|
-
*
|
|
15
|
-
* Falls back to "external-raw" when no prefix matches.
|
|
16
|
-
*/
|
|
17
|
-
export declare function resolveGrade(docPath: string, map: FolderGradeMap): ProvenanceGrade;
|
|
18
|
-
/**
|
|
19
|
-
* Apply a grade map to a list of raw materials, returning Material[] with
|
|
20
|
-
* the `grade` field populated.
|
|
21
|
-
*/
|
|
22
|
-
export declare function applyGrades(materials: ReadonlyArray<{
|
|
23
|
-
path: string;
|
|
24
|
-
text: string;
|
|
25
|
-
}>, map: FolderGradeMap): Material[];
|
|
26
|
-
/**
|
|
27
|
-
* Numeric weight per grade for synthesis context ordering.
|
|
28
|
-
* Authored is weighted highest (3) to preserve individual voice.
|
|
29
|
-
*/
|
|
30
|
-
export declare const GRADE_WEIGHTS: Readonly<Record<ProvenanceGrade, number>>;
|
|
31
|
-
/**
|
|
32
|
-
* Sort materials so authored items appear first in the synthesis context,
|
|
33
|
-
* followed by curated, then external-raw. Stable sort within each grade.
|
|
34
|
-
*/
|
|
35
|
-
export declare function sortByProvenance(materials: ReadonlyArray<Material>): Material[];
|
|
36
|
-
/**
|
|
37
|
-
* Return the dominant (highest-priority) grade among the given materials.
|
|
38
|
-
* Returns "external-raw" for an empty array.
|
|
39
|
-
*/
|
|
40
|
-
export declare function dominantGrade(materials: ReadonlyArray<Material>): ProvenanceGrade;
|
|
41
|
-
/**
|
|
42
|
-
* Format materials for the synthesis LLM prompt, ordered by provenance weight.
|
|
43
|
-
* Authored items are labelled to signal individual-voice preservation.
|
|
44
|
-
*/
|
|
45
|
-
export declare function formatForSynthesis(materials: ReadonlyArray<Material>): string;
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Provenance grade resolution and synthesis context weighting.
|
|
3
|
-
*
|
|
4
|
-
* Grade derives from a folder->grade map resolved at setup-time (never hardcoded).
|
|
5
|
-
* In synthesis context: authored weight is raised to preserve individual voice.
|
|
6
|
-
* Priority: authored > curated > external-raw.
|
|
7
|
-
*
|
|
8
|
-
* Self-authored pattern from bstack `terminology` skill.
|
|
9
|
-
*/
|
|
10
|
-
// ---------------------------------------------------------------------------
|
|
11
|
-
// Grade order (index = priority; lower index = higher priority)
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
const GRADE_ORDER = [
|
|
14
|
-
"authored",
|
|
15
|
-
"curated",
|
|
16
|
-
"external-raw",
|
|
17
|
-
];
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
// Grade resolution
|
|
20
|
-
// ---------------------------------------------------------------------------
|
|
21
|
-
/**
|
|
22
|
-
* Resolve the provenance grade of a vault-relative document path using
|
|
23
|
-
* the folder->grade map. Longest-prefix match wins.
|
|
24
|
-
*
|
|
25
|
-
* Falls back to "external-raw" when no prefix matches.
|
|
26
|
-
*/
|
|
27
|
-
export function resolveGrade(docPath, map) {
|
|
28
|
-
let bestMatch = "";
|
|
29
|
-
let bestGrade = "external-raw";
|
|
30
|
-
for (const [folder, grade] of Object.entries(map)) {
|
|
31
|
-
// Normalize: treat "notes/" and "notes" identically
|
|
32
|
-
const prefix = folder.endsWith("/") ? folder : `${folder}/`;
|
|
33
|
-
const matches = docPath.startsWith(prefix) || docPath === folder;
|
|
34
|
-
if (matches && folder.length > bestMatch.length) {
|
|
35
|
-
bestMatch = folder;
|
|
36
|
-
bestGrade = grade;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return bestGrade;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Apply a grade map to a list of raw materials, returning Material[] with
|
|
43
|
-
* the `grade` field populated.
|
|
44
|
-
*/
|
|
45
|
-
export function applyGrades(materials, map) {
|
|
46
|
-
return materials.map((m) => ({
|
|
47
|
-
path: m.path,
|
|
48
|
-
text: m.text,
|
|
49
|
-
grade: resolveGrade(m.path, map),
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
// Synthesis context weighting
|
|
54
|
-
// ---------------------------------------------------------------------------
|
|
55
|
-
/**
|
|
56
|
-
* Numeric weight per grade for synthesis context ordering.
|
|
57
|
-
* Authored is weighted highest (3) to preserve individual voice.
|
|
58
|
-
*/
|
|
59
|
-
export const GRADE_WEIGHTS = {
|
|
60
|
-
authored: 3,
|
|
61
|
-
curated: 2,
|
|
62
|
-
"external-raw": 1,
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* Sort materials so authored items appear first in the synthesis context,
|
|
66
|
-
* followed by curated, then external-raw. Stable sort within each grade.
|
|
67
|
-
*/
|
|
68
|
-
export function sortByProvenance(materials) {
|
|
69
|
-
return [...materials].sort((a, b) => GRADE_WEIGHTS[b.grade] - GRADE_WEIGHTS[a.grade]);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Return the dominant (highest-priority) grade among the given materials.
|
|
73
|
-
* Returns "external-raw" for an empty array.
|
|
74
|
-
*/
|
|
75
|
-
export function dominantGrade(materials) {
|
|
76
|
-
if (materials.length === 0)
|
|
77
|
-
return "external-raw";
|
|
78
|
-
let best = "external-raw";
|
|
79
|
-
for (const m of materials) {
|
|
80
|
-
if (GRADE_ORDER.indexOf(m.grade) < GRADE_ORDER.indexOf(best)) {
|
|
81
|
-
best = m.grade;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return best;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Format materials for the synthesis LLM prompt, ordered by provenance weight.
|
|
88
|
-
* Authored items are labelled to signal individual-voice preservation.
|
|
89
|
-
*/
|
|
90
|
-
export function formatForSynthesis(materials) {
|
|
91
|
-
const sorted = sortByProvenance(materials);
|
|
92
|
-
return sorted
|
|
93
|
-
.map((m) => {
|
|
94
|
-
const label = m.grade === "authored"
|
|
95
|
-
? "[AUTHORED — preserve individual voice]"
|
|
96
|
-
: m.grade === "curated"
|
|
97
|
-
? "[CURATED]"
|
|
98
|
-
: "[EXTERNAL]";
|
|
99
|
-
return `${label}\nSource: ${m.path}\n${m.text}`;
|
|
100
|
-
})
|
|
101
|
-
.join("\n\n---\n\n");
|
|
102
|
-
}
|
|
103
|
-
//# sourceMappingURL=provenance.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.js","sourceRoot":"","sources":["../../../src/engine/compile/provenance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Disk-persisted SHA cache for the compile engine.
|
|
3
|
-
*
|
|
4
|
-
* Persists to .llmwiki/sha-cache.json inside the configured dotfolder.
|
|
5
|
-
* .llmwiki is a never-synced dotfolder (not committed to git, not synced by Obsidian).
|
|
6
|
-
*
|
|
7
|
-
* SHA-incremental pattern: bstack `terminology` skill (self-authored, Steps 2-4).
|
|
8
|
-
*/
|
|
9
|
-
/** Compute SHA-256 hex digest of the given content string. */
|
|
10
|
-
export declare function sha256(content: string): string;
|
|
11
|
-
/**
|
|
12
|
-
* Compute a stable fingerprint SHA for a set of materials.
|
|
13
|
-
*
|
|
14
|
-
* Materials are sorted by path before hashing so order does not matter.
|
|
15
|
-
* The fingerprint changes when any material's path or text changes, or
|
|
16
|
-
* when materials are added or removed.
|
|
17
|
-
*/
|
|
18
|
-
export declare function fingerprint(materials: ReadonlyArray<{
|
|
19
|
-
path: string;
|
|
20
|
-
text: string;
|
|
21
|
-
}>): string;
|
|
22
|
-
/** Maps concept ID (vault-relative path) → SHA-256 of last compiled material fingerprint. */
|
|
23
|
-
export type SHACache = Record<string, string>;
|
|
24
|
-
/**
|
|
25
|
-
* Load the SHA cache from disk.
|
|
26
|
-
* Returns an empty cache if the file is absent or unreadable.
|
|
27
|
-
*/
|
|
28
|
-
export declare function loadSHACache(dotLlmwiki: string): Promise<SHACache>;
|
|
29
|
-
/**
|
|
30
|
-
* Persist the SHA cache to disk.
|
|
31
|
-
* Creates the dotLlmwiki directory if it does not exist.
|
|
32
|
-
*/
|
|
33
|
-
export declare function saveSHACache(dotLlmwiki: string, cache: SHACache): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Compare a new material-fingerprint SHA against the cached value for `conceptId`.
|
|
36
|
-
*
|
|
37
|
-
* Returns:
|
|
38
|
-
* - `"new"` — concept not yet in cache (first compile)
|
|
39
|
-
* - `"unchanged"` — SHA matches; skip recompile (R12 incremental)
|
|
40
|
-
* - `"changed"` — SHA differs; trigger recompile
|
|
41
|
-
*/
|
|
42
|
-
export declare function diffSHA(cache: SHACache, conceptId: string, newSHA: string): "unchanged" | "changed" | "new";
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Disk-persisted SHA cache for the compile engine.
|
|
3
|
-
*
|
|
4
|
-
* Persists to .llmwiki/sha-cache.json inside the configured dotfolder.
|
|
5
|
-
* .llmwiki is a never-synced dotfolder (not committed to git, not synced by Obsidian).
|
|
6
|
-
*
|
|
7
|
-
* SHA-incremental pattern: bstack `terminology` skill (self-authored, Steps 2-4).
|
|
8
|
-
*/
|
|
9
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
10
|
-
import { createHash } from "node:crypto";
|
|
11
|
-
import path from "node:path";
|
|
12
|
-
// ---------------------------------------------------------------------------
|
|
13
|
-
// SHA utilities
|
|
14
|
-
// ---------------------------------------------------------------------------
|
|
15
|
-
/** Compute SHA-256 hex digest of the given content string. */
|
|
16
|
-
export function sha256(content) {
|
|
17
|
-
return createHash("sha256").update(content, "utf8").digest("hex");
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Compute a stable fingerprint SHA for a set of materials.
|
|
21
|
-
*
|
|
22
|
-
* Materials are sorted by path before hashing so order does not matter.
|
|
23
|
-
* The fingerprint changes when any material's path or text changes, or
|
|
24
|
-
* when materials are added or removed.
|
|
25
|
-
*/
|
|
26
|
-
export function fingerprint(materials) {
|
|
27
|
-
const sorted = [...materials].sort((a, b) => a.path.localeCompare(b.path));
|
|
28
|
-
const combined = sorted.map((m) => `${m.path}\x00${m.text}`).join("\x01");
|
|
29
|
-
return sha256(combined);
|
|
30
|
-
}
|
|
31
|
-
// ---------------------------------------------------------------------------
|
|
32
|
-
// Cache file path
|
|
33
|
-
// ---------------------------------------------------------------------------
|
|
34
|
-
function cacheFilePath(dotLlmwiki) {
|
|
35
|
-
return path.join(dotLlmwiki, "sha-cache.json");
|
|
36
|
-
}
|
|
37
|
-
// ---------------------------------------------------------------------------
|
|
38
|
-
// Persistence
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
/**
|
|
41
|
-
* Load the SHA cache from disk.
|
|
42
|
-
* Returns an empty cache if the file is absent or unreadable.
|
|
43
|
-
*/
|
|
44
|
-
export async function loadSHACache(dotLlmwiki) {
|
|
45
|
-
try {
|
|
46
|
-
const raw = await readFile(cacheFilePath(dotLlmwiki), "utf8");
|
|
47
|
-
const parsed = JSON.parse(raw);
|
|
48
|
-
if (parsed !== null &&
|
|
49
|
-
typeof parsed === "object" &&
|
|
50
|
-
!Array.isArray(parsed)) {
|
|
51
|
-
return parsed;
|
|
52
|
-
}
|
|
53
|
-
return {};
|
|
54
|
-
}
|
|
55
|
-
catch {
|
|
56
|
-
return {};
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Persist the SHA cache to disk.
|
|
61
|
-
* Creates the dotLlmwiki directory if it does not exist.
|
|
62
|
-
*/
|
|
63
|
-
export async function saveSHACache(dotLlmwiki, cache) {
|
|
64
|
-
await mkdir(dotLlmwiki, { recursive: true });
|
|
65
|
-
await writeFile(cacheFilePath(dotLlmwiki), JSON.stringify(cache, null, 2), "utf8");
|
|
66
|
-
}
|
|
67
|
-
// ---------------------------------------------------------------------------
|
|
68
|
-
// Diff
|
|
69
|
-
// ---------------------------------------------------------------------------
|
|
70
|
-
/**
|
|
71
|
-
* Compare a new material-fingerprint SHA against the cached value for `conceptId`.
|
|
72
|
-
*
|
|
73
|
-
* Returns:
|
|
74
|
-
* - `"new"` — concept not yet in cache (first compile)
|
|
75
|
-
* - `"unchanged"` — SHA matches; skip recompile (R12 incremental)
|
|
76
|
-
* - `"changed"` — SHA differs; trigger recompile
|
|
77
|
-
*/
|
|
78
|
-
export function diffSHA(cache, conceptId, newSHA) {
|
|
79
|
-
const cached = cache[conceptId];
|
|
80
|
-
if (cached === undefined)
|
|
81
|
-
return "new";
|
|
82
|
-
if (cached === newSHA)
|
|
83
|
-
return "unchanged";
|
|
84
|
-
return "changed";
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=sha-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sha-cache.js","sourceRoot":"","sources":["../../../src/engine/compile/sha-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,8DAA8D;AAC9D,MAAM,UAAU,MAAM,CAAC,OAAe;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,SAAwD;IAClF,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,aAAa,CAAC,UAAkB;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACjD,CAAC;AASD,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IACE,MAAM,KAAK,IAAI;YACf,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACtB,CAAC;YACD,OAAO,MAAkB,CAAC;QAC5B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,KAAe;IACpE,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACrF,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CACrB,KAAe,EACf,SAAiB,EACjB,MAAc;IAEd,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,WAAW,CAAC;IAC1C,OAAO,SAAS,CAAC;AACnB,CAAC"}
|