oh-my-second-brain 0.12.2 → 0.14.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.
Files changed (243) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.codex-plugin/plugin.json +2 -2
  4. package/.mcp.codex.json +1 -0
  5. package/.mcp.json +1 -1
  6. package/CHANGELOG-assets.md +10 -0
  7. package/CHANGELOG-cli.md +15 -0
  8. package/CHANGELOG-kernel.md +24 -0
  9. package/CHANGELOG-mcp.md +24 -0
  10. package/CHANGELOG-vendors.md +15 -0
  11. package/CHANGELOG.md +9 -0
  12. package/README.ko.md +48 -23
  13. package/README.md +40 -22
  14. package/assets/claude/hooks/oms-guard.mjs +3 -3
  15. package/assets/claude/hooks/oms-post-guard.mjs +5 -5
  16. package/assets/codex/AGENTS.md +1 -1
  17. package/assets/codex/rules/oms.md +2 -2
  18. package/assets/hermes/README.md +3 -3
  19. package/assets/hermes-manifest.json +2 -2
  20. package/assets/skills/distill/SKILL.md +8 -2
  21. package/assets/skills/doctor/SKILL.md +5 -3
  22. package/assets/skills/link/SKILL.md +13 -4
  23. package/assets/skills/search/SKILL.md +12 -6
  24. package/assets/skills/status/SKILL.md +6 -2
  25. package/assets/skills/template/SKILL.md +20 -7
  26. package/assets/skills/write/SKILL.md +32 -7
  27. package/dist/cli/args.d.ts +2 -12
  28. package/dist/cli/args.js +55 -126
  29. package/dist/cli/args.js.map +1 -1
  30. package/dist/cli/audit.d.ts +1 -0
  31. package/dist/cli/audit.js +21 -2
  32. package/dist/cli/audit.js.map +1 -1
  33. package/dist/cli/doc-command.d.ts +16 -0
  34. package/dist/cli/doc-command.js +54 -24
  35. package/dist/cli/doc-command.js.map +1 -1
  36. package/dist/cli/graph-command.d.ts +1 -0
  37. package/dist/cli/graph-command.js +92 -0
  38. package/dist/cli/graph-command.js.map +1 -0
  39. package/dist/cli/host-commands.d.ts +12 -14
  40. package/dist/cli/host-commands.js +143 -60
  41. package/dist/cli/host-commands.js.map +1 -1
  42. package/dist/cli/host-probe.d.ts +5 -0
  43. package/dist/cli/host-probe.js +129 -0
  44. package/dist/cli/host-probe.js.map +1 -0
  45. package/dist/cli/index-command.d.ts +8 -0
  46. package/dist/cli/index-command.js +149 -27
  47. package/dist/cli/index-command.js.map +1 -1
  48. package/dist/cli/link-check.d.ts +5 -0
  49. package/dist/cli/link-check.js +19 -0
  50. package/dist/cli/link-check.js.map +1 -0
  51. package/dist/cli/link-command.d.ts +2 -0
  52. package/dist/cli/link-command.js +257 -1
  53. package/dist/cli/link-command.js.map +1 -1
  54. package/dist/cli/linkify.d.ts +2 -2
  55. package/dist/cli/linkify.js +2 -2
  56. package/dist/cli/model-command.d.ts +2 -0
  57. package/dist/cli/model-command.js +178 -0
  58. package/dist/cli/model-command.js.map +1 -0
  59. package/dist/cli/note-command.d.ts +2 -0
  60. package/dist/cli/note-command.js +277 -0
  61. package/dist/cli/note-command.js.map +1 -0
  62. package/dist/cli/oms.d.ts +0 -4
  63. package/dist/cli/oms.js +177 -124
  64. package/dist/cli/oms.js.map +1 -1
  65. package/dist/cli/package-command.d.ts +1 -0
  66. package/dist/cli/package-command.js +82 -0
  67. package/dist/cli/package-command.js.map +1 -0
  68. package/dist/cli/search-usage.js +6 -11
  69. package/dist/cli/search-usage.js.map +1 -1
  70. package/dist/cli/search.d.ts +2 -9
  71. package/dist/cli/search.js +164 -53
  72. package/dist/cli/search.js.map +1 -1
  73. package/dist/cli/serve-http.d.ts +3 -0
  74. package/dist/cli/serve-http.js +150 -30
  75. package/dist/cli/serve-http.js.map +1 -1
  76. package/dist/cli/setup-command.d.ts +1 -1
  77. package/dist/cli/setup-command.js +70 -4
  78. package/dist/cli/setup-command.js.map +1 -1
  79. package/dist/cli/status-command.d.ts +1 -0
  80. package/dist/cli/status-command.js +124 -0
  81. package/dist/cli/status-command.js.map +1 -0
  82. package/dist/cli/template-command.d.ts +2 -0
  83. package/dist/cli/template-command.js +301 -0
  84. package/dist/cli/template-command.js.map +1 -0
  85. package/dist/cli/usage.js +45 -69
  86. package/dist/cli/usage.js.map +1 -1
  87. package/dist/kernel/capture/safe.d.ts +4 -0
  88. package/dist/kernel/capture/safe.js +163 -15
  89. package/dist/kernel/capture/safe.js.map +1 -1
  90. package/dist/kernel/conventions/note-exclude.js +11 -58
  91. package/dist/kernel/conventions/note-exclude.js.map +1 -1
  92. package/dist/kernel/conventions/report.js +1 -1
  93. package/dist/kernel/conventions/report.js.map +1 -1
  94. package/dist/kernel/conventions/write-contract.d.ts +3 -3
  95. package/dist/kernel/conventions/write-contract.js +8 -1
  96. package/dist/kernel/conventions/write-contract.js.map +1 -1
  97. package/dist/kernel/conventions/write-protocol.js.map +1 -1
  98. package/dist/kernel/doctor/service.d.ts +23 -1
  99. package/dist/kernel/doctor/service.js +105 -0
  100. package/dist/kernel/doctor/service.js.map +1 -1
  101. package/dist/kernel/engine/embed/model.d.ts +27 -0
  102. package/dist/kernel/engine/embed/model.js +119 -7
  103. package/dist/kernel/engine/embed/model.js.map +1 -1
  104. package/dist/kernel/engine/embed/read-snapshot.d.ts +16 -0
  105. package/dist/kernel/engine/embed/read-snapshot.js +116 -0
  106. package/dist/kernel/engine/embed/read-snapshot.js.map +1 -0
  107. package/dist/kernel/engine/embed/repair.js +19 -7
  108. package/dist/kernel/engine/embed/repair.js.map +1 -1
  109. package/dist/kernel/engine/embed/store.js +118 -103
  110. package/dist/kernel/engine/embed/store.js.map +1 -1
  111. package/dist/kernel/engine/graph/builder.js +1 -1
  112. package/dist/kernel/engine/graph/builder.js.map +1 -1
  113. package/dist/kernel/engine/graph/explore.d.ts +1 -1
  114. package/dist/kernel/engine/graph/explore.js +7 -4
  115. package/dist/kernel/engine/graph/explore.js.map +1 -1
  116. package/dist/kernel/engine/graph/node.js +13 -5
  117. package/dist/kernel/engine/graph/node.js.map +1 -1
  118. package/dist/kernel/engine/mcp/facade.js +36 -30
  119. package/dist/kernel/engine/mcp/facade.js.map +1 -1
  120. package/dist/kernel/engine/mcp/query-mapper.d.ts +1 -1
  121. package/dist/kernel/engine/mcp/query-mapper.js +2 -2
  122. package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
  123. package/dist/kernel/engine/mcp/types.d.ts +1 -1
  124. package/dist/kernel/engine/retrieval/taxonomy-context.js +1 -1
  125. package/dist/kernel/engine/retrieval/taxonomy-context.js.map +1 -1
  126. package/dist/kernel/harness/surface-registry.js +24 -18
  127. package/dist/kernel/harness/surface-registry.js.map +1 -1
  128. package/dist/kernel/harness/validation.js +4 -1
  129. package/dist/kernel/harness/validation.js.map +1 -1
  130. package/dist/kernel/install/asset-health.d.ts +47 -0
  131. package/dist/kernel/install/asset-health.js +90 -0
  132. package/dist/kernel/install/asset-health.js.map +1 -0
  133. package/dist/kernel/install/common.js +1 -1
  134. package/dist/kernel/install/common.js.map +1 -1
  135. package/dist/kernel/link/convention-note.js +4 -4
  136. package/dist/kernel/link/convention-note.js.map +1 -1
  137. package/dist/kernel/runtime/event-journal.d.ts +12 -0
  138. package/dist/kernel/runtime/event-journal.js +311 -0
  139. package/dist/kernel/runtime/event-journal.js.map +1 -0
  140. package/dist/kernel/runtime/event-read.d.ts +3 -0
  141. package/dist/kernel/runtime/event-read.js +80 -0
  142. package/dist/kernel/runtime/event-read.js.map +1 -0
  143. package/dist/kernel/runtime/event-summary.d.ts +20 -0
  144. package/dist/kernel/runtime/event-summary.js +49 -0
  145. package/dist/kernel/runtime/event-summary.js.map +1 -0
  146. package/dist/kernel/runtime/event-types.d.ts +91 -0
  147. package/dist/kernel/runtime/event-types.js +10 -0
  148. package/dist/kernel/runtime/event-types.js.map +1 -0
  149. package/dist/kernel/search/morning-test-fixtures.js +3 -3
  150. package/dist/kernel/search/morning-test-fixtures.js.map +1 -1
  151. package/dist/kernel/searchbackend/engine-search-backend.js +4 -4
  152. package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
  153. package/dist/kernel/setup/documents.d.ts +17 -8
  154. package/dist/kernel/setup/documents.js +13 -4
  155. package/dist/kernel/setup/documents.js.map +1 -1
  156. package/dist/kernel/setup/service.d.ts +11 -2
  157. package/dist/kernel/setup/service.js +27 -6
  158. package/dist/kernel/setup/service.js.map +1 -1
  159. package/dist/kernel/templates/canonical.d.ts +9 -5
  160. package/dist/kernel/templates/canonical.js +53 -3
  161. package/dist/kernel/templates/canonical.js.map +1 -1
  162. package/dist/kernel/templates/compose-add.d.ts +27 -0
  163. package/dist/kernel/templates/compose-add.js +29 -0
  164. package/dist/kernel/templates/compose-add.js.map +1 -0
  165. package/dist/kernel/templates/contract-from-notes.d.ts +32 -0
  166. package/dist/kernel/templates/contract-from-notes.js +285 -0
  167. package/dist/kernel/templates/contract-from-notes.js.map +1 -0
  168. package/dist/kernel/templates/doctor.d.ts +7 -2
  169. package/dist/kernel/templates/doctor.js +148 -28
  170. package/dist/kernel/templates/doctor.js.map +1 -1
  171. package/dist/kernel/templates/extract.d.ts +7 -8
  172. package/dist/kernel/templates/extract.js +27 -20
  173. package/dist/kernel/templates/extract.js.map +1 -1
  174. package/dist/kernel/templates/hints.d.ts +36 -0
  175. package/dist/kernel/templates/hints.js +279 -0
  176. package/dist/kernel/templates/hints.js.map +1 -0
  177. package/dist/kernel/templates/index.d.ts +3 -1
  178. package/dist/kernel/templates/index.js +1 -0
  179. package/dist/kernel/templates/index.js.map +1 -1
  180. package/dist/kernel/templates/migration.d.ts +34 -28
  181. package/dist/kernel/templates/migration.js +461 -710
  182. package/dist/kernel/templates/migration.js.map +1 -1
  183. package/dist/kernel/templates/obsidian-core-time.d.ts +19 -0
  184. package/dist/kernel/templates/obsidian-core-time.js +82 -0
  185. package/dist/kernel/templates/obsidian-core-time.js.map +1 -0
  186. package/dist/kernel/templates/operations.d.ts +8 -0
  187. package/dist/kernel/templates/operations.js +106 -0
  188. package/dist/kernel/templates/operations.js.map +1 -0
  189. package/dist/kernel/templates/paths.d.ts +5 -2
  190. package/dist/kernel/templates/paths.js +17 -2
  191. package/dist/kernel/templates/paths.js.map +1 -1
  192. package/dist/kernel/templates/policy.d.ts +59 -4
  193. package/dist/kernel/templates/policy.js +147 -38
  194. package/dist/kernel/templates/policy.js.map +1 -1
  195. package/dist/kernel/templates/register.d.ts +12 -0
  196. package/dist/kernel/templates/register.js +138 -0
  197. package/dist/kernel/templates/register.js.map +1 -0
  198. package/dist/kernel/templates/renderer.d.ts +11 -0
  199. package/dist/kernel/templates/renderer.js +67 -0
  200. package/dist/kernel/templates/renderer.js.map +1 -0
  201. package/dist/kernel/templates/resolver.d.ts +24 -1
  202. package/dist/kernel/templates/resolver.js +200 -53
  203. package/dist/kernel/templates/resolver.js.map +1 -1
  204. package/dist/kernel/templates/transaction.d.ts +17 -3
  205. package/dist/kernel/templates/transaction.js +199 -21
  206. package/dist/kernel/templates/transaction.js.map +1 -1
  207. package/dist/kernel/templates/types.d.ts +42 -17
  208. package/dist/kernel/update/update.d.ts +1 -7
  209. package/dist/kernel/update/update.js +36 -102
  210. package/dist/kernel/update/update.js.map +1 -1
  211. package/dist/mcp/server.d.ts +2 -1
  212. package/dist/mcp/server.js +731 -597
  213. package/dist/mcp/server.js.map +1 -1
  214. package/dist/mcp/update-notice.js +1 -1
  215. package/dist/mcp/update-notice.js.map +1 -1
  216. package/dist/vendors/claude/claude.d.ts +2 -0
  217. package/dist/vendors/claude/claude.js +2 -1
  218. package/dist/vendors/claude/claude.js.map +1 -1
  219. package/dist/vendors/claude/hook/post-tool-use.js +1 -1
  220. package/dist/vendors/claude/hook/post-tool-use.js.map +1 -1
  221. package/dist/vendors/codex/codex.d.ts +2 -0
  222. package/dist/vendors/codex/codex.js +28 -33
  223. package/dist/vendors/codex/codex.js.map +1 -1
  224. package/dist/vendors/hermes/hermes.d.ts +2 -0
  225. package/dist/vendors/hermes/hermes.js +34 -13
  226. package/dist/vendors/hermes/hermes.js.map +1 -1
  227. package/docs/adapters.md +36 -1
  228. package/docs/architecture.md +27 -3
  229. package/docs/cli-map.md +88 -0
  230. package/docs/conventions.md +71 -8
  231. package/docs/install.md +75 -32
  232. package/docs/verified-target.md +3 -3
  233. package/package.json +7 -3
  234. package/skills/distill/SKILL.md +26 -0
  235. package/skills/doctor/SKILL.md +26 -0
  236. package/skills/link/SKILL.md +33 -0
  237. package/skills/search/SKILL.md +37 -0
  238. package/skills/status/SKILL.md +20 -0
  239. package/skills/template/SKILL.md +42 -0
  240. package/skills/write/SKILL.md +61 -0
  241. package/dist/cli/doctor-lint.d.ts +0 -17
  242. package/dist/cli/doctor-lint.js +0 -87
  243. package/dist/cli/doctor-lint.js.map +0 -1
@@ -2,7 +2,7 @@
2
2
  name: search
3
3
  description: Retrieve vault knowledge through resolved template axes.
4
4
  aliases: [retrieve]
5
- mcp_tool: oms_search
5
+ mcp_tool: search
6
6
  mcp_args:
7
7
  op: "query"
8
8
  query: "$1"
@@ -15,17 +15,23 @@ Retrieve vault knowledge without changing the vault.
15
15
  ## Usage
16
16
 
17
17
  ```text
18
- /search <query>
18
+ /search <query|context|template-scan|templates|index-status|get-document>
19
19
  ```
20
20
 
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.
21
+ - `query` requires `mode: "query" | "search" | "vsearch"` and exactly one of `query` or `searches`. Plain `mode: "query"` is projection-independent lexical retrieval and remains available when no embedding provider is configured.
22
+ - `context` retrieves the declared search context.
23
+ - `template-scan` reports template candidates without registering or writing them.
24
+ - `templates` lists templates when `templateId` is absent and shows one template when `templateId` is present.
25
+ - `index-status` requires `view: "status" | "collections" | "contexts"`.
26
+ - `get-document` requires exactly one of `target`, `targets`, or `notePath` with its window.
23
27
 
24
- Use `oms_search { op: "templates" }` to discover stable template IDs and declared axes. Typed queries use the same derived projection as writes:
28
+ Do not use retired `lazy-load`, `multi-get-documents`, `collections`, `contexts`, or `status` search operations. Template-managed source files are never returned as notes. Expansion is explicit only for `search { op: "query" }` through its closed strategy object and never changes a plain lexical query.
29
+
30
+ Use `search { op: "templates" }` to list stable template IDs and declared axes, or add `templateId` to show exactly one. Typed queries use the same derived projection as writes:
25
31
 
26
32
  - `axes.template` selects one stable template identity.
27
33
  - `axes.field.<key>` filters a field declared by that template; values may be scalars, scalar lists, or supported predicate objects.
28
34
  - `axes.folder` scopes physical placement.
29
35
  - `axes.link` follows observed wikilinks.
30
36
 
31
- Axes intersect. They require a current `.oms/types.json` projection and fail loudly on an undeclared field or stale signature; remove the typed axis or run template diagnosis rather than guessing. Vector or HyDE retrieval also fails loudly without configured embedding provider and model.
37
+ Axes intersect. They require current authority and fail loudly on an undeclared field or stale signature; remove the typed axis or run template diagnosis rather than guessing. Vector or HyDE retrieval also fails loudly without a configured embedding provider and model. Missing results and history are unobserved, not proof of absence or non-use.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: status
3
3
  description: Report read-only template, graph, and semantic-index health.
4
- mcp_tool: oms_status
4
+ mcp_tool: status
5
5
  mcp_args: {}
6
6
  ---
7
7
 
@@ -13,4 +13,8 @@ Report vault health without changing files.
13
13
  /status
14
14
  ```
15
15
 
16
- Show resolved template count, current projection/input signature, managed template-source exclusions, template diagnosis state, and graph/semantic-index availability. A malformed or missing projection is reported as invalid with an actionable doctor operation. Status never regenerates controls, rebuilds caches, repairs notes, or writes the vault.
16
+ With `status` op absent, show the combined read-only view: resolved template count, current projection/input signature, managed template-source exclusions, template diagnosis state, and graph/semantic-index availability. Use `status { op: "graph" }` only for graph status. Do not send `graph` when requesting the combined view.
17
+
18
+ A malformed or missing projection is reported as invalid with an actionable doctor operation. Status never regenerates controls, rebuilds indexes, repairs notes, edits controls, or writes the vault. Use `oms graph build` / `doctor { op: "build-graph" }` for graph construction and `oms index sync|embed|repair` for embedding work.
19
+
20
+ Report runtime history separately: events live outside the vault and are scoped to the current host and vault. A missing event means unobserved, never unused. Distinguish actual mutation time from observation time; external drift gives a changed-between interval, not an invented modification timestamp. Every use/check verifies current authority instead of applying an age-based expiry rule. Surface `LEDGER_APPEND_FAILED` explicitly without claiming a successful vault write failed.
@@ -15,15 +15,28 @@ Turn the user's natural-language note design into an actual Obsidian Markdown te
15
15
  - `.oms/taxonomy.json` owns folder/link `intent`, note placement, and global axes.
16
16
  - `.oms/types.json` is derived state. Never edit it directly.
17
17
 
18
- Use an existing stable `templateId` when updating or moving a template. A path or digest change never creates a new identity. New OMS-managed templates default to `<templateFolder>/<templateId>.md`; registered existing templates keep their explicitly verified `sourcePath`.
18
+ Use an existing stable `templateId` when updating or moving a template. A path or digest change never creates a new identity. New OMS-managed templates default to `<sourceFolder>/<templateId>.md` inside a registered template folder (the folder marked `default: true` unless you name another registered folder); registered existing templates keep their explicitly verified `sourcePath`.
19
+
20
+ ## Renderers
21
+
22
+ Every binding carries `renderer`. Obsidian renders; OMS validates.
23
+
24
+ - `obsidian-core`: only `{{title}}`, `{{date}}`, `{{time}}`, `{{date:FMT}}`, `{{time:FMT}}` appear. OMS can create notes from it.
25
+ - `templater`: `<% %>` appears and the YAML frontmatter parses. OMS extracts the key/type contract; every field whose value is a Templater tag is `filledBy: "obsidian"`. OMS never copies a raw tag into a note and never runs Templater: a note write without caller values for those fields returns `FIELD_FILLED_BY_OBSIDIAN` (ask the user), and a Templater body returns `TEMPLATE_RENDERER_EXTERNAL`.
26
+ - `none`: script-first or no frontmatter. The contract comes from notes Obsidian already produced (`contract-from-notes`), with the sample count and field coverage shown in the proposal; zero samples is `TEMPLATE_CONTRACT_UNOBSERVED`, not unused.
27
+
28
+ You may **propose** an `obsidian-core` copy of a Templater template when the mapping is exact: `tp.date.now("FMT")` -> `{{date:FMT}}` / `{{time:FMT}}`, `tp.file.title` -> `{{title}}`. Anything else has no faithful mapping; do not invent one. Submit the converted bytes as a new template through the guarded flow; the kernel validates syntax, contract, path, signatures, and CAS, and the user approves the digest.
19
29
 
20
30
  ## Workflow
21
31
 
22
- 1. Read `oms_search { op: "templates" }` and the user's requested shape. Do not guess existing IDs or fields.
32
+ 1. Read `search { op: "templates" }` to list bindings, or `search { op: "templates", templateId }` to show one, then read the user's requested shape. Use `search { op: "template-scan" }` for candidates. Do not guess existing IDs or fields, and never auto-register a scan result.
23
33
  2. Draft the exact Markdown and policy/taxonomy intent. Preserve unknown frontmatter, policy extensions, body bytes, and Obsidian property types.
24
- 3. Call `oms_write { op: "template", ..., dryRun: true }` for create, update, reclassify, or relocate-folder.
25
- 4. Show the proposal, paths, diagnostics, and `approvalDigest` to the user.
26
- 5. Apply only after the caller explicitly approves that exact digest. Submit the same request with `dryRun: false` and `approvedDigest`.
27
- 6. Report the server-verified receipt and postconditions.
34
+ 3. Call `write { op: "template", ..., dryRun: true }` for create, update, reclassify, relocate-folder, register-folder, remove, or default. Regeneration is not a write-template mode: use `doctor { op: "regenerate-types", dryRun: true }`. Current signatures are derived and verified by the server, not hand-assembled by the host.
35
+ 4. To adopt a template that already exists in the vault, call `write { op: "template", mode: "register-existing", templateId, sourceFolder, sourcePath, renderer, filledBy, contract, naming, dryRun: true }` instead. `filledBy` lists Obsidian-filled field names (an empty array for a Core template). The server verifies the proposed metadata against the source and derives every signature itself; you supply no `expected*` digests and no template bytes.
36
+ 5. Show the proposal, paths, diagnostics, and `approvalDigest` to the user.
37
+ 6. Apply only after the caller explicitly approves that exact digest. Submit the same request with `dryRun: false` and `approvedDigest`.
38
+ 7. Report the server-verified receipt and postconditions.
39
+
40
+ CLI uses the noun leaves `oms template scan|list|show|add|update|move|remove|default|check|regenerate-types`. Mutations require `--dry-run`, then the same request with `--yes --approved-digest`; resume uses `oms template update --resume` with the exact `transactionId` and `approvedDigest`. `add <folder>` registers a source folder; `add <file> --id` registers existing bytes; `add --id --from` proposes a new source inside an explicitly registered creation folder. `default <id>` chooses the default note binding, not the source creation folder. Removal keeps registered-existing files; `--delete-source` applies only to managed sources. Never remove the current default without selecting another binding first.
28
41
 
29
- Reject unsupported expressions, unsafe paths, unresolved legacy mappings, stale signatures, and identity changes. Never self-approve, silently fall back to a legacy Concept reader, or directly mutate managed template/control files.
42
+ Reject unsupported expressions, unsafe paths, unresolved legacy mappings, stale signatures, and identity changes. Preserve non-observed proposal gaps explicitly. Never self-approve, silently fall back to a legacy Concept reader, or directly mutate managed template/control files.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: write
3
3
  description: Write vault notes and manage Obsidian templates through the guarded template contract.
4
- mcp_tool: oms_write
4
+ mcp_tool: write
5
5
  mcp_args:
6
6
  op: "note"
7
7
  mode: "create"
@@ -11,26 +11,51 @@ mcp_args:
11
11
 
12
12
  # write
13
13
 
14
- Use MCP `oms_write` for every vault-note or managed-template mutation. Do not use host Write/Edit for vault Markdown.
14
+ Use MCP `write` for every vault-note or managed-template mutation. Do not use host Write/Edit for vault Markdown.
15
15
 
16
16
  ## Notes
17
17
 
18
- Translate the user's natural-language note kind into a stable ID returned by `oms_search { op: "templates" }`; never guess an ID.
18
+ Translate the user's natural-language note kind into a stable ID returned by
19
+ `search { op: "templates" }`; never guess an ID. A create may omit
20
+ `templateId` only to use the policy's declared `defaultTemplate`. If no default
21
+ is declared, report `TEMPLATE_DEFAULT_UNDECLARED`; never select the first
22
+ available template.
19
23
 
20
24
  ```text
21
- /write <template-id> [body]
25
+ /write [template-id] [body]
22
26
  ```
23
27
 
24
- For create, call `op: "note"` with `mode`, `templateId`, and body/frontmatter; placement and naming derive the path. For append/update, pass `notePath` without `templateId`; OMS resolves the persisted `frontmatter.template`. The actual Obsidian template supplies frontmatter shape and body scaffolding; OMS applies the vault-wide base defaults and policy.
28
+ For create, call `op: "note"` with `mode: "create"`, optional `templateId`, and
29
+ body/frontmatter; placement and naming derive the path. For append/update, pass
30
+ `notePath` without a caller-selected `templateId`; OMS resolves the persisted
31
+ note identity. The actual Obsidian template supplies frontmatter shape and body
32
+ scaffolding; OMS applies the vault-wide base defaults and policy.
33
+
34
+ Document reads do not use `write`. Use `search { op: "get-document" }` with
35
+ exactly one of a single `target`, multiple `targets`, or `notePath` plus a
36
+ window. Do not call removed document-read operations or aliases.
25
37
 
26
38
  ## Templates
27
39
 
28
- Template creation, updates, reclassification, and template-folder relocation use `op: "template"` with `mode: "create" | "update" | "reclassify" | "relocate-folder"`.
40
+ Template changes use `op: "template"` with `mode: "create" | "update" |
41
+ "reclassify" | "relocate-folder" | "register-folder" | "register-existing" |
42
+ "remove" | "default"`.
29
43
 
30
- 1. Submit `dryRun: true` with current input and source signatures.
44
+ 1. Submit `dryRun: true`; the server derives and verifies current state, input,
45
+ and source signatures. Do not supply or invent expected-state digests.
31
46
  2. Show the resulting proposal and `approvalDigest`.
32
47
  3. Apply only with `dryRun: false` and that exact caller-approved digest.
33
48
 
34
49
  Never self-approve, hand-edit the derived `.oms/types.json`, or directly edit a managed template.
35
50
 
36
51
  Responses are `ask`, `written`, or `rejected`. Resolve named violations and retry; never invent missing required values.
52
+
53
+ Renderer rules for `op: "note"`: OMS renders supported Core expressions, never
54
+ executes Templater scripts. A `templater` template needs a caller value for
55
+ every `filledBy: "obsidian"` field (`FIELD_FILLED_BY_OBSIDIAN` asks for them)
56
+ and is rejected when its body contains external delimiters
57
+ (`TEMPLATE_RENDERER_EXTERNAL`); a `none` template is always rejected for note
58
+ creation. Point the user at an `obsidian-core` template or propose a converted
59
+ copy through `/template` instead of pasting raw Templater tags. Caller-supplied
60
+ values and body must not contain raw external tags either. Never expose private
61
+ note content while presenting a dry-run proposal.
@@ -9,26 +9,16 @@ export interface ParsedCliArgs {
9
9
  readonly vaultExplicit: boolean;
10
10
  readonly yes: boolean;
11
11
  readonly approvedDigest?: string;
12
- readonly templateFolder?: string;
13
- readonly maxPerTemplate?: number;
14
- /** linkify: opt into rewriting notes in place (still requires `--yes`). */
15
- readonly apply: boolean;
12
+ readonly templateFolders: readonly string[];
16
13
  readonly installClaude: boolean;
17
14
  readonly runtime: RuntimeSelection | undefined;
15
+ readonly agentVault: string | undefined;
18
16
  readonly dryRun: boolean;
19
17
  readonly executeExternal: boolean;
20
- readonly checkUpdate: boolean;
21
- readonly timeoutMs: number | undefined;
22
- readonly agentVault: string | undefined;
23
- readonly verbose: boolean;
24
- readonly json: boolean;
25
- readonly folders: readonly string[];
26
- readonly conventionNote: boolean;
27
18
  readonly modelsDescriptorPath: string | undefined;
28
19
  readonly modelsNoDefault: boolean;
29
20
  readonly modelsDefault: boolean;
30
21
  readonly unknownFlags: readonly string[];
31
22
  readonly error: CliArgumentError | undefined;
32
23
  }
33
- export declare function isRuntimeSelection(value: string): value is RuntimeSelection;
34
24
  export declare function parseCliArgs(argv: readonly string[], cwd?: string): ParsedCliArgs;
package/dist/cli/args.js CHANGED
@@ -1,107 +1,83 @@
1
1
  import path from "node:path";
2
- import { harnessSurfaceRegistry } from "../kernel/harness/surface-registry.js";
3
2
  export class CliArgumentError extends Error {
4
3
  constructor(message) {
5
4
  super(message);
6
5
  this.name = "CliArgumentError";
7
6
  }
8
7
  }
9
- export function isRuntimeSelection(value) {
10
- if (value === "auto" || value === "all")
11
- return true;
12
- return harnessSurfaceRegistry.hosts.some((host) => host.runtime === value);
13
- }
14
8
  export function parseCliArgs(argv, cwd = process.cwd()) {
15
9
  const firstArg = argv[0];
16
10
  const command = firstArg === "--help" || firstArg === "-h" ? undefined : firstArg;
17
- let help = firstArg === "--help" || firstArg === "-h";
11
+ let help = firstArg === "--help"
12
+ || firstArg === "-h"
13
+ || argv.slice(1).some((arg) => arg === "--help" || arg === "-h");
18
14
  let vault = cwd;
19
15
  let vaultExplicit = false;
20
16
  let yes = false;
21
17
  let approvedDigest;
22
- let templateFolder;
23
- let maxPerTemplate;
24
- let apply = false;
18
+ const templateFolders = [];
25
19
  let installClaude = false;
26
20
  let runtime;
21
+ let agentVault;
27
22
  let dryRun = false;
28
23
  let executeExternal = false;
29
- let checkUpdate = false;
30
- let timeoutMs;
31
- let agentVault;
32
- let verbose = false;
33
- let json = false;
34
- const folders = [];
35
- let conventionNote = true;
36
24
  let modelsDescriptorPath;
37
25
  let modelsNoDefault = false;
38
26
  let modelsDefault = false;
39
27
  const unknownFlags = [];
40
- for (let i = 1; i < argv.length; i++) {
41
- const arg = argv[i];
42
- const next = argv[i + 1];
28
+ // Every public family except setup owns its argv contract. The top-level
29
+ // parser only recognizes the common help route and otherwise
30
+ // leaves those arguments untouched for the family handler.
31
+ if (command !== "setup")
32
+ return result();
33
+ for (let index = 1; index < argv.length; index += 1) {
34
+ const arg = argv[index];
35
+ const next = argv[index + 1];
43
36
  if (arg === "--help" || arg === "-h") {
44
37
  help = true;
45
38
  }
46
- else if (arg === "--vault" && next) {
39
+ else if (arg === "--vault") {
40
+ if (next === undefined || next.startsWith("--"))
41
+ return failure("[oms] Missing value for --vault.");
47
42
  vault = path.resolve(cwd, next);
48
43
  vaultExplicit = true;
49
- i++;
44
+ index += 1;
50
45
  }
51
46
  else if (arg === "--yes") {
52
47
  yes = true;
53
48
  }
54
49
  else if (arg === "--approved-digest") {
55
50
  if (next === undefined || next.startsWith("--")) {
56
- return parsedArgsWithError("[oms] Missing value for --approved-digest.");
51
+ return failure("[oms] Missing value for --approved-digest.");
57
52
  }
58
53
  approvedDigest = next;
59
- i++;
54
+ index += 1;
60
55
  }
61
56
  else if (arg === "--template-folder") {
62
57
  if (next === undefined || next.startsWith("--")) {
63
- return parsedArgsWithError("[oms] Missing value for --template-folder.");
64
- }
65
- templateFolder = next;
66
- i++;
67
- }
68
- else if (arg === "--max-per-template") {
69
- const parsed = Number.parseInt(next ?? "", 10);
70
- if (next === undefined || !Number.isFinite(parsed) || parsed <= 0 || `${parsed}` !== next) {
71
- return parsedArgsWithError(`[oms] --max-per-template must be a positive integer.`);
58
+ return failure("[oms] Missing value for --template-folder.");
72
59
  }
73
- maxPerTemplate = parsed;
74
- i++;
75
- }
76
- else if (arg === "--apply") {
77
- apply = true;
60
+ if (!templateFolders.includes(next))
61
+ templateFolders.push(next);
62
+ index += 1;
78
63
  }
79
64
  else if (arg === "--install-claude") {
80
65
  installClaude = true;
81
66
  }
82
- else if (arg === "--check") {
83
- checkUpdate = true;
84
- }
85
- else if (arg === "--timeout-ms" && next) {
86
- const parsed = Number.parseInt(next, 10);
87
- if (!Number.isFinite(parsed) || parsed <= 0) {
88
- return parsedArgsWithError(`[oms] Unsupported timeout: ${next}`);
89
- }
90
- timeoutMs = parsed;
91
- i++;
92
- }
93
- else if (arg === "--runtime" && next) {
94
- if (isRuntimeSelection(next)) {
95
- runtime = next;
96
- }
97
- else {
98
- return parsedArgsWithError(`[oms] Unsupported runtime: ${next}`);
67
+ else if (arg === "--runtime") {
68
+ if (next === undefined || next.startsWith("--"))
69
+ return failure("[oms] Missing value for --runtime.");
70
+ if (!["auto", "all", "claude", "codex", "hermes"].includes(next)) {
71
+ return failure(`[oms] Unsupported runtime: ${next}`);
99
72
  }
100
- i++;
73
+ runtime = next;
74
+ index += 1;
101
75
  }
102
- else if (arg === "--agent-vault" && next) {
76
+ else if (arg === "--agent-vault") {
77
+ if (next === undefined || next.startsWith("--"))
78
+ return failure("[oms] Missing value for --agent-vault.");
103
79
  agentVault = path.resolve(cwd, next);
104
- i++;
80
+ index += 1;
105
81
  }
106
82
  else if (arg === "--dry-run") {
107
83
  dryRun = true;
@@ -109,25 +85,12 @@ export function parseCliArgs(argv, cwd = process.cwd()) {
109
85
  else if (arg === "--execute") {
110
86
  executeExternal = true;
111
87
  }
112
- else if (arg === "--verbose" || arg === "-v") {
113
- verbose = true;
114
- }
115
- else if (arg === "--json") {
116
- json = true;
117
- }
118
- else if (arg === "--folder" && next) {
119
- folders.push(next);
120
- i++;
121
- }
122
- else if (arg === "--no-convention-note") {
123
- conventionNote = false;
124
- }
125
88
  else if (arg === "--models-descriptor") {
126
89
  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.");
90
+ return failure("[oms] Missing value for --models-descriptor. Choose one of --models-default, --models-descriptor <path>, or --models-no-default.");
128
91
  }
129
92
  modelsDescriptorPath = path.resolve(cwd, next);
130
- i++;
93
+ index += 1;
131
94
  }
132
95
  else if (arg === "--models-no-default") {
133
96
  modelsNoDefault = true;
@@ -138,53 +101,22 @@ export function parseCliArgs(argv, cwd = process.cwd()) {
138
101
  else if (arg === "--embedding-descriptor") {
139
102
  unknownFlags.push(arg);
140
103
  if (next !== undefined && !next.startsWith("--"))
141
- i++;
142
- }
143
- else if (arg === "--embedding-default" || arg === "--embedding-no-default") {
144
- unknownFlags.push(arg);
104
+ index += 1;
145
105
  }
146
106
  else if (arg !== undefined) {
147
107
  unknownFlags.push(arg);
148
108
  }
149
109
  }
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
- }
110
+ const modelChoices = [
111
+ modelsDescriptorPath !== undefined ? "--models-descriptor" : undefined,
112
+ modelsDefault ? "--models-default" : undefined,
113
+ modelsNoDefault ? "--models-no-default" : undefined,
114
+ ].filter((flag) => flag !== undefined);
115
+ if (modelChoices.length > 1) {
116
+ return failure(`[oms] Mutually exclusive setup model options: ${modelChoices.join(" and ")}. Choose one of --models-default, --models-descriptor <path>, or --models-no-default.`);
159
117
  }
160
- return {
161
- command,
162
- help,
163
- vault,
164
- vaultExplicit,
165
- yes,
166
- approvedDigest,
167
- templateFolder,
168
- maxPerTemplate,
169
- apply,
170
- installClaude,
171
- runtime,
172
- dryRun,
173
- executeExternal,
174
- checkUpdate,
175
- timeoutMs,
176
- agentVault,
177
- verbose,
178
- json,
179
- folders,
180
- conventionNote,
181
- modelsDescriptorPath,
182
- modelsNoDefault,
183
- modelsDefault,
184
- unknownFlags,
185
- error: undefined,
186
- };
187
- function parsedArgsWithError(message) {
118
+ return result();
119
+ function result(error) {
188
120
  return {
189
121
  command,
190
122
  help,
@@ -192,26 +124,23 @@ export function parseCliArgs(argv, cwd = process.cwd()) {
192
124
  vaultExplicit,
193
125
  yes,
194
126
  approvedDigest,
195
- templateFolder,
196
- maxPerTemplate,
197
- apply,
127
+ templateFolders,
198
128
  installClaude,
199
129
  runtime,
130
+ agentVault,
200
131
  dryRun,
201
132
  executeExternal,
202
- checkUpdate,
203
- timeoutMs,
204
- agentVault,
205
- verbose,
206
- json,
207
- folders,
208
- conventionNote,
209
133
  modelsDescriptorPath,
210
134
  modelsNoDefault,
211
135
  modelsDefault,
212
- unknownFlags,
213
- error: new CliArgumentError(message),
136
+ unknownFlags: command === "setup"
137
+ ? unknownFlags
138
+ : argv.slice(1).filter((arg) => arg !== "--help" && arg !== "-h"),
139
+ error,
214
140
  };
215
141
  }
142
+ function failure(message) {
143
+ return result(new CliArgumentError(message));
144
+ }
216
145
  }
217
146
  //# sourceMappingURL=args.js.map
@@ -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,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClF,IAAI,IAAI,GAAG,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC;IACtD,IAAI,KAAK,GAAG,GAAG,CAAC;IAChB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,IAAI,cAAkC,CAAC;IACvC,IAAI,cAAkC,CAAC;IACvC,IAAI,cAAkC,CAAC;IACvC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAqC,CAAC;IAC1C,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,SAA6B,CAAC;IAClC,IAAI,UAA8B,CAAC;IACnC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,cAAc,GAAG,IAAI,CAAC;IAC1B,IAAI,oBAAwC,CAAC;IAC7C,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,EAAE,CAAC;YACrC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChC,aAAa,GAAG,IAAI,CAAC;YACrB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,GAAG,GAAG,IAAI,CAAC;QACb,CAAC;aAAM,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;YACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChD,OAAO,mBAAmB,CAAC,4CAA4C,CAAC,CAAC;YAC3E,CAAC;YACD,cAAc,GAAG,IAAI,CAAC;YACtB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;YACvC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChD,OAAO,mBAAmB,CAAC,4CAA4C,CAAC,CAAC;YAC3E,CAAC;YACD,cAAc,GAAG,IAAI,CAAC;YACtB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,oBAAoB,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC1F,OAAO,mBAAmB,CAAC,sDAAsD,CAAC,CAAC;YACrF,CAAC;YACD,cAAc,GAAG,MAAM,CAAC;YACxB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;YACtC,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,cAAc,IAAI,IAAI,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC5C,OAAO,mBAAmB,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,SAAS,GAAG,MAAM,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,IAAI,EAAE,CAAC;YACvC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7B,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,OAAO,mBAAmB,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,eAAe,IAAI,IAAI,EAAE,CAAC;YAC3C,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC/C,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,IAAI,IAAI,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YAC1C,cAAc,GAAG,KAAK,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,qBAAqB,EAAE,CAAC;YACzC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9D,OAAO,mBAAmB,CACxB,kIAAkI,CACnI,CAAC;YACJ,CAAC;YACD,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,GAAG,KAAK,qBAAqB,EAAE,CAAC;YACzC,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;YACtC,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,GAAG,KAAK,wBAAwB,EAAE,CAAC;YAC5C,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,CAAC,EAAE,CAAC;QACxD,CAAC;aAAM,IAAI,GAAG,KAAK,qBAAqB,IAAI,GAAG,KAAK,wBAAwB,EAAE,CAAC;YAC7E,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG;YACnB,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;YACtE,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;YAC9C,eAAe,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS;SACpD,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACvD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,mBAAmB,CACxB,iDAAiD,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,uFAAuF,CACnK,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,IAAI;QACJ,KAAK;QACL,aAAa;QACb,GAAG;QACH,cAAc;QACd,cAAc;QACd,cAAc;QACd,KAAK;QACL,aAAa;QACb,OAAO;QACP,MAAM;QACN,eAAe;QACf,WAAW;QACX,SAAS;QACT,UAAU;QACV,OAAO;QACP,IAAI;QACJ,OAAO;QACP,cAAc;QACd,oBAAoB;QACpB,eAAe;QACf,aAAa;QACb,YAAY;QACZ,KAAK,EAAE,SAAS;KACjB,CAAC;IAEF,SAAS,mBAAmB,CAAC,OAAe;QAC1C,OAAO;YACL,OAAO;YACP,IAAI;YACJ,KAAK;YACL,aAAa;YACb,GAAG;YACH,cAAc;YACd,cAAc;YACd,cAAc;YACd,KAAK;YACL,aAAa;YACX,OAAO;YACT,MAAM;YACN,eAAe;YACf,WAAW;YACX,SAAS;YACT,UAAU;YACV,OAAO;YACP,IAAI;YACF,OAAO;YACT,cAAc;YACd,oBAAoB;YACpB,eAAe;YACf,aAAa;YACb,YAAY;YACZ,KAAK,EAAE,IAAI,gBAAgB,CAAC,OAAO,CAAC;SACrC,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ export declare function runAudit(opts: {
2
2
  readonly vault: string;
3
3
  readonly json?: boolean;
4
4
  readonly folder?: string;
5
+ readonly maxPerTemplate?: number;
5
6
  }): Promise<number>;
package/dist/cli/audit.js CHANGED
@@ -9,8 +9,22 @@ function validatedFolder(folder) {
9
9
  }
10
10
  return folder;
11
11
  }
12
+ function boundedDiagnostics(diagnostics, maxPerTemplate) {
13
+ if (maxPerTemplate === undefined)
14
+ return diagnostics;
15
+ const counts = new Map();
16
+ return diagnostics.filter(item => {
17
+ const key = item.templateId ?? "<vault>";
18
+ const count = counts.get(key) ?? 0;
19
+ counts.set(key, count + 1);
20
+ return count < maxPerTemplate;
21
+ });
22
+ }
12
23
  export async function runAudit(opts) {
13
24
  try {
25
+ if (opts.maxPerTemplate !== undefined && (!Number.isSafeInteger(opts.maxPerTemplate) || opts.maxPerTemplate < 1)) {
26
+ throw new Error("Audit maxPerTemplate must be a safe positive integer.");
27
+ }
14
28
  const folder = validatedFolder(opts.folder);
15
29
  if (folder !== undefined)
16
30
  await access(path.join(opts.vault, folder));
@@ -19,10 +33,15 @@ export async function runAudit(opts) {
19
33
  const diagnosis = await diagnoseTemplates({ vault: opts.vault, source: "explicit" });
20
34
  const notes = folder === undefined ? index.notes : index.notes.filter(note => note.path === folder || note.path.startsWith(`${folder}/`));
21
35
  const unresolvedNotes = folder === undefined ? index.unresolvedNotes : index.unresolvedNotes.filter(note => note.path === folder || note.path.startsWith(`${folder}/`));
22
- const identityDiagnostics = unresolvedNotes.map(note => ({ code: "TEMPLATE_NOTE_IDENTITY_UNRESOLVED", path: note.path, remediation: `persist a valid template identity (${note.reason})` }));
36
+ const identityDiagnostics = unresolvedNotes.map(note => ({
37
+ code: "TEMPLATE_NOTE_IDENTITY_UNRESOLVED",
38
+ path: note.path,
39
+ remediation: `persist a valid template identity (${note.reason})`,
40
+ }));
23
41
  const scopedDiagnosis = folder === undefined
24
42
  ? diagnosis.diagnostics
25
43
  : diagnosis.diagnostics.filter(item => item.code !== "MIGRATION_NOTE_IDENTITY_UNRESOLVED" || item.path === undefined || item.path === folder || item.path.startsWith(`${folder}/`));
44
+ const diagnostics = boundedDiagnostics([...scopedDiagnosis, ...identityDiagnostics], opts.maxPerTemplate);
26
45
  const templateCounts = {};
27
46
  for (const note of notes)
28
47
  templateCounts[note.templateId] = (templateCounts[note.templateId] ?? 0) + 1;
@@ -35,7 +54,7 @@ export async function runAudit(opts) {
35
54
  excludedTemplateSources: convention.managedSourcePaths,
36
55
  templateCounts,
37
56
  status: scopedDiagnosis.length === 0 && unresolvedNotes.length === 0 ? "healthy" : "needs-repair",
38
- diagnostics: [...scopedDiagnosis, ...identityDiagnostics],
57
+ diagnostics,
39
58
  unresolvedNotes,
40
59
  unresolvedLegacyNotes: folder === undefined ? diagnosis.unresolvedLegacyNotes : diagnosis.unresolvedLegacyNotes.filter(notePath => notePath === folder || notePath.startsWith(`${folder}/`)),
41
60
  clean: scopedDiagnosis.length === 0 && unresolvedNotes.length === 0,
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,20 @@ export interface DocCommandOptions {
5
5
  readonly write: (message: string) => void;
6
6
  readonly writeError: (message: string) => void;
7
7
  }
8
+ export interface NoteDocumentGetOptions {
9
+ readonly vault: string;
10
+ readonly target?: string;
11
+ readonly targets?: readonly string[];
12
+ readonly notePath?: string;
13
+ readonly collection?: string;
14
+ readonly fromLine?: number;
15
+ readonly lineCount?: number;
16
+ readonly lineLimit?: number;
17
+ readonly maxBytes?: number;
18
+ readonly lineNumbers?: boolean;
19
+ readonly fullPath?: boolean;
20
+ readonly write: (message: string) => void;
21
+ }
22
+ /** Read-only document access shared by the note family and the retiring doc dispatcher. */
23
+ export declare function getNoteDocuments(options: NoteDocumentGetOptions): Promise<number>;
8
24
  export declare function runDocCommand(options: DocCommandOptions): Promise<number>;