oh-my-second-brain 0.9.0 → 0.10.1
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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG-assets.md +8 -0
- package/CHANGELOG-cli.md +20 -0
- package/CHANGELOG-kernel.md +14 -0
- package/CHANGELOG-mcp.md +8 -0
- package/CHANGELOG-vendors.md +9 -0
- package/CHANGELOG.md +26 -0
- package/README.ko.md +30 -2
- package/README.md +27 -1
- package/assets/hermes-manifest.json +1 -1
- package/assets/skills/search/SKILL.md +1 -0
- package/dist/cli/args.d.ts +4 -4
- package/dist/cli/args.js +45 -17
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/doc-command.d.ts +8 -0
- package/dist/cli/doc-command.js +51 -0
- package/dist/cli/doc-command.js.map +1 -0
- package/dist/cli/engine-session.d.ts +15 -0
- package/dist/cli/engine-session.js +45 -0
- package/dist/cli/engine-session.js.map +1 -0
- package/dist/cli/index-command.d.ts +8 -0
- package/dist/cli/index-command.js +60 -0
- package/dist/cli/index-command.js.map +1 -0
- package/dist/cli/oms.d.ts +1 -1
- package/dist/cli/oms.js +63 -24
- package/dist/cli/oms.js.map +1 -1
- package/dist/cli/search-args.d.ts +13 -0
- package/dist/cli/{semantic-args.js → search-args.js} +48 -13
- package/dist/cli/search-args.js.map +1 -0
- package/dist/cli/search-usage.d.ts +1 -0
- package/dist/cli/search-usage.js +25 -0
- package/dist/cli/search-usage.js.map +1 -0
- package/dist/cli/search.d.ts +10 -0
- package/dist/cli/search.js +71 -0
- package/dist/cli/search.js.map +1 -0
- package/dist/cli/serve-http.d.ts +15 -0
- package/dist/cli/{semantic-http.js → serve-http.js} +69 -54
- package/dist/cli/serve-http.js.map +1 -0
- package/dist/cli/setup-command.d.ts +11 -10
- package/dist/cli/setup-command.js +48 -13
- package/dist/cli/setup-command.js.map +1 -1
- package/dist/cli/usage.js +17 -9
- package/dist/cli/usage.js.map +1 -1
- package/dist/kernel/conventions/note-exclude.d.ts +1 -1
- package/dist/kernel/conventions/note-exclude.js +68 -5
- package/dist/kernel/conventions/note-exclude.js.map +1 -1
- package/dist/kernel/doctor/service.js +2 -1
- package/dist/kernel/doctor/service.js.map +1 -1
- package/dist/kernel/engine/assemble.d.ts +32 -3
- package/dist/kernel/engine/assemble.js +395 -102
- package/dist/kernel/engine/assemble.js.map +1 -1
- package/dist/kernel/engine/embed/config.d.ts +77 -0
- package/dist/kernel/engine/embed/config.js +308 -0
- package/dist/kernel/engine/embed/config.js.map +1 -0
- package/dist/kernel/engine/embed/deferred.d.ts +19 -14
- package/dist/kernel/engine/embed/deferred.js +27 -17
- package/dist/kernel/engine/embed/deferred.js.map +1 -1
- package/dist/kernel/engine/embed/identity.d.ts +14 -12
- package/dist/kernel/engine/embed/identity.js +36 -7
- package/dist/kernel/engine/embed/identity.js.map +1 -1
- package/dist/kernel/engine/embed/model.d.ts +107 -132
- package/dist/kernel/engine/embed/model.js +568 -289
- package/dist/kernel/engine/embed/model.js.map +1 -1
- package/dist/kernel/engine/embed/provider.d.ts +14 -21
- package/dist/kernel/engine/embed/provider.js +185 -221
- package/dist/kernel/engine/embed/provider.js.map +1 -1
- package/dist/kernel/engine/embed/store.d.ts +3 -1
- package/dist/kernel/engine/embed/store.js +111 -134
- package/dist/kernel/engine/embed/store.js.map +1 -1
- package/dist/kernel/engine/embed/sync.d.ts +17 -8
- package/dist/kernel/engine/embed/sync.js +157 -59
- package/dist/kernel/engine/embed/sync.js.map +1 -1
- package/dist/kernel/engine/mcp/facade.d.ts +9 -6
- package/dist/kernel/engine/mcp/facade.js +225 -24
- package/dist/kernel/engine/mcp/facade.js.map +1 -1
- package/dist/kernel/engine/mcp/query-mapper.d.ts +8 -2
- package/dist/kernel/engine/mcp/query-mapper.js +67 -9
- package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
- package/dist/kernel/engine/mcp/types.d.ts +42 -0
- package/dist/kernel/engine/paths.d.ts +2 -0
- package/dist/kernel/engine/paths.js +6 -0
- package/dist/kernel/engine/paths.js.map +1 -0
- package/dist/kernel/engine/retrieval/dispatcher.d.ts +27 -6
- package/dist/kernel/engine/retrieval/dispatcher.js +70 -6
- package/dist/kernel/engine/retrieval/dispatcher.js.map +1 -1
- package/dist/kernel/engine/retrieval/generator.d.ts +64 -0
- package/dist/kernel/engine/retrieval/generator.js +319 -0
- package/dist/kernel/engine/retrieval/generator.js.map +1 -0
- package/dist/kernel/engine/retrieval/index.d.ts +6 -4
- package/dist/kernel/engine/retrieval/index.js +3 -3
- package/dist/kernel/engine/retrieval/index.js.map +1 -1
- package/dist/kernel/engine/retrieval/passthrough.test-helper.d.ts +32 -0
- package/dist/kernel/engine/retrieval/passthrough.test-helper.js +35 -0
- package/dist/kernel/engine/retrieval/passthrough.test-helper.js.map +1 -0
- package/dist/kernel/engine/retrieval/reranker.d.ts +12 -17
- package/dist/kernel/engine/retrieval/reranker.js +116 -16
- package/dist/kernel/engine/retrieval/reranker.js.map +1 -1
- package/dist/kernel/engine/retrieval/taxonomy-context.d.ts +24 -0
- package/dist/kernel/engine/retrieval/taxonomy-context.js +96 -0
- package/dist/kernel/engine/retrieval/taxonomy-context.js.map +1 -0
- package/dist/kernel/engine/tracer.d.ts +1 -3
- package/dist/kernel/engine/tracer.js +39 -31
- package/dist/kernel/engine/tracer.js.map +1 -1
- package/dist/kernel/engine/types.d.ts +30 -6
- package/dist/kernel/engine/types.js.map +1 -1
- package/dist/kernel/harness/surface-registry.js +2 -5
- package/dist/kernel/harness/surface-registry.js.map +1 -1
- package/dist/kernel/install/common.d.ts +10 -3
- package/dist/kernel/install/common.js +220 -17
- package/dist/kernel/install/common.js.map +1 -1
- package/dist/kernel/link/convention-note.js +2 -2
- package/dist/kernel/link/convention-note.js.map +1 -1
- package/dist/kernel/measurement/no-default-contract.d.ts +1 -1
- package/dist/kernel/measurement/no-default-contract.js +2 -2
- package/dist/kernel/measurement/no-default-contract.js.map +1 -1
- package/dist/kernel/searchbackend/engine-search-backend.d.ts +1 -0
- package/dist/kernel/searchbackend/engine-search-backend.js +48 -8
- package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
- package/dist/kernel/searchbackend/search-backend.d.ts +3 -1
- package/dist/kernel/searchbackend/search-backend.js +45 -8
- package/dist/kernel/searchbackend/search-backend.js.map +1 -1
- package/dist/kernel/semantic/semantic-engine.d.ts +11 -12
- package/dist/kernel/semantic/semantic-engine.js +35 -50
- package/dist/kernel/semantic/semantic-engine.js.map +1 -1
- package/dist/kernel/semantic/semantic-retrieve-args.d.ts +2 -1
- package/dist/kernel/semantic/semantic-retrieve-args.js +27 -0
- package/dist/kernel/semantic/semantic-retrieve-args.js.map +1 -1
- package/dist/kernel/semantic/semantic-retrieve-schema.d.ts +4 -2
- package/dist/kernel/semantic/semantic-retrieve-schema.js +2 -2
- package/dist/kernel/semantic/semantic-retrieve-schema.js.map +1 -1
- package/dist/kernel/semantic/semantic-retrieve.js +2 -2
- package/dist/kernel/semantic/semantic-retrieve.js.map +1 -1
- package/dist/kernel/semantic/semantic-tool-schemas.js +13 -1
- package/dist/kernel/semantic/semantic-tool-schemas.js.map +1 -1
- package/dist/kernel/setup/service.d.ts +3 -0
- package/dist/kernel/setup/service.js +22 -0
- package/dist/kernel/setup/service.js.map +1 -1
- package/dist/kernel/templates/migration.d.ts +1 -1
- package/dist/kernel/templates/migration.js +9 -5
- package/dist/kernel/templates/migration.js.map +1 -1
- package/dist/kernel/templates/resolver.d.ts +5 -0
- package/dist/kernel/templates/resolver.js +30 -1
- package/dist/kernel/templates/resolver.js.map +1 -1
- package/dist/mcp/server.js +16 -17
- package/dist/mcp/server.js.map +1 -1
- package/dist/vendors/codex/codex.d.ts +1 -6
- package/dist/vendors/codex/codex.js +86 -17
- package/dist/vendors/codex/codex.js.map +1 -1
- package/dist/vendors/hermes/hermes.js +149 -27
- package/dist/vendors/hermes/hermes.js.map +1 -1
- package/docs/conventions.md +19 -6
- package/docs/install.md +30 -1
- package/docs/verified-target.md +12 -2
- package/package.json +1 -1
- package/dist/cli/semantic-args.d.ts +0 -13
- package/dist/cli/semantic-args.js.map +0 -1
- package/dist/cli/semantic-http.d.ts +0 -11
- package/dist/cli/semantic-http.js.map +0 -1
- package/dist/cli/semantic-usage.d.ts +0 -1
- package/dist/cli/semantic-usage.js +0 -20
- package/dist/cli/semantic-usage.js.map +0 -1
- package/dist/cli/semantic.d.ts +0 -9
- package/dist/cli/semantic.js +0 -189
- package/dist/cli/semantic.js.map +0 -1
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{
|
|
11
11
|
"name": "oms",
|
|
12
12
|
"description": "Oh My Second Brain convention layer for Obsidian vaults — capture, retrieve, and validate knowledge under a declared semantic convention.",
|
|
13
|
-
"version": "0.
|
|
13
|
+
"version": "0.10.1",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "gobeumsu",
|
|
16
16
|
"email": "gobeumsu@gmail.com"
|
|
@@ -37,5 +37,5 @@
|
|
|
37
37
|
]
|
|
38
38
|
}
|
|
39
39
|
],
|
|
40
|
-
"version": "0.
|
|
40
|
+
"version": "0.10.1"
|
|
41
41
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oms",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Oh My Second Brain convention layer for Obsidian vaults — Codex native rules, skills, and MCP adapter.",
|
|
5
5
|
"_note": "oms install writes Codex MCP config, installs ~/.codex/rules/oms.md, and installs ~/.codex/skills/oms-*.",
|
|
6
6
|
"skills": "./assets/skills/",
|
package/CHANGELOG-assets.md
CHANGED
|
@@ -4,6 +4,14 @@ Skills, agents, templates, and host guidance changes belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.1] - 2026-09-01
|
|
8
|
+
|
|
9
|
+
## [0.10.0] - 2026-09-01
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **The `/search` skill now documents an explicit `strategy` in `oms_search` calls with `op: "query"`.** Its frontmatter is unchanged.
|
|
14
|
+
|
|
7
15
|
## [0.9.0] - 2026-08-31
|
|
8
16
|
|
|
9
17
|
### Changed
|
package/CHANGELOG-cli.md
CHANGED
|
@@ -4,6 +4,26 @@ Changes to the `oms` command surface belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.1] - 2026-09-01
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **`--help` is now a first-class, side-effect-free path.** (#55) Every recognized command plus the bare `oms --help`/`-h` prints usage and exits 0 before any vault resolution, host-config access, MCP server start, or update notice; `--help` never lands in unknown-flag handling, and an unknown command with `--help` still fails so typos are not hidden.
|
|
12
|
+
- **Setup dry-run reports blocked proposals instead of aborting.** (#67) `oms setup --dry-run` on a vault with unresolved notes prints a deterministic blocked diagnosis without composing a manifest and issues no approval digest; apply requests are clearly rejected before composition.
|
|
13
|
+
|
|
14
|
+
## [0.10.0] - 2026-09-01
|
|
15
|
+
|
|
16
|
+
### Breaking
|
|
17
|
+
|
|
18
|
+
- **OMS now has one search taxonomy.** `oms semantic` and the old top-level collection, context, cleanup, and HTTP aliases are removed; use `oms search`, `oms doc get|multi-get`, `oms embed`, and `oms serve`. `oms index` contains exactly `sync|status|cleanup|collections|contexts`; embedding remains the compact top-level `oms embed` command.
|
|
19
|
+
- **Setup model options have changed.** `--embedding-*` is replaced by `--models-default`, `--models-descriptor`, and `--models-no-default`.
|
|
20
|
+
- **The embedding runtime is local-only.** The former Upstage provider path is removed; configured model identities must resolve to verified local GGUF artifacts.
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **Search now uses an explicit closed qmd-v2.8.3 expansion strategy.** `--max-queries` is strict, reranking is opt-in, and local model-set descriptors are supported.
|
|
25
|
+
- **`oms serve` exposes only the canonical HTTP endpoints.** `/health`, `/search`, `/get`, and `/multi-get` remain; no query alias or second MCP tool surface is advertised.
|
|
26
|
+
|
|
7
27
|
## [0.9.0] - 2026-08-31
|
|
8
28
|
|
|
9
29
|
### Changed
|
package/CHANGELOG-kernel.md
CHANGED
|
@@ -4,6 +4,20 @@ Domain logic changes belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.1] - 2026-09-01
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **Host YAML configuration is now edited surgically, never reserialized.** (#89) `editYamlEntryPreservingComments` splices only the character range of the managed `mcp_servers.oms` entry, preserving every other byte — comments, key order, quoting style, wrapping, and non-ASCII content — and refuses unsafe documents (anchors/aliases, merge keys, tab indentation, multi-document, non-mapping roots) instead of silently rewriting them.
|
|
12
|
+
- **One malformed note or external template source no longer aborts setup and doctor.** (#67) Obsidian core Templates and Templater folder locations declared under `.obsidian/` are discovered read-only and excluded from note scans without ever being promoted to OMS template candidates, malformed ordinary notes downgrade to `MIGRATION_NOTE_INVALID` diagnostics instead of throwing, and `applyTemplateMigration` still rejects unresolved proposals so write safety is unchanged.
|
|
13
|
+
|
|
14
|
+
## [0.10.0] - 2026-09-01
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **The kernel now manages model lifecycle explicitly and carries active-template taxonomy context through the canonical engine search path.** It reports unavailable capabilities honestly instead of silently claiming support.
|
|
19
|
+
- **Local model execution now has one strict lifecycle.** Vault model selection outranks setup defaults, GGUF contexts wait for admitted work before disposal, cross-encoder reranking receives bounded note content rather than filenames, and the inconsistent Upstage branch is removed.
|
|
20
|
+
|
|
7
21
|
## [0.9.0] - 2026-08-31
|
|
8
22
|
|
|
9
23
|
### Changed
|
package/CHANGELOG-mcp.md
CHANGED
|
@@ -4,6 +4,14 @@ MCP server tools and resources belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.1] - 2026-09-01
|
|
8
|
+
|
|
9
|
+
## [0.10.0] - 2026-09-01
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- **`oms_search` query now accepts the closed `strategy`, `maxQueries`, `rerank`, and `candidateLimit` controls.** Query budgets are strict integers, expansion is not advertised on context retrieval, and these controls remain on the existing tool; no additional public search tool was added.
|
|
14
|
+
|
|
7
15
|
## [0.9.0] - 2026-08-31
|
|
8
16
|
|
|
9
17
|
### Changed
|
package/CHANGELOG-vendors.md
CHANGED
|
@@ -4,6 +4,15 @@ Per-host adapter and installer changes belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.10.1] - 2026-09-01
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- **Codex managed-marker rewrites fail closed on ambiguity.** (#54) The greedy regex span removal is replaced by a line scanner: exactly one ordered `BEGIN`/`END` pair enclosing `[mcp_servers.oms]` is rewritten in place; orphan, duplicate, reversed, or nested markers refuse to write a single byte and report the config path with 1-based marker line numbers plus manual removal steps. Marker-free legacy tables continue to be cleaned up normally.
|
|
12
|
+
- **Hermes install/uninstall is now a guarded transaction.** (#89) `Prepare → Admission → Apply → Verify`: all sources, symlink targets, and the YAML edit are validated before any write; OMS-owned adapter/skill files commit first and `config.yaml` commits last via a pre-imaged atomic temp→rename write; verification reparses the config, any failure restores the config byte-for-byte, and a rollback failure preserves both errors. Registration failures are no longer downgraded to warnings.
|
|
13
|
+
|
|
14
|
+
## [0.10.0] - 2026-09-01
|
|
15
|
+
|
|
7
16
|
## [0.9.0] - 2026-08-31
|
|
8
17
|
|
|
9
18
|
### Changed
|
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,32 @@ This aggregate changelog contains changes that span multiple layers.
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.10.1] - 2026-09-01
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **Safety patch across CLI, kernel, and host adapters.** User-owned host configuration can no longer be damaged or silently skipped: Codex managed markers fail closed on ambiguity (#54), Hermes YAML is edited surgically inside a pre-imaged atomic transaction (#89), `--help` is side-effect-free everywhere (#55), and one malformed note or external Obsidian/Templater template source no longer disables vault-wide setup/doctor (#67).
|
|
18
|
+
|
|
19
|
+
## [0.10.0] - 2026-09-01
|
|
20
|
+
|
|
21
|
+
### Breaking
|
|
22
|
+
|
|
23
|
+
- **OMS now has one search taxonomy.** `oms semantic` and the old top-level collection, context, cleanup, and HTTP aliases are removed; use `oms search`, `oms doc get|multi-get`, `oms embed`, and `oms serve`. `oms index` contains exactly `sync|status|cleanup|collections|contexts`; embedding remains the compact top-level `oms embed` command.
|
|
24
|
+
- **Setup model options have changed.** `--embedding-*` is replaced by `--models-default`, `--models-descriptor`, and `--models-no-default`.
|
|
25
|
+
- **The embedding runtime is local-only.** The former Upstage provider path is removed; configured model identities must resolve to verified local GGUF artifacts.
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- **Search now uses an explicit closed qmd-v2.8.3 expansion strategy.** `--max-queries` is strict, reranking is opt-in, and local model-set descriptors are supported.
|
|
30
|
+
- **`oms serve` exposes only `/health`, `/search`, `/get`, and `/multi-get`.** It does not add a query alias or a second MCP tool surface.
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- **The kernel makes model lifecycle and capability availability explicit.** The canonical engine path carries active-template taxonomy context into search rather than silently claiming unavailable capabilities.
|
|
35
|
+
- **Model-bearing work is lifecycle-safe and content-aware.** Vault selection outranks setup defaults, GGUF disposal waits for admitted work, and reranking scores bounded note content instead of filenames.
|
|
36
|
+
- **MCP search accepts `strategy`, `maxQueries`, `rerank`, and `candidateLimit` through the existing `oms_search` tool.** No additional public search tool was added.
|
|
37
|
+
- **The `/search` skill now calls `oms_search` with `op: "query"` and an explicit strategy.** Its frontmatter is unchanged.
|
|
38
|
+
|
|
13
39
|
## [0.9.0] - 2026-08-31
|
|
14
40
|
|
|
15
41
|
### Changed
|
package/README.ko.md
CHANGED
|
@@ -34,12 +34,40 @@ oms update 패키지 업데이트 확인/적용 후 어댑터 재조정
|
|
|
34
34
|
oms reconcile 엄격한 전역 볼트 포인터로 호스트 재기록
|
|
35
35
|
oms doctor 템플릿 권위와 파생 상태 진단
|
|
36
36
|
oms lint 깨진 [[wikilink]]와 고아 노트 점검
|
|
37
|
-
oms
|
|
37
|
+
oms search <text> 일반 lexical 검색; --vec, --hyde, --expand, --max-queries 1..32, --rerank은 명시적 선택
|
|
38
|
+
oms embed 색인된 노트의 임베딩 생성
|
|
39
|
+
oms index sync|status|cleanup|collections|contexts
|
|
40
|
+
oms doc get|multi-get
|
|
41
|
+
oms serve 로컬 검색 HTTP 서버 시작
|
|
38
42
|
oms mcp stdio MCP 서버 시작
|
|
39
43
|
oms hook Claude pre/post tool-use 볼트 가드 실행
|
|
40
44
|
```
|
|
41
45
|
|
|
42
|
-
`oh-my-second-brain
|
|
46
|
+
`oh-my-second-brain`은 전체 명령이고 `oms`는 짧은 별칭이다.
|
|
47
|
+
|
|
48
|
+
### 도움말 계약
|
|
49
|
+
|
|
50
|
+
인식된 모든 명령은 `--help`와 `-h`를 받아들이며, exit 0으로 종료하고
|
|
51
|
+
부작용을 수행하지 않는다. 알 수 없는 명령에 `--help`를 함께 주면 exit 1로 종료한다.
|
|
52
|
+
|
|
53
|
+
`oms search <text>`는 lexical-only다. `--vec`, `--hyde`는 각각의 typed
|
|
54
|
+
channel을 선택하고, `--expand`는 G004 expansion을 명시적으로 켜며,
|
|
55
|
+
`--max-queries`는 1부터 32까지의 정수만 받는다. `--rerank`도 opt-in이다.
|
|
56
|
+
`oms embed`가 유일한 embedding 명령이며 `oms index`에는 embedding
|
|
57
|
+
subcommand가 없다.
|
|
58
|
+
|
|
59
|
+
Vector 검색에는 검증된 로컬 embedding capability가 필요하다. 선택 경로는
|
|
60
|
+
완전한 `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` 쌍, vault의
|
|
61
|
+
`.oms/models.json`과 검증된 설치 receipt, 또는 setup-installed default다.
|
|
62
|
+
HyDE에는 resolved generate capability가, reranking에는 resolved rerank
|
|
63
|
+
capability가 필요하다. 각각의 완전한 환경변수 쌍은
|
|
64
|
+
`OMS_GENERATE_PROVIDER`/`OMS_GENERATE_MODEL`과
|
|
65
|
+
`OMS_RERANK_PROVIDER`/`OMS_RERANK_MODEL`이다. 누락되거나 불완전하거나
|
|
66
|
+
설치되지 않은 선택은 크게 실패한다. G004
|
|
67
|
+
expansion은 명시적으로 사용할 수 있는 기능이며, 교체·parity·outperformance를
|
|
68
|
+
주장하지 않는다.
|
|
69
|
+
Setup에서는 로컬 검증 acquisition 정책 하나를 선택한다:
|
|
70
|
+
`--models-default`, `--models-descriptor <path>`, `--models-no-default`.
|
|
43
71
|
|
|
44
72
|
## MCP 도구
|
|
45
73
|
|
package/README.md
CHANGED
|
@@ -34,13 +34,39 @@ oms update Check/apply a package update and reconcile adapters
|
|
|
34
34
|
oms reconcile Re-stamp hosts from the strict global vault pointer
|
|
35
35
|
oms doctor Diagnose template authority and derived state
|
|
36
36
|
oms lint Check broken [[wikilinks]] and orphan notes
|
|
37
|
-
oms
|
|
37
|
+
oms search <text> Plain lexical search; --vec, --hyde, --expand, --max-queries 1..32, and --rerank are explicit
|
|
38
|
+
oms embed Generate embeddings for indexed notes
|
|
39
|
+
oms index sync|status|cleanup|collections|contexts
|
|
40
|
+
oms doc get|multi-get
|
|
41
|
+
oms serve Start the local search HTTP server
|
|
38
42
|
oms mcp Start the stdio MCP server
|
|
39
43
|
oms hook Run Claude pre/post tool-use vault guards
|
|
40
44
|
```
|
|
41
45
|
|
|
42
46
|
`oh-my-second-brain` is the full command; `oms` is its short alias.
|
|
43
47
|
|
|
48
|
+
### Help contract
|
|
49
|
+
|
|
50
|
+
Every recognized command accepts `--help` and `-h`, exits 0, and performs no
|
|
51
|
+
side effects. An unknown command combined with `--help` exits 1.
|
|
52
|
+
|
|
53
|
+
`oms search <text>` is lexical-only. `--vec` and `--hyde` select their respective
|
|
54
|
+
typed channels; `--expand` explicitly enables G004 expansion, `--max-queries`
|
|
55
|
+
accepts an integer from 1 through 32, and `--rerank` is opt-in. `oms embed` is
|
|
56
|
+
the sole embedding command; `oms index` has no embedding subcommand.
|
|
57
|
+
|
|
58
|
+
Vector search requires a verified local embedding capability, selected by a
|
|
59
|
+
complete `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` pair, the vault's
|
|
60
|
+
`.oms/models.json` plus its verified installed receipt, or a setup-installed
|
|
61
|
+
default. HyDE also requires a resolved generate capability; reranking requires
|
|
62
|
+
a resolved rerank capability. Their complete environment pairs are
|
|
63
|
+
`OMS_GENERATE_PROVIDER`/`OMS_GENERATE_MODEL` and
|
|
64
|
+
`OMS_RERANK_PROVIDER`/`OMS_RERANK_MODEL`. Missing, incomplete, or uninstalled
|
|
65
|
+
selections fail loudly. G004 expansion is an explicit
|
|
66
|
+
available capability; it makes no replacement, parity, or outperformance claim.
|
|
67
|
+
During setup, choose one local verified acquisition policy:
|
|
68
|
+
`--models-default`, `--models-descriptor <path>`, or `--models-no-default`.
|
|
69
|
+
|
|
44
70
|
## MCP tools
|
|
45
71
|
|
|
46
72
|
`oms mcp` exposes exactly five public tools:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oms",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Oh My Second Brain convention layer for Obsidian vaults — Hermes skill bundle and MCP adapter.",
|
|
5
5
|
"_note": "oms install writes ~/.hermes/config.yaml mcp_servers.oms and installs skills under ~/.hermes/skills/knowledge-management/oms/."
|
|
6
6
|
}
|
|
@@ -19,6 +19,7 @@ Retrieve vault knowledge without changing the vault.
|
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
Plain `query` is projection-independent lexical retrieval and remains available when no embedding provider is configured. Template-managed source files are never returned as notes.
|
|
22
|
+
Expansion is explicit only for `oms_search` `op: "query"` through the closed strategy object and never changes a plain lexical query.
|
|
22
23
|
|
|
23
24
|
Use `oms_search { op: "templates" }` to discover stable template IDs and declared axes. Typed queries use the same derived projection as writes:
|
|
24
25
|
|
package/dist/cli/args.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare class CliArgumentError extends Error {
|
|
|
4
4
|
}
|
|
5
5
|
export interface ParsedCliArgs {
|
|
6
6
|
readonly command: string | undefined;
|
|
7
|
+
readonly help: boolean;
|
|
7
8
|
readonly vault: string;
|
|
8
9
|
readonly vaultExplicit: boolean;
|
|
9
10
|
readonly yes: boolean;
|
|
@@ -23,10 +24,9 @@ export interface ParsedCliArgs {
|
|
|
23
24
|
readonly json: boolean;
|
|
24
25
|
readonly folders: readonly string[];
|
|
25
26
|
readonly conventionNote: boolean;
|
|
26
|
-
readonly
|
|
27
|
-
readonly
|
|
28
|
-
|
|
29
|
-
readonly embeddingDefault: boolean;
|
|
27
|
+
readonly modelsDescriptorPath: string | undefined;
|
|
28
|
+
readonly modelsNoDefault: boolean;
|
|
29
|
+
readonly modelsDefault: boolean;
|
|
30
30
|
readonly unknownFlags: readonly string[];
|
|
31
31
|
readonly error: CliArgumentError | undefined;
|
|
32
32
|
}
|
package/dist/cli/args.js
CHANGED
|
@@ -12,7 +12,9 @@ export function isRuntimeSelection(value) {
|
|
|
12
12
|
return harnessSurfaceRegistry.hosts.some((host) => host.runtime === value);
|
|
13
13
|
}
|
|
14
14
|
export function parseCliArgs(argv, cwd = process.cwd()) {
|
|
15
|
-
const
|
|
15
|
+
const firstArg = argv[0];
|
|
16
|
+
const command = firstArg === "--help" || firstArg === "-h" ? undefined : firstArg;
|
|
17
|
+
let help = firstArg === "--help" || firstArg === "-h";
|
|
16
18
|
let vault = cwd;
|
|
17
19
|
let vaultExplicit = false;
|
|
18
20
|
let yes = false;
|
|
@@ -31,14 +33,17 @@ export function parseCliArgs(argv, cwd = process.cwd()) {
|
|
|
31
33
|
let json = false;
|
|
32
34
|
const folders = [];
|
|
33
35
|
let conventionNote = true;
|
|
34
|
-
let
|
|
35
|
-
let
|
|
36
|
-
let
|
|
36
|
+
let modelsDescriptorPath;
|
|
37
|
+
let modelsNoDefault = false;
|
|
38
|
+
let modelsDefault = false;
|
|
37
39
|
const unknownFlags = [];
|
|
38
40
|
for (let i = 1; i < argv.length; i++) {
|
|
39
41
|
const arg = argv[i];
|
|
40
42
|
const next = argv[i + 1];
|
|
41
|
-
if (arg === "--
|
|
43
|
+
if (arg === "--help" || arg === "-h") {
|
|
44
|
+
help = true;
|
|
45
|
+
}
|
|
46
|
+
else if (arg === "--vault" && next) {
|
|
42
47
|
vault = path.resolve(cwd, next);
|
|
43
48
|
vaultExplicit = true;
|
|
44
49
|
i++;
|
|
@@ -117,22 +122,44 @@ export function parseCliArgs(argv, cwd = process.cwd()) {
|
|
|
117
122
|
else if (arg === "--no-convention-note") {
|
|
118
123
|
conventionNote = false;
|
|
119
124
|
}
|
|
120
|
-
else if (arg === "--
|
|
121
|
-
|
|
125
|
+
else if (arg === "--models-descriptor") {
|
|
126
|
+
if (next === undefined || next === "" || next.startsWith("-")) {
|
|
127
|
+
return parsedArgsWithError("[oms] Missing value for --models-descriptor. Choose one of --models-default, --models-descriptor <path>, or --models-no-default.");
|
|
128
|
+
}
|
|
129
|
+
modelsDescriptorPath = path.resolve(cwd, next);
|
|
122
130
|
i++;
|
|
123
131
|
}
|
|
124
|
-
else if (arg === "--
|
|
125
|
-
|
|
132
|
+
else if (arg === "--models-no-default") {
|
|
133
|
+
modelsNoDefault = true;
|
|
134
|
+
}
|
|
135
|
+
else if (arg === "--models-default") {
|
|
136
|
+
modelsDefault = true;
|
|
137
|
+
}
|
|
138
|
+
else if (arg === "--embedding-descriptor") {
|
|
139
|
+
unknownFlags.push(arg);
|
|
140
|
+
if (next !== undefined && !next.startsWith("--"))
|
|
141
|
+
i++;
|
|
126
142
|
}
|
|
127
|
-
else if (arg === "--embedding-default") {
|
|
128
|
-
|
|
143
|
+
else if (arg === "--embedding-default" || arg === "--embedding-no-default") {
|
|
144
|
+
unknownFlags.push(arg);
|
|
129
145
|
}
|
|
130
146
|
else if (arg !== undefined) {
|
|
131
147
|
unknownFlags.push(arg);
|
|
132
148
|
}
|
|
133
149
|
}
|
|
150
|
+
if (command === "setup") {
|
|
151
|
+
const modelChoices = [
|
|
152
|
+
modelsDescriptorPath !== undefined ? "--models-descriptor" : undefined,
|
|
153
|
+
modelsDefault ? "--models-default" : undefined,
|
|
154
|
+
modelsNoDefault ? "--models-no-default" : undefined,
|
|
155
|
+
].filter((flag) => flag !== undefined);
|
|
156
|
+
if (modelChoices.length > 1) {
|
|
157
|
+
return parsedArgsWithError(`[oms] Mutually exclusive setup model options: ${modelChoices.join(" and ")}. Choose one of --models-default, --models-descriptor <path>, or --models-no-default.`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
134
160
|
return {
|
|
135
161
|
command,
|
|
162
|
+
help,
|
|
136
163
|
vault,
|
|
137
164
|
vaultExplicit,
|
|
138
165
|
yes,
|
|
@@ -151,15 +178,16 @@ export function parseCliArgs(argv, cwd = process.cwd()) {
|
|
|
151
178
|
json,
|
|
152
179
|
folders,
|
|
153
180
|
conventionNote,
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
181
|
+
modelsDescriptorPath,
|
|
182
|
+
modelsNoDefault,
|
|
183
|
+
modelsDefault,
|
|
157
184
|
unknownFlags,
|
|
158
185
|
error: undefined,
|
|
159
186
|
};
|
|
160
187
|
function parsedArgsWithError(message) {
|
|
161
188
|
return {
|
|
162
189
|
command,
|
|
190
|
+
help,
|
|
163
191
|
vault,
|
|
164
192
|
vaultExplicit,
|
|
165
193
|
yes,
|
|
@@ -178,9 +206,9 @@ export function parseCliArgs(argv, cwd = process.cwd()) {
|
|
|
178
206
|
json,
|
|
179
207
|
folders,
|
|
180
208
|
conventionNote,
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
209
|
+
modelsDescriptorPath,
|
|
210
|
+
modelsNoDefault,
|
|
211
|
+
modelsDefault,
|
|
184
212
|
unknownFlags,
|
|
185
213
|
error: new CliArgumentError(message),
|
|
186
214
|
};
|
package/dist/cli/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAG/E,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AA+BD,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAuB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ParsedSearchArgs } from "./search-args.js";
|
|
2
|
+
export interface DocCommandOptions {
|
|
3
|
+
readonly args: ParsedSearchArgs;
|
|
4
|
+
readonly vault: string;
|
|
5
|
+
readonly write: (message: string) => void;
|
|
6
|
+
readonly writeError: (message: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function runDocCommand(options: DocCommandOptions): Promise<number>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { booleanOption, numberOption, printJson, stringOption, targetList, } from "./search-args.js";
|
|
2
|
+
import { runEngineSession } from "./engine-session.js";
|
|
3
|
+
import { searchUsage } from "./search-usage.js";
|
|
4
|
+
export async function runDocCommand(options) {
|
|
5
|
+
const { args, vault, write, writeError } = options;
|
|
6
|
+
const command = args.positional[1];
|
|
7
|
+
const rest = args.positional.slice(2);
|
|
8
|
+
if (command === "get") {
|
|
9
|
+
const target = rest[0];
|
|
10
|
+
if (!target) {
|
|
11
|
+
writeError("Usage: oms doc get <target>");
|
|
12
|
+
return 1;
|
|
13
|
+
}
|
|
14
|
+
return runEngineSession(vault, { write: false }, async (adapter) => {
|
|
15
|
+
const result = await adapter.getDocument({
|
|
16
|
+
vault,
|
|
17
|
+
target,
|
|
18
|
+
collection: stringOption(args, "collection"),
|
|
19
|
+
fromLine: numberOption(args, "fromLine"),
|
|
20
|
+
lineCount: numberOption(args, "lineCount"),
|
|
21
|
+
lineNumbers: booleanOption(args, "lineNumbers"),
|
|
22
|
+
fullPath: booleanOption(args, "fullPath"),
|
|
23
|
+
});
|
|
24
|
+
printJson(write, result);
|
|
25
|
+
return result.available ? 0 : 1;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
if (command === "multi-get") {
|
|
29
|
+
const targets = targetList(rest);
|
|
30
|
+
if (targets.length === 0) {
|
|
31
|
+
writeError("Usage: oms doc multi-get <target...>");
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
return runEngineSession(vault, { write: false }, async (adapter) => {
|
|
35
|
+
const result = await adapter.multiGetDocuments({
|
|
36
|
+
vault,
|
|
37
|
+
targets: [...targets],
|
|
38
|
+
collection: stringOption(args, "collection"),
|
|
39
|
+
lineLimit: numberOption(args, "lineLimit"),
|
|
40
|
+
maxBytes: numberOption(args, "maxBytes"),
|
|
41
|
+
lineNumbers: booleanOption(args, "lineNumbers"),
|
|
42
|
+
fullPath: booleanOption(args, "fullPath"),
|
|
43
|
+
});
|
|
44
|
+
printJson(write, result);
|
|
45
|
+
return result.available ? 0 : 1;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
writeError(searchUsage());
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=doc-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-command.js","sourceRoot":"","sources":["../../src/cli/doc-command.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,UAAU,GAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA0B;IAC5D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtC,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,UAAU,CAAC,6BAA6B,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,gBAAgB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;gBACvC,KAAK;gBACL,MAAM;gBACN,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC5C,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC;gBACxC,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;gBAC1C,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;gBAC/C,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;aAC1C,CAAC,CAAC;YACH,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACzB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,UAAU,CAAC,sCAAsC,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,gBAAgB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACjE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC;gBAC7C,KAAK;gBACL,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;gBACrB,UAAU,EAAE,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC;gBAC5C,SAAS,EAAE,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;gBAC1C,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC;gBACxC,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC;gBAC/C,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;aAC1C,CAAC,CAAC;YACH,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACzB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1B,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { McpEngineAdapter } from "../kernel/engine/mcp/facade.js";
|
|
2
|
+
export interface EngineSessionOptions {
|
|
3
|
+
readonly write: boolean;
|
|
4
|
+
readonly embed?: boolean;
|
|
5
|
+
readonly modelCacheDir?: string;
|
|
6
|
+
readonly modelEnv?: Readonly<Record<string, string | undefined>>;
|
|
7
|
+
}
|
|
8
|
+
export interface EngineSession {
|
|
9
|
+
readonly adapter: McpEngineAdapter;
|
|
10
|
+
dispose(): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
/** Fails loudly under ADR-007 before an operation that requires real embeddings. */
|
|
13
|
+
export declare function ensureEmbeddingCapability(vault: string, modelCacheDir?: string, modelEnv?: Readonly<Record<string, string | undefined>>): void;
|
|
14
|
+
export declare function createEngineSession(vault: string, options: EngineSessionOptions): EngineSession;
|
|
15
|
+
export declare function runEngineSession<T>(vault: string, options: EngineSessionOptions, fn: (adapter: McpEngineAdapter) => Promise<T>): Promise<T>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { assembleCoreSemanticEngineReadOnly, assembleEngineReadOnly, assembleEphemeralCoreSemanticEngine, } from "../kernel/engine/assemble.js";
|
|
2
|
+
import { assembleFullSemanticEngine, assembleSemanticEngine, embeddingConfigPresent, } from "../kernel/semantic/semantic-engine.js";
|
|
3
|
+
import { readModelsConfigSync } from "../kernel/engine/embed/config.js";
|
|
4
|
+
import { readInstalledModelsReceiptSync } from "../kernel/engine/embed/model.js";
|
|
5
|
+
/** Fails loudly under ADR-007 before an operation that requires real embeddings. */
|
|
6
|
+
export function ensureEmbeddingCapability(vault, modelCacheDir, modelEnv) {
|
|
7
|
+
if (!embeddingConfigPresent(vault, modelCacheDir, modelEnv)) {
|
|
8
|
+
throw new Error(`Embedding capability is unavailable for ${vault}. Configure OMS_EMBEDDING_PROVIDER and OMS_EMBEDDING_MODEL, declare embed in .oms/models.json, or run oms setup --models-default.`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function createEngineSession(vault, options) {
|
|
12
|
+
if (options.embed === true) {
|
|
13
|
+
ensureEmbeddingCapability(vault, options.modelCacheDir, options.modelEnv);
|
|
14
|
+
const engine = assembleFullSemanticEngine(vault, undefined, options.modelCacheDir, options.modelEnv);
|
|
15
|
+
return { adapter: engine.adapter, dispose: () => engine.dispose() };
|
|
16
|
+
}
|
|
17
|
+
if (options.write) {
|
|
18
|
+
const engine = assembleSemanticEngine(vault, undefined, options.modelCacheDir, options.modelEnv);
|
|
19
|
+
return { adapter: engine.adapter, dispose: () => engine.dispose() };
|
|
20
|
+
}
|
|
21
|
+
const modelInputs = {
|
|
22
|
+
vault,
|
|
23
|
+
modelsConfig: readModelsConfigSync(vault),
|
|
24
|
+
installedModelsReceipt: readInstalledModelsReceiptSync(options.modelCacheDir === undefined ? {} : { cacheDir: options.modelCacheDir }),
|
|
25
|
+
...(options.modelCacheDir === undefined ? {} : { embeddingCacheDir: options.modelCacheDir }),
|
|
26
|
+
...(options.modelEnv === undefined ? {} : { modelEnv: options.modelEnv }),
|
|
27
|
+
};
|
|
28
|
+
const readOnly = embeddingConfigPresent(vault, options.modelCacheDir, options.modelEnv)
|
|
29
|
+
? assembleEngineReadOnly({
|
|
30
|
+
...modelInputs,
|
|
31
|
+
})
|
|
32
|
+
: assembleCoreSemanticEngineReadOnly(modelInputs);
|
|
33
|
+
const engine = readOnly ?? assembleEphemeralCoreSemanticEngine(modelInputs);
|
|
34
|
+
return { adapter: engine.adapter, dispose: () => engine.dispose() };
|
|
35
|
+
}
|
|
36
|
+
export async function runEngineSession(vault, options, fn) {
|
|
37
|
+
const session = createEngineSession(vault, options);
|
|
38
|
+
try {
|
|
39
|
+
return await fn(session.adapter);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
await session.dispose();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=engine-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine-session.js","sourceRoot":"","sources":["../../src/cli/engine-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ParsedSearchArgs } from "./search-args.js";
|
|
2
|
+
export interface IndexCommandOptions {
|
|
3
|
+
readonly args: ParsedSearchArgs;
|
|
4
|
+
readonly vault: string;
|
|
5
|
+
readonly write: (message: string) => void;
|
|
6
|
+
readonly writeError: (message: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function runIndexCommand(options: IndexCommandOptions): Promise<number>;
|