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,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wiki Collection Owner.
|
|
3
|
-
*
|
|
4
|
-
* Five responsibilities (Astro-Han collection owner pattern, MIT — idea absorption):
|
|
5
|
-
* 1. Namespace / identity — concept ID → file path mapping
|
|
6
|
-
* 2. Link-graph closure — verify no dangling [[wikilinks]]
|
|
7
|
-
* 3. Staleness ledger — delegate to ledger.ts
|
|
8
|
-
* 4. Navigation surfaces — delegate to navigation.ts
|
|
9
|
-
* 5. Processed→wiki promotion — the ONLY path into wiki/
|
|
10
|
-
*
|
|
11
|
-
* Nvk 3-phase hard separation (Apache-2.0 — idea absorption):
|
|
12
|
-
* Research(M1) → Compile(M2, sequential) → Wiki(read-only query surface)
|
|
13
|
-
* - A wiki *query* NEVER triggers compile.
|
|
14
|
-
* - Compile NEVER writes wiki/ directly (promotion only).
|
|
15
|
-
* - wiki/ is a read-only query surface; compile writes to processed/ only.
|
|
16
|
-
* - Sync boundary: processed/ is engine-internal and is NEVER synced to the
|
|
17
|
-
* Obsidian vault. Only wiki/ crosses the Obsidian sync boundary.
|
|
18
|
-
*/
|
|
19
|
-
import type { CascadeFlipResult, LinkClosureResult, NowFn, StalenessLedger } from "./types.js";
|
|
20
|
-
/**
|
|
21
|
-
* Map a concept ID (vault-relative path) to an absolute file path in wiki/.
|
|
22
|
-
* Uses only the basename so nested concept IDs are flattened to wiki/ root.
|
|
23
|
-
*/
|
|
24
|
-
export declare function conceptToWikiPath(wikiDir: string, conceptId: string): string;
|
|
25
|
-
/**
|
|
26
|
-
* Map a concept ID to its processed/ output path.
|
|
27
|
-
*/
|
|
28
|
-
export declare function conceptToProcessedPath(processedDir: string, conceptId: string): string;
|
|
29
|
-
/**
|
|
30
|
-
* Extract all [[wikilink]] targets from a Markdown body.
|
|
31
|
-
* Exported for use by lint.ts.
|
|
32
|
-
*/
|
|
33
|
-
export declare function extractWikilinks(body: string): string[];
|
|
34
|
-
/**
|
|
35
|
-
* Check link-graph closure: every [[wikilink]] in `body` must resolve to a
|
|
36
|
-
* page currently present in wiki/.
|
|
37
|
-
*
|
|
38
|
-
* @param wikiDir - Absolute path to the wiki/ directory.
|
|
39
|
-
* @param body - Markdown body to check.
|
|
40
|
-
*/
|
|
41
|
-
export declare function checkLinkClosure(wikiDir: string, body: string): Promise<LinkClosureResult>;
|
|
42
|
-
/**
|
|
43
|
-
* Promote a compiled page from processed/ to wiki/.
|
|
44
|
-
*
|
|
45
|
-
* Called ONLY after the cascade pass completes.
|
|
46
|
-
* Compile NEVER calls this directly — promotion is the sole entry point into wiki/.
|
|
47
|
-
*
|
|
48
|
-
* @param processedDir - Absolute path to the processed/ tier (Phase-B output).
|
|
49
|
-
* @param wikiDir - Absolute path to the wiki/ directory.
|
|
50
|
-
* @param conceptId - Vault-relative concept ID (basename used as filename).
|
|
51
|
-
*/
|
|
52
|
-
export declare function promoteToWiki(processedDir: string, wikiDir: string, conceptId: string): Promise<void>;
|
|
53
|
-
export interface CollectionRunOptions {
|
|
54
|
-
/** Absolute path to the processed/ tier (Phase-B compile output). */
|
|
55
|
-
processedDir: string;
|
|
56
|
-
/** Absolute path to the wiki/ directory (read-only query surface). */
|
|
57
|
-
wikiDir: string;
|
|
58
|
-
/** Absolute path to the .llmwiki/ dotfolder (ledger + SHA cache). */
|
|
59
|
-
dotLlmwiki: string;
|
|
60
|
-
/** Vault-relative concept ID that was just compiled. */
|
|
61
|
-
conceptId: string;
|
|
62
|
-
/** Human-readable concept name (for log.md). */
|
|
63
|
-
conceptName: string;
|
|
64
|
-
/** Backlinks returned by the M2 cascade pass (affected_backlinks). */
|
|
65
|
-
affectedBacklinks: readonly string[];
|
|
66
|
-
/** Injected clock returning ISO-8601 string. */
|
|
67
|
-
now: NowFn;
|
|
68
|
-
}
|
|
69
|
-
export interface CollectionRunResult {
|
|
70
|
-
/** Concept IDs whose CLEAN state was flipped to DIRTY by the cascade. */
|
|
71
|
-
cascadeFlipped: CascadeFlipResult;
|
|
72
|
-
/** Link-graph closure result for the newly promoted page. */
|
|
73
|
-
linkClosure: LinkClosureResult;
|
|
74
|
-
/** The ledger state after this run. */
|
|
75
|
-
ledger: StalenessLedger;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Run a full collection cycle after a successful M2 compile.
|
|
79
|
-
*
|
|
80
|
-
* Order (enforced to satisfy nvk 3-phase separation):
|
|
81
|
-
* 1. Promote processed/→wiki/ for the compiled concept.
|
|
82
|
-
* 2. Mark compiled concept CLEAN in the ledger.
|
|
83
|
-
* 3. Apply cascade: flip CLEAN backlinks to DIRTY.
|
|
84
|
-
* 4. Detect stubs: wikilinks in the promoted page with no wiki/ target.
|
|
85
|
-
* 5. Detect orphans: wiki/ pages with no incoming wikilinks.
|
|
86
|
-
* 6. Regenerate navigation surfaces (index.md + log.md).
|
|
87
|
-
* 7. Persist ledger.
|
|
88
|
-
*
|
|
89
|
-
* A wiki *query* NEVER calls this function (nvk hard separation enforced here).
|
|
90
|
-
*/
|
|
91
|
-
export declare function runCollection(opts: CollectionRunOptions): Promise<CollectionRunResult>;
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Wiki Collection Owner.
|
|
3
|
-
*
|
|
4
|
-
* Five responsibilities (Astro-Han collection owner pattern, MIT — idea absorption):
|
|
5
|
-
* 1. Namespace / identity — concept ID → file path mapping
|
|
6
|
-
* 2. Link-graph closure — verify no dangling [[wikilinks]]
|
|
7
|
-
* 3. Staleness ledger — delegate to ledger.ts
|
|
8
|
-
* 4. Navigation surfaces — delegate to navigation.ts
|
|
9
|
-
* 5. Processed→wiki promotion — the ONLY path into wiki/
|
|
10
|
-
*
|
|
11
|
-
* Nvk 3-phase hard separation (Apache-2.0 — idea absorption):
|
|
12
|
-
* Research(M1) → Compile(M2, sequential) → Wiki(read-only query surface)
|
|
13
|
-
* - A wiki *query* NEVER triggers compile.
|
|
14
|
-
* - Compile NEVER writes wiki/ directly (promotion only).
|
|
15
|
-
* - wiki/ is a read-only query surface; compile writes to processed/ only.
|
|
16
|
-
* - Sync boundary: processed/ is engine-internal and is NEVER synced to the
|
|
17
|
-
* Obsidian vault. Only wiki/ crosses the Obsidian sync boundary.
|
|
18
|
-
*/
|
|
19
|
-
import { copyFile, mkdir, readdir, readFile } from "node:fs/promises";
|
|
20
|
-
import path from "node:path";
|
|
21
|
-
import { applyAffectedBacklinks, loadLedger, saveLedger, transitionClean, transitionOrphan, transitionStub, } from "./ledger.js";
|
|
22
|
-
import { appendLog, regenerateIndex } from "./navigation.js";
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
// 1. Namespace / identity
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
/**
|
|
27
|
-
* Map a concept ID (vault-relative path) to an absolute file path in wiki/.
|
|
28
|
-
* Uses only the basename so nested concept IDs are flattened to wiki/ root.
|
|
29
|
-
*/
|
|
30
|
-
export function conceptToWikiPath(wikiDir, conceptId) {
|
|
31
|
-
return path.join(wikiDir, path.basename(conceptId));
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Map a concept ID to its processed/ output path.
|
|
35
|
-
*/
|
|
36
|
-
export function conceptToProcessedPath(processedDir, conceptId) {
|
|
37
|
-
return path.join(processedDir, path.basename(conceptId));
|
|
38
|
-
}
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
// 2. Link-graph closure
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
/**
|
|
43
|
-
* Extract all [[wikilink]] targets from a Markdown body.
|
|
44
|
-
* Exported for use by lint.ts.
|
|
45
|
-
*/
|
|
46
|
-
export function extractWikilinks(body) {
|
|
47
|
-
const pattern = /\[\[([^\]]+)\]\]/g;
|
|
48
|
-
const links = [];
|
|
49
|
-
let match;
|
|
50
|
-
while ((match = pattern.exec(body)) !== null) {
|
|
51
|
-
const target = match[1];
|
|
52
|
-
if (target !== undefined)
|
|
53
|
-
links.push(target);
|
|
54
|
-
}
|
|
55
|
-
return links;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Check link-graph closure: every [[wikilink]] in `body` must resolve to a
|
|
59
|
-
* page currently present in wiki/.
|
|
60
|
-
*
|
|
61
|
-
* @param wikiDir - Absolute path to the wiki/ directory.
|
|
62
|
-
* @param body - Markdown body to check.
|
|
63
|
-
*/
|
|
64
|
-
export async function checkLinkClosure(wikiDir, body) {
|
|
65
|
-
const links = extractWikilinks(body);
|
|
66
|
-
if (links.length === 0)
|
|
67
|
-
return { dangling: [], closed: true };
|
|
68
|
-
let files = [];
|
|
69
|
-
try {
|
|
70
|
-
files = await readdir(wikiDir);
|
|
71
|
-
}
|
|
72
|
-
catch {
|
|
73
|
-
// wiki/ doesn't exist yet — every link is dangling
|
|
74
|
-
}
|
|
75
|
-
const pageNames = new Set(files
|
|
76
|
-
.filter((f) => f.endsWith(".md"))
|
|
77
|
-
.map((f) => path.basename(f, ".md")));
|
|
78
|
-
const dangling = links.filter((link) => {
|
|
79
|
-
const name = link.replace(/\.md$/, "");
|
|
80
|
-
return !pageNames.has(name);
|
|
81
|
-
});
|
|
82
|
-
return { dangling, closed: dangling.length === 0 };
|
|
83
|
-
}
|
|
84
|
-
// ---------------------------------------------------------------------------
|
|
85
|
-
// 5. Processed → wiki promotion (the ONLY path into wiki/)
|
|
86
|
-
// ---------------------------------------------------------------------------
|
|
87
|
-
/**
|
|
88
|
-
* Promote a compiled page from processed/ to wiki/.
|
|
89
|
-
*
|
|
90
|
-
* Called ONLY after the cascade pass completes.
|
|
91
|
-
* Compile NEVER calls this directly — promotion is the sole entry point into wiki/.
|
|
92
|
-
*
|
|
93
|
-
* @param processedDir - Absolute path to the processed/ tier (Phase-B output).
|
|
94
|
-
* @param wikiDir - Absolute path to the wiki/ directory.
|
|
95
|
-
* @param conceptId - Vault-relative concept ID (basename used as filename).
|
|
96
|
-
*/
|
|
97
|
-
export async function promoteToWiki(processedDir, wikiDir, conceptId) {
|
|
98
|
-
await mkdir(wikiDir, { recursive: true });
|
|
99
|
-
const src = conceptToProcessedPath(processedDir, conceptId);
|
|
100
|
-
const dst = conceptToWikiPath(wikiDir, conceptId);
|
|
101
|
-
await copyFile(src, dst);
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Run a full collection cycle after a successful M2 compile.
|
|
105
|
-
*
|
|
106
|
-
* Order (enforced to satisfy nvk 3-phase separation):
|
|
107
|
-
* 1. Promote processed/→wiki/ for the compiled concept.
|
|
108
|
-
* 2. Mark compiled concept CLEAN in the ledger.
|
|
109
|
-
* 3. Apply cascade: flip CLEAN backlinks to DIRTY.
|
|
110
|
-
* 4. Detect stubs: wikilinks in the promoted page with no wiki/ target.
|
|
111
|
-
* 5. Detect orphans: wiki/ pages with no incoming wikilinks.
|
|
112
|
-
* 6. Regenerate navigation surfaces (index.md + log.md).
|
|
113
|
-
* 7. Persist ledger.
|
|
114
|
-
*
|
|
115
|
-
* A wiki *query* NEVER calls this function (nvk hard separation enforced here).
|
|
116
|
-
*/
|
|
117
|
-
export async function runCollection(opts) {
|
|
118
|
-
const { processedDir, wikiDir, dotLlmwiki, conceptId, conceptName, affectedBacklinks, now, } = opts;
|
|
119
|
-
// Step 1: promote processed/→wiki/ (the ONLY path into wiki/)
|
|
120
|
-
await promoteToWiki(processedDir, wikiDir, conceptId);
|
|
121
|
-
// Load ledger
|
|
122
|
-
let ledger = await loadLedger(dotLlmwiki);
|
|
123
|
-
// Step 2: mark compiled concept CLEAN
|
|
124
|
-
ledger = transitionClean(ledger, conceptId, now);
|
|
125
|
-
// Step 3: cascade — flip CLEAN backlinks to DIRTY
|
|
126
|
-
const { ledger: ledgerAfterCascade, flipped } = applyAffectedBacklinks(ledger, affectedBacklinks, now);
|
|
127
|
-
ledger = ledgerAfterCascade;
|
|
128
|
-
// Step 4: detect stubs — read promoted page, check all [[wikilinks]]
|
|
129
|
-
const promotedPath = conceptToWikiPath(wikiDir, conceptId);
|
|
130
|
-
let promotedBody = "";
|
|
131
|
-
try {
|
|
132
|
-
promotedBody = await readFile(promotedPath, "utf8");
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
// promoted file unreadable — skip stub detection
|
|
136
|
-
}
|
|
137
|
-
const linkClosure = await checkLinkClosure(wikiDir, promotedBody);
|
|
138
|
-
for (const dangling of linkClosure.dangling) {
|
|
139
|
-
// Use a stable concept ID for stub entries
|
|
140
|
-
const stubId = dangling.endsWith(".md") ? dangling : `${dangling}.md`;
|
|
141
|
-
const current = ledger[stubId];
|
|
142
|
-
if (current === undefined || current.state === "STUB") {
|
|
143
|
-
ledger = transitionStub(ledger, stubId, now);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
// Step 5: detect orphans — wiki/ pages with no incoming wikilinks
|
|
147
|
-
let wikiFiles = [];
|
|
148
|
-
try {
|
|
149
|
-
wikiFiles = (await readdir(wikiDir)).filter((f) => f.endsWith(".md") && f !== "index.md" && f !== "log.md");
|
|
150
|
-
}
|
|
151
|
-
catch {
|
|
152
|
-
// ok if dir is empty
|
|
153
|
-
}
|
|
154
|
-
// Build set of all link targets found across all wiki pages
|
|
155
|
-
const allLinkTargets = new Set();
|
|
156
|
-
for (const file of wikiFiles) {
|
|
157
|
-
try {
|
|
158
|
-
const content = await readFile(path.join(wikiDir, file), "utf8");
|
|
159
|
-
for (const link of extractWikilinks(content)) {
|
|
160
|
-
allLinkTargets.add(link.replace(/\.md$/, ""));
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
// ignore unreadable files
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
for (const file of wikiFiles) {
|
|
168
|
-
const baseName = path.basename(file, ".md");
|
|
169
|
-
if (!allLinkTargets.has(baseName)) {
|
|
170
|
-
const fileConceptId = file; // use bare filename as ledger key for orphan entries
|
|
171
|
-
ledger = transitionOrphan(ledger, fileConceptId, now);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
// Step 6: regenerate navigation (index.md + log.md — always written before returning)
|
|
175
|
-
const cleanIds = Object.keys(ledger)
|
|
176
|
-
.filter((id) => ledger[id]?.state === "CLEAN")
|
|
177
|
-
.sort();
|
|
178
|
-
await regenerateIndex(wikiDir, cleanIds, now);
|
|
179
|
-
await appendLog(wikiDir, conceptName, now);
|
|
180
|
-
// Step 7: persist ledger
|
|
181
|
-
await saveLedger(dotLlmwiki, ledger);
|
|
182
|
-
return {
|
|
183
|
-
cascadeFlipped: { flipped },
|
|
184
|
-
linkClosure,
|
|
185
|
-
ledger,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=collection.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../../src/engine/wiki/collection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Staleness ledger — 5-state FSM for wiki pages.
|
|
3
|
-
*
|
|
4
|
-
* Persists to .llmwiki/staleness.json (human-readable, never synced dotfolder).
|
|
5
|
-
* All state is plain disk JSON written only on explicit calls (R2: stateless/manual).
|
|
6
|
-
* No daemon, no watcher, no setInterval.
|
|
7
|
-
*
|
|
8
|
-
* Pass the dotLlmwiki dir in — no hardcoded vault path.
|
|
9
|
-
*
|
|
10
|
-
* Full-rebuild escape hatch: delete .llmwiki/staleness.json → every known page
|
|
11
|
-
* resets to DIRTY on the next loadLedger call.
|
|
12
|
-
*/
|
|
13
|
-
import type { NowFn, StalenessLedger } from "./types.js";
|
|
14
|
-
/**
|
|
15
|
-
* Load the staleness ledger from disk.
|
|
16
|
-
* Returns an empty ledger if the file is absent or unreadable.
|
|
17
|
-
*/
|
|
18
|
-
export declare function loadLedger(dotLlmwiki: string): Promise<StalenessLedger>;
|
|
19
|
-
/**
|
|
20
|
-
* Persist the staleness ledger to disk.
|
|
21
|
-
* Creates the dotLlmwiki directory if it does not exist.
|
|
22
|
-
*/
|
|
23
|
-
export declare function saveLedger(dotLlmwiki: string, ledger: StalenessLedger): Promise<void>;
|
|
24
|
-
/** Mark a concept DIRTY (source SHA changed or cascade flip). */
|
|
25
|
-
export declare function transitionDirty(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
|
|
26
|
-
/** Mark a concept CLEAN (compile output produced successfully). */
|
|
27
|
-
export declare function transitionClean(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
|
|
28
|
-
/** Mark a concept STUB (referenced by wikilinks but no compile output exists). */
|
|
29
|
-
export declare function transitionStub(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
|
|
30
|
-
/** Mark a concept ORPHAN (no incoming wikilinks from any other wiki page). */
|
|
31
|
-
export declare function transitionOrphan(ledger: StalenessLedger, conceptId: string, now: NowFn): StalenessLedger;
|
|
32
|
-
/**
|
|
33
|
-
* Mark a concept CONFLICT (two compile sources produced conflicting content).
|
|
34
|
-
*
|
|
35
|
-
* @param conflictNote - Human-readable description of the conflict.
|
|
36
|
-
* Format: "A claims X; B claims Y" — surfaced in lint as:
|
|
37
|
-
* "> **Conflict:** A claims X; B claims Y. Unresolved."
|
|
38
|
-
*/
|
|
39
|
-
export declare function transitionConflict(ledger: StalenessLedger, conceptId: string, now: NowFn, conflictNote: string): StalenessLedger;
|
|
40
|
-
/**
|
|
41
|
-
* Full-rebuild escape hatch: delete staleness.json and return all known concept IDs
|
|
42
|
-
* re-marked as DIRTY.
|
|
43
|
-
*
|
|
44
|
-
* If the file doesn't exist, is a no-op (returns empty ledger).
|
|
45
|
-
* The caller must call saveLedger() to persist the reset state.
|
|
46
|
-
*/
|
|
47
|
-
export declare function resetLedger(dotLlmwiki: string, now: NowFn): Promise<StalenessLedger>;
|
|
48
|
-
/**
|
|
49
|
-
* Consume affected_backlinks from an M2 compile cascade return.
|
|
50
|
-
*
|
|
51
|
-
* For each affected page: if the current state is CLEAN, flip to DIRTY and
|
|
52
|
-
* queue for the next compile run. Other states are left unchanged.
|
|
53
|
-
*
|
|
54
|
-
* Returns the updated ledger and the list of concept IDs that were flipped.
|
|
55
|
-
*/
|
|
56
|
-
export declare function applyAffectedBacklinks(ledger: StalenessLedger, affectedBacklinks: readonly string[], now: NowFn): {
|
|
57
|
-
ledger: StalenessLedger;
|
|
58
|
-
flipped: string[];
|
|
59
|
-
};
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Staleness ledger — 5-state FSM for wiki pages.
|
|
3
|
-
*
|
|
4
|
-
* Persists to .llmwiki/staleness.json (human-readable, never synced dotfolder).
|
|
5
|
-
* All state is plain disk JSON written only on explicit calls (R2: stateless/manual).
|
|
6
|
-
* No daemon, no watcher, no setInterval.
|
|
7
|
-
*
|
|
8
|
-
* Pass the dotLlmwiki dir in — no hardcoded vault path.
|
|
9
|
-
*
|
|
10
|
-
* Full-rebuild escape hatch: delete .llmwiki/staleness.json → every known page
|
|
11
|
-
* resets to DIRTY on the next loadLedger call.
|
|
12
|
-
*/
|
|
13
|
-
import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
|
|
14
|
-
import path from "node:path";
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
// File path
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
function ledgerFilePath(dotLlmwiki) {
|
|
19
|
-
return path.join(dotLlmwiki, "staleness.json");
|
|
20
|
-
}
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
// Persistence
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
/**
|
|
25
|
-
* Load the staleness ledger from disk.
|
|
26
|
-
* Returns an empty ledger if the file is absent or unreadable.
|
|
27
|
-
*/
|
|
28
|
-
export async function loadLedger(dotLlmwiki) {
|
|
29
|
-
try {
|
|
30
|
-
const raw = await readFile(ledgerFilePath(dotLlmwiki), "utf8");
|
|
31
|
-
const parsed = JSON.parse(raw);
|
|
32
|
-
if (parsed !== null && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
33
|
-
return parsed;
|
|
34
|
-
}
|
|
35
|
-
return {};
|
|
36
|
-
}
|
|
37
|
-
catch {
|
|
38
|
-
return {};
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Persist the staleness ledger to disk.
|
|
43
|
-
* Creates the dotLlmwiki directory if it does not exist.
|
|
44
|
-
*/
|
|
45
|
-
export async function saveLedger(dotLlmwiki, ledger) {
|
|
46
|
-
await mkdir(dotLlmwiki, { recursive: true });
|
|
47
|
-
await writeFile(ledgerFilePath(dotLlmwiki), JSON.stringify(ledger, null, 2), "utf8");
|
|
48
|
-
}
|
|
49
|
-
// ---------------------------------------------------------------------------
|
|
50
|
-
// Internal helper
|
|
51
|
-
// ---------------------------------------------------------------------------
|
|
52
|
-
function makeEntry(state, now, extra) {
|
|
53
|
-
return { state, updatedAt: now(), ...extra };
|
|
54
|
-
}
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
// State transitions — pure functions returning a new ledger
|
|
57
|
-
// ---------------------------------------------------------------------------
|
|
58
|
-
/** Mark a concept DIRTY (source SHA changed or cascade flip). */
|
|
59
|
-
export function transitionDirty(ledger, conceptId, now) {
|
|
60
|
-
return { ...ledger, [conceptId]: makeEntry("DIRTY", now) };
|
|
61
|
-
}
|
|
62
|
-
/** Mark a concept CLEAN (compile output produced successfully). */
|
|
63
|
-
export function transitionClean(ledger, conceptId, now) {
|
|
64
|
-
return { ...ledger, [conceptId]: makeEntry("CLEAN", now) };
|
|
65
|
-
}
|
|
66
|
-
/** Mark a concept STUB (referenced by wikilinks but no compile output exists). */
|
|
67
|
-
export function transitionStub(ledger, conceptId, now) {
|
|
68
|
-
return { ...ledger, [conceptId]: makeEntry("STUB", now) };
|
|
69
|
-
}
|
|
70
|
-
/** Mark a concept ORPHAN (no incoming wikilinks from any other wiki page). */
|
|
71
|
-
export function transitionOrphan(ledger, conceptId, now) {
|
|
72
|
-
return { ...ledger, [conceptId]: makeEntry("ORPHAN", now) };
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Mark a concept CONFLICT (two compile sources produced conflicting content).
|
|
76
|
-
*
|
|
77
|
-
* @param conflictNote - Human-readable description of the conflict.
|
|
78
|
-
* Format: "A claims X; B claims Y" — surfaced in lint as:
|
|
79
|
-
* "> **Conflict:** A claims X; B claims Y. Unresolved."
|
|
80
|
-
*/
|
|
81
|
-
export function transitionConflict(ledger, conceptId, now, conflictNote) {
|
|
82
|
-
return { ...ledger, [conceptId]: makeEntry("CONFLICT", now, { conflictNote }) };
|
|
83
|
-
}
|
|
84
|
-
// ---------------------------------------------------------------------------
|
|
85
|
-
// Escape hatch: reset by deleting staleness.json
|
|
86
|
-
// ---------------------------------------------------------------------------
|
|
87
|
-
/**
|
|
88
|
-
* Full-rebuild escape hatch: delete staleness.json and return all known concept IDs
|
|
89
|
-
* re-marked as DIRTY.
|
|
90
|
-
*
|
|
91
|
-
* If the file doesn't exist, is a no-op (returns empty ledger).
|
|
92
|
-
* The caller must call saveLedger() to persist the reset state.
|
|
93
|
-
*/
|
|
94
|
-
export async function resetLedger(dotLlmwiki, now) {
|
|
95
|
-
const current = await loadLedger(dotLlmwiki);
|
|
96
|
-
try {
|
|
97
|
-
await unlink(ledgerFilePath(dotLlmwiki));
|
|
98
|
-
}
|
|
99
|
-
catch {
|
|
100
|
-
// File doesn't exist — that's fine
|
|
101
|
-
}
|
|
102
|
-
const reset = {};
|
|
103
|
-
for (const conceptId of Object.keys(current)) {
|
|
104
|
-
reset[conceptId] = makeEntry("DIRTY", now);
|
|
105
|
-
}
|
|
106
|
-
return reset;
|
|
107
|
-
}
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
// Cascade integration
|
|
110
|
-
// ---------------------------------------------------------------------------
|
|
111
|
-
/**
|
|
112
|
-
* Consume affected_backlinks from an M2 compile cascade return.
|
|
113
|
-
*
|
|
114
|
-
* For each affected page: if the current state is CLEAN, flip to DIRTY and
|
|
115
|
-
* queue for the next compile run. Other states are left unchanged.
|
|
116
|
-
*
|
|
117
|
-
* Returns the updated ledger and the list of concept IDs that were flipped.
|
|
118
|
-
*/
|
|
119
|
-
export function applyAffectedBacklinks(ledger, affectedBacklinks, now) {
|
|
120
|
-
let updated = { ...ledger };
|
|
121
|
-
const flipped = [];
|
|
122
|
-
for (const conceptId of affectedBacklinks) {
|
|
123
|
-
if (updated[conceptId]?.state === "CLEAN") {
|
|
124
|
-
updated = transitionDirty(updated, conceptId, now);
|
|
125
|
-
flipped.push(conceptId);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return { ledger: updated, flipped };
|
|
129
|
-
}
|
|
130
|
-
//# sourceMappingURL=ledger.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../../src/engine/wiki/ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Astro-Han 2-tier lint (MIT — idea absorption only).
|
|
3
|
-
*
|
|
4
|
-
* Auto-fix tier (runs automatically, mutates wiki/ files):
|
|
5
|
-
* - index consistency: concept present in wiki/ but absent from index.md
|
|
6
|
-
* - internal-link correctness: broken [[wikilinks]] flagged
|
|
7
|
-
* - See-Also sections: added if missing
|
|
8
|
-
*
|
|
9
|
-
* Report-only tier (reports to return value; NO autofix without forceHumanGate):
|
|
10
|
-
* - factual contradictions typed as:
|
|
11
|
-
* "> **Conflict:** A claims X; B claims Y. Unresolved."
|
|
12
|
-
* - orphan pages (in ledger as ORPHAN state)
|
|
13
|
-
* - outdated refs (DIRTY pages in the ledger)
|
|
14
|
-
*
|
|
15
|
-
* Mutation policy: report-only findings are NEVER auto-fixed unless the caller
|
|
16
|
-
* explicitly sets forceHumanGate: true. This is the human-gate flag.
|
|
17
|
-
*/
|
|
18
|
-
import type { LintResult, StalenessLedger } from "./types.js";
|
|
19
|
-
export interface LintOptions {
|
|
20
|
-
/** Absolute path to the wiki/ directory. */
|
|
21
|
-
wikiDir: string;
|
|
22
|
-
/** Current staleness ledger (used for report-only checks). */
|
|
23
|
-
ledger: StalenessLedger;
|
|
24
|
-
/**
|
|
25
|
-
* Human-gate flag — not set automatically.
|
|
26
|
-
* When true, allows autofix of report-only findings (not currently implemented;
|
|
27
|
-
* present as explicit hook for future human-approved bulk operations).
|
|
28
|
-
*/
|
|
29
|
-
forceHumanGate?: boolean;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Run all lint checks.
|
|
33
|
-
*
|
|
34
|
-
* Auto-fix tier mutates wiki/ files automatically.
|
|
35
|
-
* Report-only tier returns findings but does NOT mutate anything unless
|
|
36
|
-
* forceHumanGate is true (currently reserved — no report-only autofix implemented).
|
|
37
|
-
*/
|
|
38
|
-
export declare function runLint(opts: LintOptions): Promise<LintResult>;
|