oh-my-second-brain 0.3.0 → 0.6.2
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 +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/ACKNOWLEDGMENTS.md +8 -0
- package/CHANGELOG-assets.md +10 -0
- package/CHANGELOG-cli.md +11 -0
- package/CHANGELOG-kernel.md +31 -0
- package/CHANGELOG-mcp.md +12 -0
- package/CHANGELOG-vendors.md +6 -0
- package/CHANGELOG.md +35 -0
- package/assets/hermes-manifest.json +1 -1
- package/assets/skills/doctor/SKILL.md +2 -2
- package/assets/skills/search/SKILL.md +17 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.js +13 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/host-commands.js +2 -1
- package/dist/cli/host-commands.js.map +1 -1
- package/dist/cli/oms.d.ts +1 -1
- package/dist/cli/oms.js +26 -3
- package/dist/cli/oms.js.map +1 -1
- package/dist/cli/semantic-args.js +102 -3
- package/dist/cli/semantic-args.js.map +1 -1
- package/dist/cli/semantic.js +30 -6
- package/dist/cli/semantic.js.map +1 -1
- package/dist/cli/setup-command.d.ts +16 -0
- package/dist/cli/setup-command.js +50 -1
- package/dist/cli/setup-command.js.map +1 -1
- package/dist/kernel/contracts/index.d.ts +144 -0
- package/dist/kernel/contracts/index.js +401 -0
- package/dist/kernel/contracts/index.js.map +1 -0
- package/dist/kernel/conventions/note-exclude.d.ts +14 -0
- package/dist/kernel/conventions/note-exclude.js +95 -0
- package/dist/kernel/conventions/note-exclude.js.map +1 -0
- package/dist/kernel/engine/assemble.d.ts +22 -1
- package/dist/kernel/engine/assemble.js +202 -19
- package/dist/kernel/engine/assemble.js.map +1 -1
- package/dist/kernel/engine/axes/store.d.ts +90 -0
- package/dist/kernel/engine/axes/store.js +422 -0
- package/dist/kernel/engine/axes/store.js.map +1 -0
- package/dist/kernel/engine/conventions/vault-lint.d.ts +7 -2
- package/dist/kernel/engine/conventions/vault-lint.js +7 -21
- package/dist/kernel/engine/conventions/vault-lint.js.map +1 -1
- package/dist/kernel/engine/embed/identity.d.ts +14 -4
- package/dist/kernel/engine/embed/identity.js +33 -1
- package/dist/kernel/engine/embed/identity.js.map +1 -1
- package/dist/kernel/engine/embed/model.d.ts +134 -0
- package/dist/kernel/engine/embed/model.js +302 -0
- package/dist/kernel/engine/embed/model.js.map +1 -0
- package/dist/kernel/engine/embed/provider.d.ts +36 -5
- package/dist/kernel/engine/embed/provider.js +240 -103
- package/dist/kernel/engine/embed/provider.js.map +1 -1
- package/dist/kernel/engine/embed/store.d.ts +5 -1
- package/dist/kernel/engine/embed/store.js +136 -26
- package/dist/kernel/engine/embed/store.js.map +1 -1
- package/dist/kernel/engine/embed/sync.d.ts +53 -0
- package/dist/kernel/engine/embed/sync.js +489 -59
- package/dist/kernel/engine/embed/sync.js.map +1 -1
- package/dist/kernel/engine/graph/builder.d.ts +9 -5
- package/dist/kernel/engine/graph/builder.js +225 -82
- package/dist/kernel/engine/graph/builder.js.map +1 -1
- package/dist/kernel/engine/graph/node.d.ts +49 -1
- package/dist/kernel/engine/graph/node.js +205 -0
- package/dist/kernel/engine/graph/node.js.map +1 -1
- package/dist/kernel/engine/mcp/facade.d.ts +21 -1
- package/dist/kernel/engine/mcp/facade.js +523 -28
- package/dist/kernel/engine/mcp/facade.js.map +1 -1
- package/dist/kernel/engine/mcp/query-mapper.d.ts +27 -2
- package/dist/kernel/engine/mcp/query-mapper.js +157 -12
- package/dist/kernel/engine/mcp/query-mapper.js.map +1 -1
- package/dist/kernel/engine/mcp/types.d.ts +64 -2
- package/dist/kernel/engine/retrieval/dispatcher.d.ts +22 -0
- package/dist/kernel/engine/retrieval/dispatcher.js +84 -8
- package/dist/kernel/engine/retrieval/dispatcher.js.map +1 -1
- package/dist/kernel/engine/retrieval/index.d.ts +2 -1
- package/dist/kernel/engine/retrieval/index.js +1 -1
- package/dist/kernel/engine/retrieval/index.js.map +1 -1
- package/dist/kernel/engine/retrieval/reranker.d.ts +82 -4
- package/dist/kernel/engine/retrieval/reranker.js +178 -3
- package/dist/kernel/engine/retrieval/reranker.js.map +1 -1
- package/dist/kernel/engine/retrieval/rrf.d.ts +10 -2
- package/dist/kernel/engine/retrieval/rrf.js +39 -16
- package/dist/kernel/engine/retrieval/rrf.js.map +1 -1
- package/dist/kernel/engine/tracer.d.ts +13 -0
- package/dist/kernel/engine/tracer.js +63 -6
- package/dist/kernel/engine/tracer.js.map +1 -1
- package/dist/kernel/graph/cache.js +174 -23
- package/dist/kernel/graph/cache.js.map +1 -1
- package/dist/kernel/index.d.ts +2 -0
- package/dist/kernel/index.js +2 -0
- package/dist/kernel/index.js.map +1 -1
- package/dist/kernel/measurement/no-default-contract.d.ts +17 -0
- package/dist/kernel/measurement/no-default-contract.js +84 -0
- package/dist/kernel/measurement/no-default-contract.js.map +1 -0
- package/dist/kernel/searchbackend/engine-search-backend.js +93 -7
- package/dist/kernel/searchbackend/engine-search-backend.js.map +1 -1
- package/dist/kernel/searchbackend/search-backend.d.ts +11 -1
- package/dist/kernel/searchbackend/search-backend.js +66 -5
- package/dist/kernel/searchbackend/search-backend.js.map +1 -1
- package/dist/kernel/semantic/semantic-engine.js +31 -5
- package/dist/kernel/semantic/semantic-engine.js.map +1 -1
- package/dist/kernel/semantic/semantic-retrieve-args.d.ts +19 -2
- package/dist/kernel/semantic/semantic-retrieve-args.js +81 -7
- package/dist/kernel/semantic/semantic-retrieve-args.js.map +1 -1
- package/dist/kernel/update/update.d.ts +7 -0
- package/dist/kernel/update/update.js +106 -8
- package/dist/kernel/update/update.js.map +1 -1
- package/dist/mcp/server.js +84 -34
- package/dist/mcp/server.js.map +1 -1
- package/package.json +3 -2
|
@@ -36,11 +36,15 @@ export class EngineSearchBackend {
|
|
|
36
36
|
// Typed searches have no plain `query`, but their text is still the caller's
|
|
37
37
|
// retrieval intent. Preserve it for an explicitly requested reranker.
|
|
38
38
|
const rerankQuery = normalized.query ?? normalized.searches.map((search) => search.query).join(" ");
|
|
39
|
-
const searchCollection = async (collectionPath) => adapter.semanticQuery({
|
|
39
|
+
const searchCollection = async (collectionPath = normalized.collectionPath) => adapter.semanticQuery({
|
|
40
40
|
vault: this.vault,
|
|
41
41
|
query: rerankQuery,
|
|
42
42
|
searches: normalized.searches,
|
|
43
|
-
|
|
43
|
+
mode: normalized.mode,
|
|
44
|
+
// Collection aggregation applies one global limit after all candidate
|
|
45
|
+
// collections have been merged. Per-collection truncation would make
|
|
46
|
+
// totalCount/cursor and facet counts dependent on collection order.
|
|
47
|
+
limit: normalized.collections.length === 0 ? normalized.limit : undefined,
|
|
44
48
|
candidateLimit: normalized.candidateLimit,
|
|
45
49
|
minScore: normalized.minScore,
|
|
46
50
|
intent: normalized.intent,
|
|
@@ -48,20 +52,102 @@ export class EngineSearchBackend {
|
|
|
48
52
|
collectionPath,
|
|
49
53
|
index: normalized.index,
|
|
50
54
|
rerank: normalized.rerank,
|
|
55
|
+
cursor: normalized.collections.length === 0 ? normalized.cursor : undefined,
|
|
56
|
+
axes: normalized.axes,
|
|
51
57
|
});
|
|
52
58
|
if (normalized.collections.length === 0) {
|
|
53
59
|
return searchCollection();
|
|
54
60
|
}
|
|
55
61
|
const results = await Promise.all(normalized.collections.map(searchCollection));
|
|
56
62
|
const unavailable = results.find((result) => !result.available);
|
|
57
|
-
if (unavailable !== undefined)
|
|
58
|
-
return
|
|
59
|
-
|
|
60
|
-
|
|
63
|
+
if (unavailable !== undefined) {
|
|
64
|
+
return {
|
|
65
|
+
...unavailable,
|
|
66
|
+
hits: unavailable.hits ?? [],
|
|
67
|
+
totalCount: unavailable.totalCount ?? 0,
|
|
68
|
+
facets: unavailable.facets ?? [],
|
|
69
|
+
cursor: unavailable.cursor ?? null,
|
|
70
|
+
receipt: unavailable.receipt ?? { usedChannels: [], approximated: false, drift: false },
|
|
71
|
+
...(normalized.intent === undefined && unavailable.intent === undefined
|
|
72
|
+
? {}
|
|
73
|
+
: { intent: normalized.intent ?? unavailable.intent }),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const hits = dedupeDocumentHits(results.flatMap((result) => result.hits))
|
|
77
|
+
.sort((left, right) => right.score - left.score || left.path.localeCompare(right.path));
|
|
78
|
+
const totalCount = hits.length;
|
|
79
|
+
const limit = normalized.limit;
|
|
80
|
+
const offset = decodeCursor(normalized.cursor);
|
|
81
|
+
const page = limit === undefined ? hits.slice(offset) : hits.slice(offset, offset + Math.max(0, limit));
|
|
82
|
+
const facets = mergeFacets(results);
|
|
83
|
+
const receipt = mergeReceipts(results);
|
|
84
|
+
const intent = normalized.intent ?? results.find((result) => result.intent !== undefined)?.intent;
|
|
85
|
+
const nextOffset = offset + page.length;
|
|
61
86
|
return {
|
|
62
87
|
available: true,
|
|
63
|
-
hits:
|
|
88
|
+
hits: page,
|
|
89
|
+
totalCount,
|
|
90
|
+
facets,
|
|
91
|
+
cursor: nextOffset < totalCount ? String(nextOffset) : null,
|
|
92
|
+
...(intent === undefined ? {} : { intent }),
|
|
93
|
+
receipt,
|
|
64
94
|
};
|
|
65
95
|
}
|
|
66
96
|
}
|
|
97
|
+
function dedupeDocumentHits(hits) {
|
|
98
|
+
const byPath = new Map();
|
|
99
|
+
for (const hit of hits) {
|
|
100
|
+
const prior = byPath.get(hit.path);
|
|
101
|
+
if (prior === undefined) {
|
|
102
|
+
byPath.set(hit.path, hit);
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const preferred = hit.score > prior.score ? hit : prior;
|
|
106
|
+
const secondary = preferred === hit ? prior : hit;
|
|
107
|
+
byPath.set(hit.path, {
|
|
108
|
+
...preferred,
|
|
109
|
+
evidence: {
|
|
110
|
+
lexical: preferred.evidence.lexical || secondary.evidence.lexical,
|
|
111
|
+
vector: preferred.evidence.vector || secondary.evidence.vector,
|
|
112
|
+
},
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return [...byPath.values()];
|
|
116
|
+
}
|
|
117
|
+
function decodeCursor(cursor) {
|
|
118
|
+
if (cursor === undefined || cursor.trim() === "")
|
|
119
|
+
return 0;
|
|
120
|
+
const offset = Number(cursor);
|
|
121
|
+
return Number.isSafeInteger(offset) ? offset : 0;
|
|
122
|
+
}
|
|
123
|
+
function mergeFacets(results) {
|
|
124
|
+
const merged = new Map();
|
|
125
|
+
for (const result of results) {
|
|
126
|
+
for (const facet of result.facets ?? []) {
|
|
127
|
+
const key = `${facet.axis}\u0000${facet.key ?? ""}\u0000${facet.value.trim().toLocaleLowerCase()}`;
|
|
128
|
+
const prior = merged.get(key);
|
|
129
|
+
if (prior === undefined) {
|
|
130
|
+
merged.set(key, { ...facet });
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
merged.set(key, { ...prior, count: prior.count + facet.count });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return [...merged.values()].sort((left, right) => left.axis.localeCompare(right.axis)
|
|
138
|
+
|| (left.key ?? "").localeCompare(right.key ?? "")
|
|
139
|
+
|| left.value.localeCompare(right.value));
|
|
140
|
+
}
|
|
141
|
+
function mergeReceipts(results) {
|
|
142
|
+
const used = new Set();
|
|
143
|
+
let approximated = false;
|
|
144
|
+
let drift = false;
|
|
145
|
+
for (const result of results) {
|
|
146
|
+
for (const channel of result.receipt?.usedChannels ?? [])
|
|
147
|
+
used.add(channel);
|
|
148
|
+
approximated ||= result.receipt?.approximated ?? false;
|
|
149
|
+
drift ||= result.receipt?.drift ?? false;
|
|
150
|
+
}
|
|
151
|
+
return { usedChannels: [...used], approximated, drift };
|
|
152
|
+
}
|
|
67
153
|
//# sourceMappingURL=engine-search-backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-search-backend.js","sourceRoot":"","sources":["../../../src/kernel/searchbackend/engine-search-backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine-search-backend.js","sourceRoot":"","sources":["../../../src/kernel/searchbackend/engine-search-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { McpSemanticQueryResult, McpSemanticSearchMode, McpSemanticTypedSearch } from "../engine/mcp/types.js";
|
|
1
|
+
import type { McpSemanticQueryAxes, McpSemanticQueryResult, McpSemanticSearchMode, McpSemanticTypedSearch } from "../engine/mcp/types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Every public spelling accepted for a semantic query.
|
|
4
4
|
*
|
|
@@ -21,12 +21,19 @@ export interface SearchRequest {
|
|
|
21
21
|
readonly intent?: string;
|
|
22
22
|
readonly collection?: string;
|
|
23
23
|
readonly collections?: readonly string[];
|
|
24
|
+
/** Vault-relative path prefix that constrains retrieval candidates. */
|
|
25
|
+
readonly collectionPath?: string;
|
|
24
26
|
readonly index?: string;
|
|
27
|
+
/** Opaque offset cursor returned by a previous query. */
|
|
28
|
+
readonly cursor?: string;
|
|
29
|
+
/** Optional model-free axis narrowing shared with the MCP facade. */
|
|
30
|
+
readonly axes?: McpSemanticQueryAxes;
|
|
25
31
|
}
|
|
26
32
|
export interface NormalizedSearchRequest {
|
|
27
33
|
/** Plain natural-language query retained for an optional reranker. */
|
|
28
34
|
readonly query?: string;
|
|
29
35
|
readonly searches: readonly McpSemanticTypedSearch[];
|
|
36
|
+
readonly mode?: McpSemanticSearchMode;
|
|
30
37
|
readonly limit?: number;
|
|
31
38
|
readonly candidateLimit?: number;
|
|
32
39
|
readonly rerank?: boolean;
|
|
@@ -34,7 +41,10 @@ export interface NormalizedSearchRequest {
|
|
|
34
41
|
readonly intent?: string;
|
|
35
42
|
readonly collection?: string;
|
|
36
43
|
readonly collections: readonly string[];
|
|
44
|
+
readonly collectionPath?: string;
|
|
37
45
|
readonly index?: string;
|
|
46
|
+
readonly cursor?: string;
|
|
47
|
+
readonly axes?: McpSemanticQueryAxes;
|
|
38
48
|
}
|
|
39
49
|
export declare class InvalidSearchRequestError extends Error {
|
|
40
50
|
constructor(message: string);
|
|
@@ -7,14 +7,38 @@ export class InvalidSearchRequestError extends Error {
|
|
|
7
7
|
const searchTypes = ["lex", "vec", "hyde"];
|
|
8
8
|
/** Normalize all public semantic-query spellings before backend selection. */
|
|
9
9
|
export function normalizeSearchRequest(request) {
|
|
10
|
+
if (request === null || typeof request !== "object" || Array.isArray(request)) {
|
|
11
|
+
throw new InvalidSearchRequestError("search request must be an object");
|
|
12
|
+
}
|
|
10
13
|
const query = typeof request.query === "string" && request.query.trim() !== ""
|
|
11
14
|
? request.query.trim()
|
|
12
15
|
: undefined;
|
|
13
|
-
const
|
|
14
|
-
|
|
16
|
+
const hasQueryProperty = Object.prototype.hasOwnProperty.call(request, "query");
|
|
17
|
+
if (request.query !== undefined && typeof request.query !== "string") {
|
|
18
|
+
throw new InvalidSearchRequestError('"query" must be a string');
|
|
19
|
+
}
|
|
20
|
+
if (request.mode !== undefined && request.mode !== "query" && request.mode !== "search" && request.mode !== "vsearch") {
|
|
21
|
+
throw new InvalidSearchRequestError(`Unknown query mode "${String(request.mode)}"`);
|
|
22
|
+
}
|
|
23
|
+
if (request.searches !== undefined && !Array.isArray(request.searches)) {
|
|
24
|
+
throw new InvalidSearchRequestError('"searches" must be an array');
|
|
25
|
+
}
|
|
26
|
+
const searches = request.searches?.length
|
|
27
|
+
? request.searches.map((search) => {
|
|
28
|
+
if (search === null ||
|
|
29
|
+
typeof search !== "object" ||
|
|
30
|
+
(search.type !== "lex" && search.type !== "vec" && search.type !== "hyde") ||
|
|
31
|
+
typeof search.query !== "string") {
|
|
32
|
+
throw new InvalidSearchRequestError('Each "searches" item must contain a lex, vec, or hyde type and string query');
|
|
33
|
+
}
|
|
34
|
+
return search;
|
|
35
|
+
})
|
|
15
36
|
: [];
|
|
16
37
|
const shorthands = searchTypes.flatMap((type) => {
|
|
17
38
|
const value = request[type];
|
|
39
|
+
if (value !== undefined && typeof value !== "string") {
|
|
40
|
+
throw new InvalidSearchRequestError(`"${type}" must be a string`);
|
|
41
|
+
}
|
|
18
42
|
return typeof value === "string" && value.trim() !== "" ? [{ type, query: value.trim() }] : [];
|
|
19
43
|
});
|
|
20
44
|
const hasExplicitSearches = searches.length > 0 || shorthands.length > 0;
|
|
@@ -25,17 +49,51 @@ export function normalizeSearchRequest(request) {
|
|
|
25
49
|
throw new InvalidSearchRequestError(`'mode: ${request.mode}' and explicit typed searches are contradictory; supply typed searches or a mode, not both`);
|
|
26
50
|
}
|
|
27
51
|
if (query === undefined && !hasExplicitSearches) {
|
|
28
|
-
|
|
52
|
+
// An explicit empty query is the portable overview spelling. Keep a
|
|
53
|
+
// missing property invalid so malformed SearchBackend calls still fail
|
|
54
|
+
// loudly while MCP/CLI can intentionally request an overview.
|
|
55
|
+
if (!hasQueryProperty) {
|
|
56
|
+
throw new InvalidSearchRequestError("provide either 'query' or a non-empty typed search");
|
|
57
|
+
}
|
|
29
58
|
}
|
|
30
59
|
if (request.mode !== undefined && query === undefined) {
|
|
31
60
|
throw new InvalidSearchRequestError("'mode' requires a plain 'query'");
|
|
32
61
|
}
|
|
33
|
-
|
|
62
|
+
if (request.collections !== undefined && !Array.isArray(request.collections)) {
|
|
63
|
+
throw new InvalidSearchRequestError('"collections" must be an array');
|
|
64
|
+
}
|
|
65
|
+
const collections = [...new Set((request.collections ?? [])
|
|
66
|
+
.map((collection) => {
|
|
67
|
+
if (typeof collection !== "string") {
|
|
68
|
+
throw new InvalidSearchRequestError('"collections" items must be strings');
|
|
69
|
+
}
|
|
70
|
+
return collection;
|
|
71
|
+
})
|
|
72
|
+
.map((collection) => collection.trim())
|
|
73
|
+
.filter((collection) => collection !== ""))];
|
|
74
|
+
if (request.limit !== undefined && (!Number.isFinite(request.limit) || request.limit < 0)) {
|
|
75
|
+
throw new InvalidSearchRequestError('"limit" must be a finite non-negative number');
|
|
76
|
+
}
|
|
77
|
+
if (request.cursor !== undefined) {
|
|
78
|
+
if (typeof request.cursor !== "string" || (request.cursor !== "" && !/^\d+$/u.test(request.cursor))) {
|
|
79
|
+
throw new InvalidSearchRequestError('"cursor" must be a non-negative integer offset');
|
|
80
|
+
}
|
|
81
|
+
if (request.cursor !== "" && !Number.isSafeInteger(Number(request.cursor))) {
|
|
82
|
+
throw new InvalidSearchRequestError('"cursor" must be a safe integer offset');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
34
85
|
return {
|
|
35
86
|
query,
|
|
36
87
|
searches: hasExplicitSearches
|
|
37
88
|
? [...searches, ...shorthands]
|
|
38
|
-
:
|
|
89
|
+
: query === undefined
|
|
90
|
+
? []
|
|
91
|
+
: request.mode === "vsearch"
|
|
92
|
+
? [{ type: "vec", query }]
|
|
93
|
+
: request.mode === "query" || request.mode === "search"
|
|
94
|
+
? [{ type: "lex", query }, { type: "vec", query }]
|
|
95
|
+
: [{ type: "lex", query }],
|
|
96
|
+
mode: request.mode,
|
|
39
97
|
limit: request.limit ?? 10,
|
|
40
98
|
candidateLimit: request.candidateLimit,
|
|
41
99
|
rerank: request.rerank ?? false,
|
|
@@ -43,7 +101,10 @@ export function normalizeSearchRequest(request) {
|
|
|
43
101
|
intent: request.intent,
|
|
44
102
|
collection: request.collection,
|
|
45
103
|
collections,
|
|
104
|
+
collectionPath: request.collectionPath,
|
|
46
105
|
index: request.index,
|
|
106
|
+
cursor: request.cursor,
|
|
107
|
+
axes: request.axes,
|
|
47
108
|
};
|
|
48
109
|
}
|
|
49
110
|
//# sourceMappingURL=search-backend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-backend.js","sourceRoot":"","sources":["../../../src/kernel/searchbackend/search-backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search-backend.js","sourceRoot":"","sources":["../../../src/kernel/searchbackend/search-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,18 +17,44 @@
|
|
|
17
17
|
* file-based reads work without a model.
|
|
18
18
|
*/
|
|
19
19
|
import { assembleCoreSemanticEngine, assembleEngine, } from "../engine/assemble.js";
|
|
20
|
+
import { resolveEmbeddingModel } from "../engine/embed/model.js";
|
|
20
21
|
/** True when both canonical embedding-config env vars are set (ADR-007). */
|
|
21
22
|
export function embeddingConfigPresent() {
|
|
22
|
-
return
|
|
23
|
+
return resolveEmbeddingModel().available;
|
|
23
24
|
}
|
|
24
25
|
function embeddingConfig(vault) {
|
|
26
|
+
const resolved = resolveEmbeddingModel();
|
|
27
|
+
const descriptor = resolved.descriptor;
|
|
25
28
|
return {
|
|
26
29
|
vault,
|
|
27
|
-
...(
|
|
28
|
-
? { embeddingProvider:
|
|
30
|
+
...(resolved.available && resolved.provider !== undefined
|
|
31
|
+
? { embeddingProvider: resolved.provider }
|
|
29
32
|
: {}),
|
|
30
|
-
...(
|
|
31
|
-
? { embeddingModel:
|
|
33
|
+
...(resolved.available && resolved.model !== undefined
|
|
34
|
+
? { embeddingModel: resolved.modelPath ?? resolved.model }
|
|
35
|
+
: {}),
|
|
36
|
+
// Keep the setup descriptor intact as it crosses the semantic assembly
|
|
37
|
+
// seam. Flattening only provider/model loses width, context, MRL, and
|
|
38
|
+
// normalization metadata needed by the provider, store, and MCP sync.
|
|
39
|
+
...(descriptor !== undefined
|
|
40
|
+
? {
|
|
41
|
+
embeddingDescriptor: descriptor,
|
|
42
|
+
...(descriptor.dimensions !== undefined ? { embeddingDimensions: descriptor.dimensions } : {}),
|
|
43
|
+
...(descriptor.context !== undefined ? { embeddingContext: descriptor.context } : {}),
|
|
44
|
+
...(descriptor.contextLength !== undefined
|
|
45
|
+
? { embeddingContextLength: descriptor.contextLength }
|
|
46
|
+
: {}),
|
|
47
|
+
...(descriptor.contextTokens !== undefined
|
|
48
|
+
? { embeddingContextTokens: descriptor.contextTokens }
|
|
49
|
+
: {}),
|
|
50
|
+
...(descriptor.mrlDim !== undefined ? { embeddingMrlDim: descriptor.mrlDim } : {}),
|
|
51
|
+
...(descriptor.normalization !== undefined
|
|
52
|
+
? { embeddingNormalization: descriptor.normalization }
|
|
53
|
+
: {}),
|
|
54
|
+
...(descriptor.prefixScheme !== undefined
|
|
55
|
+
? { embeddingPrefixScheme: descriptor.prefixScheme }
|
|
56
|
+
: {}),
|
|
57
|
+
}
|
|
32
58
|
: {}),
|
|
33
59
|
};
|
|
34
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-engine.js","sourceRoot":"","sources":["../../../src/kernel/semantic/semantic-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EACL,0BAA0B,EAC1B,cAAc,GAEf,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"semantic-engine.js","sourceRoot":"","sources":["../../../src/kernel/semantic/semantic-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MorningRetrieveOptions } from "../search/morning.js";
|
|
2
|
-
import type { SemanticEmbeddingSyncOptions, SemanticGetOptions, SemanticMultiGetOptions, SemanticSearchMode } from "../search/semantic-contract.js";
|
|
2
|
+
import type { SemanticEmbeddingSyncOptions, SemanticGetOptions, SemanticMultiGetOptions, SemanticSearchFormat, SemanticSearchMode, SemanticTypedSearch } from "../search/semantic-contract.js";
|
|
3
|
+
import type { McpSemanticQueryAxes } from "../engine/mcp/types.js";
|
|
3
4
|
export type ParseResult<T> = {
|
|
4
5
|
readonly ok: true;
|
|
5
6
|
readonly value: T;
|
|
@@ -11,16 +12,32 @@ export declare function semanticOptionsFromArgs(args: Record<string, unknown> |
|
|
|
11
12
|
export declare function embeddingSyncOptionsFromArgs(vault: string, args: Record<string, unknown> | undefined): SemanticEmbeddingSyncOptions;
|
|
12
13
|
export declare function semanticQueryOptionsFromArgs(vault: string, args: Record<string, unknown> | undefined): {
|
|
13
14
|
vault: string;
|
|
14
|
-
query: string;
|
|
15
|
+
query: string | undefined;
|
|
15
16
|
collection: string | undefined;
|
|
17
|
+
collections: readonly string[] | undefined;
|
|
18
|
+
collectionPath: string | undefined;
|
|
16
19
|
mode: SemanticSearchMode | undefined;
|
|
20
|
+
searches: SemanticTypedSearch[] | undefined;
|
|
17
21
|
limit: number | undefined;
|
|
18
22
|
minScore: number | undefined;
|
|
19
23
|
intent: string | undefined;
|
|
20
24
|
lex: string | undefined;
|
|
21
25
|
vec: string | undefined;
|
|
22
26
|
hyde: string | undefined;
|
|
27
|
+
all: boolean | undefined;
|
|
28
|
+
format: SemanticSearchFormat | undefined;
|
|
29
|
+
full: boolean | undefined;
|
|
30
|
+
lineNumbers: boolean | undefined;
|
|
31
|
+
fullPath: boolean | undefined;
|
|
32
|
+
chunkStrategy: string | undefined;
|
|
23
33
|
index: string | undefined;
|
|
34
|
+
candidateLimit: number | undefined;
|
|
35
|
+
rerank: boolean | undefined;
|
|
36
|
+
noRerank: boolean | undefined;
|
|
37
|
+
cursor: string | undefined;
|
|
38
|
+
count: boolean | undefined;
|
|
39
|
+
facets: boolean | undefined;
|
|
40
|
+
axes: McpSemanticQueryAxes | undefined;
|
|
24
41
|
};
|
|
25
42
|
export declare function semanticStatusOptionsFromArgs(vault: string, args: Record<string, unknown> | undefined): {
|
|
26
43
|
vault: string;
|
|
@@ -19,6 +19,36 @@ function stringArrayArg(args, key) {
|
|
|
19
19
|
return undefined;
|
|
20
20
|
return value;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Preserve the closed query-axis object for the engine to validate. Runtime
|
|
24
|
+
* MCP input is untyped; retaining unknown keys here lets the query adapter
|
|
25
|
+
* reject them loudly instead of silently broadening the result set.
|
|
26
|
+
*
|
|
27
|
+
* Internal callers may still provide top-level axis keys; they are folded into
|
|
28
|
+
* the same `axes` object as the canonical nested form.
|
|
29
|
+
*/
|
|
30
|
+
function queryAxesArg(args) {
|
|
31
|
+
const nested = args?.["axes"];
|
|
32
|
+
if (nested !== undefined && !isRecord(nested)) {
|
|
33
|
+
// Preserve the malformed value so the engine's closed-axis validator can
|
|
34
|
+
// reject it loudly rather than silently broadening the query.
|
|
35
|
+
return nested;
|
|
36
|
+
}
|
|
37
|
+
if (nested !== undefined) {
|
|
38
|
+
const axes = { ...nested };
|
|
39
|
+
for (const key of ["folder", "field", "link"]) {
|
|
40
|
+
if (args?.[key] !== undefined)
|
|
41
|
+
axes[key] = args[key];
|
|
42
|
+
}
|
|
43
|
+
return axes;
|
|
44
|
+
}
|
|
45
|
+
const axes = {};
|
|
46
|
+
for (const key of ["folder", "field", "link"]) {
|
|
47
|
+
if (args?.[key] !== undefined)
|
|
48
|
+
axes[key] = args[key];
|
|
49
|
+
}
|
|
50
|
+
return Object.keys(axes).length > 0 ? axes : undefined;
|
|
51
|
+
}
|
|
22
52
|
function semanticSearchMode(value) {
|
|
23
53
|
return value === "query" || value === "search" || value === "vsearch" ? value : undefined;
|
|
24
54
|
}
|
|
@@ -36,18 +66,27 @@ function semanticTypedSearchType(value) {
|
|
|
36
66
|
}
|
|
37
67
|
function semanticSearchesArg(args) {
|
|
38
68
|
const value = args?.["semanticSearches"];
|
|
39
|
-
if (
|
|
69
|
+
if (value === undefined)
|
|
40
70
|
return undefined;
|
|
71
|
+
if (!Array.isArray(value)) {
|
|
72
|
+
throw new Error('Argument "semanticSearches" must be an array.');
|
|
73
|
+
}
|
|
41
74
|
const searches = [];
|
|
42
75
|
for (const item of value) {
|
|
43
|
-
if (!isRecord(item))
|
|
44
|
-
|
|
76
|
+
if (!isRecord(item)) {
|
|
77
|
+
throw new Error('Each "semanticSearches" item must be an object.');
|
|
78
|
+
}
|
|
45
79
|
const type = semanticTypedSearchType(stringArg(item, "type"));
|
|
46
80
|
const query = stringArg(item, "query");
|
|
47
|
-
if (type
|
|
48
|
-
|
|
81
|
+
if (type === undefined || query === undefined) {
|
|
82
|
+
throw new Error('Each "semanticSearches" item requires a lex, vec, or hyde type and string query.');
|
|
83
|
+
}
|
|
84
|
+
searches.push({ type, query });
|
|
49
85
|
}
|
|
50
|
-
|
|
86
|
+
// An explicitly supplied empty array is meaningful: it is the caller's
|
|
87
|
+
// request to use the normal query/mode path, not an excuse to discard the
|
|
88
|
+
// field while rebuilding options.
|
|
89
|
+
return searches;
|
|
51
90
|
}
|
|
52
91
|
export function semanticOptionsFromArgs(args) {
|
|
53
92
|
return {
|
|
@@ -97,16 +136,51 @@ export function embeddingSyncOptionsFromArgs(vault, args) {
|
|
|
97
136
|
export function semanticQueryOptionsFromArgs(vault, args) {
|
|
98
137
|
return {
|
|
99
138
|
vault,
|
|
100
|
-
query: stringArg(args, "query")
|
|
139
|
+
query: stringArg(args, "query"),
|
|
101
140
|
collection: stringArg(args, "collection"),
|
|
141
|
+
collections: stringArrayArg(args, "collections"),
|
|
142
|
+
collectionPath: stringArg(args, "collectionPath"),
|
|
102
143
|
mode: semanticSearchMode(stringArg(args, "mode")),
|
|
144
|
+
searches: (() => {
|
|
145
|
+
const value = args?.["searches"];
|
|
146
|
+
if (value === undefined)
|
|
147
|
+
return undefined;
|
|
148
|
+
if (!Array.isArray(value))
|
|
149
|
+
throw new Error('Argument "searches" must be an array.');
|
|
150
|
+
const searches = [];
|
|
151
|
+
for (const item of value) {
|
|
152
|
+
if (!isRecord(item)) {
|
|
153
|
+
throw new Error('Each "searches" item must be an object.');
|
|
154
|
+
}
|
|
155
|
+
const type = semanticTypedSearchType(stringArg(item, "type"));
|
|
156
|
+
const query = stringArg(item, "query");
|
|
157
|
+
if (type === undefined || query === undefined) {
|
|
158
|
+
throw new Error('Each "searches" item requires a lex, vec, or hyde type and string query.');
|
|
159
|
+
}
|
|
160
|
+
searches.push({ type, query });
|
|
161
|
+
}
|
|
162
|
+
return searches;
|
|
163
|
+
})(),
|
|
103
164
|
limit: numberArg(args, "limit"),
|
|
104
165
|
minScore: numberArg(args, "minScore"),
|
|
105
166
|
intent: stringArg(args, "intent"),
|
|
106
167
|
lex: stringArg(args, "lex"),
|
|
107
168
|
vec: stringArg(args, "vec"),
|
|
108
169
|
hyde: stringArg(args, "hyde"),
|
|
170
|
+
all: booleanArg(args, "all"),
|
|
171
|
+
format: semanticSearchFormat(stringArg(args, "format")),
|
|
172
|
+
full: booleanArg(args, "full"),
|
|
173
|
+
lineNumbers: booleanArg(args, "lineNumbers"),
|
|
174
|
+
fullPath: booleanArg(args, "fullPath"),
|
|
175
|
+
chunkStrategy: stringArg(args, "chunkStrategy"),
|
|
109
176
|
index: stringArg(args, "index"),
|
|
177
|
+
candidateLimit: numberArg(args, "candidateLimit"),
|
|
178
|
+
rerank: booleanArg(args, "rerank"),
|
|
179
|
+
noRerank: booleanArg(args, "noRerank"),
|
|
180
|
+
cursor: stringArg(args, "cursor"),
|
|
181
|
+
count: booleanArg(args, "count"),
|
|
182
|
+
facets: booleanArg(args, "facets"),
|
|
183
|
+
axes: queryAxesArg(args),
|
|
110
184
|
};
|
|
111
185
|
}
|
|
112
186
|
export function semanticStatusOptionsFromArgs(vault, args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic-retrieve-args.js","sourceRoot":"","sources":["../../../src/kernel/semantic/semantic-retrieve-args.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"semantic-retrieve-args.js","sourceRoot":"","sources":["../../../src/kernel/semantic/semantic-retrieve-args.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,13 @@ export interface RunUpdateOptions {
|
|
|
22
22
|
readonly check?: boolean;
|
|
23
23
|
readonly dryRun?: boolean;
|
|
24
24
|
readonly yes?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether this invocation has an interactive TTY available for confirmation.
|
|
27
|
+
* Callers that do not provide this option remain non-interactive.
|
|
28
|
+
*/
|
|
29
|
+
readonly interactive?: boolean;
|
|
30
|
+
/** Confirmation hook used by the CLI and deterministic tests. */
|
|
31
|
+
readonly confirm?: () => boolean | Promise<boolean>;
|
|
25
32
|
readonly executeExternal?: boolean;
|
|
26
33
|
readonly timeoutMs?: number;
|
|
27
34
|
readonly runner?: UpdateRunner;
|