oh-my-second-brain 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +89 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -1
- package/adapters/claude-code/skills/link/SKILL.md +87 -0
- package/adapters/codex/.codex-plugin/plugin.json +1 -1
- package/adapters/codex/skills/oms-link/SKILL.md +35 -0
- package/adapters/hermes/README.md +2 -0
- package/adapters/hermes/manifest.json +1 -1
- package/adapters/hermes/skills/link/SKILL.md +18 -0
- package/core/ontology/concepts/term.yaml +12 -0
- package/core/ontology/taxonomy.yaml +3 -0
- package/core/skills/link/SKILL.md +130 -0
- package/dist/capture/safe.d.ts +32 -2
- package/dist/capture/safe.js +223 -37
- package/dist/capture/safe.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.js +6 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/global-writeback.d.ts +31 -0
- package/dist/cli/global-writeback.js +73 -0
- package/dist/cli/global-writeback.js.map +1 -0
- package/dist/cli/host-commands.d.ts +30 -0
- package/dist/cli/host-commands.js +89 -0
- package/dist/cli/host-commands.js.map +1 -0
- package/dist/cli/linkify.d.ts +23 -0
- package/dist/cli/linkify.js +118 -0
- package/dist/cli/linkify.js.map +1 -0
- package/dist/cli/oms.d.ts +1 -0
- package/dist/cli/oms.js +52 -66
- package/dist/cli/oms.js.map +1 -1
- package/dist/cli/usage.js +11 -1
- package/dist/cli/usage.js.map +1 -1
- package/dist/conventions/write-protocol.d.ts +39 -0
- package/dist/conventions/write-protocol.js +44 -0
- package/dist/conventions/write-protocol.js.map +1 -0
- package/dist/core/runtime/assets.d.ts +6 -0
- package/dist/core/runtime/assets.js +27 -0
- package/dist/core/runtime/assets.js.map +1 -1
- package/dist/engine/graph/resolver.d.ts +17 -0
- package/dist/engine/graph/resolver.js +46 -11
- package/dist/engine/graph/resolver.js.map +1 -1
- package/dist/engine/linkify/apply.d.ts +56 -0
- package/dist/engine/linkify/apply.js +65 -0
- package/dist/engine/linkify/apply.js.map +1 -0
- package/dist/engine/linkify/josa.d.ts +58 -0
- package/dist/engine/linkify/josa.js +133 -0
- package/dist/engine/linkify/josa.js.map +1 -0
- package/dist/engine/linkify/mask.d.ts +29 -0
- package/dist/engine/linkify/mask.js +173 -0
- package/dist/engine/linkify/mask.js.map +1 -0
- package/dist/engine/linkify/suggest.d.ts +52 -0
- package/dist/engine/linkify/suggest.js +181 -0
- package/dist/engine/linkify/suggest.js.map +1 -0
- package/dist/engine/linkify/types.d.ts +68 -0
- package/dist/engine/linkify/types.js +12 -0
- package/dist/engine/linkify/types.js.map +1 -0
- package/dist/harness/surface-registry.d.ts +1 -0
- package/dist/harness/surface-registry.js +27 -0
- package/dist/harness/surface-registry.js.map +1 -1
- package/dist/harness/validation.js +30 -1
- package/dist/harness/validation.js.map +1 -1
- package/dist/install/claude-marketplace.d.ts +44 -0
- package/dist/install/claude-marketplace.js +89 -0
- package/dist/install/claude-marketplace.js.map +1 -0
- package/dist/install/claude.js +14 -7
- package/dist/install/claude.js.map +1 -1
- package/dist/install/codex.d.ts +15 -0
- package/dist/install/codex.js +15 -0
- package/dist/install/codex.js.map +1 -1
- package/dist/install/common.d.ts +11 -2
- package/dist/install/common.js +19 -12
- package/dist/install/common.js.map +1 -1
- package/dist/install/hermes.js +15 -15
- package/dist/install/hermes.js.map +1 -1
- package/dist/install/hosts.js +31 -15
- package/dist/install/hosts.js.map +1 -1
- package/dist/link/global-config.d.ts +22 -0
- package/dist/link/global-config.js +69 -0
- package/dist/link/global-config.js.map +1 -0
- package/dist/link/link.d.ts +6 -3
- package/dist/link/link.js +12 -2
- package/dist/link/link.js.map +1 -1
- package/dist/mcp/link-tools.d.ts +81 -0
- package/dist/mcp/link-tools.js +157 -0
- package/dist/mcp/link-tools.js.map +1 -0
- package/dist/mcp/server.d.ts +7 -0
- package/dist/mcp/server.js +107 -8
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/update-notice.d.ts +51 -0
- package/dist/mcp/update-notice.js +196 -0
- package/dist/mcp/update-notice.js.map +1 -0
- package/dist/update/update.d.ts +12 -0
- package/dist/update/update.js +2 -2
- package/dist/update/update.js.map +1 -1
- package/docs/install.md +38 -2
- package/docs/release.md +109 -17
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/install/hermes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hermes.js","sourceRoot":"","sources":["../../src/install/hermes.ts"],"names":[],"mappings":"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"}
|
package/dist/install/hosts.js
CHANGED
|
@@ -17,26 +17,42 @@ export function resolveRuntimeSelection(selection) {
|
|
|
17
17
|
}
|
|
18
18
|
return [selection];
|
|
19
19
|
}
|
|
20
|
+
async function runSingleHostOperation(options, runtime) {
|
|
21
|
+
const host = hostSurfaceForRuntime(runtime);
|
|
22
|
+
if (options.action === "install") {
|
|
23
|
+
if (runtime === "claude")
|
|
24
|
+
return installClaude(options, host);
|
|
25
|
+
if (runtime === "codex")
|
|
26
|
+
return installCodex(options, host);
|
|
27
|
+
return installHermes(options, host);
|
|
28
|
+
}
|
|
29
|
+
if (runtime === "claude")
|
|
30
|
+
return uninstallClaude(options);
|
|
31
|
+
if (runtime === "codex")
|
|
32
|
+
return uninstallCodex(options);
|
|
33
|
+
return uninstallHermes(options);
|
|
34
|
+
}
|
|
35
|
+
function failedHostOperationResult(options, runtime, error) {
|
|
36
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
37
|
+
return {
|
|
38
|
+
runtime,
|
|
39
|
+
action: options.action,
|
|
40
|
+
changed: false,
|
|
41
|
+
skipped: false,
|
|
42
|
+
paths: [],
|
|
43
|
+
commands: [],
|
|
44
|
+
messages: [`FAILED: ${runtime} ${options.action} did not complete: ${reason}`],
|
|
45
|
+
};
|
|
46
|
+
}
|
|
20
47
|
export async function runHostOperation(options) {
|
|
21
48
|
const runtimes = resolveRuntimeSelection(options.runtime);
|
|
22
49
|
const results = [];
|
|
23
50
|
for (const runtime of runtimes) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (runtime === "claude")
|
|
27
|
-
results.push(await installClaude(options, host));
|
|
28
|
-
if (runtime === "codex")
|
|
29
|
-
results.push(await installCodex(options, host));
|
|
30
|
-
if (runtime === "hermes")
|
|
31
|
-
results.push(await installHermes(options, host));
|
|
51
|
+
try {
|
|
52
|
+
results.push(await runSingleHostOperation(options, runtime));
|
|
32
53
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
results.push(await uninstallClaude(options));
|
|
36
|
-
if (runtime === "codex")
|
|
37
|
-
results.push(await uninstallCodex(options));
|
|
38
|
-
if (runtime === "hermes")
|
|
39
|
-
results.push(await uninstallHermes(options));
|
|
54
|
+
catch (error) {
|
|
55
|
+
results.push(failedHostOperationResult(options, runtime, error));
|
|
40
56
|
}
|
|
41
57
|
}
|
|
42
58
|
return results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/install/hosts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAU7D,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpH,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,sCAAsC,EACtC,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,UAAU,oBAAoB;IAClC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAA2B;IACjE,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,CAAC,GAAG,aAAa,CAAC,CAAC;IACnD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,SAAS,CAAC,CAAC;AACrB,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/install/hosts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface GlobalConfig {
|
|
2
|
+
version: number;
|
|
3
|
+
vault: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Read the global Obsidian vault target config from `<homeDir>/.oms/config.yaml`.
|
|
7
|
+
* Returns `null` only when the file is missing (ENOENT).
|
|
8
|
+
* A present-but-invalid file throws a loud actionable error naming the config file path:
|
|
9
|
+
* - bad YAML syntax
|
|
10
|
+
* - not a mapping
|
|
11
|
+
* - missing or empty `vault` string
|
|
12
|
+
* - bare relative `vault` value (would resolve against process cwd)
|
|
13
|
+
* The `vault` value is expanded if it starts with `~`, using the existing `expandHome`.
|
|
14
|
+
* `version` defaults to 1 when absent or non-number.
|
|
15
|
+
*/
|
|
16
|
+
export declare function readGlobalConfig(homeDir?: string): Promise<GlobalConfig | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Write the global Obsidian vault target config to `<homeDir>/.oms/config.yaml`.
|
|
19
|
+
* Creates the `.oms` directory recursively if needed.
|
|
20
|
+
* Returns the absolute path to the written config file.
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeGlobalConfig(config: GlobalConfig, homeDir?: string): Promise<string>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { parse as yamlParse, stringify as yamlStringify } from "yaml";
|
|
5
|
+
import { expandHome } from "./link.js";
|
|
6
|
+
/**
|
|
7
|
+
* Read the global Obsidian vault target config from `<homeDir>/.oms/config.yaml`.
|
|
8
|
+
* Returns `null` only when the file is missing (ENOENT).
|
|
9
|
+
* A present-but-invalid file throws a loud actionable error naming the config file path:
|
|
10
|
+
* - bad YAML syntax
|
|
11
|
+
* - not a mapping
|
|
12
|
+
* - missing or empty `vault` string
|
|
13
|
+
* - bare relative `vault` value (would resolve against process cwd)
|
|
14
|
+
* The `vault` value is expanded if it starts with `~`, using the existing `expandHome`.
|
|
15
|
+
* `version` defaults to 1 when absent or non-number.
|
|
16
|
+
*/
|
|
17
|
+
export async function readGlobalConfig(homeDir) {
|
|
18
|
+
const home = homeDir ?? os.homedir();
|
|
19
|
+
const configPath = path.join(home, ".oms", "config.yaml");
|
|
20
|
+
let raw;
|
|
21
|
+
try {
|
|
22
|
+
raw = await readFile(configPath, "utf-8");
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error instanceof Error && "code" in error && error.code === "ENOENT") {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
let parsed;
|
|
31
|
+
try {
|
|
32
|
+
parsed = yamlParse(raw);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
36
|
+
throw new Error(`[oms] Invalid global config at ${configPath}: config.yaml is not valid YAML (${message}). Run oms setup to repair it.`);
|
|
37
|
+
}
|
|
38
|
+
if (parsed == null || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
39
|
+
throw new Error(`[oms] Invalid global config at ${configPath}: expected a YAML mapping with vault and version.`);
|
|
40
|
+
}
|
|
41
|
+
const vault = parsed["vault"];
|
|
42
|
+
if (typeof vault !== "string" || vault.trim().length === 0) {
|
|
43
|
+
throw new Error(`[oms] Invalid global config at ${configPath}: missing required string field "vault". Run oms setup to register a vault.`);
|
|
44
|
+
}
|
|
45
|
+
const vaultTrimmed = vault.trim();
|
|
46
|
+
// Reject bare relative paths (e.g. ../notes). Must be absolute or ~/...
|
|
47
|
+
if (!path.isAbsolute(vaultTrimmed) && !vaultTrimmed.startsWith("~")) {
|
|
48
|
+
throw new Error(`[oms] Invalid global config at ${configPath}: vault must be an absolute path or ~/..., not a relative path like "${vaultTrimmed}". Run oms setup to register an absolute vault path.`);
|
|
49
|
+
}
|
|
50
|
+
const expandedVault = expandHome(vaultTrimmed);
|
|
51
|
+
return {
|
|
52
|
+
version: typeof parsed["version"] === "number" ? parsed["version"] : 1,
|
|
53
|
+
vault: expandedVault,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Write the global Obsidian vault target config to `<homeDir>/.oms/config.yaml`.
|
|
58
|
+
* Creates the `.oms` directory recursively if needed.
|
|
59
|
+
* Returns the absolute path to the written config file.
|
|
60
|
+
*/
|
|
61
|
+
export async function writeGlobalConfig(config, homeDir) {
|
|
62
|
+
const home = homeDir ?? os.homedir();
|
|
63
|
+
const omsDir = path.join(home, ".oms");
|
|
64
|
+
const configPath = path.join(omsDir, "config.yaml");
|
|
65
|
+
await mkdir(omsDir, { recursive: true });
|
|
66
|
+
await writeFile(configPath, yamlStringify(config), "utf-8");
|
|
67
|
+
return configPath;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=global-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/link/global-config.ts"],"names":[],"mappings":"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"}
|
package/dist/link/link.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export interface LinkRecord {
|
|
|
28
28
|
/** Vault folders (top-level names or nested subpaths) this repo may reach. */
|
|
29
29
|
scope: string[];
|
|
30
30
|
}
|
|
31
|
-
export type VaultSource = "vault" | "bridge" | "env" | "cwd";
|
|
31
|
+
export type VaultSource = "vault" | "bridge" | "env" | "global" | "cwd";
|
|
32
32
|
export interface ResolvedVault {
|
|
33
33
|
/** Effective vault root — where the `.oms/` ontology lives. */
|
|
34
34
|
vault: string;
|
|
@@ -79,9 +79,12 @@ export declare function writeLinkRecord(omsDir: string, record: LinkRecord): Pro
|
|
|
79
79
|
* 1. Local vault ontology (`.oms/concepts` or `.oms/taxonomy.yaml`) → vault.
|
|
80
80
|
* 2. Local bridge (`.oms/links.yaml`) → bridge.
|
|
81
81
|
* 3. `OMS_VAULT` environment variable → env.
|
|
82
|
-
* 4.
|
|
82
|
+
* 4. Global vault target registry (`~/.oms/config.yaml`) → global.
|
|
83
|
+
* 5. Fallback to `startDir` → cwd.
|
|
83
84
|
*/
|
|
84
|
-
export declare function resolveEffectiveVault(startDir: string, env?: Readonly<Record<string, string | undefined
|
|
85
|
+
export declare function resolveEffectiveVault(startDir: string, env?: Readonly<Record<string, string | undefined>>, opts?: {
|
|
86
|
+
homeDir?: string;
|
|
87
|
+
}): Promise<ResolvedVault>;
|
|
85
88
|
/** Append `pattern` to `<repoDir>/.gitignore` when absent. Returns whether it changed. */
|
|
86
89
|
export declare function ensureGitignore(repoDir: string, pattern: string): Promise<boolean>;
|
|
87
90
|
/**
|
package/dist/link/link.js
CHANGED
|
@@ -115,9 +115,10 @@ export async function writeLinkRecord(omsDir, record) {
|
|
|
115
115
|
* 1. Local vault ontology (`.oms/concepts` or `.oms/taxonomy.yaml`) → vault.
|
|
116
116
|
* 2. Local bridge (`.oms/links.yaml`) → bridge.
|
|
117
117
|
* 3. `OMS_VAULT` environment variable → env.
|
|
118
|
-
* 4.
|
|
118
|
+
* 4. Global vault target registry (`~/.oms/config.yaml`) → global.
|
|
119
|
+
* 5. Fallback to `startDir` → cwd.
|
|
119
120
|
*/
|
|
120
|
-
export async function resolveEffectiveVault(startDir, env = process.env) {
|
|
121
|
+
export async function resolveEffectiveVault(startDir, env = process.env, opts) {
|
|
121
122
|
const omsDir = path.join(startDir, ".oms");
|
|
122
123
|
const conceptsKind = await pathKind(path.join(omsDir, "concepts"));
|
|
123
124
|
const taxonomyKind = await pathKind(path.join(omsDir, "taxonomy.yaml"));
|
|
@@ -136,6 +137,15 @@ export async function resolveEffectiveVault(startDir, env = process.env) {
|
|
|
136
137
|
if (envVault && envVault.trim().length > 0) {
|
|
137
138
|
return { vault: expandHome(envVault), scope: null, source: "env" };
|
|
138
139
|
}
|
|
140
|
+
const { readGlobalConfig } = await import("./global-config.js");
|
|
141
|
+
const globalConfig = await readGlobalConfig(opts?.homeDir);
|
|
142
|
+
if (globalConfig) {
|
|
143
|
+
const resolvedVault = globalConfig.vault;
|
|
144
|
+
if ((await pathKind(resolvedVault)) !== "directory") {
|
|
145
|
+
throw new Error(`[oms] Global vault target does not exist or is not a directory: ${resolvedVault}. Update ~/.oms/config.yaml with a valid vault path, or run oms setup to register your vault.`);
|
|
146
|
+
}
|
|
147
|
+
return { vault: resolvedVault, scope: null, source: "global" };
|
|
148
|
+
}
|
|
139
149
|
return { vault: path.resolve(startDir), scope: null, source: "cwd" };
|
|
140
150
|
}
|
|
141
151
|
/** Append `pattern` to `<repoDir>/.gitignore` when absent. Returns whether it changed. */
|
package/dist/link/link.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/link/link.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../src/link/link.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP wiring for the linkify core: vault I/O + candidate universe for the
|
|
3
|
+
* `oms_link_suggest` / `oms_link_apply` tools.
|
|
4
|
+
*
|
|
5
|
+
* The linkify core (mask → suggest → apply) is pure and dependency-injected; it
|
|
6
|
+
* knows nothing about vaults, ontologies, or the filesystem. This module owns
|
|
7
|
+
* exactly that translation and nothing else, so server.ts stays a dispatcher.
|
|
8
|
+
*
|
|
9
|
+
* Candidate identity is DERIVED, never cached. A candidate id is its body span,
|
|
10
|
+
* and apply re-runs the same deterministic suggest pass over the note as it
|
|
11
|
+
* exists right now. Two consequences that matter: the server holds no
|
|
12
|
+
* cross-call state (a restart changes nothing), and a note edited between
|
|
13
|
+
* suggest and apply is caught by the base-hash check the kernel-facing
|
|
14
|
+
* `applyLinks` performs before any write.
|
|
15
|
+
*/
|
|
16
|
+
import type { WriteTargetSource } from "../conventions/write-protocol.js";
|
|
17
|
+
import type { Ontology } from "../core/ontology/types.js";
|
|
18
|
+
import { type ApplyResult } from "../engine/linkify/apply.js";
|
|
19
|
+
import type { LinkCandidate, TermNote } from "../engine/linkify/types.js";
|
|
20
|
+
/** A candidate as the MCP surface reports it: the core shape plus a stable id. */
|
|
21
|
+
export interface IdentifiedCandidate extends LinkCandidate {
|
|
22
|
+
/** Deterministic handle a client passes back to `oms_link_apply`. */
|
|
23
|
+
readonly id: string;
|
|
24
|
+
}
|
|
25
|
+
/** Payload of a successful `oms_link_suggest` call. */
|
|
26
|
+
export interface LinkSuggestion {
|
|
27
|
+
readonly notePath: string;
|
|
28
|
+
/** sha256 of the body the candidates were computed against (apply's token). */
|
|
29
|
+
readonly baseContentHash: string;
|
|
30
|
+
readonly candidateNotes: number;
|
|
31
|
+
readonly candidates: readonly IdentifiedCandidate[];
|
|
32
|
+
}
|
|
33
|
+
/** Everything both link tools need to address a vault note. */
|
|
34
|
+
export interface LinkToolTarget {
|
|
35
|
+
readonly vault: string;
|
|
36
|
+
readonly source: WriteTargetSource;
|
|
37
|
+
readonly ontology: Ontology;
|
|
38
|
+
/** Vault-relative markdown path of the note being linkified. */
|
|
39
|
+
readonly notePath: string;
|
|
40
|
+
}
|
|
41
|
+
/** Restrict the candidate universe to one top-level vault folder. */
|
|
42
|
+
export interface LinkScope {
|
|
43
|
+
readonly folder?: string | undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Every `term`-bound note in the vault, with its declared surface forms.
|
|
47
|
+
*
|
|
48
|
+
* Concept binding comes from the ontology's folder contract (the same resolver
|
|
49
|
+
* the write kernel uses), NOT from a frontmatter field a note can claim for
|
|
50
|
+
* itself — a note cannot opt into being a link target by asserting it is one.
|
|
51
|
+
*/
|
|
52
|
+
export declare function collectTermNotes(vault: string, ontology: Ontology, scope?: LinkScope): Promise<TermNote[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Propose `[[wikilink]]` insertions for one note against the vault's term notes.
|
|
55
|
+
*
|
|
56
|
+
* Read-only: nothing is written and no state is retained. The returned
|
|
57
|
+
* `baseContentHash` is the caller's optimistic-concurrency token for apply.
|
|
58
|
+
*/
|
|
59
|
+
export declare function suggestLinksForNote(target: LinkToolTarget, scope?: LinkScope): Promise<LinkSuggestion>;
|
|
60
|
+
/** Payload of an `oms_link_apply` call: the core result plus what was selected. */
|
|
61
|
+
export interface LinkApplyOutcome {
|
|
62
|
+
readonly notePath: string;
|
|
63
|
+
readonly requestedIds: readonly string[];
|
|
64
|
+
/** Requested ids that still name a live span in the note's current body. */
|
|
65
|
+
readonly resolvedIds: readonly string[];
|
|
66
|
+
readonly result: ApplyResult;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Apply the selected candidates to a note and persist through the write kernel.
|
|
70
|
+
*
|
|
71
|
+
* The candidates are recomputed from the note's CURRENT body: ids that no
|
|
72
|
+
* longer name a span simply do not resolve, and a body that drifted since
|
|
73
|
+
* suggest fails the `baseContentHash` check inside `applyLinks` before any
|
|
74
|
+
* write is attempted.
|
|
75
|
+
*/
|
|
76
|
+
export declare function applyLinksForNote(target: LinkToolTarget, selection: {
|
|
77
|
+
readonly baseContentHash: string;
|
|
78
|
+
readonly candidateIds: readonly string[];
|
|
79
|
+
}, scope?: LinkScope): Promise<LinkApplyOutcome>;
|
|
80
|
+
/** The MCP-facing JSON shape of an apply outcome: applied body + receipt, or a typed refusal. */
|
|
81
|
+
export declare function linkApplyPayload(outcome: LinkApplyOutcome): Record<string, unknown>;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP wiring for the linkify core: vault I/O + candidate universe for the
|
|
3
|
+
* `oms_link_suggest` / `oms_link_apply` tools.
|
|
4
|
+
*
|
|
5
|
+
* The linkify core (mask → suggest → apply) is pure and dependency-injected; it
|
|
6
|
+
* knows nothing about vaults, ontologies, or the filesystem. This module owns
|
|
7
|
+
* exactly that translation and nothing else, so server.ts stays a dispatcher.
|
|
8
|
+
*
|
|
9
|
+
* Candidate identity is DERIVED, never cached. A candidate id is its body span,
|
|
10
|
+
* and apply re-runs the same deterministic suggest pass over the note as it
|
|
11
|
+
* exists right now. Two consequences that matter: the server holds no
|
|
12
|
+
* cross-call state (a restart changes nothing), and a note edited between
|
|
13
|
+
* suggest and apply is caught by the base-hash check the kernel-facing
|
|
14
|
+
* `applyLinks` performs before any write.
|
|
15
|
+
*/
|
|
16
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import { safeVaultNotePath, writeNote } from "../capture/safe.js";
|
|
19
|
+
import { parseNote } from "../conventions/frontmatter.js";
|
|
20
|
+
import { resolveConcept } from "../core/ontology/resolver.js";
|
|
21
|
+
import { applyLinks, hashBody } from "../engine/linkify/apply.js";
|
|
22
|
+
import { suggestLinks, TERM_CONCEPT, termBoundNotes } from "../engine/linkify/suggest.js";
|
|
23
|
+
/** A candidate id is the body span it claims — stable across identical bodies. */
|
|
24
|
+
function candidateId(candidate) {
|
|
25
|
+
return `${String(candidate.startOffset)}-${String(candidate.endOffset)}`;
|
|
26
|
+
}
|
|
27
|
+
function identify(candidate) {
|
|
28
|
+
return { ...candidate, id: candidateId(candidate) };
|
|
29
|
+
}
|
|
30
|
+
/** Walk vault markdown, skipping dotted, dependency, and internal directories. */
|
|
31
|
+
async function* walkMarkdown(dir, base) {
|
|
32
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
33
|
+
for (const entry of entries) {
|
|
34
|
+
if (entry.name.startsWith(".") || entry.name === "node_modules")
|
|
35
|
+
continue;
|
|
36
|
+
const full = path.join(dir, entry.name);
|
|
37
|
+
if (entry.isDirectory()) {
|
|
38
|
+
yield* walkMarkdown(full, base);
|
|
39
|
+
}
|
|
40
|
+
else if (entry.isFile() && entry.name.endsWith(".md")) {
|
|
41
|
+
yield path.relative(base, full).replace(/\\/g, "/");
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Flatten a frontmatter `aliases` value to trimmed non-empty strings. */
|
|
46
|
+
function aliasStrings(value) {
|
|
47
|
+
if (Array.isArray(value))
|
|
48
|
+
return value.flatMap(aliasStrings);
|
|
49
|
+
if (typeof value !== "string")
|
|
50
|
+
return [];
|
|
51
|
+
const trimmed = value.trim();
|
|
52
|
+
return trimmed ? [trimmed] : [];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Every `term`-bound note in the vault, with its declared surface forms.
|
|
56
|
+
*
|
|
57
|
+
* Concept binding comes from the ontology's folder contract (the same resolver
|
|
58
|
+
* the write kernel uses), NOT from a frontmatter field a note can claim for
|
|
59
|
+
* itself — a note cannot opt into being a link target by asserting it is one.
|
|
60
|
+
*/
|
|
61
|
+
export async function collectTermNotes(vault, ontology, scope = {}) {
|
|
62
|
+
const root = scope.folder === undefined ? vault : path.join(vault, scope.folder);
|
|
63
|
+
const notes = [];
|
|
64
|
+
for await (const notePath of walkMarkdown(root, vault)) {
|
|
65
|
+
const concept = resolveConcept(ontology, notePath);
|
|
66
|
+
if (concept?.concept !== TERM_CONCEPT)
|
|
67
|
+
continue;
|
|
68
|
+
const raw = await readFile(path.join(vault, notePath), "utf-8");
|
|
69
|
+
notes.push({
|
|
70
|
+
path: notePath,
|
|
71
|
+
concept: concept.concept,
|
|
72
|
+
aliases: aliasStrings(parseNote(raw).frontmatter["aliases"]),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return termBoundNotes(notes);
|
|
76
|
+
}
|
|
77
|
+
/** Read one vault note's body, refusing unsafe paths and missing files loudly. */
|
|
78
|
+
async function readNoteBody(vault, notePath) {
|
|
79
|
+
const fullPath = safeVaultNotePath(vault, notePath);
|
|
80
|
+
const raw = await readFile(fullPath, "utf-8");
|
|
81
|
+
return {
|
|
82
|
+
normalized: path.relative(vault, fullPath).replace(/\\/g, "/"),
|
|
83
|
+
body: parseNote(raw).body,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Propose `[[wikilink]]` insertions for one note against the vault's term notes.
|
|
88
|
+
*
|
|
89
|
+
* Read-only: nothing is written and no state is retained. The returned
|
|
90
|
+
* `baseContentHash` is the caller's optimistic-concurrency token for apply.
|
|
91
|
+
*/
|
|
92
|
+
export async function suggestLinksForNote(target, scope = {}) {
|
|
93
|
+
const { normalized, body } = await readNoteBody(target.vault, target.notePath);
|
|
94
|
+
const notes = await collectTermNotes(target.vault, target.ontology, scope);
|
|
95
|
+
const candidates = suggestLinks(body, notes, { notePath: normalized });
|
|
96
|
+
return {
|
|
97
|
+
notePath: normalized,
|
|
98
|
+
baseContentHash: hashBody(body),
|
|
99
|
+
candidateNotes: notes.length,
|
|
100
|
+
candidates: candidates.map(identify),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Apply the selected candidates to a note and persist through the write kernel.
|
|
105
|
+
*
|
|
106
|
+
* The candidates are recomputed from the note's CURRENT body: ids that no
|
|
107
|
+
* longer name a span simply do not resolve, and a body that drifted since
|
|
108
|
+
* suggest fails the `baseContentHash` check inside `applyLinks` before any
|
|
109
|
+
* write is attempted.
|
|
110
|
+
*/
|
|
111
|
+
export async function applyLinksForNote(target, selection, scope = {}) {
|
|
112
|
+
const { normalized, body } = await readNoteBody(target.vault, target.notePath);
|
|
113
|
+
const notes = await collectTermNotes(target.vault, target.ontology, scope);
|
|
114
|
+
const wanted = new Set(selection.candidateIds);
|
|
115
|
+
const accepted = suggestLinks(body, notes, { notePath: normalized }).filter((candidate) => wanted.has(candidateId(candidate)));
|
|
116
|
+
const result = await applyLinks({
|
|
117
|
+
body,
|
|
118
|
+
baseContentHash: selection.baseContentHash,
|
|
119
|
+
accepted,
|
|
120
|
+
writeNote,
|
|
121
|
+
target: {
|
|
122
|
+
target: { vault: target.vault, source: target.source },
|
|
123
|
+
ontology: target.ontology,
|
|
124
|
+
notePath: normalized,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
notePath: normalized,
|
|
129
|
+
requestedIds: selection.candidateIds,
|
|
130
|
+
resolvedIds: accepted.map(candidateId),
|
|
131
|
+
result,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/** The MCP-facing JSON shape of an apply outcome: applied body + receipt, or a typed refusal. */
|
|
135
|
+
export function linkApplyPayload(outcome) {
|
|
136
|
+
const common = {
|
|
137
|
+
notePath: outcome.notePath,
|
|
138
|
+
requestedIds: outcome.requestedIds,
|
|
139
|
+
resolvedIds: outcome.resolvedIds,
|
|
140
|
+
};
|
|
141
|
+
const result = outcome.result;
|
|
142
|
+
return result.applied
|
|
143
|
+
? {
|
|
144
|
+
...common,
|
|
145
|
+
applied: true,
|
|
146
|
+
contentHash: result.contentHash,
|
|
147
|
+
body: result.body,
|
|
148
|
+
receipt: result.write.receipt ?? null,
|
|
149
|
+
}
|
|
150
|
+
: {
|
|
151
|
+
...common,
|
|
152
|
+
applied: false,
|
|
153
|
+
reason: result.reason,
|
|
154
|
+
write: result.write ?? null,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=link-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-tools.js","sourceRoot":"","sources":["../../src/mcp/link-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
2
|
import { type Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
import type { WriteTargetSource } from "../conventions/write-protocol.js";
|
|
4
|
+
export declare const BASE_SERVER_INSTRUCTIONS = "Oh My Second Brain exposes ontology/status/cache/retrieval tools and the write tool. write is gated by a verified vault target (a vault inferred from the current directory is refused), vault confinement, and contract validation.";
|
|
3
5
|
export declare const omsMcpTools: Tool[];
|
|
4
6
|
export interface OMSMcpServerOptions {
|
|
5
7
|
vault: string;
|
|
8
|
+
/**
|
|
9
|
+
* How the vault was resolved. The write surface trusts every source except
|
|
10
|
+
* `cwd` (the server may have booted in an arbitrary directory - issue #58).
|
|
11
|
+
*/
|
|
12
|
+
source: WriteTargetSource;
|
|
6
13
|
}
|
|
7
14
|
export declare function createOMSMcpServer(opts: OMSMcpServerOptions): Server;
|
|
8
15
|
export declare function runMcpServer(opts: OMSMcpServerOptions): Promise<void>;
|