@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,546 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
2
|
+
import { basename, dirname, join, resolve } from "node:path";
|
|
3
|
+
const DEFAULT_COLLECTION = "pm_items";
|
|
4
|
+
const DEFAULT_VECTOR_TIMEOUT_MS = 30_000;
|
|
5
|
+
const LANCE_DB_LOCAL_SNAPSHOT_DIR = ".pm-cli-local-vectors";
|
|
6
|
+
const LANCE_DB_LOCAL_SNAPSHOT_VERSION = 1;
|
|
7
|
+
const lanceDbLocalTables = new Map();
|
|
8
|
+
function toNonEmptyString(value) {
|
|
9
|
+
if (typeof value !== "string") {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const normalized = value.trim();
|
|
13
|
+
return normalized.length > 0 ? normalized : null;
|
|
14
|
+
}
|
|
15
|
+
function trimTrailingSlashes(value) {
|
|
16
|
+
return value.replaceAll(/\/+$/g, "");
|
|
17
|
+
}
|
|
18
|
+
function isFiniteNumberArray(value) {
|
|
19
|
+
return Array.isArray(value) && value.every((entry) => typeof entry === "number" && Number.isFinite(entry));
|
|
20
|
+
}
|
|
21
|
+
function normalizeVector(value) {
|
|
22
|
+
if (!isFiniteNumberArray(value) || value.length === 0) {
|
|
23
|
+
throw new Error("Vector values must be a non-empty numeric array");
|
|
24
|
+
}
|
|
25
|
+
return [...value];
|
|
26
|
+
}
|
|
27
|
+
function normalizeLimit(value) {
|
|
28
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
29
|
+
throw new Error("Vector query limit must be a positive number");
|
|
30
|
+
}
|
|
31
|
+
return Math.floor(value);
|
|
32
|
+
}
|
|
33
|
+
function resolveVectorFetcher(fetcher) {
|
|
34
|
+
if (fetcher) {
|
|
35
|
+
return fetcher;
|
|
36
|
+
}
|
|
37
|
+
if (typeof globalThis.fetch === "function") {
|
|
38
|
+
return globalThis.fetch.bind(globalThis);
|
|
39
|
+
}
|
|
40
|
+
throw new Error("Vector request execution requires a fetch implementation");
|
|
41
|
+
}
|
|
42
|
+
function normalizeTimeoutMs(timeoutMs) {
|
|
43
|
+
const resolved = timeoutMs ?? DEFAULT_VECTOR_TIMEOUT_MS;
|
|
44
|
+
if (!Number.isFinite(resolved) || resolved <= 0) {
|
|
45
|
+
throw new Error("Vector request timeout must be a positive finite number");
|
|
46
|
+
}
|
|
47
|
+
return Math.floor(resolved);
|
|
48
|
+
}
|
|
49
|
+
function toErrorMessage(error) {
|
|
50
|
+
if (error instanceof Error) {
|
|
51
|
+
const message = error.message.trim();
|
|
52
|
+
return message.length > 0 ? message : error.name;
|
|
53
|
+
}
|
|
54
|
+
return String(error);
|
|
55
|
+
}
|
|
56
|
+
async function readFailedResponseBody(response) {
|
|
57
|
+
try {
|
|
58
|
+
return (await response.text()).replaceAll(/\s+/g, " ").trim();
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return `(failed to read response body: ${toErrorMessage(error)})`;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function normalizeQdrantQueryResponse(payload) {
|
|
65
|
+
const result = payload.result;
|
|
66
|
+
if (!Array.isArray(result)) {
|
|
67
|
+
throw new TypeError("Qdrant query response must include a result array");
|
|
68
|
+
}
|
|
69
|
+
const hits = result.map((entry, index) => {
|
|
70
|
+
const idValue = entry.id;
|
|
71
|
+
const idCandidate = typeof idValue === "number" ? String(idValue) : idValue;
|
|
72
|
+
const id = toNonEmptyString(idCandidate);
|
|
73
|
+
if (!id) {
|
|
74
|
+
throw new Error(`Qdrant query response entry at index ${index} is missing a non-empty id`);
|
|
75
|
+
}
|
|
76
|
+
const score = entry.score;
|
|
77
|
+
if (typeof score !== "number" || !Number.isFinite(score)) {
|
|
78
|
+
throw new TypeError(`Qdrant query response entry at index ${index} is missing a finite numeric score`);
|
|
79
|
+
}
|
|
80
|
+
const payloadValue = entry.payload;
|
|
81
|
+
if (payloadValue !== undefined &&
|
|
82
|
+
(typeof payloadValue !== "object" || payloadValue === null || Array.isArray(payloadValue))) {
|
|
83
|
+
throw new Error(`Qdrant query response entry at index ${index} must provide payload as an object when set`);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
id,
|
|
87
|
+
score,
|
|
88
|
+
...(payloadValue ? { payload: payloadValue } : {}),
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
hits.sort((left, right) => {
|
|
92
|
+
if (left.score !== right.score) {
|
|
93
|
+
return right.score - left.score;
|
|
94
|
+
}
|
|
95
|
+
return left.id.localeCompare(right.id);
|
|
96
|
+
});
|
|
97
|
+
return hits;
|
|
98
|
+
}
|
|
99
|
+
function normalizeQdrantUpsertResponse(payload) {
|
|
100
|
+
const nestedStatus = toNonEmptyString(payload.result?.status);
|
|
101
|
+
if (nestedStatus) {
|
|
102
|
+
return { status: nestedStatus };
|
|
103
|
+
}
|
|
104
|
+
const topLevelStatus = toNonEmptyString(payload.status);
|
|
105
|
+
if (topLevelStatus) {
|
|
106
|
+
return { status: topLevelStatus };
|
|
107
|
+
}
|
|
108
|
+
throw new Error("Qdrant upsert response must include status metadata");
|
|
109
|
+
}
|
|
110
|
+
async function executeRemoteVectorPlan(endpoint, plan, timeoutMs, fetcher, requestKind) {
|
|
111
|
+
const controller = new AbortController();
|
|
112
|
+
const timeoutHandle = setTimeout(() => {
|
|
113
|
+
controller.abort();
|
|
114
|
+
}, timeoutMs);
|
|
115
|
+
try {
|
|
116
|
+
let response;
|
|
117
|
+
try {
|
|
118
|
+
response = await fetcher(endpoint, {
|
|
119
|
+
method: plan.method,
|
|
120
|
+
headers: plan.headers,
|
|
121
|
+
body: JSON.stringify(plan.body),
|
|
122
|
+
signal: controller.signal,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
127
|
+
throw new Error(`Vector ${requestKind} request timed out after ${timeoutMs}ms`);
|
|
128
|
+
}
|
|
129
|
+
throw new Error(`Vector ${requestKind} request execution failed: ${toErrorMessage(error)}`);
|
|
130
|
+
}
|
|
131
|
+
if (!response.ok) {
|
|
132
|
+
const responseBody = await readFailedResponseBody(response);
|
|
133
|
+
const detail = responseBody.length > 0 ? `: ${responseBody}` : "";
|
|
134
|
+
throw new Error(`Vector ${requestKind} request failed with status ${response.status} ${response.statusText}${detail}`);
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
return await response.json();
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
throw new Error(`Vector ${requestKind} response JSON parse failed: ${toErrorMessage(error)}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
clearTimeout(timeoutHandle);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function resolveQdrantStore(settings) {
|
|
148
|
+
const url = toNonEmptyString(settings.vector_store?.qdrant?.url);
|
|
149
|
+
if (!url) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
const apiKey = toNonEmptyString(settings.vector_store?.qdrant?.api_key);
|
|
153
|
+
return {
|
|
154
|
+
name: "qdrant",
|
|
155
|
+
url,
|
|
156
|
+
...(apiKey ? { api_key: apiKey } : {}),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function resolveLanceDbStore(settings) {
|
|
160
|
+
const lancedbPath = toNonEmptyString(settings.vector_store?.lancedb?.path);
|
|
161
|
+
if (!lancedbPath) {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
name: "lancedb",
|
|
166
|
+
path: lancedbPath,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function normalizeVectorRecords(records) {
|
|
170
|
+
if (!Array.isArray(records) || records.length === 0) {
|
|
171
|
+
throw new Error("Vector upsert records must include at least one entry");
|
|
172
|
+
}
|
|
173
|
+
return records.map((record, index) => {
|
|
174
|
+
const id = toNonEmptyString(record.id);
|
|
175
|
+
if (!id) {
|
|
176
|
+
throw new Error(`Vector upsert record at index ${index} is missing a non-empty id`);
|
|
177
|
+
}
|
|
178
|
+
const vector = normalizeVector(record.vector);
|
|
179
|
+
const payload = record.payload;
|
|
180
|
+
if (payload !== undefined && (typeof payload !== "object" || payload === null || Array.isArray(payload))) {
|
|
181
|
+
throw new Error(`Vector upsert record at index ${index} must provide payload as an object when set`);
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
id,
|
|
185
|
+
vector,
|
|
186
|
+
...(payload ? { payload } : {}),
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function normalizeVectorDeleteIds(ids) {
|
|
191
|
+
if (!Array.isArray(ids) || ids.length === 0) {
|
|
192
|
+
throw new Error("Vector delete ids must include at least one entry");
|
|
193
|
+
}
|
|
194
|
+
const normalizedIds = ids
|
|
195
|
+
.map((id, index) => {
|
|
196
|
+
const normalized = toNonEmptyString(id);
|
|
197
|
+
if (!normalized) {
|
|
198
|
+
throw new Error(`Vector delete id at index ${index} is missing a non-empty value`);
|
|
199
|
+
}
|
|
200
|
+
return normalized;
|
|
201
|
+
})
|
|
202
|
+
.sort((left, right) => left.localeCompare(right));
|
|
203
|
+
const uniqueIds = [];
|
|
204
|
+
for (const id of normalizedIds) {
|
|
205
|
+
if (uniqueIds.at(-1) !== id) {
|
|
206
|
+
uniqueIds.push(id);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return uniqueIds;
|
|
210
|
+
}
|
|
211
|
+
function resolveQdrantDeleteTarget(upsertTarget) {
|
|
212
|
+
return upsertTarget.replace(/\/points\?wait=true$/, "/points/delete?wait=true");
|
|
213
|
+
}
|
|
214
|
+
function getLanceDbLocalTableKey(storePath, table) {
|
|
215
|
+
return getLanceDbSnapshotPath(storePath, table);
|
|
216
|
+
}
|
|
217
|
+
function getLanceDbSnapshotPath(storePath, table) {
|
|
218
|
+
return join(resolve(storePath), LANCE_DB_LOCAL_SNAPSHOT_DIR, `${table}.json`);
|
|
219
|
+
}
|
|
220
|
+
function isNodeErrorWithCode(error, code) {
|
|
221
|
+
return typeof error === "object" && error !== null && error.code === code;
|
|
222
|
+
}
|
|
223
|
+
function normalizeSnapshotRecord(entry, index, snapshotPath) {
|
|
224
|
+
const id = toNonEmptyString(entry.id);
|
|
225
|
+
if (!id) {
|
|
226
|
+
throw new Error(`LanceDB local snapshot '${snapshotPath}' record at index ${index} is missing a non-empty id`);
|
|
227
|
+
}
|
|
228
|
+
const vector = normalizeVector(entry.vector);
|
|
229
|
+
const payload = entry.payload;
|
|
230
|
+
if (payload !== undefined && (typeof payload !== "object" || payload === null || Array.isArray(payload))) {
|
|
231
|
+
throw new Error(`LanceDB local snapshot '${snapshotPath}' record '${id}' must provide payload as an object when set`);
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
id,
|
|
235
|
+
vector,
|
|
236
|
+
...(payload ? { payload: payload } : {}),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
function parseLanceDbSnapshot(snapshotPath, expectedTable, raw) {
|
|
240
|
+
let parsed;
|
|
241
|
+
try {
|
|
242
|
+
parsed = JSON.parse(raw);
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
throw new Error(`LanceDB local snapshot at '${snapshotPath}' is not valid JSON: ${toErrorMessage(error)}`);
|
|
246
|
+
}
|
|
247
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
248
|
+
throw new Error(`LanceDB local snapshot at '${snapshotPath}' must be a JSON object`);
|
|
249
|
+
}
|
|
250
|
+
const version = parsed.version;
|
|
251
|
+
if (version !== LANCE_DB_LOCAL_SNAPSHOT_VERSION) {
|
|
252
|
+
throw new Error(`LanceDB local snapshot at '${snapshotPath}' must include version=${LANCE_DB_LOCAL_SNAPSHOT_VERSION}`);
|
|
253
|
+
}
|
|
254
|
+
const table = toNonEmptyString(parsed.table);
|
|
255
|
+
if (!table) {
|
|
256
|
+
throw new Error(`LanceDB local snapshot at '${snapshotPath}' must include a non-empty table value`);
|
|
257
|
+
}
|
|
258
|
+
if (table !== expectedTable) {
|
|
259
|
+
throw new Error(`LanceDB local snapshot at '${snapshotPath}' table mismatch: expected '${expectedTable}', received '${table}'`);
|
|
260
|
+
}
|
|
261
|
+
const recordsValue = parsed.records;
|
|
262
|
+
if (!Array.isArray(recordsValue)) {
|
|
263
|
+
throw new TypeError(`LanceDB local snapshot at '${snapshotPath}' must include a records array`);
|
|
264
|
+
}
|
|
265
|
+
const tableRecords = new Map();
|
|
266
|
+
for (let index = 0; index < recordsValue.length; index += 1) {
|
|
267
|
+
const record = normalizeSnapshotRecord(recordsValue[index], index, snapshotPath);
|
|
268
|
+
tableRecords.set(record.id, record);
|
|
269
|
+
}
|
|
270
|
+
return tableRecords;
|
|
271
|
+
}
|
|
272
|
+
async function loadLanceDbLocalTable(storePath, table) {
|
|
273
|
+
const key = getLanceDbLocalTableKey(storePath, table);
|
|
274
|
+
const cached = lanceDbLocalTables.get(key);
|
|
275
|
+
if (cached) {
|
|
276
|
+
return cached;
|
|
277
|
+
}
|
|
278
|
+
const snapshotPath = getLanceDbSnapshotPath(storePath, table);
|
|
279
|
+
let loaded = new Map();
|
|
280
|
+
try {
|
|
281
|
+
const raw = await readFile(snapshotPath, "utf8");
|
|
282
|
+
loaded = parseLanceDbSnapshot(snapshotPath, table, raw);
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
if (!isNodeErrorWithCode(error, "ENOENT")) {
|
|
286
|
+
throw error;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
lanceDbLocalTables.set(key, loaded);
|
|
290
|
+
return loaded;
|
|
291
|
+
}
|
|
292
|
+
function buildSnapshotRecords(table) {
|
|
293
|
+
const records = [...table.values()];
|
|
294
|
+
records.sort((left, right) => left.id.localeCompare(right.id));
|
|
295
|
+
return records.map((record) => ({
|
|
296
|
+
id: record.id,
|
|
297
|
+
vector: [...record.vector],
|
|
298
|
+
...(record.payload ? { payload: record.payload } : {}),
|
|
299
|
+
}));
|
|
300
|
+
}
|
|
301
|
+
async function removeSnapshotFile(snapshotPath) {
|
|
302
|
+
try {
|
|
303
|
+
await unlink(snapshotPath);
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
if (!isNodeErrorWithCode(error, "ENOENT")) {
|
|
307
|
+
throw new Error(`LanceDB local snapshot delete failed at '${snapshotPath}': ${toErrorMessage(error)}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
async function persistLanceDbLocalTable(storePath, tableName, table) {
|
|
312
|
+
const snapshotPath = getLanceDbSnapshotPath(storePath, tableName);
|
|
313
|
+
if (table.size === 0) {
|
|
314
|
+
await removeSnapshotFile(snapshotPath);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const snapshotDir = dirname(snapshotPath);
|
|
318
|
+
try {
|
|
319
|
+
await mkdir(snapshotDir, { recursive: true });
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
throw new Error(`LanceDB local snapshot directory create failed at '${snapshotDir}': ${toErrorMessage(error)}`);
|
|
323
|
+
}
|
|
324
|
+
const tempPath = join(snapshotDir, `${basename(snapshotPath)}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`);
|
|
325
|
+
const serialized = `${JSON.stringify({
|
|
326
|
+
version: LANCE_DB_LOCAL_SNAPSHOT_VERSION,
|
|
327
|
+
table: tableName,
|
|
328
|
+
records: buildSnapshotRecords(table),
|
|
329
|
+
}, null, 2)}\n`;
|
|
330
|
+
try {
|
|
331
|
+
await writeFile(tempPath, serialized, "utf8");
|
|
332
|
+
await rename(tempPath, snapshotPath);
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
await unlink(tempPath).catch(() => { });
|
|
336
|
+
throw new Error(`LanceDB local snapshot write failed at '${snapshotPath}': ${toErrorMessage(error)}`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
function dotProduct(left, right) {
|
|
340
|
+
let total = 0;
|
|
341
|
+
for (let index = 0; index < left.length; index += 1) {
|
|
342
|
+
total += left[index] * right[index];
|
|
343
|
+
}
|
|
344
|
+
return total;
|
|
345
|
+
}
|
|
346
|
+
export function resolveVectorStores(settings) {
|
|
347
|
+
const qdrant = resolveQdrantStore(settings);
|
|
348
|
+
const lancedb = resolveLanceDbStore(settings);
|
|
349
|
+
const available = [qdrant, lancedb].filter((entry) => entry !== null);
|
|
350
|
+
return {
|
|
351
|
+
active: available[0] ?? null,
|
|
352
|
+
available,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
export function resolveVectorStoreRequestTarget(store) {
|
|
356
|
+
if (store.name === "qdrant") {
|
|
357
|
+
const baseUrl = trimTrailingSlashes(store.url);
|
|
358
|
+
return {
|
|
359
|
+
store: "qdrant",
|
|
360
|
+
query_target: `${baseUrl}/collections/${DEFAULT_COLLECTION}/points/search`,
|
|
361
|
+
upsert_target: `${baseUrl}/collections/${DEFAULT_COLLECTION}/points?wait=true`,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
const encodedPath = encodeURIComponent(store.path);
|
|
365
|
+
return {
|
|
366
|
+
store: "lancedb",
|
|
367
|
+
query_target: `lancedb://${encodedPath}#${DEFAULT_COLLECTION}`,
|
|
368
|
+
upsert_target: `lancedb://${encodedPath}#${DEFAULT_COLLECTION}`,
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
export function buildVectorQueryPlan(store, vector, limit) {
|
|
372
|
+
const target = resolveVectorStoreRequestTarget(store);
|
|
373
|
+
const normalizedVector = normalizeVector(vector);
|
|
374
|
+
const normalizedLimit = normalizeLimit(limit);
|
|
375
|
+
if (store.name === "qdrant") {
|
|
376
|
+
return {
|
|
377
|
+
target,
|
|
378
|
+
method: "POST",
|
|
379
|
+
headers: {
|
|
380
|
+
"content-type": "application/json",
|
|
381
|
+
...(store.api_key ? { "api-key": store.api_key } : {}),
|
|
382
|
+
},
|
|
383
|
+
body: {
|
|
384
|
+
vector: normalizedVector,
|
|
385
|
+
limit: normalizedLimit,
|
|
386
|
+
with_payload: true,
|
|
387
|
+
},
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
return {
|
|
391
|
+
target,
|
|
392
|
+
method: "LOCAL",
|
|
393
|
+
headers: {},
|
|
394
|
+
body: {
|
|
395
|
+
table: DEFAULT_COLLECTION,
|
|
396
|
+
vector: normalizedVector,
|
|
397
|
+
limit: normalizedLimit,
|
|
398
|
+
},
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
export function buildVectorUpsertPlan(store, records) {
|
|
402
|
+
const target = resolveVectorStoreRequestTarget(store);
|
|
403
|
+
const normalizedRecords = normalizeVectorRecords(records);
|
|
404
|
+
if (store.name === "qdrant") {
|
|
405
|
+
return {
|
|
406
|
+
target,
|
|
407
|
+
method: "POST",
|
|
408
|
+
headers: {
|
|
409
|
+
"content-type": "application/json",
|
|
410
|
+
...(store.api_key ? { "api-key": store.api_key } : {}),
|
|
411
|
+
},
|
|
412
|
+
body: {
|
|
413
|
+
points: normalizedRecords,
|
|
414
|
+
},
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
return {
|
|
418
|
+
target,
|
|
419
|
+
method: "LOCAL",
|
|
420
|
+
headers: {},
|
|
421
|
+
body: {
|
|
422
|
+
table: DEFAULT_COLLECTION,
|
|
423
|
+
records: normalizedRecords,
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
export function buildVectorDeletePlan(store, ids) {
|
|
428
|
+
const target = resolveVectorStoreRequestTarget(store);
|
|
429
|
+
const normalizedIds = normalizeVectorDeleteIds(ids);
|
|
430
|
+
if (store.name === "qdrant") {
|
|
431
|
+
return {
|
|
432
|
+
target,
|
|
433
|
+
method: "POST",
|
|
434
|
+
headers: {
|
|
435
|
+
"content-type": "application/json",
|
|
436
|
+
...(store.api_key ? { "api-key": store.api_key } : {}),
|
|
437
|
+
},
|
|
438
|
+
body: {
|
|
439
|
+
points: normalizedIds,
|
|
440
|
+
},
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
return {
|
|
444
|
+
target,
|
|
445
|
+
method: "LOCAL",
|
|
446
|
+
headers: {},
|
|
447
|
+
body: {
|
|
448
|
+
table: DEFAULT_COLLECTION,
|
|
449
|
+
ids: normalizedIds,
|
|
450
|
+
},
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
export async function executeVectorQuery(store, vector, limit, options = {}) {
|
|
454
|
+
const plan = buildVectorQueryPlan(store, vector, limit);
|
|
455
|
+
if (plan.method === "LOCAL") {
|
|
456
|
+
const lanceDbStore = store;
|
|
457
|
+
const queryBody = plan.body;
|
|
458
|
+
const table = await loadLanceDbLocalTable(lanceDbStore.path, queryBody.table);
|
|
459
|
+
if (table.size === 0) {
|
|
460
|
+
return [];
|
|
461
|
+
}
|
|
462
|
+
const queryVector = normalizeVector(queryBody.vector);
|
|
463
|
+
const queryLimit = normalizeLimit(queryBody.limit);
|
|
464
|
+
const hits = [];
|
|
465
|
+
for (const record of table.values()) {
|
|
466
|
+
if (record.vector.length !== queryVector.length) {
|
|
467
|
+
throw new Error(`LanceDB local vector record '${record.id}' dimension mismatch: expected ${queryVector.length}, received ${record.vector.length}`);
|
|
468
|
+
}
|
|
469
|
+
hits.push({
|
|
470
|
+
id: record.id,
|
|
471
|
+
score: dotProduct(queryVector, record.vector),
|
|
472
|
+
...(record.payload ? { payload: record.payload } : {}),
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
hits.sort((left, right) => {
|
|
476
|
+
if (left.score !== right.score) {
|
|
477
|
+
return right.score - left.score;
|
|
478
|
+
}
|
|
479
|
+
return left.id.localeCompare(right.id);
|
|
480
|
+
});
|
|
481
|
+
return hits.slice(0, queryLimit);
|
|
482
|
+
}
|
|
483
|
+
const timeoutMs = normalizeTimeoutMs(options.timeout_ms);
|
|
484
|
+
const fetcher = resolveVectorFetcher(options.fetcher);
|
|
485
|
+
const payload = await executeRemoteVectorPlan(plan.target.query_target, {
|
|
486
|
+
method: "POST",
|
|
487
|
+
headers: plan.headers,
|
|
488
|
+
body: plan.body,
|
|
489
|
+
}, timeoutMs, fetcher, "query");
|
|
490
|
+
return normalizeQdrantQueryResponse(payload);
|
|
491
|
+
}
|
|
492
|
+
export async function executeVectorUpsert(store, records, options = {}) {
|
|
493
|
+
const plan = buildVectorUpsertPlan(store, records);
|
|
494
|
+
if (plan.method === "LOCAL") {
|
|
495
|
+
const lanceDbStore = store;
|
|
496
|
+
const upsertBody = plan.body;
|
|
497
|
+
const key = getLanceDbLocalTableKey(lanceDbStore.path, upsertBody.table);
|
|
498
|
+
const table = await loadLanceDbLocalTable(lanceDbStore.path, upsertBody.table);
|
|
499
|
+
for (const record of upsertBody.records) {
|
|
500
|
+
table.set(record.id, record);
|
|
501
|
+
}
|
|
502
|
+
await persistLanceDbLocalTable(lanceDbStore.path, upsertBody.table, table);
|
|
503
|
+
lanceDbLocalTables.set(key, table);
|
|
504
|
+
return { status: "ok" };
|
|
505
|
+
}
|
|
506
|
+
const timeoutMs = normalizeTimeoutMs(options.timeout_ms);
|
|
507
|
+
const fetcher = resolveVectorFetcher(options.fetcher);
|
|
508
|
+
const payload = await executeRemoteVectorPlan(plan.target.upsert_target, {
|
|
509
|
+
method: "POST",
|
|
510
|
+
headers: plan.headers,
|
|
511
|
+
body: plan.body,
|
|
512
|
+
}, timeoutMs, fetcher, "upsert");
|
|
513
|
+
return normalizeQdrantUpsertResponse(payload);
|
|
514
|
+
}
|
|
515
|
+
export async function executeVectorDelete(store, ids, options = {}) {
|
|
516
|
+
const plan = buildVectorDeletePlan(store, ids);
|
|
517
|
+
if (plan.method === "LOCAL") {
|
|
518
|
+
const lanceDbStore = store;
|
|
519
|
+
const deleteBody = plan.body;
|
|
520
|
+
const key = getLanceDbLocalTableKey(lanceDbStore.path, deleteBody.table);
|
|
521
|
+
const table = await loadLanceDbLocalTable(lanceDbStore.path, deleteBody.table);
|
|
522
|
+
if (table.size === 0) {
|
|
523
|
+
return { status: "ok" };
|
|
524
|
+
}
|
|
525
|
+
for (const id of deleteBody.ids) {
|
|
526
|
+
table.delete(id);
|
|
527
|
+
}
|
|
528
|
+
await persistLanceDbLocalTable(lanceDbStore.path, deleteBody.table, table);
|
|
529
|
+
if (table.size === 0) {
|
|
530
|
+
lanceDbLocalTables.delete(key);
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
lanceDbLocalTables.set(key, table);
|
|
534
|
+
}
|
|
535
|
+
return { status: "ok" };
|
|
536
|
+
}
|
|
537
|
+
const timeoutMs = normalizeTimeoutMs(options.timeout_ms);
|
|
538
|
+
const fetcher = resolveVectorFetcher(options.fetcher);
|
|
539
|
+
const payload = await executeRemoteVectorPlan(resolveQdrantDeleteTarget(plan.target.upsert_target), {
|
|
540
|
+
method: "POST",
|
|
541
|
+
headers: plan.headers,
|
|
542
|
+
body: plan.body,
|
|
543
|
+
}, timeoutMs, fetcher, "delete");
|
|
544
|
+
return normalizeQdrantUpsertResponse(payload);
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=vector-stores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-stores.js","sourceRoot":"","sources":["../../../src/core/search/vector-stores.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-types.js","sourceRoot":"","sources":["../../../src/core/shared/command-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ItemFrontMatter, ItemType, PmSettings } from "../../types/index.js";
|
|
2
|
+
export declare const PM_DIRNAME = ".agents/pm";
|
|
3
|
+
export declare const SETTINGS_FILENAME = "settings.json";
|
|
4
|
+
export declare const PM_REQUIRED_SUBDIRS: readonly ["", "epics", "features", "tasks", "chores", "issues", "history", "index", "search", "extensions", "locks"];
|
|
5
|
+
export declare const TYPE_TO_FOLDER: Record<ItemType, string>;
|
|
6
|
+
export declare const FRONT_MATTER_KEY_ORDER: ReadonlyArray<keyof ItemFrontMatter>;
|
|
7
|
+
export declare const SETTINGS_DEFAULTS: PmSettings;
|
|
8
|
+
export declare const EMPTY_CANONICAL_DOCUMENT: {
|
|
9
|
+
front_matter: {};
|
|
10
|
+
body: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const EXIT_CODE: {
|
|
13
|
+
readonly SUCCESS: 0;
|
|
14
|
+
readonly GENERIC_FAILURE: 1;
|
|
15
|
+
readonly USAGE: 2;
|
|
16
|
+
readonly NOT_FOUND: 3;
|
|
17
|
+
readonly CONFLICT: 4;
|
|
18
|
+
readonly DEPENDENCY_FAILED: 5;
|
|
19
|
+
};
|