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.
Files changed (166) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/CHANGELOG-assets.md +8 -0
  5. package/CHANGELOG-cli.md +20 -0
  6. package/CHANGELOG-kernel.md +14 -0
  7. package/CHANGELOG-mcp.md +8 -0
  8. package/CHANGELOG-vendors.md +9 -0
  9. package/CHANGELOG.md +26 -0
  10. package/README.ko.md +30 -2
  11. package/README.md +27 -1
  12. package/assets/hermes-manifest.json +1 -1
  13. package/assets/skills/search/SKILL.md +1 -0
  14. package/dist/cli/args.d.ts +4 -4
  15. package/dist/cli/args.js +45 -17
  16. package/dist/cli/args.js.map +1 -1
  17. package/dist/cli/doc-command.d.ts +8 -0
  18. package/dist/cli/doc-command.js +51 -0
  19. package/dist/cli/doc-command.js.map +1 -0
  20. package/dist/cli/engine-session.d.ts +15 -0
  21. package/dist/cli/engine-session.js +45 -0
  22. package/dist/cli/engine-session.js.map +1 -0
  23. package/dist/cli/index-command.d.ts +8 -0
  24. package/dist/cli/index-command.js +60 -0
  25. package/dist/cli/index-command.js.map +1 -0
  26. package/dist/cli/oms.d.ts +1 -1
  27. package/dist/cli/oms.js +63 -24
  28. package/dist/cli/oms.js.map +1 -1
  29. package/dist/cli/search-args.d.ts +13 -0
  30. package/dist/cli/{semantic-args.js → search-args.js} +48 -13
  31. package/dist/cli/search-args.js.map +1 -0
  32. package/dist/cli/search-usage.d.ts +1 -0
  33. package/dist/cli/search-usage.js +25 -0
  34. package/dist/cli/search-usage.js.map +1 -0
  35. package/dist/cli/search.d.ts +10 -0
  36. package/dist/cli/search.js +71 -0
  37. package/dist/cli/search.js.map +1 -0
  38. package/dist/cli/serve-http.d.ts +15 -0
  39. package/dist/cli/{semantic-http.js → serve-http.js} +69 -54
  40. package/dist/cli/serve-http.js.map +1 -0
  41. package/dist/cli/setup-command.d.ts +11 -10
  42. package/dist/cli/setup-command.js +48 -13
  43. package/dist/cli/setup-command.js.map +1 -1
  44. package/dist/cli/usage.js +17 -9
  45. package/dist/cli/usage.js.map +1 -1
  46. package/dist/kernel/conventions/note-exclude.d.ts +1 -1
  47. package/dist/kernel/conventions/note-exclude.js +68 -5
  48. package/dist/kernel/conventions/note-exclude.js.map +1 -1
  49. package/dist/kernel/doctor/service.js +2 -1
  50. package/dist/kernel/doctor/service.js.map +1 -1
  51. package/dist/kernel/engine/assemble.d.ts +32 -3
  52. package/dist/kernel/engine/assemble.js +395 -102
  53. package/dist/kernel/engine/assemble.js.map +1 -1
  54. package/dist/kernel/engine/embed/config.d.ts +77 -0
  55. package/dist/kernel/engine/embed/config.js +308 -0
  56. package/dist/kernel/engine/embed/config.js.map +1 -0
  57. package/dist/kernel/engine/embed/deferred.d.ts +19 -14
  58. package/dist/kernel/engine/embed/deferred.js +27 -17
  59. package/dist/kernel/engine/embed/deferred.js.map +1 -1
  60. package/dist/kernel/engine/embed/identity.d.ts +14 -12
  61. package/dist/kernel/engine/embed/identity.js +36 -7
  62. package/dist/kernel/engine/embed/identity.js.map +1 -1
  63. package/dist/kernel/engine/embed/model.d.ts +107 -132
  64. package/dist/kernel/engine/embed/model.js +568 -289
  65. package/dist/kernel/engine/embed/model.js.map +1 -1
  66. package/dist/kernel/engine/embed/provider.d.ts +14 -21
  67. package/dist/kernel/engine/embed/provider.js +185 -221
  68. package/dist/kernel/engine/embed/provider.js.map +1 -1
  69. package/dist/kernel/engine/embed/store.d.ts +3 -1
  70. package/dist/kernel/engine/embed/store.js +111 -134
  71. package/dist/kernel/engine/embed/store.js.map +1 -1
  72. package/dist/kernel/engine/embed/sync.d.ts +17 -8
  73. package/dist/kernel/engine/embed/sync.js +157 -59
  74. package/dist/kernel/engine/embed/sync.js.map +1 -1
  75. package/dist/kernel/engine/mcp/facade.d.ts +9 -6
  76. package/dist/kernel/engine/mcp/facade.js +225 -24
  77. package/dist/kernel/engine/mcp/facade.js.map +1 -1
  78. package/dist/kernel/engine/mcp/query-mapper.d.ts +8 -2
  79. package/dist/kernel/engine/mcp/query-mapper.js +67 -9
  80. package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
  81. package/dist/kernel/engine/mcp/types.d.ts +42 -0
  82. package/dist/kernel/engine/paths.d.ts +2 -0
  83. package/dist/kernel/engine/paths.js +6 -0
  84. package/dist/kernel/engine/paths.js.map +1 -0
  85. package/dist/kernel/engine/retrieval/dispatcher.d.ts +27 -6
  86. package/dist/kernel/engine/retrieval/dispatcher.js +70 -6
  87. package/dist/kernel/engine/retrieval/dispatcher.js.map +1 -1
  88. package/dist/kernel/engine/retrieval/generator.d.ts +64 -0
  89. package/dist/kernel/engine/retrieval/generator.js +319 -0
  90. package/dist/kernel/engine/retrieval/generator.js.map +1 -0
  91. package/dist/kernel/engine/retrieval/index.d.ts +6 -4
  92. package/dist/kernel/engine/retrieval/index.js +3 -3
  93. package/dist/kernel/engine/retrieval/index.js.map +1 -1
  94. package/dist/kernel/engine/retrieval/passthrough.test-helper.d.ts +32 -0
  95. package/dist/kernel/engine/retrieval/passthrough.test-helper.js +35 -0
  96. package/dist/kernel/engine/retrieval/passthrough.test-helper.js.map +1 -0
  97. package/dist/kernel/engine/retrieval/reranker.d.ts +12 -17
  98. package/dist/kernel/engine/retrieval/reranker.js +116 -16
  99. package/dist/kernel/engine/retrieval/reranker.js.map +1 -1
  100. package/dist/kernel/engine/retrieval/taxonomy-context.d.ts +24 -0
  101. package/dist/kernel/engine/retrieval/taxonomy-context.js +96 -0
  102. package/dist/kernel/engine/retrieval/taxonomy-context.js.map +1 -0
  103. package/dist/kernel/engine/tracer.d.ts +1 -3
  104. package/dist/kernel/engine/tracer.js +39 -31
  105. package/dist/kernel/engine/tracer.js.map +1 -1
  106. package/dist/kernel/engine/types.d.ts +30 -6
  107. package/dist/kernel/engine/types.js.map +1 -1
  108. package/dist/kernel/harness/surface-registry.js +2 -5
  109. package/dist/kernel/harness/surface-registry.js.map +1 -1
  110. package/dist/kernel/install/common.d.ts +10 -3
  111. package/dist/kernel/install/common.js +220 -17
  112. package/dist/kernel/install/common.js.map +1 -1
  113. package/dist/kernel/link/convention-note.js +2 -2
  114. package/dist/kernel/link/convention-note.js.map +1 -1
  115. package/dist/kernel/measurement/no-default-contract.d.ts +1 -1
  116. package/dist/kernel/measurement/no-default-contract.js +2 -2
  117. package/dist/kernel/measurement/no-default-contract.js.map +1 -1
  118. package/dist/kernel/searchbackend/engine-search-backend.d.ts +1 -0
  119. package/dist/kernel/searchbackend/engine-search-backend.js +48 -8
  120. package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
  121. package/dist/kernel/searchbackend/search-backend.d.ts +3 -1
  122. package/dist/kernel/searchbackend/search-backend.js +45 -8
  123. package/dist/kernel/searchbackend/search-backend.js.map +1 -1
  124. package/dist/kernel/semantic/semantic-engine.d.ts +11 -12
  125. package/dist/kernel/semantic/semantic-engine.js +35 -50
  126. package/dist/kernel/semantic/semantic-engine.js.map +1 -1
  127. package/dist/kernel/semantic/semantic-retrieve-args.d.ts +2 -1
  128. package/dist/kernel/semantic/semantic-retrieve-args.js +27 -0
  129. package/dist/kernel/semantic/semantic-retrieve-args.js.map +1 -1
  130. package/dist/kernel/semantic/semantic-retrieve-schema.d.ts +4 -2
  131. package/dist/kernel/semantic/semantic-retrieve-schema.js +2 -2
  132. package/dist/kernel/semantic/semantic-retrieve-schema.js.map +1 -1
  133. package/dist/kernel/semantic/semantic-retrieve.js +2 -2
  134. package/dist/kernel/semantic/semantic-retrieve.js.map +1 -1
  135. package/dist/kernel/semantic/semantic-tool-schemas.js +13 -1
  136. package/dist/kernel/semantic/semantic-tool-schemas.js.map +1 -1
  137. package/dist/kernel/setup/service.d.ts +3 -0
  138. package/dist/kernel/setup/service.js +22 -0
  139. package/dist/kernel/setup/service.js.map +1 -1
  140. package/dist/kernel/templates/migration.d.ts +1 -1
  141. package/dist/kernel/templates/migration.js +9 -5
  142. package/dist/kernel/templates/migration.js.map +1 -1
  143. package/dist/kernel/templates/resolver.d.ts +5 -0
  144. package/dist/kernel/templates/resolver.js +30 -1
  145. package/dist/kernel/templates/resolver.js.map +1 -1
  146. package/dist/mcp/server.js +16 -17
  147. package/dist/mcp/server.js.map +1 -1
  148. package/dist/vendors/codex/codex.d.ts +1 -6
  149. package/dist/vendors/codex/codex.js +86 -17
  150. package/dist/vendors/codex/codex.js.map +1 -1
  151. package/dist/vendors/hermes/hermes.js +149 -27
  152. package/dist/vendors/hermes/hermes.js.map +1 -1
  153. package/docs/conventions.md +19 -6
  154. package/docs/install.md +30 -1
  155. package/docs/verified-target.md +12 -2
  156. package/package.json +1 -1
  157. package/dist/cli/semantic-args.d.ts +0 -13
  158. package/dist/cli/semantic-args.js.map +0 -1
  159. package/dist/cli/semantic-http.d.ts +0 -11
  160. package/dist/cli/semantic-http.js.map +0 -1
  161. package/dist/cli/semantic-usage.d.ts +0 -1
  162. package/dist/cli/semantic-usage.js +0 -20
  163. package/dist/cli/semantic-usage.js.map +0 -1
  164. package/dist/cli/semantic.d.ts +0 -9
  165. package/dist/cli/semantic.js +0 -189
  166. 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.9.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.9.0"
40
+ "version": "0.10.1"
41
41
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oms",
3
- "version": "0.9.0",
3
+ "version": "0.10.1",
4
4
  "description": "Oh My Second Brain convention layer for Obsidian vaults — capture, retrieve, and validate knowledge under a declared semantic convention.",
5
5
  "author": {
6
6
  "name": "gobeumsu"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oms",
3
- "version": "0.9.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/",
@@ -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
@@ -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
@@ -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 semantic 네이티브 Markdown lexical/vector 검색 관리
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`이 전체 명령이고 `oms`는 짧은 별칭이다.
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 semantic Manage native Markdown lexical/vector retrieval
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.9.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
 
@@ -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 embeddingDescriptorPath: string | undefined;
27
- readonly embeddingNoDefault: boolean;
28
- /** setup: install the pinned default embedding model. */
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 command = argv[0];
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 embeddingDescriptorPath;
35
- let embeddingNoDefault = false;
36
- let embeddingDefault = false;
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 === "--vault" && next) {
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 === "--embedding-descriptor" && next) {
121
- embeddingDescriptorPath = path.resolve(cwd, next);
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 === "--embedding-no-default") {
125
- embeddingNoDefault = true;
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
- embeddingDefault = true;
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
- embeddingDescriptorPath,
155
- embeddingNoDefault,
156
- embeddingDefault,
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
- embeddingDescriptorPath,
182
- embeddingNoDefault,
183
- embeddingDefault,
209
+ modelsDescriptorPath,
210
+ modelsNoDefault,
211
+ modelsDefault,
184
212
  unknownFlags,
185
213
  error: new CliArgumentError(message),
186
214
  };
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
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>;