@unbrained/pm-cli 2026.3.9
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/.pi/extensions/pm-cli/index.ts +778 -0
- package/AGENTS.md +475 -0
- package/LICENSE +21 -0
- package/PRD.md +1390 -0
- package/README.md +655 -0
- package/dist/cli/commands/activity.d.ts +14 -0
- package/dist/cli/commands/activity.js +80 -0
- package/dist/cli/commands/activity.js.map +1 -0
- package/dist/cli/commands/append.d.ts +13 -0
- package/dist/cli/commands/append.js +46 -0
- package/dist/cli/commands/append.js.map +1 -0
- package/dist/cli/commands/beads.d.ts +15 -0
- package/dist/cli/commands/beads.js +475 -0
- package/dist/cli/commands/beads.js.map +1 -0
- package/dist/cli/commands/claim.d.ts +19 -0
- package/dist/cli/commands/claim.js +79 -0
- package/dist/cli/commands/claim.js.map +1 -0
- package/dist/cli/commands/close.d.ts +12 -0
- package/dist/cli/commands/close.js +58 -0
- package/dist/cli/commands/close.js.map +1 -0
- package/dist/cli/commands/comments.d.ts +15 -0
- package/dist/cli/commands/comments.js +80 -0
- package/dist/cli/commands/comments.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +10 -0
- package/dist/cli/commands/completion.js +469 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +15 -0
- package/dist/cli/commands/config.js +72 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/create.d.ts +60 -0
- package/dist/cli/commands/create.js +456 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/delete.d.ts +12 -0
- package/dist/cli/commands/delete.js +33 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/docs.d.ts +16 -0
- package/dist/cli/commands/docs.js +113 -0
- package/dist/cli/commands/docs.js.map +1 -0
- package/dist/cli/commands/files.d.ts +17 -0
- package/dist/cli/commands/files.js +113 -0
- package/dist/cli/commands/files.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +9 -0
- package/dist/cli/commands/gc.js +80 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/get.d.ts +12 -0
- package/dist/cli/commands/get.js +28 -0
- package/dist/cli/commands/get.js.map +1 -0
- package/dist/cli/commands/health.d.ts +15 -0
- package/dist/cli/commands/health.js +288 -0
- package/dist/cli/commands/health.js.map +1 -0
- package/dist/cli/commands/history.d.ts +13 -0
- package/dist/cli/commands/history.js +72 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/index.d.ts +26 -0
- package/dist/cli/commands/index.js +27 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +10 -0
- package/dist/cli/commands/init.js +59 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +18 -0
- package/dist/cli/commands/install.js +87 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/list.d.ts +21 -0
- package/dist/cli/commands/list.js +137 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/reindex.d.ts +16 -0
- package/dist/cli/commands/reindex.js +154 -0
- package/dist/cli/commands/reindex.js.map +1 -0
- package/dist/cli/commands/restore.d.ts +20 -0
- package/dist/cli/commands/restore.js +208 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/search.d.ts +45 -0
- package/dist/cli/commands/search.js +531 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +13 -0
- package/dist/cli/commands/stats.js +88 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/test-all.d.ts +30 -0
- package/dist/cli/commands/test-all.js +157 -0
- package/dist/cli/commands/test-all.js.map +1 -0
- package/dist/cli/commands/test.d.ts +29 -0
- package/dist/cli/commands/test.js +492 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/update.d.ts +52 -0
- package/dist/cli/commands/update.js +467 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/extension-command-options.d.ts +1 -0
- package/dist/cli/extension-command-options.js +76 -0
- package/dist/cli/extension-command-options.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +1494 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -0
- package/dist/command-types.d.ts +1 -0
- package/dist/command-types.js +2 -0
- package/dist/command-types.js.map +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/extensions/builtins.d.ts +3 -0
- package/dist/core/extensions/builtins.js +47 -0
- package/dist/core/extensions/builtins.js.map +1 -0
- package/dist/core/extensions/index.d.ts +13 -0
- package/dist/core/extensions/index.js +88 -0
- package/dist/core/extensions/index.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +301 -0
- package/dist/core/extensions/loader.js +917 -0
- package/dist/core/extensions/loader.js.map +1 -0
- package/dist/core/fs/fs-utils.d.ts +6 -0
- package/dist/core/fs/fs-utils.js +58 -0
- package/dist/core/fs/fs-utils.js.map +1 -0
- package/dist/core/fs/index.d.ts +1 -0
- package/dist/core/fs/index.js +2 -0
- package/dist/core/fs/index.js.map +1 -0
- package/dist/core/history/history.d.ts +12 -0
- package/dist/core/history/history.js +44 -0
- package/dist/core/history/history.js.map +1 -0
- package/dist/core/history/index.d.ts +1 -0
- package/dist/core/history/index.js +2 -0
- package/dist/core/history/index.js.map +1 -0
- package/dist/core/item/id.d.ts +3 -0
- package/dist/core/item/id.js +54 -0
- package/dist/core/item/id.js.map +1 -0
- package/dist/core/item/index.d.ts +3 -0
- package/dist/core/item/index.js +4 -0
- package/dist/core/item/index.js.map +1 -0
- package/dist/core/item/item-format.d.ts +9 -0
- package/dist/core/item/item-format.js +363 -0
- package/dist/core/item/item-format.js.map +1 -0
- package/dist/core/item/parse.d.ts +3 -0
- package/dist/core/item/parse.js +72 -0
- package/dist/core/item/parse.js.map +1 -0
- package/dist/core/lock/index.d.ts +1 -0
- package/dist/core/lock/index.js +2 -0
- package/dist/core/lock/index.js.map +1 -0
- package/dist/core/lock/lock.d.ts +1 -0
- package/dist/core/lock/lock.js +100 -0
- package/dist/core/lock/lock.js.map +1 -0
- package/dist/core/output/output.d.ts +7 -0
- package/dist/core/output/output.js +79 -0
- package/dist/core/output/output.js.map +1 -0
- package/dist/core/search/cache.d.ts +17 -0
- package/dist/core/search/cache.js +212 -0
- package/dist/core/search/cache.js.map +1 -0
- package/dist/core/search/embedding-batches.d.ts +7 -0
- package/dist/core/search/embedding-batches.js +54 -0
- package/dist/core/search/embedding-batches.js.map +1 -0
- package/dist/core/search/providers.d.ts +59 -0
- package/dist/core/search/providers.js +265 -0
- package/dist/core/search/providers.js.map +1 -0
- package/dist/core/search/vector-stores.d.ts +89 -0
- package/dist/core/search/vector-stores.js +546 -0
- package/dist/core/search/vector-stores.js.map +1 -0
- package/dist/core/shared/command-types.d.ts +7 -0
- package/dist/core/shared/command-types.js +2 -0
- package/dist/core/shared/command-types.js.map +1 -0
- package/dist/core/shared/constants.d.ts +19 -0
- package/dist/core/shared/constants.js +134 -0
- package/dist/core/shared/constants.js.map +1 -0
- package/dist/core/shared/errors.d.ts +4 -0
- package/dist/core/shared/errors.js +9 -0
- package/dist/core/shared/errors.js.map +1 -0
- package/dist/core/shared/index.d.ts +3 -0
- package/dist/core/shared/index.js +4 -0
- package/dist/core/shared/index.js.map +1 -0
- package/dist/core/shared/serialization.d.ts +3 -0
- package/dist/core/shared/serialization.js +70 -0
- package/dist/core/shared/serialization.js.map +1 -0
- package/dist/core/shared/time.d.ts +3 -0
- package/dist/core/shared/time.js +28 -0
- package/dist/core/shared/time.js.map +1 -0
- package/dist/core/store/index.d.ts +3 -0
- package/dist/core/store/index.js +4 -0
- package/dist/core/store/index.js.map +1 -0
- package/dist/core/store/item-store.d.ts +42 -0
- package/dist/core/store/item-store.js +186 -0
- package/dist/core/store/item-store.js.map +1 -0
- package/dist/core/store/paths.d.ts +8 -0
- package/dist/core/store/paths.js +29 -0
- package/dist/core/store/paths.js.map +1 -0
- package/dist/core/store/settings.d.ts +4 -0
- package/dist/core/store/settings.js +148 -0
- package/dist/core/store/settings.js.map +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -0
- package/dist/extensions/builtins/beads/index.d.ts +8 -0
- package/dist/extensions/builtins/beads/index.js +29 -0
- package/dist/extensions/builtins/beads/index.js.map +1 -0
- package/dist/extensions/builtins/todos/import-export.d.ts +26 -0
- package/dist/extensions/builtins/todos/import-export.js +460 -0
- package/dist/extensions/builtins/todos/import-export.js.map +1 -0
- package/dist/extensions/builtins/todos/index.d.ts +8 -0
- package/dist/extensions/builtins/todos/index.js +38 -0
- package/dist/extensions/builtins/todos/index.js.map +1 -0
- package/dist/fs-utils.d.ts +1 -0
- package/dist/fs-utils.js +2 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/history.d.ts +1 -0
- package/dist/history.js +2 -0
- package/dist/history.js.map +1 -0
- package/dist/id.d.ts +1 -0
- package/dist/id.js +2 -0
- package/dist/id.js.map +1 -0
- package/dist/item-format.d.ts +1 -0
- package/dist/item-format.js +2 -0
- package/dist/item-format.js.map +1 -0
- package/dist/item-store.d.ts +1 -0
- package/dist/item-store.js +2 -0
- package/dist/item-store.js.map +1 -0
- package/dist/lock.d.ts +1 -0
- package/dist/lock.js +2 -0
- package/dist/lock.js.map +1 -0
- package/dist/output.d.ts +1 -0
- package/dist/output.js +2 -0
- package/dist/output.js.map +1 -0
- package/dist/parse.d.ts +1 -0
- package/dist/parse.js +2 -0
- package/dist/parse.js.map +1 -0
- package/dist/paths.d.ts +1 -0
- package/dist/paths.js +2 -0
- package/dist/paths.js.map +1 -0
- package/dist/serialization.d.ts +1 -0
- package/dist/serialization.js +2 -0
- package/dist/serialization.js.map +1 -0
- package/dist/settings.d.ts +1 -0
- package/dist/settings.js +2 -0
- package/dist/settings.js.map +1 -0
- package/dist/time.d.ts +1 -0
- package/dist/time.js +2 -0
- package/dist/time.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types.d.ts +179 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/docs/ARCHITECTURE.md +246 -0
- package/docs/EXTENSIONS.md +329 -0
- package/docs/RELEASING.md +65 -0
- package/package.json +79 -0
- package/scripts/install.ps1 +112 -0
- package/scripts/install.sh +113 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
const DEFAULT_EMBEDDING_TIMEOUT_MS = 30_000;
|
|
2
|
+
function trimTrailingSlashes(value) {
|
|
3
|
+
return value.replaceAll(/\/+$/g, "");
|
|
4
|
+
}
|
|
5
|
+
function normalizeOpenAiEmbeddingsEndpoint(baseUrl) {
|
|
6
|
+
const normalizedBaseUrl = trimTrailingSlashes(baseUrl);
|
|
7
|
+
const normalizedLower = normalizedBaseUrl.toLowerCase();
|
|
8
|
+
if (normalizedLower.endsWith("/embeddings")) {
|
|
9
|
+
return normalizedBaseUrl;
|
|
10
|
+
}
|
|
11
|
+
if (normalizedLower.endsWith("/v1")) {
|
|
12
|
+
return `${normalizedBaseUrl}/embeddings`;
|
|
13
|
+
}
|
|
14
|
+
return `${normalizedBaseUrl}/v1/embeddings`;
|
|
15
|
+
}
|
|
16
|
+
function toNonEmptyString(value) {
|
|
17
|
+
if (typeof value !== "string") {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const normalized = value.trim();
|
|
21
|
+
return normalized.length > 0 ? normalized : null;
|
|
22
|
+
}
|
|
23
|
+
function resolveOpenAiProvider(settings) {
|
|
24
|
+
const baseUrl = toNonEmptyString(settings.providers?.openai?.base_url);
|
|
25
|
+
const model = toNonEmptyString(settings.providers?.openai?.model);
|
|
26
|
+
if (!baseUrl || !model) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const apiKey = toNonEmptyString(settings.providers?.openai?.api_key);
|
|
30
|
+
return {
|
|
31
|
+
name: "openai",
|
|
32
|
+
base_url: baseUrl,
|
|
33
|
+
model,
|
|
34
|
+
...(apiKey ? { api_key: apiKey } : {}),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function resolveOllamaProvider(settings) {
|
|
38
|
+
const baseUrl = toNonEmptyString(settings.providers?.ollama?.base_url);
|
|
39
|
+
const model = toNonEmptyString(settings.providers?.ollama?.model);
|
|
40
|
+
if (!baseUrl || !model) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
name: "ollama",
|
|
45
|
+
base_url: baseUrl,
|
|
46
|
+
model,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function normalizeEmbeddingInputs(input) {
|
|
50
|
+
const inputs = (Array.isArray(input) ? input : [input])
|
|
51
|
+
.map((entry) => entry.trim())
|
|
52
|
+
.filter((entry) => entry.length > 0);
|
|
53
|
+
if (inputs.length === 0) {
|
|
54
|
+
throw new Error("Embedding input must include at least one non-empty string");
|
|
55
|
+
}
|
|
56
|
+
return inputs;
|
|
57
|
+
}
|
|
58
|
+
function dedupeEmbeddingInputs(inputs) {
|
|
59
|
+
const uniqueInputs = [];
|
|
60
|
+
const originalToUniqueIndex = [];
|
|
61
|
+
const uniqueIndexByInput = new Map();
|
|
62
|
+
for (const entry of inputs) {
|
|
63
|
+
const existingUniqueIndex = uniqueIndexByInput.get(entry);
|
|
64
|
+
if (existingUniqueIndex === undefined) {
|
|
65
|
+
const nextUniqueIndex = uniqueInputs.length;
|
|
66
|
+
uniqueInputs.push(entry);
|
|
67
|
+
uniqueIndexByInput.set(entry, nextUniqueIndex);
|
|
68
|
+
originalToUniqueIndex.push(nextUniqueIndex);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
originalToUniqueIndex.push(existingUniqueIndex);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
uniqueInputs,
|
|
75
|
+
originalToUniqueIndex,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function isFiniteNumberArray(value) {
|
|
79
|
+
return Array.isArray(value) && value.every((entry) => typeof entry === "number" && Number.isFinite(entry));
|
|
80
|
+
}
|
|
81
|
+
function buildOrderedOpenAiEntries(data) {
|
|
82
|
+
const openAiEntries = data.map((entry, position) => ({
|
|
83
|
+
embedding: entry.embedding,
|
|
84
|
+
index: entry.index,
|
|
85
|
+
position,
|
|
86
|
+
}));
|
|
87
|
+
const hasExplicitIndex = openAiEntries.some((entry) => entry.index !== undefined);
|
|
88
|
+
if (hasExplicitIndex) {
|
|
89
|
+
for (const entry of openAiEntries) {
|
|
90
|
+
if (!Number.isInteger(entry.index)) {
|
|
91
|
+
throw new TypeError(`OpenAI embedding response entry at position ${entry.position} is missing a valid integer index`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return [...openAiEntries].sort((a, b) => {
|
|
95
|
+
const byIndex = a.index - b.index;
|
|
96
|
+
if (byIndex !== 0) {
|
|
97
|
+
return byIndex;
|
|
98
|
+
}
|
|
99
|
+
return a.position - b.position;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return openAiEntries;
|
|
103
|
+
}
|
|
104
|
+
export function resolveEmbeddingProviders(settings) {
|
|
105
|
+
const openAi = resolveOpenAiProvider(settings);
|
|
106
|
+
const ollama = resolveOllamaProvider(settings);
|
|
107
|
+
const available = [openAi, ollama].filter((entry) => entry !== null);
|
|
108
|
+
return {
|
|
109
|
+
active: available[0] ?? null,
|
|
110
|
+
available,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export function resolveEmbeddingRequestTarget(provider) {
|
|
114
|
+
const baseUrl = trimTrailingSlashes(provider.base_url);
|
|
115
|
+
if (provider.name === "openai") {
|
|
116
|
+
return {
|
|
117
|
+
provider: "openai",
|
|
118
|
+
endpoint: normalizeOpenAiEmbeddingsEndpoint(baseUrl),
|
|
119
|
+
model: provider.model,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
provider: "ollama",
|
|
124
|
+
endpoint: `${baseUrl}/api/embed`,
|
|
125
|
+
model: provider.model,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export function buildEmbeddingRequestPlan(provider, input) {
|
|
129
|
+
const normalizedInputs = normalizeEmbeddingInputs(input);
|
|
130
|
+
if (provider.name === "openai") {
|
|
131
|
+
return {
|
|
132
|
+
target: resolveEmbeddingRequestTarget(provider),
|
|
133
|
+
method: "POST",
|
|
134
|
+
headers: {
|
|
135
|
+
"content-type": "application/json",
|
|
136
|
+
...(provider.api_key ? { authorization: `Bearer ${provider.api_key}` } : {}),
|
|
137
|
+
},
|
|
138
|
+
body: {
|
|
139
|
+
model: provider.model,
|
|
140
|
+
input: normalizedInputs.length === 1 ? normalizedInputs[0] : normalizedInputs,
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
target: resolveEmbeddingRequestTarget(provider),
|
|
146
|
+
method: "POST",
|
|
147
|
+
headers: {
|
|
148
|
+
"content-type": "application/json",
|
|
149
|
+
},
|
|
150
|
+
body: {
|
|
151
|
+
model: provider.model,
|
|
152
|
+
input: normalizedInputs,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
export function normalizeEmbeddingResponse(provider, response) {
|
|
157
|
+
if (provider.name === "openai") {
|
|
158
|
+
const data = response.data;
|
|
159
|
+
if (!Array.isArray(data) || data.length === 0) {
|
|
160
|
+
throw new Error("OpenAI embedding response must include a non-empty data array");
|
|
161
|
+
}
|
|
162
|
+
const orderedEntries = buildOrderedOpenAiEntries(data);
|
|
163
|
+
return orderedEntries.map((entry, index) => {
|
|
164
|
+
const embedding = entry.embedding;
|
|
165
|
+
if (!isFiniteNumberArray(embedding)) {
|
|
166
|
+
throw new Error(`OpenAI embedding response entry at index ${index} is missing a numeric embedding vector`);
|
|
167
|
+
}
|
|
168
|
+
return [...embedding];
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
const singleEmbedding = response.embedding;
|
|
172
|
+
if (isFiniteNumberArray(singleEmbedding)) {
|
|
173
|
+
return [[...singleEmbedding]];
|
|
174
|
+
}
|
|
175
|
+
const multipleEmbeddings = response.embeddings;
|
|
176
|
+
if (Array.isArray(multipleEmbeddings) && multipleEmbeddings.length > 0) {
|
|
177
|
+
return multipleEmbeddings.map((entry, index) => {
|
|
178
|
+
if (!isFiniteNumberArray(entry)) {
|
|
179
|
+
throw new Error(`Ollama embedding response entry at index ${index} is missing a numeric embedding vector`);
|
|
180
|
+
}
|
|
181
|
+
return [...entry];
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
throw new Error("Ollama embedding response must include embedding or embeddings vectors");
|
|
185
|
+
}
|
|
186
|
+
function resolveEmbeddingFetcher(fetcher) {
|
|
187
|
+
if (fetcher) {
|
|
188
|
+
return fetcher;
|
|
189
|
+
}
|
|
190
|
+
if (typeof globalThis.fetch === "function") {
|
|
191
|
+
return globalThis.fetch.bind(globalThis);
|
|
192
|
+
}
|
|
193
|
+
throw new Error("Embedding request execution requires a fetch implementation");
|
|
194
|
+
}
|
|
195
|
+
function normalizeTimeoutMs(timeoutMs) {
|
|
196
|
+
const resolved = timeoutMs ?? DEFAULT_EMBEDDING_TIMEOUT_MS;
|
|
197
|
+
if (!Number.isFinite(resolved) || resolved <= 0) {
|
|
198
|
+
throw new Error("Embedding request timeout must be a positive finite number");
|
|
199
|
+
}
|
|
200
|
+
return Math.floor(resolved);
|
|
201
|
+
}
|
|
202
|
+
function toErrorMessage(error) {
|
|
203
|
+
if (error instanceof Error) {
|
|
204
|
+
const message = error.message.trim();
|
|
205
|
+
return message.length > 0 ? message : error.name;
|
|
206
|
+
}
|
|
207
|
+
return String(error);
|
|
208
|
+
}
|
|
209
|
+
async function readFailedResponseBody(response) {
|
|
210
|
+
try {
|
|
211
|
+
return (await response.text()).replaceAll(/\s+/g, " ").trim();
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
return `(failed to read response body: ${toErrorMessage(error)})`;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
export async function executeEmbeddingRequest(provider, input, options = {}) {
|
|
218
|
+
const timeoutMs = normalizeTimeoutMs(options.timeout_ms);
|
|
219
|
+
const fetcher = resolveEmbeddingFetcher(options.fetcher);
|
|
220
|
+
const normalizedInputs = normalizeEmbeddingInputs(input);
|
|
221
|
+
const dedupedInputs = dedupeEmbeddingInputs(normalizedInputs);
|
|
222
|
+
const requestPlan = buildEmbeddingRequestPlan(provider, dedupedInputs.uniqueInputs);
|
|
223
|
+
const controller = new AbortController();
|
|
224
|
+
const timeoutHandle = setTimeout(() => {
|
|
225
|
+
controller.abort();
|
|
226
|
+
}, timeoutMs);
|
|
227
|
+
try {
|
|
228
|
+
let response;
|
|
229
|
+
try {
|
|
230
|
+
response = await fetcher(requestPlan.target.endpoint, {
|
|
231
|
+
method: requestPlan.method,
|
|
232
|
+
headers: requestPlan.headers,
|
|
233
|
+
body: JSON.stringify(requestPlan.body),
|
|
234
|
+
signal: controller.signal,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
239
|
+
throw new Error(`Embedding request timed out after ${timeoutMs}ms`);
|
|
240
|
+
}
|
|
241
|
+
throw new Error(`Embedding request execution failed: ${toErrorMessage(error)}`);
|
|
242
|
+
}
|
|
243
|
+
if (!response.ok) {
|
|
244
|
+
const responseBody = await readFailedResponseBody(response);
|
|
245
|
+
const detail = responseBody.length > 0 ? `: ${responseBody}` : "";
|
|
246
|
+
throw new Error(`Embedding request failed with status ${response.status} ${response.statusText}${detail}`);
|
|
247
|
+
}
|
|
248
|
+
let payload;
|
|
249
|
+
try {
|
|
250
|
+
payload = await response.json();
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
throw new Error(`Embedding response JSON parse failed: ${toErrorMessage(error)}`);
|
|
254
|
+
}
|
|
255
|
+
const vectors = normalizeEmbeddingResponse(provider, payload);
|
|
256
|
+
if (vectors.length !== dedupedInputs.uniqueInputs.length) {
|
|
257
|
+
throw new Error(`Embedding response cardinality mismatch: expected ${dedupedInputs.uniqueInputs.length} vector(s), received ${vectors.length}`);
|
|
258
|
+
}
|
|
259
|
+
return dedupedInputs.originalToUniqueIndex.map((uniqueIndex) => [...vectors[uniqueIndex]]);
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
clearTimeout(timeoutHandle);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
//# sourceMappingURL=providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/core/search/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { PmSettings } from "../../types/index.js";
|
|
2
|
+
export type VectorStoreName = "qdrant" | "lancedb";
|
|
3
|
+
export interface QdrantVectorStoreConfig {
|
|
4
|
+
name: "qdrant";
|
|
5
|
+
url: string;
|
|
6
|
+
api_key?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface LanceDbVectorStoreConfig {
|
|
9
|
+
name: "lancedb";
|
|
10
|
+
path: string;
|
|
11
|
+
}
|
|
12
|
+
export type VectorStoreConfig = QdrantVectorStoreConfig | LanceDbVectorStoreConfig;
|
|
13
|
+
export interface VectorStoreResolution {
|
|
14
|
+
active: VectorStoreConfig | null;
|
|
15
|
+
available: VectorStoreConfig[];
|
|
16
|
+
}
|
|
17
|
+
export interface VectorStoreRequestTarget {
|
|
18
|
+
store: VectorStoreName;
|
|
19
|
+
query_target: string;
|
|
20
|
+
upsert_target: string;
|
|
21
|
+
}
|
|
22
|
+
export interface VectorQueryPlan {
|
|
23
|
+
target: VectorStoreRequestTarget;
|
|
24
|
+
method: "POST" | "LOCAL";
|
|
25
|
+
headers: Record<string, string>;
|
|
26
|
+
body: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export interface VectorRecord {
|
|
29
|
+
id: string;
|
|
30
|
+
vector: number[];
|
|
31
|
+
payload?: Record<string, unknown>;
|
|
32
|
+
}
|
|
33
|
+
export interface VectorUpsertPlan {
|
|
34
|
+
target: VectorStoreRequestTarget;
|
|
35
|
+
method: "POST" | "LOCAL";
|
|
36
|
+
headers: Record<string, string>;
|
|
37
|
+
body: Record<string, unknown>;
|
|
38
|
+
}
|
|
39
|
+
export interface VectorDeletePlan {
|
|
40
|
+
target: VectorStoreRequestTarget;
|
|
41
|
+
method: "POST" | "LOCAL";
|
|
42
|
+
headers: Record<string, string>;
|
|
43
|
+
body: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
export interface VectorQueryHit {
|
|
46
|
+
id: string;
|
|
47
|
+
score: number;
|
|
48
|
+
payload?: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
export interface VectorUpsertResult {
|
|
51
|
+
status: string;
|
|
52
|
+
}
|
|
53
|
+
export interface VectorHttpResponse {
|
|
54
|
+
ok: boolean;
|
|
55
|
+
status: number;
|
|
56
|
+
statusText: string;
|
|
57
|
+
json(): Promise<unknown>;
|
|
58
|
+
text(): Promise<string>;
|
|
59
|
+
}
|
|
60
|
+
export type VectorRequestFetcher = (url: string, init: {
|
|
61
|
+
method: "POST";
|
|
62
|
+
headers: Record<string, string>;
|
|
63
|
+
body: string;
|
|
64
|
+
signal: AbortSignal;
|
|
65
|
+
}) => Promise<VectorHttpResponse>;
|
|
66
|
+
export interface ExecuteVectorRequestOptions {
|
|
67
|
+
timeout_ms?: number;
|
|
68
|
+
fetcher?: VectorRequestFetcher;
|
|
69
|
+
}
|
|
70
|
+
type VectorSettingsInput = {
|
|
71
|
+
vector_store?: {
|
|
72
|
+
qdrant?: {
|
|
73
|
+
url?: string;
|
|
74
|
+
api_key?: string;
|
|
75
|
+
};
|
|
76
|
+
lancedb?: {
|
|
77
|
+
path?: string;
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
export declare function resolveVectorStores(settings: PmSettings | VectorSettingsInput): VectorStoreResolution;
|
|
82
|
+
export declare function resolveVectorStoreRequestTarget(store: VectorStoreConfig): VectorStoreRequestTarget;
|
|
83
|
+
export declare function buildVectorQueryPlan(store: VectorStoreConfig, vector: number[], limit: number): VectorQueryPlan;
|
|
84
|
+
export declare function buildVectorUpsertPlan(store: VectorStoreConfig, records: VectorRecord[]): VectorUpsertPlan;
|
|
85
|
+
export declare function buildVectorDeletePlan(store: VectorStoreConfig, ids: string[]): VectorDeletePlan;
|
|
86
|
+
export declare function executeVectorQuery(store: VectorStoreConfig, vector: number[], limit: number, options?: ExecuteVectorRequestOptions): Promise<VectorQueryHit[]>;
|
|
87
|
+
export declare function executeVectorUpsert(store: VectorStoreConfig, records: VectorRecord[], options?: ExecuteVectorRequestOptions): Promise<VectorUpsertResult>;
|
|
88
|
+
export declare function executeVectorDelete(store: VectorStoreConfig, ids: string[], options?: ExecuteVectorRequestOptions): Promise<VectorUpsertResult>;
|
|
89
|
+
export {};
|