oh-my-second-brain 0.1.5

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 (90) hide show
  1. package/adapters/README.md +98 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +24 -0
  3. package/adapters/claude-code/CLAUDE.md +26 -0
  4. package/adapters/claude-code/skills/capture/SKILL.md +50 -0
  5. package/adapters/claude-code/skills/define/SKILL.md +51 -0
  6. package/adapters/claude-code/skills/doctor/SKILL.md +58 -0
  7. package/adapters/claude-code/skills/retrieve/SKILL.md +55 -0
  8. package/adapters/claude-code/skills/setup/SKILL.md +71 -0
  9. package/adapters/claude-code/skills/uninstall/SKILL.md +34 -0
  10. package/adapters/codex/.codex-plugin/plugin.json +8 -0
  11. package/adapters/codex/.mcp.json +14 -0
  12. package/adapters/codex/AGENTS.md +16 -0
  13. package/adapters/codex/rules/oms.md +25 -0
  14. package/adapters/codex/skills/oms-capture/SKILL.md +16 -0
  15. package/adapters/codex/skills/oms-doctor/SKILL.md +14 -0
  16. package/adapters/codex/skills/oms-install/SKILL.md +19 -0
  17. package/adapters/codex/skills/oms-retrieve/SKILL.md +10 -0
  18. package/adapters/codex/skills/oms-setup/SKILL.md +22 -0
  19. package/adapters/codex/skills/oms-uninstall/SKILL.md +20 -0
  20. package/adapters/hermes/README.md +8 -0
  21. package/adapters/hermes/SOUL.md +19 -0
  22. package/adapters/hermes/manifest.json +7 -0
  23. package/adapters/hermes/skills/capture/SKILL.md +16 -0
  24. package/adapters/hermes/skills/doctor/SKILL.md +14 -0
  25. package/adapters/hermes/skills/install/SKILL.md +19 -0
  26. package/adapters/hermes/skills/retrieve/SKILL.md +10 -0
  27. package/adapters/hermes/skills/setup/SKILL.md +22 -0
  28. package/adapters/hermes/skills/uninstall/SKILL.md +20 -0
  29. package/core/AGENTS.md +110 -0
  30. package/core/agents/librarian.md +43 -0
  31. package/core/agents/retriever.md +62 -0
  32. package/core/ontology/concepts/inbox.yaml +4 -0
  33. package/core/ontology/concepts/literature.yaml +27 -0
  34. package/core/ontology/taxonomy.yaml +11 -0
  35. package/core/skills/capture/SKILL.md +48 -0
  36. package/core/skills/define/SKILL.md +59 -0
  37. package/core/skills/doctor/SKILL.md +49 -0
  38. package/core/skills/retrieve/SKILL.md +56 -0
  39. package/core/skills/setup/SKILL.md +44 -0
  40. package/core/skills/uninstall/SKILL.md +34 -0
  41. package/dist/adapt/HostAdapter.d.ts +21 -0
  42. package/dist/adapt/HostAdapter.js +10 -0
  43. package/dist/adapt/HostAdapter.js.map +1 -0
  44. package/dist/adapt/claudeCode.d.ts +9 -0
  45. package/dist/adapt/claudeCode.js +15 -0
  46. package/dist/adapt/claudeCode.js.map +1 -0
  47. package/dist/adapt/codex.d.ts +9 -0
  48. package/dist/adapt/codex.js +15 -0
  49. package/dist/adapt/codex.js.map +1 -0
  50. package/dist/adapt/hermes.d.ts +9 -0
  51. package/dist/adapt/hermes.js +15 -0
  52. package/dist/adapt/hermes.js.map +1 -0
  53. package/dist/capture/safe.d.ts +36 -0
  54. package/dist/capture/safe.js +167 -0
  55. package/dist/capture/safe.js.map +1 -0
  56. package/dist/cli/oms.d.ts +18 -0
  57. package/dist/cli/oms.js +401 -0
  58. package/dist/cli/oms.js.map +1 -0
  59. package/dist/conventions/frontmatter.d.ts +15 -0
  60. package/dist/conventions/frontmatter.js +23 -0
  61. package/dist/conventions/frontmatter.js.map +1 -0
  62. package/dist/conventions/validate.d.ts +24 -0
  63. package/dist/conventions/validate.js +88 -0
  64. package/dist/conventions/validate.js.map +1 -0
  65. package/dist/graph/cache.d.ts +98 -0
  66. package/dist/graph/cache.js +347 -0
  67. package/dist/graph/cache.js.map +1 -0
  68. package/dist/index.d.ts +7 -0
  69. package/dist/index.js +8 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/install/hosts.d.ts +27 -0
  72. package/dist/install/hosts.js +465 -0
  73. package/dist/install/hosts.js.map +1 -0
  74. package/dist/mcp/server.d.ts +8 -0
  75. package/dist/mcp/server.js +461 -0
  76. package/dist/mcp/server.js.map +1 -0
  77. package/dist/ontology/loader.d.ts +13 -0
  78. package/dist/ontology/loader.js +63 -0
  79. package/dist/ontology/loader.js.map +1 -0
  80. package/dist/ontology/resolver.d.ts +13 -0
  81. package/dist/ontology/resolver.js +37 -0
  82. package/dist/ontology/resolver.js.map +1 -0
  83. package/dist/ontology/types.d.ts +72 -0
  84. package/dist/ontology/types.js +12 -0
  85. package/dist/ontology/types.js.map +1 -0
  86. package/docs/install.md +115 -0
  87. package/docs/release.md +91 -0
  88. package/package.json +64 -0
  89. package/scripts/install.sh +49 -0
  90. package/scripts/uninstall.sh +57 -0
@@ -0,0 +1,98 @@
1
+ import type { Ontology } from "../ontology/types.js";
2
+ export type GraphEdgeType = "folder-concept" | "property-axis" | "property-value" | "wikilink";
3
+ export interface GraphEdge {
4
+ type: GraphEdgeType;
5
+ from: string;
6
+ to: string;
7
+ axis?: string;
8
+ value?: string;
9
+ }
10
+ export interface GraphNote {
11
+ path: string;
12
+ folder: string;
13
+ concept: string | null;
14
+ frontmatter: Record<string, unknown>;
15
+ axes: Record<string, string[]>;
16
+ wikilinks: string[];
17
+ bodyLoaded: false;
18
+ validation: {
19
+ valid: boolean;
20
+ violations: number;
21
+ };
22
+ }
23
+ export interface SearchDocument {
24
+ path: string;
25
+ terms: string[];
26
+ bodyPreview: string;
27
+ }
28
+ export interface NoteSignature {
29
+ mtimeMs: number;
30
+ size: number;
31
+ frontmatterHash: string;
32
+ wikilinkHash: string;
33
+ bodyTextHash: string;
34
+ }
35
+ export interface SourceSignatures {
36
+ taxonomyHash: string;
37
+ conceptHashes: Record<string, string>;
38
+ notes: Record<string, NoteSignature>;
39
+ }
40
+ export interface OMSGraphCache {
41
+ version: 1;
42
+ generatedAt: string;
43
+ sourceOfTruth: string[];
44
+ signatures: SourceSignatures;
45
+ notes: GraphNote[];
46
+ edges: GraphEdge[];
47
+ search: SearchDocument[];
48
+ }
49
+ export interface GraphStaleness {
50
+ schemaStale: boolean;
51
+ graphStale: boolean;
52
+ searchStale: boolean;
53
+ embeddingStale: "not-configured" | boolean;
54
+ validationStale: boolean;
55
+ reasons: string[];
56
+ }
57
+ export interface GraphCacheStatus {
58
+ cachePath: string;
59
+ exists: boolean;
60
+ generatedAt: string | null;
61
+ notes: number;
62
+ edges: number;
63
+ searchDocuments: number;
64
+ staleness: GraphStaleness;
65
+ }
66
+ export interface RetrieveByAxisOptions {
67
+ vault: string;
68
+ ontology: Ontology;
69
+ concept?: string;
70
+ folder?: string;
71
+ property?: string;
72
+ value?: string;
73
+ wikilink?: string;
74
+ query?: string;
75
+ limit?: number;
76
+ }
77
+ export interface RetrieveHit {
78
+ path: string;
79
+ concept: string | null;
80
+ folder: string;
81
+ axes: Record<string, string[]>;
82
+ wikilinks: string[];
83
+ score: number;
84
+ bodyPreview: string;
85
+ }
86
+ export declare function graphCachePath(vault: string): string;
87
+ export declare function buildGraphCache(opts: {
88
+ vault: string;
89
+ ontology: Ontology;
90
+ write?: boolean;
91
+ }): Promise<OMSGraphCache>;
92
+ export declare function readGraphCache(vault: string): Promise<OMSGraphCache | null>;
93
+ export declare function graphCacheStatus(vault: string, ontology: Ontology): Promise<GraphCacheStatus>;
94
+ export declare function retrieveByAxis(opts: RetrieveByAxisOptions): Promise<RetrieveHit[]>;
95
+ export declare function lazyLoadNoteBody(vault: string, notePath: string): Promise<{
96
+ path: string;
97
+ body: string;
98
+ }>;
@@ -0,0 +1,347 @@
1
+ import { createHash } from "node:crypto";
2
+ import { mkdir, readFile, readdir, stat, writeFile } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { parseNote } from "../conventions/frontmatter.js";
5
+ import { validateFrontmatter } from "../conventions/validate.js";
6
+ import { safeVaultNotePath } from "../capture/safe.js";
7
+ import { resolveConcept } from "../ontology/resolver.js";
8
+ const CACHE_VERSION = 1;
9
+ export function graphCachePath(vault) {
10
+ return path.join(vault, ".oms", "cache", "graph.json");
11
+ }
12
+ function hash(value) {
13
+ return createHash("sha256").update(value).digest("hex");
14
+ }
15
+ async function* walkMarkdown(dir, base) {
16
+ let entries;
17
+ try {
18
+ entries = await readdir(dir, { withFileTypes: true });
19
+ }
20
+ catch {
21
+ return;
22
+ }
23
+ for (const entry of entries) {
24
+ if (entry.name === ".oms" || entry.name === "node_modules" || entry.name.startsWith(".")) {
25
+ continue;
26
+ }
27
+ const full = path.join(dir, entry.name);
28
+ if (entry.isDirectory()) {
29
+ yield* walkMarkdown(full, base);
30
+ }
31
+ else if (entry.isFile() && entry.name.endsWith(".md")) {
32
+ yield path.relative(base, full).replace(/\\/g, "/");
33
+ }
34
+ }
35
+ }
36
+ function jsonStable(value) {
37
+ if (Array.isArray(value)) {
38
+ return `[${value.map(jsonStable).join(",")}]`;
39
+ }
40
+ if (value && typeof value === "object") {
41
+ const record = value;
42
+ return `{${Object.keys(record)
43
+ .sort()
44
+ .map((key) => `${JSON.stringify(key)}:${jsonStable(record[key])}`)
45
+ .join(",")}}`;
46
+ }
47
+ return JSON.stringify(value);
48
+ }
49
+ function valueToStrings(value) {
50
+ if (Array.isArray(value)) {
51
+ return value.flatMap(valueToStrings).filter((item) => item.length > 0);
52
+ }
53
+ if (typeof value === "string") {
54
+ return value.trim() ? [value.trim()] : [];
55
+ }
56
+ if (typeof value === "number" || typeof value === "boolean") {
57
+ return [String(value)];
58
+ }
59
+ if (value instanceof Date) {
60
+ return [value.toISOString()];
61
+ }
62
+ return [];
63
+ }
64
+ function extractWikilinks(body) {
65
+ const links = new Set();
66
+ const pattern = /\[\[([^\]|#]+)(?:[#|][^\]]*)?\]\]/g;
67
+ let match;
68
+ while ((match = pattern.exec(body)) !== null) {
69
+ const target = match[1]?.trim();
70
+ if (target)
71
+ links.add(target);
72
+ }
73
+ return Array.from(links).sort();
74
+ }
75
+ function tokenize(text) {
76
+ const terms = text
77
+ .toLowerCase()
78
+ .match(/[\p{L}\p{N}][\p{L}\p{N}_-]{1,}/gu);
79
+ return Array.from(new Set(terms ?? [])).sort();
80
+ }
81
+ function firstFolder(notePath) {
82
+ return notePath.split("/")[0] ?? "";
83
+ }
84
+ function conceptSchemaHash(concept) {
85
+ return hash(jsonStable(concept));
86
+ }
87
+ function taxonomyHash(ontology) {
88
+ return hash(jsonStable(ontology.taxonomy));
89
+ }
90
+ async function buildSourceSignatures(vault, ontology) {
91
+ const notes = {};
92
+ for await (const notePath of walkMarkdown(vault, vault)) {
93
+ const fullPath = path.join(vault, notePath);
94
+ const [raw, fileStat] = await Promise.all([readFile(fullPath, "utf-8"), stat(fullPath)]);
95
+ const parsed = parseNote(raw);
96
+ const wikilinks = extractWikilinks(parsed.body);
97
+ notes[notePath] = {
98
+ mtimeMs: fileStat.mtimeMs,
99
+ size: fileStat.size,
100
+ frontmatterHash: hash(jsonStable(parsed.frontmatter)),
101
+ wikilinkHash: hash(jsonStable(wikilinks)),
102
+ bodyTextHash: hash(parsed.body),
103
+ };
104
+ }
105
+ return {
106
+ taxonomyHash: taxonomyHash(ontology),
107
+ conceptHashes: Object.fromEntries(Array.from(ontology.concepts.entries()).map(([name, concept]) => [
108
+ name,
109
+ conceptSchemaHash(concept),
110
+ ])),
111
+ notes,
112
+ };
113
+ }
114
+ function buildNoteGraph(notePath, raw, ontology) {
115
+ const parsed = parseNote(raw);
116
+ const folder = firstFolder(notePath);
117
+ const concept = resolveConcept(ontology, notePath);
118
+ const axes = {};
119
+ const edges = [];
120
+ if (concept) {
121
+ edges.push({
122
+ type: "folder-concept",
123
+ from: notePath,
124
+ to: `concept:${concept.concept}`,
125
+ });
126
+ }
127
+ for (const [key, rawValue] of Object.entries(parsed.frontmatter)) {
128
+ const values = valueToStrings(rawValue);
129
+ if (values.length === 0)
130
+ continue;
131
+ axes[key] = values;
132
+ edges.push({ type: "property-axis", from: notePath, to: `axis:${key}`, axis: key });
133
+ for (const value of values) {
134
+ edges.push({
135
+ type: "property-value",
136
+ from: notePath,
137
+ to: `axis:${key}:value:${value}`,
138
+ axis: key,
139
+ value,
140
+ });
141
+ }
142
+ }
143
+ const wikilinks = extractWikilinks(parsed.body);
144
+ for (const target of wikilinks) {
145
+ edges.push({ type: "wikilink", from: notePath, to: target });
146
+ }
147
+ const validation = concept
148
+ ? validateFrontmatter(parsed.frontmatter, concept)
149
+ : { valid: false, violations: [] };
150
+ const searchText = `${Object.values(parsed.frontmatter).flatMap(valueToStrings).join(" ")} ${parsed.body}`;
151
+ return {
152
+ note: {
153
+ path: notePath,
154
+ folder,
155
+ concept: concept?.concept ?? null,
156
+ frontmatter: parsed.frontmatter,
157
+ axes,
158
+ wikilinks,
159
+ bodyLoaded: false,
160
+ validation: {
161
+ valid: validation.valid,
162
+ violations: validation.violations.length,
163
+ },
164
+ },
165
+ edges,
166
+ search: {
167
+ path: notePath,
168
+ terms: tokenize(searchText),
169
+ bodyPreview: parsed.body.trim().slice(0, 240),
170
+ },
171
+ };
172
+ }
173
+ export async function buildGraphCache(opts) {
174
+ const vault = path.resolve(opts.vault);
175
+ const notes = [];
176
+ const edges = [];
177
+ const search = [];
178
+ for await (const notePath of walkMarkdown(vault, vault)) {
179
+ const raw = await readFile(path.join(vault, notePath), "utf-8");
180
+ const built = buildNoteGraph(notePath, raw, opts.ontology);
181
+ notes.push(built.note);
182
+ edges.push(...built.edges);
183
+ search.push(built.search);
184
+ }
185
+ const cache = {
186
+ version: CACHE_VERSION,
187
+ generatedAt: new Date().toISOString(),
188
+ sourceOfTruth: ["markdown notes", ".oms/taxonomy.yaml", ".oms/concepts/*.yaml"],
189
+ signatures: await buildSourceSignatures(vault, opts.ontology),
190
+ notes: notes.sort((a, b) => a.path.localeCompare(b.path)),
191
+ edges: edges.sort((a, b) => `${a.type}:${a.from}:${a.to}`.localeCompare(`${b.type}:${b.from}:${b.to}`)),
192
+ search: search.sort((a, b) => a.path.localeCompare(b.path)),
193
+ };
194
+ if (opts.write) {
195
+ const outPath = graphCachePath(vault);
196
+ await mkdir(path.dirname(outPath), { recursive: true });
197
+ await writeFile(outPath, `${JSON.stringify(cache, null, 2)}\n`, "utf-8");
198
+ }
199
+ return cache;
200
+ }
201
+ export async function readGraphCache(vault) {
202
+ try {
203
+ const raw = await readFile(graphCachePath(vault), "utf-8");
204
+ const parsed = JSON.parse(raw);
205
+ return parsed.version === CACHE_VERSION ? parsed : null;
206
+ }
207
+ catch {
208
+ return null;
209
+ }
210
+ }
211
+ function compareSignatures(previous, current) {
212
+ const reasons = [];
213
+ let schemaStale = false;
214
+ let graphStale = false;
215
+ let searchStale = false;
216
+ let validationStale = false;
217
+ if (previous.taxonomyHash !== current.taxonomyHash) {
218
+ schemaStale = true;
219
+ graphStale = true;
220
+ validationStale = true;
221
+ reasons.push("taxonomy changed: folder-concept edges and validation plan are stale");
222
+ }
223
+ const conceptNames = new Set([...Object.keys(previous.conceptHashes), ...Object.keys(current.conceptHashes)]);
224
+ for (const name of conceptNames) {
225
+ if (previous.conceptHashes[name] !== current.conceptHashes[name]) {
226
+ schemaStale = true;
227
+ graphStale = true;
228
+ validationStale = true;
229
+ reasons.push(`concept schema changed: ${name}`);
230
+ }
231
+ }
232
+ const notePaths = new Set([...Object.keys(previous.notes), ...Object.keys(current.notes)]);
233
+ for (const notePath of notePaths) {
234
+ const before = previous.notes[notePath];
235
+ const after = current.notes[notePath];
236
+ if (!before || !after) {
237
+ graphStale = true;
238
+ searchStale = true;
239
+ validationStale = true;
240
+ reasons.push(`note added/deleted: ${notePath}`);
241
+ continue;
242
+ }
243
+ if (before.frontmatterHash !== after.frontmatterHash) {
244
+ graphStale = true;
245
+ searchStale = true;
246
+ validationStale = true;
247
+ reasons.push(`frontmatter/search axes changed: ${notePath}`);
248
+ }
249
+ if (before.wikilinkHash !== after.wikilinkHash) {
250
+ graphStale = true;
251
+ reasons.push(`wikilinks changed: ${notePath}`);
252
+ }
253
+ if (before.bodyTextHash !== after.bodyTextHash) {
254
+ searchStale = true;
255
+ reasons.push(`body/search text changed: ${notePath}`);
256
+ }
257
+ }
258
+ return {
259
+ schemaStale,
260
+ graphStale,
261
+ searchStale,
262
+ embeddingStale: "not-configured",
263
+ validationStale,
264
+ reasons,
265
+ };
266
+ }
267
+ export async function graphCacheStatus(vault, ontology) {
268
+ const cache = await readGraphCache(vault);
269
+ const cachePath = graphCachePath(vault);
270
+ if (!cache) {
271
+ return {
272
+ cachePath,
273
+ exists: false,
274
+ generatedAt: null,
275
+ notes: 0,
276
+ edges: 0,
277
+ searchDocuments: 0,
278
+ staleness: {
279
+ schemaStale: true,
280
+ graphStale: true,
281
+ searchStale: true,
282
+ embeddingStale: "not-configured",
283
+ validationStale: true,
284
+ reasons: ["graph cache has not been built"],
285
+ },
286
+ };
287
+ }
288
+ return {
289
+ cachePath,
290
+ exists: true,
291
+ generatedAt: cache.generatedAt,
292
+ notes: cache.notes.length,
293
+ edges: cache.edges.length,
294
+ searchDocuments: cache.search.length,
295
+ staleness: compareSignatures(cache.signatures, await buildSourceSignatures(vault, ontology)),
296
+ };
297
+ }
298
+ function matchesAxis(note, opts) {
299
+ if (opts.concept && note.concept !== opts.concept)
300
+ return false;
301
+ if (opts.folder && note.folder !== opts.folder)
302
+ return false;
303
+ if (opts.wikilink && !note.wikilinks.includes(opts.wikilink))
304
+ return false;
305
+ if (opts.property) {
306
+ const values = note.axes[opts.property] ?? [];
307
+ if (opts.value && !values.includes(opts.value))
308
+ return false;
309
+ if (!opts.value && values.length === 0)
310
+ return false;
311
+ }
312
+ return true;
313
+ }
314
+ function searchScore(search, query) {
315
+ if (!query || !search)
316
+ return 0;
317
+ const queryTerms = tokenize(query);
318
+ return queryTerms.filter((term) => search.terms.includes(term)).length;
319
+ }
320
+ export async function retrieveByAxis(opts) {
321
+ const cache = (await readGraphCache(opts.vault)) ?? (await buildGraphCache({ ...opts, write: false }));
322
+ const searchByPath = new Map(cache.search.map((item) => [item.path, item]));
323
+ const limit = Math.max(1, Math.min(opts.limit ?? 10, 50));
324
+ return cache.notes
325
+ .filter((note) => matchesAxis(note, opts))
326
+ .map((note) => {
327
+ const search = searchByPath.get(note.path);
328
+ return {
329
+ path: note.path,
330
+ concept: note.concept,
331
+ folder: note.folder,
332
+ axes: note.axes,
333
+ wikilinks: note.wikilinks,
334
+ score: searchScore(search, opts.query),
335
+ bodyPreview: search?.bodyPreview ?? "",
336
+ };
337
+ })
338
+ .sort((a, b) => b.score - a.score || a.path.localeCompare(b.path))
339
+ .slice(0, limit);
340
+ }
341
+ export async function lazyLoadNoteBody(vault, notePath) {
342
+ const resolved = safeVaultNotePath(vault, notePath);
343
+ const relative = path.relative(vault, resolved);
344
+ const raw = await readFile(resolved, "utf-8");
345
+ return { path: relative.replace(/\\/g, "/"), body: parseNote(raw).body };
346
+ }
347
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/graph/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from "./ontology/types.js";
2
+ export * from "./ontology/loader.js";
3
+ export * from "./ontology/resolver.js";
4
+ export * from "./conventions/frontmatter.js";
5
+ export * from "./conventions/validate.js";
6
+ export * from "./adapt/HostAdapter.js";
7
+ export * from "./mcp/server.js";
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from "./ontology/types.js";
2
+ export * from "./ontology/loader.js";
3
+ export * from "./ontology/resolver.js";
4
+ export * from "./conventions/frontmatter.js";
5
+ export * from "./conventions/validate.js";
6
+ export * from "./adapt/HostAdapter.js";
7
+ export * from "./mcp/server.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ export type HostRuntime = "claude" | "codex" | "hermes";
2
+ export type RuntimeSelection = HostRuntime | "auto" | "all";
3
+ export type HostAction = "install" | "uninstall";
4
+ export interface HostOperationOptions {
5
+ action: HostAction;
6
+ runtime: RuntimeSelection;
7
+ vault: string;
8
+ packageSpec?: string;
9
+ dryRun?: boolean;
10
+ executeExternal?: boolean;
11
+ yes?: boolean;
12
+ homeDir?: string;
13
+ adapterRoot: string;
14
+ }
15
+ export interface HostOperationResult {
16
+ runtime: HostRuntime;
17
+ action: HostAction;
18
+ changed: boolean;
19
+ skipped: boolean;
20
+ paths: string[];
21
+ commands: string[];
22
+ messages: string[];
23
+ }
24
+ export declare function detectAvailableHosts(): HostRuntime[];
25
+ export declare function resolveRuntimeSelection(selection: RuntimeSelection): HostRuntime[];
26
+ export declare function runHostOperation(options: HostOperationOptions): Promise<HostOperationResult[]>;
27
+ export declare function formatHostOperationResults(results: HostOperationResult[], dryRun: boolean): string;