oh-my-second-brain 0.13.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +2 -2
- package/.mcp.codex.json +1 -0
- package/.mcp.json +1 -1
- package/CHANGELOG-assets.md +10 -0
- package/CHANGELOG-cli.md +14 -0
- package/CHANGELOG-kernel.md +18 -0
- package/CHANGELOG-mcp.md +20 -0
- package/CHANGELOG-vendors.md +7 -0
- package/CHANGELOG.md +11 -0
- package/README.ko.md +93 -24
- package/README.md +85 -23
- package/assets/claude/CLAUDE.md +5 -0
- package/assets/claude/hooks/oms-guard.mjs +3 -3
- package/assets/claude/hooks/oms-post-guard.mjs +5 -5
- package/assets/codex/AGENTS.md +9 -1
- package/assets/codex/rules/oms.md +27 -2
- package/assets/hermes/README.md +3 -3
- package/assets/hermes/SOUL.md +23 -0
- package/assets/hermes-manifest.json +2 -2
- package/assets/skills/distill/SKILL.md +8 -2
- package/assets/skills/doctor/SKILL.md +4 -2
- package/assets/skills/link/SKILL.md +12 -3
- package/assets/skills/search/SKILL.md +33 -5
- package/assets/skills/status/SKILL.md +27 -1
- package/assets/skills/template/SKILL.md +49 -9
- package/assets/skills/write/SKILL.md +58 -6
- package/dist/cli/args.d.ts +2 -12
- package/dist/cli/args.js +55 -126
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/audit.d.ts +1 -0
- package/dist/cli/audit.js +21 -2
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/doc-command.d.ts +16 -0
- package/dist/cli/doc-command.js +54 -24
- package/dist/cli/doc-command.js.map +1 -1
- package/dist/cli/graph-command.d.ts +1 -0
- package/dist/cli/graph-command.js +92 -0
- package/dist/cli/graph-command.js.map +1 -0
- package/dist/cli/host-commands.d.ts +8 -14
- package/dist/cli/host-commands.js +139 -57
- package/dist/cli/host-commands.js.map +1 -1
- package/dist/cli/index-command.d.ts +8 -0
- package/dist/cli/index-command.js +149 -27
- package/dist/cli/index-command.js.map +1 -1
- package/dist/cli/link-check.d.ts +5 -0
- package/dist/cli/link-check.js +19 -0
- package/dist/cli/link-check.js.map +1 -0
- package/dist/cli/link-command.d.ts +2 -0
- package/dist/cli/link-command.js +257 -1
- package/dist/cli/link-command.js.map +1 -1
- package/dist/cli/linkify.d.ts +2 -2
- package/dist/cli/linkify.js +2 -2
- package/dist/cli/model-command.d.ts +2 -0
- package/dist/cli/model-command.js +178 -0
- package/dist/cli/model-command.js.map +1 -0
- package/dist/cli/note-command.d.ts +2 -0
- package/dist/cli/note-command.js +277 -0
- package/dist/cli/note-command.js.map +1 -0
- package/dist/cli/oms.d.ts +0 -4
- package/dist/cli/oms.js +177 -124
- package/dist/cli/oms.js.map +1 -1
- package/dist/cli/package-command.d.ts +1 -0
- package/dist/cli/package-command.js +82 -0
- package/dist/cli/package-command.js.map +1 -0
- package/dist/cli/search-usage.js +6 -11
- package/dist/cli/search-usage.js.map +1 -1
- package/dist/cli/search.d.ts +2 -9
- package/dist/cli/search.js +164 -53
- package/dist/cli/search.js.map +1 -1
- package/dist/cli/serve-http.d.ts +3 -0
- package/dist/cli/serve-http.js +150 -30
- package/dist/cli/serve-http.js.map +1 -1
- package/dist/cli/setup-command.d.ts +1 -1
- package/dist/cli/setup-command.js +70 -4
- package/dist/cli/setup-command.js.map +1 -1
- package/dist/cli/status-command.d.ts +1 -0
- package/dist/cli/status-command.js +124 -0
- package/dist/cli/status-command.js.map +1 -0
- package/dist/cli/template-command.d.ts +2 -0
- package/dist/cli/template-command.js +398 -0
- package/dist/cli/template-command.js.map +1 -0
- package/dist/cli/usage.js +45 -69
- package/dist/cli/usage.js.map +1 -1
- package/dist/kernel/capture/safe.d.ts +5 -0
- package/dist/kernel/capture/safe.js +309 -33
- package/dist/kernel/capture/safe.js.map +1 -1
- package/dist/kernel/contracts/index.d.ts +2 -0
- package/dist/kernel/contracts/index.js +18 -12
- package/dist/kernel/contracts/index.js.map +1 -1
- package/dist/kernel/conventions/note-exclude.js +11 -58
- package/dist/kernel/conventions/note-exclude.js.map +1 -1
- package/dist/kernel/conventions/report.js +1 -1
- package/dist/kernel/conventions/report.js.map +1 -1
- package/dist/kernel/conventions/write-contract.d.ts +2 -1
- package/dist/kernel/conventions/write-contract.js +12 -1
- package/dist/kernel/conventions/write-contract.js.map +1 -1
- package/dist/kernel/doctor/service.d.ts +23 -1
- package/dist/kernel/doctor/service.js +105 -0
- package/dist/kernel/doctor/service.js.map +1 -1
- package/dist/kernel/engine/embed/model.d.ts +27 -0
- package/dist/kernel/engine/embed/model.js +119 -3
- package/dist/kernel/engine/embed/model.js.map +1 -1
- package/dist/kernel/engine/embed/read-snapshot.d.ts +16 -0
- package/dist/kernel/engine/embed/read-snapshot.js +116 -0
- package/dist/kernel/engine/embed/read-snapshot.js.map +1 -0
- package/dist/kernel/engine/embed/repair.js +19 -7
- package/dist/kernel/engine/embed/repair.js.map +1 -1
- package/dist/kernel/engine/embed/store.js +118 -103
- package/dist/kernel/engine/embed/store.js.map +1 -1
- package/dist/kernel/engine/mcp/facade.js +8 -8
- package/dist/kernel/engine/mcp/facade.js.map +1 -1
- package/dist/kernel/engine/mcp/query-mapper.d.ts +1 -1
- package/dist/kernel/engine/mcp/query-mapper.js +2 -2
- package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
- package/dist/kernel/engine/mcp/types.d.ts +1 -1
- package/dist/kernel/engine/retrieval/taxonomy-context.js +1 -1
- package/dist/kernel/engine/retrieval/taxonomy-context.js.map +1 -1
- package/dist/kernel/harness/surface-registry.js +11 -13
- package/dist/kernel/harness/surface-registry.js.map +1 -1
- package/dist/kernel/install/asset-health.js +2 -2
- package/dist/kernel/install/asset-health.js.map +1 -1
- package/dist/kernel/install/common.js +1 -1
- package/dist/kernel/install/common.js.map +1 -1
- package/dist/kernel/link/convention-note.js +4 -4
- package/dist/kernel/link/convention-note.js.map +1 -1
- package/dist/kernel/runtime/event-journal.d.ts +12 -0
- package/dist/kernel/runtime/event-journal.js +311 -0
- package/dist/kernel/runtime/event-journal.js.map +1 -0
- package/dist/kernel/runtime/event-read.d.ts +3 -0
- package/dist/kernel/runtime/event-read.js +80 -0
- package/dist/kernel/runtime/event-read.js.map +1 -0
- package/dist/kernel/runtime/event-summary.d.ts +20 -0
- package/dist/kernel/runtime/event-summary.js +49 -0
- package/dist/kernel/runtime/event-summary.js.map +1 -0
- package/dist/kernel/runtime/event-types.d.ts +91 -0
- package/dist/kernel/runtime/event-types.js +10 -0
- package/dist/kernel/runtime/event-types.js.map +1 -0
- package/dist/kernel/search/morning-test-fixtures.js +6 -4
- package/dist/kernel/search/morning-test-fixtures.js.map +1 -1
- package/dist/kernel/searchbackend/engine-search-backend.js +4 -4
- package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
- package/dist/kernel/setup/documents.d.ts +16 -8
- package/dist/kernel/setup/documents.js +12 -4
- package/dist/kernel/setup/documents.js.map +1 -1
- package/dist/kernel/setup/service.d.ts +11 -2
- package/dist/kernel/setup/service.js +27 -6
- package/dist/kernel/setup/service.js.map +1 -1
- package/dist/kernel/templates/canonical.d.ts +2 -5
- package/dist/kernel/templates/canonical.js +40 -6
- package/dist/kernel/templates/canonical.js.map +1 -1
- package/dist/kernel/templates/census.d.ts +54 -0
- package/dist/kernel/templates/census.js +735 -0
- package/dist/kernel/templates/census.js.map +1 -0
- package/dist/kernel/templates/compose-add.d.ts +27 -0
- package/dist/kernel/templates/compose-add.js +29 -0
- package/dist/kernel/templates/compose-add.js.map +1 -0
- package/dist/kernel/templates/content-contract.d.ts +160 -0
- package/dist/kernel/templates/content-contract.js +608 -0
- package/dist/kernel/templates/content-contract.js.map +1 -0
- package/dist/kernel/templates/contract-from-notes.d.ts +32 -0
- package/dist/kernel/templates/contract-from-notes.js +285 -0
- package/dist/kernel/templates/contract-from-notes.js.map +1 -0
- package/dist/kernel/templates/doctor.d.ts +12 -3
- package/dist/kernel/templates/doctor.js +195 -58
- package/dist/kernel/templates/doctor.js.map +1 -1
- package/dist/kernel/templates/extract.d.ts +7 -8
- package/dist/kernel/templates/extract.js +27 -20
- package/dist/kernel/templates/extract.js.map +1 -1
- package/dist/kernel/templates/file-lock.d.ts +3 -0
- package/dist/kernel/templates/file-lock.js +86 -0
- package/dist/kernel/templates/file-lock.js.map +1 -0
- package/dist/kernel/templates/hints.d.ts +36 -0
- package/dist/kernel/templates/hints.js +279 -0
- package/dist/kernel/templates/hints.js.map +1 -0
- package/dist/kernel/templates/index.d.ts +5 -3
- package/dist/kernel/templates/index.js +1 -1
- package/dist/kernel/templates/index.js.map +1 -1
- package/dist/kernel/templates/interview-ledger.d.ts +51 -0
- package/dist/kernel/templates/interview-ledger.js +236 -0
- package/dist/kernel/templates/interview-ledger.js.map +1 -0
- package/dist/kernel/templates/interview-service.d.ts +49 -0
- package/dist/kernel/templates/interview-service.js +484 -0
- package/dist/kernel/templates/interview-service.js.map +1 -0
- package/dist/kernel/templates/interview.d.ts +33 -0
- package/dist/kernel/templates/interview.js +813 -0
- package/dist/kernel/templates/interview.js.map +1 -0
- package/dist/kernel/templates/migration.d.ts +31 -33
- package/dist/kernel/templates/migration.js +443 -716
- package/dist/kernel/templates/migration.js.map +1 -1
- package/dist/kernel/templates/obsidian-core-time.d.ts +19 -0
- package/dist/kernel/templates/obsidian-core-time.js +82 -0
- package/dist/kernel/templates/obsidian-core-time.js.map +1 -0
- package/dist/kernel/templates/operations.d.ts +8 -0
- package/dist/kernel/templates/operations.js +116 -0
- package/dist/kernel/templates/operations.js.map +1 -0
- package/dist/kernel/templates/paths.d.ts +5 -2
- package/dist/kernel/templates/paths.js +20 -5
- package/dist/kernel/templates/paths.js.map +1 -1
- package/dist/kernel/templates/policy.d.ts +88 -39
- package/dist/kernel/templates/policy.js +247 -57
- package/dist/kernel/templates/policy.js.map +1 -1
- package/dist/kernel/templates/reconcile.d.ts +12 -0
- package/dist/kernel/templates/reconcile.js +434 -0
- package/dist/kernel/templates/reconcile.js.map +1 -0
- package/dist/kernel/templates/renderer.d.ts +12 -0
- package/dist/kernel/templates/renderer.js +67 -0
- package/dist/kernel/templates/renderer.js.map +1 -0
- package/dist/kernel/templates/resolver.d.ts +50 -2
- package/dist/kernel/templates/resolver.js +575 -115
- package/dist/kernel/templates/resolver.js.map +1 -1
- package/dist/kernel/templates/review-context.d.ts +22 -0
- package/dist/kernel/templates/review-context.js +201 -0
- package/dist/kernel/templates/review-context.js.map +1 -0
- package/dist/kernel/templates/transaction.d.ts +1 -2
- package/dist/kernel/templates/transaction.js +183 -106
- package/dist/kernel/templates/transaction.js.map +1 -1
- package/dist/kernel/templates/types.d.ts +61 -22
- package/dist/kernel/update/update.d.ts +1 -7
- package/dist/kernel/update/update.js +36 -102
- package/dist/kernel/update/update.js.map +1 -1
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.js +822 -579
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/template-notice.d.ts +52 -0
- package/dist/mcp/template-notice.js +222 -0
- package/dist/mcp/template-notice.js.map +1 -0
- package/dist/mcp/update-notice.d.ts +2 -2
- package/dist/mcp/update-notice.js +6 -4
- package/dist/mcp/update-notice.js.map +1 -1
- package/dist/vendors/codex/codex.js +7 -30
- package/dist/vendors/codex/codex.js.map +1 -1
- package/dist/vendors/hermes/hermes.js +7 -4
- package/dist/vendors/hermes/hermes.js.map +1 -1
- package/docs/adapters.md +39 -1
- package/docs/architecture.md +82 -4
- package/docs/cli-map.md +116 -0
- package/docs/conventions.md +137 -10
- package/docs/install.md +122 -32
- package/docs/verified-target.md +3 -3
- package/package.json +2 -1
- package/skills/distill/SKILL.md +8 -2
- package/skills/doctor/SKILL.md +4 -2
- package/skills/link/SKILL.md +12 -3
- package/skills/search/SKILL.md +33 -5
- package/skills/status/SKILL.md +27 -1
- package/skills/template/SKILL.md +49 -9
- package/skills/write/SKILL.md +58 -6
- package/dist/cli/doctor-lint.d.ts +0 -17
- package/dist/cli/doctor-lint.js +0 -105
- package/dist/cli/doctor-lint.js.map +0 -1
- package/dist/kernel/templates/register.d.ts +0 -9
- package/dist/kernel/templates/register.js +0 -120
- package/dist/kernel/templates/register.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.15.0",
|
|
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.15.0"
|
|
41
41
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oms",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Oh My Second Brain convention layer for Obsidian vaults —
|
|
3
|
+
"version": "0.15.0",
|
|
4
|
+
"description": "Oh My Second Brain convention layer for Obsidian vaults — seven shared skills and five MCP tools under a declared semantic convention.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "gobeumsu"
|
|
7
7
|
},
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oms",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Oh My Second Brain convention layer for Obsidian vaults — Codex native rules, skills, and MCP adapter.",
|
|
5
|
-
"_note": "oms install writes Codex MCP config, installs ~/.codex/rules/oms.md, and installs ~/.codex/skills/oms-*.",
|
|
5
|
+
"_note": "oms host install writes Codex MCP config and provenance, installs ~/.codex/rules/oms.md, and installs the seven shared skills under ~/.codex/skills/oms-*.",
|
|
6
6
|
"skills": "./assets/skills/",
|
|
7
7
|
"mcpServers": "./.mcp.codex.json"
|
|
8
8
|
}
|
package/.mcp.codex.json
CHANGED
package/.mcp.json
CHANGED
package/CHANGELOG-assets.md
CHANGED
|
@@ -4,6 +4,16 @@ Skills, agents, templates, and host guidance changes belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.15.0] - 2026-09-19
|
|
8
|
+
|
|
9
|
+
- **Host guidance now teaches selected-folder template sources instead of per-file registration or folder modes.** It documents the exact `템플릿에 변경이 있습니다` / `확인하기` / `나중에` notice, host-only deferral, long-lived `templateNotice` results, and the resumable `interview-next` → `interview-answer` → `commit-contracts` flow that publishes only user-confirmed controls. Placement is write-time only (explicit destination, then taxonomy default, then `ask`); source review preserves Markdown bytes and does not invent a registration prerequisite, widget, or host configuration.
|
|
10
|
+
|
|
11
|
+
## [0.14.0] - 2026-09-05
|
|
12
|
+
|
|
13
|
+
- Shared skills and runtime guidance use the final command families and exclusive MCP operations, with no obsolete command aliases. Authored assets and the shipped root skill mirror remain byte-identical. (#125)
|
|
14
|
+
- Template and write guidance share the guarded CLI/MCP verbs and distinguish default note bindings from source-folder creation defaults. (#124)
|
|
15
|
+
- Status guidance distinguishes permanent external observation history from vault-owned convention files and avoids claiming inactivity from missing events. (#123)
|
|
16
|
+
- **Template and write skills distinguish external renderers from OMS note creation.** (#122) Hosts propose converted copies or observed contracts for user approval; the kernel validates them without executing scripts. Guidance explains missing Obsidian-filled values, external-body refusals, and unobserved contracts.
|
|
7
17
|
## [0.13.0] - 2026-09-05
|
|
8
18
|
|
|
9
19
|
- **The npm package now ships a generated root `skills/` mirror of the single authored `assets/skills/` source for Gajae-Code, whose convention scan previously found zero OMS skills silently.**
|
package/CHANGELOG-cli.md
CHANGED
|
@@ -4,6 +4,20 @@ Changes to the `oms` command surface belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.15.0] - 2026-09-19
|
|
8
|
+
|
|
9
|
+
- **Breaking: the template CLI now exposes a selected-folder census and linear review flow.** The exact leaves are `scan|list|show|add|update|move|remove|default|check|regenerate-types|review|answer|commit`; `scan` is read-only, `add <folder>` selects source scope, and `add --id <id> --from <file>` remains explicit source authoring rather than contract review. `answer <question-id> --answer <JSON> --census-digest <digest> --ledger-digest <digest|null>` forwards server-returned CAS fields, while `commit` adds the existing dry-run or `--yes --approved-digest` guard. This removes the per-file registration ritual without weakening verified-target writes; note creation considers `--folder <note-folder>` before a taxonomy default and then `ask`, with no template-creation target-folder form.
|
|
10
|
+
|
|
11
|
+
## [0.14.0] - 2026-09-05
|
|
12
|
+
|
|
13
|
+
- HTTP routes reject malformed bodies and fields instead of coercing them into empty queries. Status retains unaffected component evidence when convention, history, engine, or graph health is unavailable. (#125)
|
|
14
|
+
- **CLI operations now have explicit, non-overlapping families.** (#125) `note`, `template`, `link`, `bridge`, `search`, `index`, `graph`, `host`, `package`, `model`, `serve`, `hook`, and `status` retain real capabilities without retired aliases. Package updates no longer force host synchronization; read-only health and server startup do not create a vault store.
|
|
15
|
+
- **The template command family exposes guarded convention management.** (#124) Inspect, scan, register, create, update, move, remove, check, and select default bindings through shared kernel operations. Mutations require a reviewed dry-run digest rather than direct vault edits.
|
|
16
|
+
|
|
17
|
+
- **Breaking: `oms setup --template-folder <path>` is repeatable and template folders are always selected explicitly.** (#120) Repeated paths are registered in `auto` scan/proposal mode, with the first explicit path becoming the template-creation default (separate from the note `defaultTemplate`). Without flags, setup reuses saved v3 folder registrations only; Obsidian and Templater settings are displayed as numbered dry-run candidates but are never selected automatically. An unresolved selection is blocked with `TEMPLATE_FOLDER_SELECTION_REQUIRED` and no approval digest.
|
|
18
|
+
- **Setup dry-runs now expose `diagnostics` and `starterTemplates` instead of failing at the first incompatible file.** (#121) Each excluded template names its error, path, field when applicable, and remediation, while compatible files remain reviewable; an all-incompatible selection is blocked with `TEMPLATE_CANDIDATE_INCOMPATIBLE`. When the selected default folder is empty, `starterTemplates` shows the proposed `note.md`, which is written only by an approved apply.
|
|
19
|
+
- **Doctor now reports template drift one file at a time.** (#121) Every `TEMPLATE_SOURCE_DRIFT` result includes the path, expected and actual SHA-256 signatures, remediation, and the registered template ID when available, making `regenerate-types` review specific rather than generic.
|
|
20
|
+
|
|
7
21
|
## [0.13.0] - 2026-09-05
|
|
8
22
|
|
|
9
23
|
- **`oms doctor` now verifies Claude hook events plus the managed Codex and Hermes MCP registrations, preserving unreadable or syntactically malformed registration evidence as explicit inspection errors.**
|
package/CHANGELOG-kernel.md
CHANGED
|
@@ -4,6 +4,24 @@ Domain logic changes belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.15.0] - 2026-09-19
|
|
8
|
+
|
|
9
|
+
- **Breaking: template contracts now reconcile from an explicit selected-folder census instead of per-file registration or auto/manual modes.** Every `.md` beneath the selected scope is classified for add, edit, delete, or rename; source bytes stay in place and only user-confirmed `.oms` controls publish. The two-tier freshness gate hashes raw shared authorities first and then isolates changed templates as pending while preserving unrelated note writes. Metadata and bounded body-node contracts (with per-node requiredness/order) replace opaque body assumptions; anchored resumable questions and a locked CAS preserve unaffected answers. Historical ledger census is not blanket stale rejection: current request CAS and per-answer anchors govern validity. Ambiguous repeated body nodes remain contextualized, missing required-body rules require explicit disposition, and placement is optional during review then resolves at note creation by explicit destination, taxonomy default, or `ask`.
|
|
10
|
+
- **Review approval is bound to independently recorded source/body evidence, the exact captured controls, and the complete selected census.** Derived descriptors alone cannot transfer template identity; approved raw-body evidence preserves confirmation-only rename hints after restart without inferring body requirements. New unbound sources invalidate the reviewed scope, other template operations cannot absorb pending sibling edits, and deferred deletions remain actionable. Mutation and taxonomy identities normalize before routing so NFC/NFD spelling cannot lose source updates or authored placement. Public confirmation omits raw source/control byte arrays.
|
|
11
|
+
|
|
12
|
+
## [0.14.0] - 2026-09-05
|
|
13
|
+
|
|
14
|
+
- Read-only engine connections use stable vault-external SQLite snapshots, including committed WAL content, so source sidecars remain untouched even while the reader is open. Store rebuild/drop repairs share verified-target admission and server-checked postconditions across entrypoints. (#125)
|
|
15
|
+
- Package installation is independent of host registration synchronization, preserving a clear upgrade boundary instead of invoking a retired reconciliation command. Read-only entrypoints continue to resolve existing stores or ephemeral cores without creating vault state. (#125)
|
|
16
|
+
- **Folder registration, binding removal, and default selection share template transaction safeguards.** (#124) Server-derived current signatures, exact approval and readback protect every mode. Existing source files survive binding removal; only explicit deletion of managed sources is permitted. Note creation uses an explicitly declared default binding when no ID is supplied, never the first available template.
|
|
17
|
+
- **Runtime template and note observations are retained outside the vault.** (#123) A host-and-vault-scoped SQLite journal preserves individual invocation and mutation events without note bodies, keeps unknown external change times explicit, and never participates in approval digests. Authoritative contracts are reverified on use rather than trusted for a fixed number of days; logging failures remain visible without undoing successful writes. Completed transactions remove staging payloads while retaining replay evidence.
|
|
18
|
+
- **Template renderer contracts distinguish OMS-renderable sources from external Obsidian templates.** (#122) Templater fields require caller-supplied values instead of copying raw tags, and external bodies are rejected. Script-first sources can propose contracts from existing notes with sample counts and field coverage; missing observations are reported as unobserved. Source and sample limits fail visibly rather than silently truncating proposals; OMS never executes or transpiles Templater scripts.
|
|
19
|
+
- **Breaking: template policy v3 replaces singular `templateFolder` with structured `templateFolders` registrations.** (#120) Each folder records `path`, `auto|manual` mode, and at most one template-creation default; template bindings retain their source folder, while note placement remains explicit JSON taxonomy authority through the separate `defaultTemplate`. The runtime no longer invents an `Inbox` or template directory, and unsupported older policy versions stay protected and fail closed while setup produces an explicit v3 proposal.
|
|
20
|
+
- **Template discovery now reports incompatible files without hiding compatible siblings.** (#121) Setup emits per-file `TEMPLATE_EXPRESSION_UNSUPPORTED`, `TEMPLATE_SOURCE_INVALID`, and `TEMPLATE_ID_DUPLICATE` diagnostics with the affected path, field when applicable, and remediation; only the named file is excluded, while a selection with no compatible candidates is blocked as `TEMPLATE_CANDIDATE_INCOMPATIBLE`. Proposed IDs also remove `.template` and `.eta` suffixes before slugging, so common template filenames keep useful stable identities.
|
|
21
|
+
- **Obsidian core formatted date and time tags are validated instead of rejected as unknown expressions.** (#121) `{{date:FMT}}` and `{{time:FMT}}` accept the tokens `YYYY YY MM M DD D HH H hh h mm m ss s A a` with `-`, `/`, `.`, `:`, space, or `T` separators; bracket literals remain unsupported. Date and datetime properties containing these tags no longer produce false type-conflict diagnostics.
|
|
22
|
+
- **Template source drift is now actionable per changed file.** (#121) Doctor reports one `TEMPLATE_SOURCE_DRIFT` item per changed authority or registered template, including its template ID when available, path, projected and actual SHA-256 signatures, and regeneration remediation, so independent changes are no longer collapsed into one generic failure.
|
|
23
|
+
- **An empty selected default template folder now yields an explicit starter proposal.** (#121) Setup dry-runs include the starter `note.md` and diagnostics without writing the vault; the starter is created only after approval through the same guarded transaction as the rest of setup.
|
|
24
|
+
|
|
7
25
|
## [0.13.0] - 2026-09-05
|
|
8
26
|
|
|
9
27
|
- **Replaying an identical completed template registration now returns a verified `already-complete` receipt instead of failing, while conflicting template IDs remain rejected.** Replay recomputes the canonical input and every current physical output, including every registered source, before accepting the completed marker; any drift requires a new dry-run. Template input authority construction is shared by registration, resolution, and repair to prevent digest drift.
|
package/CHANGELOG-mcp.md
CHANGED
|
@@ -4,6 +4,26 @@ MCP server tools and resources belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.15.0] - 2026-09-19
|
|
8
|
+
|
|
9
|
+
- The bundled MCP SDK now resolves `hono` 4.13.8, clearing the moderate advisory group that affected its HTTP transport's body and query parsing. Only the lockfile moves; no declared dependency is added or changed.
|
|
10
|
+
- Pending body contracts and incomplete fresh projection coverage also surface the generic template notice when no new raw source diff exists, so successful source authoring cannot hide the remaining contract confirmation.
|
|
11
|
+
|
|
12
|
+
- **Template review now uses exactly `interview-next`, `interview-answer`, and `commit-contracts` under `write { op: "template" }`, with a minimal notice and long-lived carrier.** Selected-folder census changes preserve source bytes and publish only user-confirmed controls through the guarded flow; an affected template is pending without blocking unrelated templates, while shared-authority drift still fails closed vault-wide. The initial display is exactly `템플릿에 변경이 있습니다` with exactly `확인하기` and `나중에`; `나중에` is host-only with no server call or ledger mutation, and `templateNotice` is surfaced on tool results even when boot instructions are stale. The five-tool surface is unchanged.
|
|
13
|
+
|
|
14
|
+
## [0.14.0] - 2026-09-05
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Conflicting index mutations are serialized within each MCP server through engine disposal, so repair cannot move a store still owned by another request. A failed close returns `ENGINE_LIFECYCLE_FAILED` and blocks further index mutations until server restart; read-only requests remain independent. (#125)
|
|
19
|
+
- `status { op: "graph" }` returns graph-only health, while omitted `op` retains aggregate health. Doctor `sync-embeddings` repair mode requires `repairMode: "rebuild"` or `"drop"`, matching CLI store repair rather than silently forcing embeddings. (#125)
|
|
20
|
+
- **MCP detail capabilities have exclusive operation and mode boundaries.** (#125) Document lookup, index views, template inspection and embedding synchronization no longer overlap through duplicate operations or booleans. All capabilities remain under the same five tools, with schema and dispatch validated together.
|
|
21
|
+
- Template operations include guarded `register-folder`, `remove`, and `default` modes, with current signatures derived by the server. Update move strategies are validated consistently; note creation may omit its ID only when a default binding is declared. No additional MCP tool is introduced. (#124)
|
|
22
|
+
- Status and template listings expose local runtime observation history separately from the vault contract. Missing observations are reported as gaps, not inactivity; reading history never creates a vault store. (#123)
|
|
23
|
+
- Template writes respect renderer and Obsidian-filled field contracts, rejecting external bodies and unresolved values without copying raw Templater tags. The five-tool surface and digest-approved transaction boundary are unchanged. (#122)
|
|
24
|
+
- The search receipt field `drift` was renamed to `indexDrift`; no compatibility alias is retained.
|
|
25
|
+
- **`write { op: "template", mode: "register-existing" }` now requires `sourceFolder` together with `sourcePath`.** The folder must be a registered v3 template source folder containing the existing Markdown file. This keeps template source identity distinct from taxonomy note placement while retaining the existing dry-run, approval-digest, and compare-and-swap flow. The MCP surface remains exactly five public tools.
|
|
26
|
+
|
|
7
27
|
## [0.13.0] - 2026-09-05
|
|
8
28
|
|
|
9
29
|
### Added
|
package/CHANGELOG-vendors.md
CHANGED
|
@@ -4,6 +4,13 @@ Per-host adapter and installer changes belong here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.15.0] - 2026-09-19
|
|
8
|
+
|
|
9
|
+
- **Claude, Codex, and Hermes guidance now aligns with folder-sourced template contracts.** Each native host surface explains selected-folder census without per-file registration or folder modes, the exact minimal notice and host-only `나중에`, and the resumable `interview-next` → `interview-answer` → `commit-contracts` flow. Review preserves source bytes and publishes only user-confirmed controls; affected-template pending remains scoped while shared-authority failures stay fail-closed globally. Note creation uses explicit folder, taxonomy default, then `ask`, without changing the host-specific skill/tool asymmetry.
|
|
10
|
+
|
|
11
|
+
## [0.14.0] - 2026-09-05
|
|
12
|
+
|
|
13
|
+
- Native host launch manifests use `oms serve mcp`; registrations retain seven shared skills and exactly five MCP tools. Host synchronization updates OMS assets independently of package installation and never upgrades the host application. (#125)
|
|
7
14
|
## [0.13.0] - 2026-09-05
|
|
8
15
|
|
|
9
16
|
- **The shipped GJC skills mirror is now checked file-for-file against authored skills, with drift failures directing contributors to `npm run sync:skills`.**
|
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,17 @@ This aggregate changelog contains changes that span multiple layers.
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.15.0] - 2026-09-19
|
|
14
|
+
|
|
15
|
+
- **Breaking: a selected template folder, not a per-file registration step, is what makes a template usable.** Every `.md` beneath a folder you explicitly select is a census candidate tracked by content hash, so adding, editing, deleting, or renaming a source is picked up without registering each file and without the retired auto/manual folder modes. This spans layers deliberately: the kernel owns the census, contract derivation, interview ledger, and guarded reconcile; the CLI gains `oms template review|answer|commit`; MCP gains the matching `interview-next`, `interview-answer`, and `commit-contracts` modes plus the notice carrier; and the shared skills and host guidance describe one vocabulary. The five MCP tools and seven skills are unchanged.
|
|
16
|
+
|
|
17
|
+
Your files stay yours. Review reads and verifies source bytes where they already are and publishes only `.oms` control files through the existing exact-digest transaction — it never rewrites a template or an existing note. A change surfaces as exactly `템플릿에 변경이 있습니다` with `확인하기` and `나중에`, naming nothing; `나중에` is handled by the host alone. Confirming opens one linear interview that asks only what it must, keeps confirmed answers that the edit did not touch, resumes after an interruption, re-asks only the answers whose anchored part of the source actually changed, and still ends at an explicit final confirmation even when nothing is left to ask. Contracts now describe frontmatter *and* a bounded body grammar with per-node requiredness and order; what OMS observed and what you confirmed stay separate, so an ambiguous source asks rather than inventing a rule.
|
|
18
|
+
|
|
19
|
+
A changed template no longer stalls the rest of the vault: shared authority files still fail closed vault-wide, but a single edited source makes only its own template pending while unrelated notes keep writing. Approval records independently derived source and body evidence, so a hand-edited projection can never transfer a template's identity. Note placement is no longer a precondition for having a contract — it is resolved when a note is created, from an explicit destination, then the taxonomy default, then by asking. See ADR-013.
|
|
20
|
+
|
|
21
|
+
## [0.14.0] - 2026-09-05
|
|
22
|
+
|
|
23
|
+
- **Breaking: commands have one noun-and-verb home across CLI, MCP, skills, and host launchers.** (#125) Note, template, wikilink, bridge, index, graph, host, package, and model operations no longer overlap through legacy top-level aliases. The five MCP tools remain; exclusive operations retain the underlying capabilities. See `docs/cli-map.md` for the full map. Native MCP launch is `oms serve mcp`.
|
|
13
24
|
## [0.13.0] - 2026-09-05
|
|
14
25
|
|
|
15
26
|
- **Breaking: the OMS namespace now renders exactly once. Tools appear as `oms_write`, not `oms_oms_write`.** The server was registered under the id `oms` while its tools were *also* named `oms_write`, `oms_search`, `oms_link`, `oms_status`, and `oms_doctor`, so every host that qualifies a tool as `<server>_<tool>` displayed the product namespace twice — Hermes showed `oms_oms_write`, internally `mcp__oms__oms_write`. The MCP-local names are now capability-only: `write`, `search`, `link`, `status`, `doctor`. Qualifying hosts render `oms_write` and its peers; Claude and Codex render `mcp__oms__write`. This spans layers deliberately — the tool surface, the bundled skills' `mcp_tool` values, the host manifests, and every piece of host guidance moved together, so there is one coherent five-capability surface and no aliases. **Raw MCP clients must migrate**: `oms_write` → `write`, `oms_search` → `search`, `oms_link` → `link`, `oms_status` → `status`, `oms_doctor` → `doctor`, and the `status.writeTools` response strings from `oms_write-*` → `write-*`. Hosts that qualify tool names need no change. The demoted operations behind `op` are untouched, and a parity gate now fails the build if any advertised tool name carries the `oms_` prefix or if a supported host would render a doubled namespace. (#107)
|
package/README.ko.md
CHANGED
|
@@ -8,14 +8,16 @@ Oh My Second Brain(`oms`)은 기존 Obsidian/Markdown 볼트를 노트 소유권
|
|
|
8
8
|
- 각 템플릿은 경로·digest와 독립적인 안정적 `templateId`를 가지며, 볼트 전체의 `BaseContract` 하나를 상속한다.
|
|
9
9
|
- `.obsidian/types.json`은 읽기 전용 타입 권위다.
|
|
10
10
|
- 사용자 소유 온톨로지는 계속 활성 상태다. `.oms/template-policy.json`은 노트·필드 의미와 필수값, 형식, 허용값, 기본값, 이름 규칙, 정체성, 바인딩을 기록한다.
|
|
11
|
-
- `.oms/taxonomy.json`은 폴더·링크 의미와 배치를 소유하며, 작성된 폴더 의미는 `folder-ontology` 검색 축으로 노출된다. runtime의 유일한
|
|
11
|
+
- `.oms/taxonomy.json`은 폴더·링크 의미와 배치를 소유하며, 작성된 폴더 의미는 `folder-ontology` 검색 축으로 노출된다. runtime의 유일한 권위다.
|
|
12
12
|
- `.oms/types.json`은 쓰기·검색용 검증된 파생 projection이다. 직접 편집하지 않는다.
|
|
13
13
|
|
|
14
14
|
제거된 것은 노트 정체성으로서의 `concept`와 번들 runtime 기본값이지, 의미 계층으로서의 온톨로지가 아니다.
|
|
15
15
|
|
|
16
16
|
## 설정
|
|
17
17
|
|
|
18
|
-
Setup은
|
|
18
|
+
Setup은 명시적으로 선택한 템플릿 폴더 안의 기존 템플릿을 재귀 탐색하고
|
|
19
|
+
migration을 제안한다. 노트 타입 기본값을 번들로 강요하지 않으며 노트를
|
|
20
|
+
수정하지 않는다.
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
23
|
oms setup --vault /path/to/vault --dry-run
|
|
@@ -24,23 +26,69 @@ oms setup --vault /path/to/vault --yes --approved-digest <표시된-digest>
|
|
|
24
26
|
|
|
25
27
|
관리 템플릿 변경도 dry-run, 호출자가 검토한 정확한 digest, CAS, transaction, 사후조건 receipt를 거친다.
|
|
26
28
|
|
|
29
|
+
## 템플릿 흐름
|
|
30
|
+
|
|
31
|
+
명시적으로 선택한 템플릿 폴더 아래의 모든 `.md`는 템플릿 원본
|
|
32
|
+
후보가 된다. review는 원본을 검증하고 같은 위치의 바이트를 보존하며,
|
|
33
|
+
파일별 등록 절차나 auto/manual 폴더 mode는 필요하지 않다. OMS는
|
|
34
|
+
메타데이터 계약(frontmatter key·type·requiredness·`filledBy`)과 제한된
|
|
35
|
+
본문 구조(ATX heading, fence code block, fence 밖의 ordered/unordered list
|
|
36
|
+
run, `<!-- oms:content -->`, 문서 순서/EOL/BOM/final-newline)를 함께
|
|
37
|
+
도출한다. paragraph, setext heading, 모든 Markdown을 강제한다고 주장하지
|
|
38
|
+
않는다. 원본이 바뀌면 의존하는 템플릿만 pending이 되므로 다른 템플릿
|
|
39
|
+
쓰기는 계속 가능하며, shared authority 변경이나 불일치는 볼트 전체를
|
|
40
|
+
fail-closed 한다.
|
|
41
|
+
|
|
42
|
+
선택한 폴더의 원본이 바뀌면 호스트에 처음 표시할 알림은 정확히
|
|
43
|
+
`템플릿에 변경이 있습니다`이며, 동작은 정확히 `확인하기`와 `나중에`다.
|
|
44
|
+
처음 알림에는 템플릿 이름·hash·change class를 표시하지 않는다.
|
|
45
|
+
`나중에`는 host-only로 server를 호출하지 않고 interview ledger도 바꾸지
|
|
46
|
+
않는다. `확인하기`는 MCP `write { op: "template", mode: "interview-next" }`로
|
|
47
|
+
선형 resumable interview를 시작한다. 서버가 반환한 다음 질문을 따라
|
|
48
|
+
진행하고 영향 없는 confirmed answer는 보존한다. 모든 필요한 질문 뒤에는
|
|
49
|
+
정확한 최종 digest를 보여주고 사용자가 승인한 경우에만
|
|
50
|
+
`mode: "commit-contracts"`로 `.oms` control만 publish한다. self-approve하지
|
|
51
|
+
않는다. `status`와 search는 계속 읽기 전용이며 boot instruction이 stale한
|
|
52
|
+
long-lived host도 반환된 `templateNotice`를 표시해야 한다.
|
|
53
|
+
|
|
54
|
+
정확한 CLI review 흐름은 다음과 같다.
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
oms template review
|
|
58
|
+
oms template answer <question-id> --answer <JSON> --census-digest <digest> --ledger-digest <digest|null>
|
|
59
|
+
oms template commit --census-digest <digest> --ledger-digest <digest|null> --dry-run
|
|
60
|
+
oms template commit --census-digest <digest> --ledger-digest <digest|null> --yes --approved-digest <digest>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
answer는 서버가 반환한 question과 CAS 값을 사용한다. commit은 같은 CAS
|
|
64
|
+
값과 기존 dry-run 또는 yes/approved-digest guard를 함께 사용한다.
|
|
65
|
+
|
|
66
|
+
정확한 note 생성 사용법은 다음과 같다.
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
oms note create [template-id] --body <text>|--body-file <file> [--frontmatter <json>|--frontmatter-file <file>] [--folder <note-folder>]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
노트 생성 시 배치 우선순위는 명시적 caller folder, taxonomy default, `ask`
|
|
73
|
+
순서이며, 배치가 없다고 contract review를 막지 않는다.
|
|
74
|
+
|
|
27
75
|
## CLI
|
|
28
76
|
|
|
29
77
|
```text
|
|
30
|
-
oms setup
|
|
31
|
-
oms
|
|
32
|
-
oms
|
|
33
|
-
oms
|
|
34
|
-
oms
|
|
35
|
-
oms
|
|
36
|
-
oms
|
|
37
|
-
oms
|
|
38
|
-
oms
|
|
39
|
-
oms
|
|
40
|
-
oms
|
|
41
|
-
oms serve
|
|
42
|
-
oms
|
|
43
|
-
oms
|
|
78
|
+
oms setup 기존 볼트 템플릿 탐색 및 채택
|
|
79
|
+
oms template scan|list|show|add|update|move|remove|default|check|regenerate-types|review|answer|commit
|
|
80
|
+
oms note create|append|update|audit|backfill|get
|
|
81
|
+
oms link check|suggest|apply 노트 wikilink 점검·제안·적용
|
|
82
|
+
oms bridge add|remove|status 저장소-볼트 target bridge 관리
|
|
83
|
+
oms search query|context 명시적 query 실행 또는 구조화 context 조회
|
|
84
|
+
oms index sync|embed|repair|status|clean 파생 검색 상태 관리
|
|
85
|
+
oms graph build|status 노트 그래프 생성 또는 조회
|
|
86
|
+
oms host install|remove|sync|status 호스트 asset과 MCP 등록 관리
|
|
87
|
+
oms package check|update OMS 패키지 확인 또는 업데이트
|
|
88
|
+
oms model install|select|waive|status 로컬 모델 선택 관리
|
|
89
|
+
oms serve mcp|http stdio MCP 또는 로컬 HTTP 서버 시작
|
|
90
|
+
oms hook pre|post pre/post-tool-use 볼트 가드 실행
|
|
91
|
+
oms status 읽기 전용 종합 상태 표시
|
|
44
92
|
```
|
|
45
93
|
|
|
46
94
|
`oh-my-second-brain`은 전체 명령이고 `oms`는 짧은 별칭이다.
|
|
@@ -50,11 +98,14 @@ oms hook Claude pre/post tool-use 볼트 가드 실행
|
|
|
50
98
|
인식된 모든 명령은 `--help`와 `-h`를 받아들이며, exit 0으로 종료하고
|
|
51
99
|
부작용을 수행하지 않는다. 알 수 없는 명령에 `--help`를 함께 주면 exit 1로 종료한다.
|
|
52
100
|
|
|
53
|
-
`oms search <text>`는 lexical-only다. `--vec`, `--hyde`는 각각의
|
|
54
|
-
channel을 선택하고, `--expand`는 G004 expansion을 명시적으로
|
|
55
|
-
`--max-queries`는 1부터 32까지의 정수만 받는다. `--rerank`도
|
|
56
|
-
`oms
|
|
57
|
-
|
|
101
|
+
`oms search query <text>`는 lexical-only다. `--vec`, `--hyde`는 각각의
|
|
102
|
+
typed channel을 선택하고, `--expand`는 G004 expansion을 명시적으로
|
|
103
|
+
켜며, `--max-queries`는 1부터 32까지의 정수만 받는다. `--rerank`도
|
|
104
|
+
opt-in이다. `oms search context`는 별도의 구조화 context 표면이다.
|
|
105
|
+
Embedding은 명시적으로 `oms index embed`를 사용하며 sync와 repair는
|
|
106
|
+
서로 다른 index mode다. `oms index status --view status|collections|contexts`는
|
|
107
|
+
세 읽기 전용 view를 모두 보존하고, `oms index clean`은 제거 가능한 파생
|
|
108
|
+
상태를 정리한다.
|
|
58
109
|
|
|
59
110
|
Vector 검색에는 검증된 로컬 embedding capability가 필요하다. 선택 경로는
|
|
60
111
|
완전한 `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` 쌍, vault의
|
|
@@ -71,7 +122,7 @@ Setup에서는 로컬 검증 acquisition 정책 하나를 선택한다:
|
|
|
71
122
|
|
|
72
123
|
## MCP 도구
|
|
73
124
|
|
|
74
|
-
`oms mcp`는 정확히 다섯 개의 공개 도구를 노출한다:
|
|
125
|
+
`oms serve mcp`는 정확히 다섯 개의 공개 도구를 노출한다:
|
|
75
126
|
|
|
76
127
|
`write` · `search` · `link` · `status` · `doctor`
|
|
77
128
|
|
|
@@ -79,6 +130,13 @@ Setup에서는 로컬 검증 acquisition 정책 하나를 선택한다:
|
|
|
79
130
|
|
|
80
131
|
쓰기는 하나의 `ResolvedTemplate`을 해석해 create, append, update를 수행한다. 템플릿 변경, projection 재생성, 한 노트 정체성 backfill은 검증된 target과 명시적 승인 digest가 필요하다. `status`와 모든 검색 동작은 읽기 전용이다.
|
|
81
132
|
|
|
133
|
+
템플릿 contract review는 `oms_write`의 `op: "template"`에서 정확히
|
|
134
|
+
`interview-next`, `interview-answer`, `commit-contracts` mode를 사용한다.
|
|
135
|
+
정확한 CLI 대응은 `oms template review`, `oms template answer`,
|
|
136
|
+
`oms template commit`이다. answer는 서버가 반환한 question, request, CAS
|
|
137
|
+
field를 그대로 사용하며 parameter 이름을 만들지 않는다. 질문이 0개면
|
|
138
|
+
곧바로 최종 확인으로 간다.
|
|
139
|
+
|
|
82
140
|
일반 lexical 검색은 projection과 독립적이다. 템플릿·선언 필드·폴더·링크 축은 쓰기와 같은 projection을 사용하며 누락·stale 상태를 크게 실패시킨다. 관리 템플릿 원본은 검색 대상에서 제외한다. Vector/HyDE는 provider와 model이 모두 설정되지 않으면 가짜 대체 없이 실패한다.
|
|
83
141
|
|
|
84
142
|
## 설치
|
|
@@ -87,12 +145,23 @@ Node.js 20 이상이 필요하다.
|
|
|
87
145
|
|
|
88
146
|
```bash
|
|
89
147
|
npm install -g oh-my-second-brain
|
|
90
|
-
oms install --runtime all --vault /path/to/vault --yes
|
|
148
|
+
oms host install --runtime all --vault /path/to/vault --yes
|
|
91
149
|
```
|
|
92
150
|
|
|
93
151
|
Gajae-Code에서는 npm 패키지를 marketplace plugin으로 설치한다: `gjc plugin install oms@oms`. GJC는 패키지 루트의 `skills/` convention path에서 일곱 OMS skill을 발견한다.
|
|
94
152
|
|
|
95
|
-
호스트 설치는 canonical 볼트를
|
|
153
|
+
호스트 설치는 canonical 볼트를
|
|
154
|
+
`${XDG_CONFIG_HOME:-~/.config}/oms/vault.json`에 기록하고 각 관리형
|
|
155
|
+
등록에 `oms serve mcp --vault /path/to/vault`를 넣는다.
|
|
156
|
+
`oms host install|remove|sync|status`만 이 서명된 포인터로 호스트 통합을
|
|
157
|
+
관리한다.
|
|
158
|
+
`oms package update`는 패키지만 업데이트하고 호스트를 암묵적으로
|
|
159
|
+
동기화하지 않는다. `oms host sync`는 별도로 실행한다.
|
|
160
|
+
|
|
161
|
+
런타임 쓰기·검색 target 해석은 호스트 관리 포인터를 읽지 않는다.
|
|
162
|
+
우선순위는 명시적 target, 로컬 볼트 control, bridge, `OMS_VAULT`, 그리고
|
|
163
|
+
안전한 읽기 전용 fallback으로서의 cwd 순서다. 변경 작업은 cwd fallback을
|
|
164
|
+
사용할 수 없다.
|
|
96
165
|
|
|
97
166
|
`OMS_VAULT`는 명시적·로컬·bridge target이 없을 때 사용하는 지원 환경변수 fallback이다.
|
|
98
167
|
|
package/README.md
CHANGED
|
@@ -8,14 +8,16 @@ Oh My Second Brain (`oms`) connects an existing Obsidian or Markdown vault to AI
|
|
|
8
8
|
- Each template has a stable `templateId`, independent of its path and digest, and inherits one vault-wide `BaseContract`.
|
|
9
9
|
- `.obsidian/types.json` is read-only type authority.
|
|
10
10
|
- The user-owned ontology remains active: `.oms/template-policy.json` records note/field meaning alongside requiredness, formats, allowed values, defaults, naming, identity, and bindings.
|
|
11
|
-
- `.oms/taxonomy.json` records folder/link meaning and owns placement; authored folder intents are exposed through the `folder-ontology` search axis. It is the sole runtime authority
|
|
11
|
+
- `.oms/taxonomy.json` records folder/link meaning and owns placement; authored folder intents are exposed through the `folder-ontology` search axis. It is the sole runtime authority.
|
|
12
12
|
- `.oms/types.json` is a validated derived write/search projection. Never hand-edit it.
|
|
13
13
|
|
|
14
14
|
The retired model is `concept` as note identity and bundled runtime defaults—not ontology as semantic meaning.
|
|
15
15
|
|
|
16
16
|
## Setup
|
|
17
17
|
|
|
18
|
-
Setup recursively discovers existing templates
|
|
18
|
+
Setup recursively discovers existing templates within explicitly selected
|
|
19
|
+
template folders and proposes migration. It ships no note-type defaults and
|
|
20
|
+
never modifies notes.
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
23
|
oms setup --vault /path/to/vault --dry-run
|
|
@@ -24,23 +26,68 @@ oms setup --vault /path/to/vault --yes --approved-digest <shown-digest>
|
|
|
24
26
|
|
|
25
27
|
Managed-template changes use the same dry-run, exact caller approval, compare-and-swap, transaction, and postcondition receipt boundary.
|
|
26
28
|
|
|
29
|
+
## Template workflow
|
|
30
|
+
|
|
31
|
+
An explicitly selected template folder makes every `.md` beneath it a template
|
|
32
|
+
source candidate. Review verifies the source and preserves its bytes in place;
|
|
33
|
+
no per-file registration or auto/manual folder mode is required. OMS derives
|
|
34
|
+
both metadata (frontmatter keys, types, requiredness, and `filledBy`) and a
|
|
35
|
+
bounded body structure (ATX headings, fenced code blocks, ordered/unordered
|
|
36
|
+
list runs outside fences, `<!-- oms:content -->`, and document
|
|
37
|
+
order/EOL/BOM/final-newline details). It does not claim to enforce paragraphs,
|
|
38
|
+
setext headings, or all Markdown. A changed source makes only its dependent
|
|
39
|
+
template pending, so unrelated writes remain available; shared-authority
|
|
40
|
+
changes or mismatches fail closed for the whole vault.
|
|
41
|
+
|
|
42
|
+
When a selected-folder source changes, the initial host notice is exactly
|
|
43
|
+
`템플릿에 변경이 있습니다` with exactly `확인하기` and `나중에`; it names no
|
|
44
|
+
template and shows no hash or change class. `나중에` is host-only and makes no
|
|
45
|
+
server call or ledger mutation. `확인하기` starts a linear, resumable interview
|
|
46
|
+
through MCP `write { op: "template", mode: "interview-next" }`. Continue with
|
|
47
|
+
the server-returned next question, preserving unaffected confirmed answers.
|
|
48
|
+
After all necessary questions, show the exact final digest and publish only
|
|
49
|
+
`.oms` controls after the user approves it with `mode: "commit-contracts"`; never
|
|
50
|
+
self-approve. `status` and search remain read-only, and long-lived hosts
|
|
51
|
+
surface a returned `templateNotice` even when boot instructions are stale.
|
|
52
|
+
|
|
53
|
+
The exact CLI review flow is:
|
|
54
|
+
|
|
55
|
+
```text
|
|
56
|
+
oms template review
|
|
57
|
+
oms template answer <question-id> --answer <JSON> --census-digest <digest> --ledger-digest <digest|null>
|
|
58
|
+
oms template commit --census-digest <digest> --ledger-digest <digest|null> --dry-run
|
|
59
|
+
oms template commit --census-digest <digest> --ledger-digest <digest|null> --yes --approved-digest <digest>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Answer uses the server-returned question and CAS values. Commit uses the same
|
|
63
|
+
CAS values plus the existing dry-run or yes/approved-digest guard.
|
|
64
|
+
|
|
65
|
+
The exact note-create usage is:
|
|
66
|
+
|
|
67
|
+
```text
|
|
68
|
+
oms note create [template-id] --body <text>|--body-file <file> [--frontmatter <json>|--frontmatter-file <file>] [--folder <note-folder>]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
At note creation, placement is explicit caller folder, then the taxonomy
|
|
72
|
+
default, then `ask`; missing placement does not block contract review.
|
|
73
|
+
|
|
27
74
|
## CLI
|
|
28
75
|
|
|
29
76
|
```text
|
|
30
|
-
oms setup
|
|
31
|
-
oms
|
|
32
|
-
oms
|
|
33
|
-
oms
|
|
34
|
-
oms
|
|
35
|
-
oms
|
|
36
|
-
oms
|
|
37
|
-
oms
|
|
38
|
-
oms
|
|
39
|
-
oms
|
|
40
|
-
oms
|
|
41
|
-
oms serve
|
|
42
|
-
oms
|
|
43
|
-
oms
|
|
77
|
+
oms setup Discover and adopt existing vault templates
|
|
78
|
+
oms template scan|list|show|add|update|move|remove|default|check|regenerate-types|review|answer|commit
|
|
79
|
+
oms note create|append|update|audit|backfill|get
|
|
80
|
+
oms link check|suggest|apply Check, suggest, or apply note wikilinks
|
|
81
|
+
oms bridge add|remove|status Manage repository-to-vault target bridges
|
|
82
|
+
oms search query|context Run an explicit query or retrieve structured context
|
|
83
|
+
oms index sync|embed|repair|status|clean Manage derived search state
|
|
84
|
+
oms graph build|status Build or inspect the note graph
|
|
85
|
+
oms host install|remove|sync|status Manage host assets and MCP registrations
|
|
86
|
+
oms package check|update Check or update the OMS package
|
|
87
|
+
oms model install|select|waive|status Manage local model selection
|
|
88
|
+
oms serve mcp|http Start the stdio MCP or local HTTP server
|
|
89
|
+
oms hook pre|post Run pre- or post-tool-use vault guards
|
|
90
|
+
oms status Show the read-only aggregate status
|
|
44
91
|
```
|
|
45
92
|
|
|
46
93
|
`oh-my-second-brain` is the full command; `oms` is its short alias.
|
|
@@ -50,10 +97,13 @@ oms hook Run Claude pre/post tool-use vault guards
|
|
|
50
97
|
Every recognized command accepts `--help` and `-h`, exits 0, and performs no
|
|
51
98
|
side effects. An unknown command combined with `--help` exits 1.
|
|
52
99
|
|
|
53
|
-
`oms search <text>` is lexical-only. `--vec` and `--hyde` select their
|
|
54
|
-
typed channels; `--expand` explicitly enables G004 expansion,
|
|
55
|
-
accepts an integer from 1 through 32, and `--rerank` is opt-in.
|
|
56
|
-
|
|
100
|
+
`oms search query <text>` is lexical-only. `--vec` and `--hyde` select their
|
|
101
|
+
respective typed channels; `--expand` explicitly enables G004 expansion,
|
|
102
|
+
`--max-queries` accepts an integer from 1 through 32, and `--rerank` is opt-in.
|
|
103
|
+
`oms search context` is the separate structured-context surface. Embedding is
|
|
104
|
+
explicitly `oms index embed`; sync and repair are distinct index modes.
|
|
105
|
+
`oms index status --view status|collections|contexts` preserves all three
|
|
106
|
+
read-only views, while `oms index clean` removes eligible derived state.
|
|
57
107
|
|
|
58
108
|
Vector search requires a verified local embedding capability, selected by a
|
|
59
109
|
complete `OMS_EMBEDDING_PROVIDER`/`OMS_EMBEDDING_MODEL` pair, the vault's
|
|
@@ -69,7 +119,7 @@ During setup, choose one local verified acquisition policy:
|
|
|
69
119
|
|
|
70
120
|
## MCP tools
|
|
71
121
|
|
|
72
|
-
`oms mcp` exposes exactly five public tools:
|
|
122
|
+
`oms serve mcp` exposes exactly five public tools:
|
|
73
123
|
|
|
74
124
|
`write` · `search` · `link` · `status` · `doctor`
|
|
75
125
|
|
|
@@ -77,6 +127,13 @@ The seven skills (`write`, `search`, `link`, `distill`, `status`, `doctor`, `tem
|
|
|
77
127
|
|
|
78
128
|
Writes resolve one `ResolvedTemplate` and support create, append, and update. Template mutation, projection regeneration, and one-note identity backfill require a verified target and explicit approval digest. `status` and every search operation are read-only.
|
|
79
129
|
|
|
130
|
+
Template contract review uses `oms_write` with `op: "template"` and exactly
|
|
131
|
+
`interview-next`, `interview-answer`, and `commit-contracts` modes. The exact
|
|
132
|
+
CLI counterparts are `oms template review`, `oms template answer`, and
|
|
133
|
+
`oms template commit`. Answer submissions use the server-returned question,
|
|
134
|
+
request, and CAS fields; hosts must not invent parameter names. A zero-question
|
|
135
|
+
response proceeds directly to final confirmation.
|
|
136
|
+
|
|
80
137
|
Plain lexical search is projection-independent. Typed template/declared-field/folder/link axes use the same projection as writes and fail loudly when it is missing or stale. Managed template sources are excluded. Vector and HyDE requests fail loudly unless both embedding provider and model are configured.
|
|
81
138
|
|
|
82
139
|
## Install
|
|
@@ -85,12 +142,17 @@ Node.js 20 or later is required.
|
|
|
85
142
|
|
|
86
143
|
```bash
|
|
87
144
|
npm install -g oh-my-second-brain
|
|
88
|
-
oms install --runtime all --vault /path/to/vault --yes
|
|
145
|
+
oms host install --runtime all --vault /path/to/vault --yes
|
|
89
146
|
```
|
|
90
147
|
|
|
91
148
|
For Gajae-Code, install the npm package as a marketplace plugin: `gjc plugin install oms@oms`. GJC discovers the seven OMS skills at the package-root `skills/` convention path.
|
|
92
149
|
|
|
93
|
-
Host installation records the canonical vault in `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json` and stamps `oms mcp --vault /path/to/vault` into each managed host entry. `
|
|
150
|
+
Host installation records the canonical vault in `${XDG_CONFIG_HOME:-~/.config}/oms/vault.json` and stamps `oms serve mcp --vault /path/to/vault` into each managed host entry. `oms host install|remove|sync|status` use that signed pointer only to maintain host integrations. `oms package update` updates the package but never syncs hosts implicitly; run `oms host sync` separately.
|
|
151
|
+
|
|
152
|
+
Runtime write/search target resolution never reads the host-maintenance pointer.
|
|
153
|
+
Its precedence is explicit target, local vault controls, bridge, `OMS_VAULT`,
|
|
154
|
+
then cwd only as a safe read-only fallback. Mutations cannot use the cwd
|
|
155
|
+
fallback.
|
|
94
156
|
|
|
95
157
|
`OMS_VAULT` is the supported environment fallback when no explicit, local, or bridge target exists.
|
|
96
158
|
|
package/assets/claude/CLAUDE.md
CHANGED
|
@@ -13,6 +13,11 @@ Writes:
|
|
|
13
13
|
- Use `/write` and MCP `oms_write`; never host Write/Edit for vault notes or managed templates.
|
|
14
14
|
- Notes use `op: "note"` with a stable template ID.
|
|
15
15
|
- Template changes use `op: "template"`: dry-run first, then apply only with the exact reviewed `approvalDigest`.
|
|
16
|
+
- An explicitly selected template folder makes every `.md` beneath it a source candidate; no per-file registration or folder mode is required. Contract review verifies the source and leaves its bytes in place.
|
|
17
|
+
- A changed source makes only its dependent template pending; unrelated template writes remain available, while shared-authority failures fail closed for the whole vault.
|
|
18
|
+
- Surface the initial source-change notice exactly as `템플릿에 변경이 있습니다` with exactly `확인하기` and `나중에`; do not render a template name, hash, or change taxonomy. `나중에` is host-only and makes no server call or interview-ledger mutation. Surface returned `templateNotice` data in long-lived sessions even when boot instructions are stale.
|
|
19
|
+
- `확인하기` starts MCP `write { op: "template", mode: "interview-next" }`; answer with `interview-answer` and commit with `commit-contracts` only after all required questions and the user's approval of the exact final digest. Use server-returned next/request/CAS fields without inventing parameter names. The exact CLI counterparts are `oms template review`, `oms template answer`, and `oms template commit`; never self-approve.
|
|
20
|
+
- At note creation, choose placement by explicit caller folder, then taxonomy default, then `ask`; registration is not required and there is no Inbox fallback.
|
|
16
21
|
|
|
17
22
|
Retrieval:
|
|
18
23
|
- Use `/search`; discover identities with `op: "templates"`.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* oms-guard — thin PreToolUse wrapper for Claude Code settings.json.
|
|
4
4
|
*
|
|
5
5
|
* Filters vault-relevant Write/Edit tool calls and delegates to
|
|
6
|
-
* `oms hook pre
|
|
6
|
+
* `oms hook pre --vault <vault>` only when the target path is
|
|
7
7
|
* inside a configured vault. Vault 무관 호출은 spawn 없이 즉시 통과.
|
|
8
8
|
*
|
|
9
9
|
* Configuration (env vars set by the settings.json hook definition):
|
|
@@ -103,12 +103,12 @@ async function main() {
|
|
|
103
103
|
);
|
|
104
104
|
if (!targetVault) { allow(); return; }
|
|
105
105
|
|
|
106
|
-
// Spawn `oms hook pre
|
|
106
|
+
// Spawn `oms hook pre --vault <vault>` with the raw stdin payload.
|
|
107
107
|
try {
|
|
108
108
|
const { cmd, prefix } = resolveOmsCommand();
|
|
109
109
|
const result = spawnSync(
|
|
110
110
|
cmd,
|
|
111
|
-
[...prefix, "hook", "pre
|
|
111
|
+
[...prefix, "hook", "pre", "--vault", targetVault],
|
|
112
112
|
{ input: rawInput, encoding: "utf-8", timeout: 10000 },
|
|
113
113
|
);
|
|
114
114
|
if (result.status === 0 && result.stdout && result.stdout.trim()) {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* oms-post-guard — thin PostToolUse wrapper for Claude Code settings.json.
|
|
4
4
|
*
|
|
5
5
|
* Filters vault-relevant Write/Edit completions and delegates to
|
|
6
|
-
* `oms hook post
|
|
7
|
-
*
|
|
6
|
+
* `oms hook post --vault <vault>` for advisory frontmatter audit.
|
|
7
|
+
* Vault 무관 호출은 spawn 없이 즉시 통과.
|
|
8
8
|
*
|
|
9
9
|
* Configuration (env vars set by the settings.json hook definition):
|
|
10
10
|
* OMS_VAULT — primary vault path
|
|
@@ -92,16 +92,16 @@ async function main() {
|
|
|
92
92
|
const { cmd, prefix } = resolveOmsCommand();
|
|
93
93
|
const result = spawnSync(
|
|
94
94
|
cmd,
|
|
95
|
-
[...prefix, "hook", "post
|
|
95
|
+
[...prefix, "hook", "post", "--vault", targetVault],
|
|
96
96
|
{ input: rawInput, encoding: "utf-8", timeout: 30000 },
|
|
97
97
|
);
|
|
98
|
-
// Forward any additionalContext output from the post
|
|
98
|
+
// Forward any additionalContext output from the post hook.
|
|
99
99
|
if (result.status === 0 && result.stdout && result.stdout.trim()) {
|
|
100
100
|
process.stdout.write(result.stdout);
|
|
101
101
|
}
|
|
102
102
|
if (result.stderr) process.stderr.write("[oms-post-guard] " + result.stderr);
|
|
103
103
|
} catch {
|
|
104
|
-
// Fail silently — post
|
|
104
|
+
// Fail silently — the post hook is advisory.
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
|