@unbrained/pm-cli 2026.5.30 → 2026.5.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/cli/commands/calendar.js +81 -9
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/create.js +34 -4
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension/install-sources.d.ts +2 -0
- package/dist/cli/commands/extension/install-sources.js +11 -4
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/reindex.js +3 -3
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/search.d.ts +17 -0
- package/dist/cli/commands/search.js +40 -10
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/register-list-query.js +9 -11
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +20 -22
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +32 -25
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +6 -8
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.js +6 -3
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli/search-refresh.d.ts +2 -0
- package/dist/cli/search-refresh.js +13 -0
- package/dist/cli/search-refresh.js.map +1 -0
- package/dist/cli-bundle/chunks/activity-OWYSUZOY.js +17 -0
- package/dist/cli-bundle/chunks/activity-OWYSUZOY.js.map +7 -0
- package/dist/cli-bundle/chunks/aggregate-ADUOSFRO.js +209 -0
- package/dist/cli-bundle/chunks/aggregate-ADUOSFRO.js.map +7 -0
- package/dist/cli-bundle/chunks/append-JD2DETU7.js +73 -0
- package/dist/cli-bundle/chunks/append-JD2DETU7.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js +27 -0
- package/dist/cli-bundle/chunks/chunk-3HUE7XOF.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-3M73P3G6.js +1636 -0
- package/dist/cli-bundle/chunks/chunk-3M73P3G6.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js +189 -0
- package/dist/cli-bundle/chunks/chunk-4AEZR5EJ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-5HSEP75M.js +330 -0
- package/dist/cli-bundle/chunks/chunk-5HSEP75M.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js +1770 -0
- package/dist/cli-bundle/chunks/chunk-6HT2F4TK.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-6YCV7WSL.js +552 -0
- package/dist/cli-bundle/chunks/chunk-6YCV7WSL.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js +202 -0
- package/dist/cli-bundle/chunks/chunk-7Y53ZJIQ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-A7E7PUVX.js +157 -0
- package/dist/cli-bundle/chunks/chunk-A7E7PUVX.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-AKOOMO3T.js +90 -0
- package/dist/cli-bundle/chunks/chunk-AKOOMO3T.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js +950 -0
- package/dist/cli-bundle/chunks/chunk-BUPWJ3IJ.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-CEFIVZPG.js +79 -0
- package/dist/cli-bundle/chunks/chunk-CEFIVZPG.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-D7AOMPRH.js +349 -0
- package/dist/cli-bundle/chunks/chunk-D7AOMPRH.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js +56 -0
- package/dist/cli-bundle/chunks/chunk-EAOG77HM.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js +47 -0
- package/dist/cli-bundle/chunks/chunk-EGUGFSNX.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js +56 -0
- package/dist/cli-bundle/chunks/chunk-FM26RGSU.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js +435 -0
- package/dist/cli-bundle/chunks/chunk-FQE6XZDB.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-G57E5D7T.js +185 -0
- package/dist/cli-bundle/chunks/chunk-G57E5D7T.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js +3621 -0
- package/dist/cli-bundle/chunks/chunk-GN7IJPCD.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-JFWUHHS2.js +233 -0
- package/dist/cli-bundle/chunks/chunk-JFWUHHS2.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js +1861 -0
- package/dist/cli-bundle/chunks/chunk-JTWRXG4B.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js +648 -0
- package/dist/cli-bundle/chunks/chunk-JULRTHJQ.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-PB2YU2E3.js → chunk-KBQY3YG5.js} +28 -70
- package/dist/cli-bundle/chunks/chunk-KBQY3YG5.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-L2FXEKDB.js +185 -0
- package/dist/cli-bundle/chunks/chunk-L2FXEKDB.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js +189 -0
- package/dist/cli-bundle/chunks/chunk-LRBOHPUE.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js +5153 -0
- package/dist/cli-bundle/chunks/chunk-LSXGH6NE.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js +1345 -0
- package/dist/cli-bundle/chunks/chunk-MD7K4JYF.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-NGN7UV5K.js +341 -0
- package/dist/cli-bundle/chunks/chunk-NGN7UV5K.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-O7IWB35H.js +18 -0
- package/dist/cli-bundle/chunks/chunk-O7IWB35H.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js +2929 -0
- package/dist/cli-bundle/chunks/chunk-OGZEG5TT.js.map +7 -0
- package/dist/cli-bundle/chunks/{chunk-RJONRNXN.js → chunk-P53TN6IA.js} +22 -30
- package/dist/cli-bundle/chunks/chunk-P53TN6IA.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-PVNQLCIS.js +176 -0
- package/dist/cli-bundle/chunks/chunk-PVNQLCIS.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js +1680 -0
- package/dist/cli-bundle/chunks/chunk-PXUAZUUY.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js +20 -0
- package/dist/cli-bundle/chunks/chunk-QAJBIGRA.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-SEXQN4KL.js +60 -0
- package/dist/cli-bundle/chunks/chunk-SEXQN4KL.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js +362 -0
- package/dist/cli-bundle/chunks/chunk-U7FMKRXH.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js +141 -0
- package/dist/cli-bundle/chunks/chunk-VGICHR7D.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js +632 -0
- package/dist/cli-bundle/chunks/chunk-WDPXDQFG.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-WJ2NAC37.js +252 -0
- package/dist/cli-bundle/chunks/chunk-WJ2NAC37.js.map +7 -0
- package/dist/cli-bundle/chunks/claim-EE4TKKCV.js +133 -0
- package/dist/cli-bundle/chunks/claim-EE4TKKCV.js.map +7 -0
- package/dist/cli-bundle/chunks/close-XY4CSAYF.js +14 -0
- package/dist/cli-bundle/chunks/close-XY4CSAYF.js.map +7 -0
- package/dist/cli-bundle/chunks/comments-AAKJQ6LW.js +104 -0
- package/dist/cli-bundle/chunks/comments-AAKJQ6LW.js.map +7 -0
- package/dist/cli-bundle/chunks/config-V3FZOKLI.js +1577 -0
- package/dist/cli-bundle/chunks/config-V3FZOKLI.js.map +7 -0
- package/dist/cli-bundle/chunks/context-RZ5QPNJB.js +1458 -0
- package/dist/cli-bundle/chunks/context-RZ5QPNJB.js.map +7 -0
- package/dist/cli-bundle/chunks/contracts-YLMH33VU.js +1245 -0
- package/dist/cli-bundle/chunks/contracts-YLMH33VU.js.map +7 -0
- package/dist/cli-bundle/chunks/create-PZVHRIZQ.js +28 -0
- package/dist/cli-bundle/chunks/create-PZVHRIZQ.js.map +7 -0
- package/dist/cli-bundle/chunks/delete-RHCTEORS.js +59 -0
- package/dist/cli-bundle/chunks/delete-RHCTEORS.js.map +7 -0
- package/dist/cli-bundle/chunks/deps-MZYCMLAO.js +229 -0
- package/dist/cli-bundle/chunks/deps-MZYCMLAO.js.map +7 -0
- package/dist/cli-bundle/chunks/docs-FXXUCZYU.js +35 -0
- package/dist/cli-bundle/chunks/docs-FXXUCZYU.js.map +7 -0
- package/dist/cli-bundle/chunks/extension-B4WL7BQU.js +25 -0
- package/dist/cli-bundle/chunks/extension-B4WL7BQU.js.map +7 -0
- package/dist/cli-bundle/chunks/files-WVOX67PE.js +286 -0
- package/dist/cli-bundle/chunks/files-WVOX67PE.js.map +7 -0
- package/dist/cli-bundle/chunks/gc-JWNF66EC.js +181 -0
- package/dist/cli-bundle/chunks/gc-JWNF66EC.js.map +7 -0
- package/dist/cli-bundle/chunks/get-LTK3HOCQ.js +198 -0
- package/dist/cli-bundle/chunks/get-LTK3HOCQ.js.map +7 -0
- package/dist/cli-bundle/chunks/health-TCWL55KM.js +1233 -0
- package/dist/cli-bundle/chunks/health-TCWL55KM.js.map +7 -0
- package/dist/cli-bundle/chunks/history-A2JUDXUE.js +21 -0
- package/dist/cli-bundle/chunks/history-A2JUDXUE.js.map +7 -0
- package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js +20 -0
- package/dist/cli-bundle/chunks/history-redact-ED6RFCPL.js.map +7 -0
- package/dist/cli-bundle/chunks/history-repair-ZWSTDRH2.js +198 -0
- package/dist/cli-bundle/chunks/history-repair-ZWSTDRH2.js.map +7 -0
- package/dist/cli-bundle/chunks/init-M2WUB4YH.js +16 -0
- package/dist/cli-bundle/chunks/init-M2WUB4YH.js.map +7 -0
- package/dist/cli-bundle/chunks/learnings-NXTWE3FR.js +48 -0
- package/dist/cli-bundle/chunks/learnings-NXTWE3FR.js.map +7 -0
- package/dist/cli-bundle/chunks/list-OGWQPC26.js +20 -0
- package/dist/cli-bundle/chunks/list-OGWQPC26.js.map +7 -0
- package/dist/cli-bundle/chunks/notes-DFS5ZGOO.js +48 -0
- package/dist/cli-bundle/chunks/notes-DFS5ZGOO.js.map +7 -0
- package/dist/cli-bundle/chunks/plan-67AB2PLM.js +1175 -0
- package/dist/cli-bundle/chunks/plan-67AB2PLM.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-list-query-EIVQ5FMR.js → register-list-query-UP3VRUFS.js} +24 -15
- package/dist/cli-bundle/chunks/register-list-query-UP3VRUFS.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-mutation-RSZNPSGI.js → register-mutation-YWSBF545.js} +38 -28
- package/dist/cli-bundle/chunks/register-mutation-YWSBF545.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-operations-APUSYDMR.js → register-operations-3BDTGSDH.js} +49 -30
- package/dist/cli-bundle/chunks/register-operations-3BDTGSDH.js.map +7 -0
- package/dist/cli-bundle/chunks/{register-setup-OZOKSMPJ.js → register-setup-V56GDRUS.js} +21 -12
- package/dist/cli-bundle/chunks/register-setup-V56GDRUS.js.map +7 -0
- package/dist/cli-bundle/chunks/restore-MB2ISME7.js +18 -0
- package/dist/cli-bundle/chunks/restore-MB2ISME7.js.map +7 -0
- package/dist/cli-bundle/chunks/schema-Q622KC46.js +119 -0
- package/dist/cli-bundle/chunks/schema-Q622KC46.js.map +7 -0
- package/dist/cli-bundle/chunks/search-HENBL456.js +1135 -0
- package/dist/cli-bundle/chunks/search-HENBL456.js.map +7 -0
- package/dist/cli-bundle/chunks/stats-N6H3YP2F.js +124 -0
- package/dist/cli-bundle/chunks/stats-N6H3YP2F.js.map +7 -0
- package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js +32 -0
- package/dist/cli-bundle/chunks/test-VNBDRJ4Z.js.map +7 -0
- package/dist/cli-bundle/chunks/test-all-G2AZOHXI.js +332 -0
- package/dist/cli-bundle/chunks/test-all-G2AZOHXI.js.map +7 -0
- package/dist/cli-bundle/chunks/test-runs-GX5HTPSF.js +939 -0
- package/dist/cli-bundle/chunks/test-runs-GX5HTPSF.js.map +7 -0
- package/dist/cli-bundle/chunks/update-H6SCWNMA.js +22 -0
- package/dist/cli-bundle/chunks/update-H6SCWNMA.js.map +7 -0
- package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js +676 -0
- package/dist/cli-bundle/chunks/update-many-46HRSP2Q.js.map +7 -0
- package/dist/cli-bundle/chunks/upgrade-H5HHM5UV.js +271 -0
- package/dist/cli-bundle/chunks/upgrade-H5HHM5UV.js.map +7 -0
- package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js +1110 -0
- package/dist/cli-bundle/chunks/validate-TMCVKIGZ.js.map +7 -0
- package/dist/cli-bundle/main.js +146 -90
- package/dist/cli-bundle/main.js.map +4 -4
- package/dist/core/item/item-type-definition.js +6 -2
- package/dist/core/item/item-type-definition.js.map +1 -1
- package/dist/core/item/type-registry.d.ts +4 -0
- package/dist/core/item/type-registry.js +10 -2
- package/dist/core/item/type-registry.js.map +1 -1
- package/dist/core/search/background-refresh.d.ts +53 -0
- package/dist/core/search/background-refresh.js +286 -0
- package/dist/core/search/background-refresh.js.map +1 -0
- package/dist/core/search/cache.d.ts +20 -1
- package/dist/core/search/cache.js +33 -4
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/vector-stores.js +7 -3
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/shared/constants.d.ts +2 -2
- package/dist/core/shared/constants.js +2 -3
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/item-format-migration.js +25 -15
- package/dist/core/store/item-format-migration.js.map +1 -1
- package/dist/core/store/settings-validator.js +6 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/telemetry/runtime.d.ts +10 -0
- package/dist/core/telemetry/runtime.js +86 -2
- package/dist/core/telemetry/runtime.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +4 -4
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.js +26 -5
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/types.d.ts +7 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/docs/RELEASING.md +1 -1
- package/package.json +1 -2
- package/dist/cli-bundle/chunks/chunk-PB2YU2E3.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-RJONRNXN.js.map +0 -7
- package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js +0 -13864
- package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js.map +0 -7
- package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js +0 -24225
- package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js.map +0 -7
- package/dist/cli-bundle/chunks/register-list-query-EIVQ5FMR.js.map +0 -7
- package/dist/cli-bundle/chunks/register-mutation-RSZNPSGI.js.map +0 -7
- package/dist/cli-bundle/chunks/register-operations-APUSYDMR.js.map +0 -7
- package/dist/cli-bundle/chunks/register-setup-OZOKSMPJ.js.map +0 -7
|
@@ -32,6 +32,8 @@ export declare function parseExtensionInstallSource(input: string, options?: {
|
|
|
32
32
|
ref?: string;
|
|
33
33
|
}): InstallSource;
|
|
34
34
|
export declare function runGitCommand(args: string[]): Promise<string>;
|
|
35
|
+
export declare function resolveNpmCommandName(platform?: NodeJS.Platform): "npm" | "npm.cmd";
|
|
36
|
+
export declare function shouldRunNpmCommandInShell(platform?: NodeJS.Platform): boolean;
|
|
35
37
|
export declare function normalizeNpmLocalFileAliasSpec(spec: string, cwd?: string): string;
|
|
36
38
|
export declare function resolveInstallSource(source: InstallSource): Promise<ResolvedInstallSource>;
|
|
37
39
|
export declare function areDirectoriesEquivalent(left: string, right: string): Promise<boolean>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="eaa543ef-b644-5b26-9eb4-dcb40aaa8a53")}catch(e){}}();
|
|
3
3
|
import { execFile } from "node:child_process";
|
|
4
4
|
import fs from "node:fs/promises";
|
|
5
5
|
import os from "node:os";
|
|
@@ -122,15 +122,22 @@ export async function runGitCommand(args) {
|
|
|
122
122
|
throw new PmCliError(`Git command failed: git ${args.join(" ")}\n${message}`, EXIT_CODE.GENERIC_FAILURE);
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
+
export function resolveNpmCommandName(platform = process.platform) {
|
|
126
|
+
return platform === "win32" ? "npm.cmd" : "npm";
|
|
127
|
+
}
|
|
128
|
+
export function shouldRunNpmCommandInShell(platform = process.platform) {
|
|
129
|
+
return platform === "win32";
|
|
130
|
+
}
|
|
125
131
|
async function runNpmCommand(args, cwd) {
|
|
132
|
+
const npmCommand = resolveNpmCommandName();
|
|
126
133
|
try {
|
|
127
|
-
const result = await execFileAsync(
|
|
134
|
+
const result = await execFileAsync(npmCommand, args, { cwd, encoding: "utf8", shell: shouldRunNpmCommandInShell() });
|
|
128
135
|
return (result.stdout ?? "").trim();
|
|
129
136
|
}
|
|
130
137
|
catch (error) {
|
|
131
138
|
const stderr = typeof error === "object" && error !== null && "stderr" in error ? String(error.stderr) : "";
|
|
132
139
|
const message = stderr.trim().length > 0 ? stderr.trim() : error instanceof Error ? error.message : String(error);
|
|
133
|
-
throw new PmCliError(`npm command failed:
|
|
140
|
+
throw new PmCliError(`npm command failed: ${npmCommand} ${args.join(" ")}\n${message}`, EXIT_CODE.GENERIC_FAILURE);
|
|
134
141
|
}
|
|
135
142
|
}
|
|
136
143
|
async function resolveLocalNpmPackagePath(spec) {
|
|
@@ -399,4 +406,4 @@ export async function areDirectoriesEquivalent(left, right) {
|
|
|
399
406
|
return leftRealPath === rightRealPath;
|
|
400
407
|
}
|
|
401
408
|
//# sourceMappingURL=install-sources.js.map
|
|
402
|
-
//# debugId=
|
|
409
|
+
//# debugId=eaa543ef-b644-5b26-9eb4-dcb40aaa8a53
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-sources.js","sources":["cli/commands/extension/install-sources.ts"],"sourceRoot":"/","sourcesContent":["import { execFile } from \"node:child_process\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { collectPackageExtensionDirectories } from \"../../../core/packages/manifest.js\";\nimport { pathExists } from \"../../../core/fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../../../core/fs/path-utils.js\";\nimport { EXIT_CODE } from \"../../../core/shared/constants.js\";\nimport { PmCliError } from \"../../../core/shared/errors.js\";\n\nconst execFileAsync = promisify(execFile);\n\ninterface LocalInstallSource {\n kind: \"local\";\n input: string;\n absolute_path: string;\n}\n\ninterface GithubInstallSource {\n kind: \"github\";\n input: string;\n owner: string;\n repo: string;\n repository: string;\n ref?: string;\n subpath?: string;\n}\n\ninterface NpmInstallSource {\n kind: \"npm\";\n input: string;\n spec: string;\n}\n\ntype InstallSource = LocalInstallSource | GithubInstallSource | NpmInstallSource;\n\ninterface ResolvedInstallSource {\n source: InstallSource;\n directory: string;\n resolved_subpath?: string;\n commit?: string;\n npm_package?: string;\n npm_version?: string;\n cleanup?: () => Promise<void>;\n}\n\nfunction parseGithubPathSpec(pathSpec: string, input: string, refOverride?: string): GithubInstallSource | null {\n const segments = pathSpec\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0);\n if (segments.length < 2) {\n return null;\n }\n const owner = segments[0];\n const repo = segments[1].replace(/\\.git$/i, \"\");\n if (owner.length === 0 || repo.length === 0) {\n return null;\n }\n const tail = segments.slice(2);\n let ref: string | undefined;\n let subpath: string | undefined;\n if (tail[0] === \"tree\" && tail.length >= 2) {\n ref = tail[1];\n subpath = tail.slice(2).join(\"/\");\n } else if (tail.length > 0) {\n subpath = tail.join(\"/\");\n }\n if (typeof refOverride === \"string\" && refOverride.trim().length > 0) {\n ref = refOverride.trim();\n }\n return {\n kind: \"github\",\n input,\n owner,\n repo,\n repository: `https://github.com/${owner}/${repo}.git`,\n ref,\n subpath: subpath && subpath.length > 0 ? subpath : undefined,\n };\n}\n\nexport function parseExtensionInstallSource(input: string, options: { forceGithub?: boolean; ref?: string } = {}): InstallSource {\n const normalizedInput = input.trim();\n if (normalizedInput.length === 0) {\n throw new PmCliError(\"Extension source is required for --install.\", EXIT_CODE.USAGE);\n }\n const refOverride = typeof options.ref === \"string\" && options.ref.trim().length > 0 ? options.ref.trim() : undefined;\n\n if (normalizedInput.startsWith(\"npm:\")) {\n const spec = normalizedInput.slice(\"npm:\".length).trim();\n if (spec.length === 0) {\n throw new PmCliError('npm package source must include a package spec after \"npm:\".', EXIT_CODE.USAGE);\n }\n if (options.forceGithub) {\n throw new PmCliError('Options \"--gh/--github\" cannot be combined with npm: package sources.', EXIT_CODE.USAGE);\n }\n if (refOverride) {\n throw new PmCliError('Option \"--ref\" cannot be combined with npm: package sources.', EXIT_CODE.USAGE);\n }\n return {\n kind: \"npm\",\n input: normalizedInput,\n spec,\n };\n }\n\n const maybeGithubByUrl = (() => {\n try {\n const parsed = new URL(normalizedInput);\n if (parsed.hostname !== \"github.com\") {\n return null;\n }\n const pathSpec = parsed.pathname.replace(/^\\/+/, \"\");\n return parseGithubPathSpec(pathSpec, normalizedInput, refOverride);\n } catch {\n return null;\n }\n })();\n if (maybeGithubByUrl) {\n return maybeGithubByUrl;\n }\n\n const strippedDomainInput = normalizedInput.startsWith(\"github.com/\") ? normalizedInput.slice(\"github.com/\".length) : null;\n if (strippedDomainInput) {\n const parsed = parseGithubPathSpec(strippedDomainInput, normalizedInput, refOverride);\n if (!parsed) {\n throw new PmCliError(`Invalid GitHub source \"${normalizedInput}\".`, EXIT_CODE.USAGE);\n }\n return parsed;\n }\n\n if (options.forceGithub) {\n const parsed = parseGithubPathSpec(normalizedInput, normalizedInput, refOverride);\n if (!parsed) {\n throw new PmCliError(`Invalid GitHub shorthand \"${normalizedInput}\".`, EXIT_CODE.USAGE);\n }\n return parsed;\n }\n\n if (/^https?:\\/\\//i.test(normalizedInput)) {\n throw new PmCliError(\n `Unsupported extension source URL \"${normalizedInput}\". Supported remote source host: github.com.`,\n EXIT_CODE.USAGE,\n );\n }\n\n return {\n kind: \"local\",\n input: normalizedInput,\n absolute_path: path.resolve(process.cwd(), normalizedInput),\n };\n}\n\nexport async function runGitCommand(args: string[]): Promise<string> {\n try {\n const result = await execFileAsync(\"git\", args, { encoding: \"utf8\" });\n return (result.stdout ?? \"\").trim();\n } catch (error: unknown) {\n const stderr = typeof error === \"object\" && error !== null && \"stderr\" in error ? String((error as { stderr: unknown }).stderr) : \"\";\n const message = stderr.trim().length > 0 ? stderr.trim() : error instanceof Error ? error.message : String(error);\n throw new PmCliError(`Git command failed: git ${args.join(\" \")}\\n${message}`, EXIT_CODE.GENERIC_FAILURE);\n }\n}\n\nasync function runNpmCommand(args: string[], cwd?: string): Promise<string> {\n try {\n const result = await execFileAsync(\"npm\", args, { cwd, encoding: \"utf8\" });\n return (result.stdout ?? \"\").trim();\n } catch (error: unknown) {\n const stderr = typeof error === \"object\" && error !== null && \"stderr\" in error ? String((error as { stderr: unknown }).stderr) : \"\";\n const message = stderr.trim().length > 0 ? stderr.trim() : error instanceof Error ? error.message : String(error);\n throw new PmCliError(`npm command failed: npm ${args.join(\" \")}\\n${message}`, EXIT_CODE.GENERIC_FAILURE);\n }\n}\n\nasync function resolveLocalNpmPackagePath(spec: string): Promise<string | null> {\n if (path.isAbsolute(spec) || spec.startsWith(\".\") || spec.startsWith(\"..\")) {\n const absolutePath = path.resolve(process.cwd(), spec);\n return (await pathExists(absolutePath)) ? absolutePath : null;\n }\n\n try {\n const parsed = new URL(spec);\n if (parsed.protocol === \"file:\") {\n const absolutePath = fileURLToPath(parsed);\n return (await pathExists(absolutePath)) ? absolutePath : null;\n }\n } catch {\n // Registry package specs are not URLs.\n }\n\n if (!/^[a-z][a-z0-9+.-]*:/i.test(spec)) {\n const absolutePath = path.resolve(process.cwd(), spec);\n if (await pathExists(absolutePath)) {\n return absolutePath;\n }\n }\n\n return null;\n}\n\nasync function resolveNpmPackSpec(spec: string): Promise<string> {\n const localPath = await resolveLocalNpmPackagePath(spec);\n if (localPath) {\n return pathToFileURL(localPath).href;\n }\n\n const localFileAlias = normalizeNpmLocalFileAliasSpec(spec);\n if (localFileAlias !== spec) {\n return localFileAlias;\n }\n\n if (/^[a-z][a-z0-9+.-]*:/i.test(spec)) {\n return spec;\n }\n\n return spec;\n}\n\nexport function normalizeNpmLocalFileAliasSpec(spec: string, cwd: string = process.cwd()): string {\n const marker = \"@file:\";\n const markerIndex = spec.lastIndexOf(marker);\n if (markerIndex <= 0) {\n return spec;\n }\n const packageName = spec.slice(0, markerIndex);\n const target = spec.slice(markerIndex + marker.length);\n if (packageName.trim().length === 0 || target.trim().length === 0 || target.startsWith(\"//\")) {\n return spec;\n }\n const absolutePath = path.isAbsolute(target) || path.win32.isAbsolute(target) ? target : path.resolve(cwd, target);\n return `${packageName}@${pathToFileURL(absolutePath).href}`;\n}\n\nfunction parsePackedNpmPackage(stdout: string, packDirectory: string): { tarball: string; package?: string; version?: string } {\n try {\n const parsed = JSON.parse(stdout) as Array<{ filename?: unknown; name?: unknown; version?: unknown }>;\n const first = Array.isArray(parsed) ? parsed[0] : undefined;\n if (first && typeof first.filename === \"string\" && first.filename.trim().length > 0) {\n return {\n tarball: path.resolve(packDirectory, first.filename),\n package: typeof first.name === \"string\" ? first.name : undefined,\n version: typeof first.version === \"string\" ? first.version : undefined,\n };\n }\n } catch {\n // Fall back to the last stdout line for older npm output.\n }\n const lastLine = stdout\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .at(-1);\n if (!lastLine) {\n throw new PmCliError(\"npm pack did not report a tarball filename.\", EXIT_CODE.GENERIC_FAILURE);\n }\n return {\n tarball: path.resolve(packDirectory, lastLine),\n };\n}\n\nasync function resolveNpmSourceDirectory(source: NpmInstallSource): Promise<{\n directory: string;\n package?: string;\n version?: string;\n cleanup: () => Promise<void>;\n}> {\n const localPackageRoot = await resolveLocalNpmPackagePath(source.spec);\n if (localPackageRoot) {\n const packageJsonPath = path.join(localPackageRoot, \"package.json\");\n const packageJson = (await pathExists(packageJsonPath))\n ? JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as { name?: unknown; version?: unknown }\n : {};\n return {\n directory: await resolvePackageExtensionDirectory(localPackageRoot, source.input),\n package: typeof packageJson.name === \"string\" ? packageJson.name : undefined,\n version: typeof packageJson.version === \"string\" ? packageJson.version : undefined,\n cleanup: async () => {},\n };\n }\n\n const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"pm-npm-package-source-\"));\n const packDirectory = path.join(tempRoot, \"pack\");\n const extractDirectory = path.join(tempRoot, \"extract\");\n await fs.mkdir(packDirectory, { recursive: true });\n await fs.mkdir(extractDirectory, { recursive: true });\n\n try {\n const packSpec = await resolveNpmPackSpec(source.spec);\n const packStdout = await runNpmCommand([\"pack\", packSpec, \"--json\", \"--pack-destination\", packDirectory]);\n const packed = parsePackedNpmPackage(packStdout, packDirectory);\n await execFileAsync(\"tar\", [\"-xzf\", packed.tarball, \"-C\", extractDirectory], { encoding: \"utf8\" });\n const packageRoot = path.join(extractDirectory, \"package\");\n await installNpmPackageRuntimeDependencies(packageRoot);\n const directory = await resolvePackageExtensionDirectory(packageRoot, source.input);\n return {\n directory,\n package: packed.package,\n version: packed.version,\n cleanup: async () => {\n await fs.rm(tempRoot, { recursive: true, force: true });\n },\n };\n } catch (error: unknown) {\n await fs.rm(tempRoot, { recursive: true, force: true });\n throw error;\n }\n}\n\nasync function installNpmPackageRuntimeDependencies(packageRoot: string): Promise<void> {\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n if (!(await pathExists(packageJsonPath))) {\n return;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as unknown;\n } catch {\n return;\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return;\n }\n\n const manifest = parsed as { dependencies?: unknown; optionalDependencies?: unknown; peerDependencies?: unknown };\n const dependencySpecs = runtimeDependencyInstallSpecs(manifest);\n if (dependencySpecs.length === 0) {\n return;\n }\n\n const runtimeOnlyManifest = { ...(parsed as Record<string, unknown>) };\n delete runtimeOnlyManifest.devDependencies;\n await fs.writeFile(packageJsonPath, `${JSON.stringify(runtimeOnlyManifest, null, 2)}\\n`, \"utf8\");\n await Promise.all([\n fs.rm(path.join(packageRoot, \"package-lock.json\"), { force: true }),\n fs.rm(path.join(packageRoot, \"npm-shrinkwrap.json\"), { force: true }),\n ]);\n\n await runNpmCommand(\n [\"install\", \"--ignore-scripts\", \"--no-audit\", \"--fund=false\", \"--package-lock=false\", \"--no-save\", ...dependencySpecs],\n packageRoot,\n );\n}\n\nfunction runtimeDependencyInstallSpecs(manifest: {\n dependencies?: unknown;\n optionalDependencies?: unknown;\n peerDependencies?: unknown;\n}): string[] {\n const specs = new Map<string, string>();\n for (const dependencyMap of [manifest.dependencies, manifest.optionalDependencies, manifest.peerDependencies]) {\n if (typeof dependencyMap !== \"object\" || dependencyMap === null) {\n continue;\n }\n for (const [name, version] of Object.entries(dependencyMap)) {\n if (typeof version !== \"string\" || version.trim().length === 0 || specs.has(name)) {\n continue;\n }\n specs.set(name, `${name}@${version.trim()}`);\n }\n }\n return [...specs.values()];\n}\n\nasync function resolvePackageExtensionDirectory(packageRoot: string, sourceLabel: string): Promise<string> {\n const discovered = await collectPackageExtensionDirectories(packageRoot);\n if (discovered.length === 1) {\n return discovered[0];\n }\n if (discovered.length > 1) {\n const choices = discovered\n .map((entry) => path.relative(packageRoot, entry).replaceAll(path.sep, \"/\"))\n .sort((left, right) => left.localeCompare(right));\n throw new PmCliError(\n `Package source \"${sourceLabel}\" contains multiple extension manifests. Provide an explicit extension path. Candidates: ${choices.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n throw new PmCliError(\n `Unable to locate a pm extension manifest in package source \"${sourceLabel}\". Package installs currently activate only extension resources, so add package.json pm.extensions or an extensions/ directory. Metadata-only resources like pm.docs/pm.examples are catalog metadata and do not activate commands.`,\n EXIT_CODE.USAGE,\n );\n}\n\nasync function resolveGithubSourceDirectory(cloneDirectory: string, source: GithubInstallSource): Promise<{ directory: string; resolved_subpath?: string }> {\n const candidatePaths: string[] = [];\n if (source.subpath) {\n candidatePaths.push(source.subpath);\n candidatePaths.push(path.posix.join(\".agents/pm/extensions\", source.subpath));\n candidatePaths.push(path.posix.join(\".custom/pm-extensions\", source.subpath));\n candidatePaths.push(path.posix.join(\".custom/pm-extension\", source.subpath));\n }\n\n for (const candidate of candidatePaths) {\n const absolute = path.resolve(cloneDirectory, candidate);\n if (!isPathWithinDirectory(cloneDirectory, absolute)) {\n // source.subpath is user-controlled; never resolve a manifest outside the\n // cloned repository (path-traversal guard).\n continue;\n }\n if (await pathExists(path.join(absolute, \"manifest.json\"))) {\n return { directory: absolute, resolved_subpath: candidate };\n }\n }\n\n if (await pathExists(path.join(cloneDirectory, \"manifest.json\"))) {\n return { directory: cloneDirectory, resolved_subpath: \".\" };\n }\n\n const discoveredDirectory = await resolvePackageExtensionDirectory(cloneDirectory, source.input);\n return {\n directory: discoveredDirectory,\n resolved_subpath: path.relative(cloneDirectory, discoveredDirectory).replaceAll(path.sep, \"/\"),\n };\n}\n\nexport async function resolveInstallSource(source: InstallSource): Promise<ResolvedInstallSource> {\n if (source.kind === \"local\") {\n let localStats;\n try {\n localStats = await fs.stat(source.absolute_path);\n } catch {\n throw new PmCliError(`Local extension source does not exist: \"${source.absolute_path}\".`, EXIT_CODE.NOT_FOUND);\n }\n if (!localStats.isDirectory()) {\n throw new PmCliError(`Local extension source must be a directory: \"${source.absolute_path}\".`, EXIT_CODE.USAGE);\n }\n const directory = await resolvePackageExtensionDirectory(source.absolute_path, source.input);\n return {\n source,\n directory,\n };\n }\n\n if (source.kind === \"npm\") {\n const resolved = await resolveNpmSourceDirectory(source);\n return {\n source,\n directory: resolved.directory,\n cleanup: resolved.cleanup,\n resolved_subpath: path.relative(path.dirname(resolved.directory), resolved.directory).replaceAll(path.sep, \"/\"),\n npm_package: resolved.package,\n npm_version: resolved.version,\n };\n }\n\n const cloneDirectory = await fs.mkdtemp(path.join(os.tmpdir(), \"pm-extension-source-\"));\n const cloneArgs = [\"clone\", \"--depth\", \"1\"];\n if (source.ref) {\n cloneArgs.push(\"--branch\", source.ref);\n }\n cloneArgs.push(source.repository, cloneDirectory);\n\n try {\n await runGitCommand(cloneArgs);\n const commit = await runGitCommand([\"-C\", cloneDirectory, \"rev-parse\", \"HEAD\"]);\n const resolved = await resolveGithubSourceDirectory(cloneDirectory, source);\n return {\n source,\n directory: resolved.directory,\n resolved_subpath: resolved.resolved_subpath,\n commit,\n cleanup: async () => {\n await fs.rm(cloneDirectory, { recursive: true, force: true });\n },\n };\n } catch (error: unknown) {\n await fs.rm(cloneDirectory, { recursive: true, force: true });\n throw error;\n }\n}\n\nexport async function areDirectoriesEquivalent(left: string, right: string): Promise<boolean> {\n if (!(await pathExists(left)) || !(await pathExists(right))) {\n return false;\n }\n const [leftRealPath, rightRealPath] = await Promise.all([fs.realpath(left), fs.realpath(right)]);\n return leftRealPath === rightRealPath;\n}\n"],"names":[],"mappings":"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","debugId":"cec0e555-a7a2-5a98-8783-c736e340200c"}
|
|
1
|
+
{"version":3,"file":"install-sources.js","sources":["cli/commands/extension/install-sources.ts"],"sourceRoot":"/","sourcesContent":["import { execFile } from \"node:child_process\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { promisify } from \"node:util\";\nimport { collectPackageExtensionDirectories } from \"../../../core/packages/manifest.js\";\nimport { pathExists } from \"../../../core/fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../../../core/fs/path-utils.js\";\nimport { EXIT_CODE } from \"../../../core/shared/constants.js\";\nimport { PmCliError } from \"../../../core/shared/errors.js\";\n\nconst execFileAsync = promisify(execFile);\n\ninterface LocalInstallSource {\n kind: \"local\";\n input: string;\n absolute_path: string;\n}\n\ninterface GithubInstallSource {\n kind: \"github\";\n input: string;\n owner: string;\n repo: string;\n repository: string;\n ref?: string;\n subpath?: string;\n}\n\ninterface NpmInstallSource {\n kind: \"npm\";\n input: string;\n spec: string;\n}\n\ntype InstallSource = LocalInstallSource | GithubInstallSource | NpmInstallSource;\n\ninterface ResolvedInstallSource {\n source: InstallSource;\n directory: string;\n resolved_subpath?: string;\n commit?: string;\n npm_package?: string;\n npm_version?: string;\n cleanup?: () => Promise<void>;\n}\n\nfunction parseGithubPathSpec(pathSpec: string, input: string, refOverride?: string): GithubInstallSource | null {\n const segments = pathSpec\n .split(\"/\")\n .map((segment) => segment.trim())\n .filter((segment) => segment.length > 0);\n if (segments.length < 2) {\n return null;\n }\n const owner = segments[0];\n const repo = segments[1].replace(/\\.git$/i, \"\");\n if (owner.length === 0 || repo.length === 0) {\n return null;\n }\n const tail = segments.slice(2);\n let ref: string | undefined;\n let subpath: string | undefined;\n if (tail[0] === \"tree\" && tail.length >= 2) {\n ref = tail[1];\n subpath = tail.slice(2).join(\"/\");\n } else if (tail.length > 0) {\n subpath = tail.join(\"/\");\n }\n if (typeof refOverride === \"string\" && refOverride.trim().length > 0) {\n ref = refOverride.trim();\n }\n return {\n kind: \"github\",\n input,\n owner,\n repo,\n repository: `https://github.com/${owner}/${repo}.git`,\n ref,\n subpath: subpath && subpath.length > 0 ? subpath : undefined,\n };\n}\n\nexport function parseExtensionInstallSource(input: string, options: { forceGithub?: boolean; ref?: string } = {}): InstallSource {\n const normalizedInput = input.trim();\n if (normalizedInput.length === 0) {\n throw new PmCliError(\"Extension source is required for --install.\", EXIT_CODE.USAGE);\n }\n const refOverride = typeof options.ref === \"string\" && options.ref.trim().length > 0 ? options.ref.trim() : undefined;\n\n if (normalizedInput.startsWith(\"npm:\")) {\n const spec = normalizedInput.slice(\"npm:\".length).trim();\n if (spec.length === 0) {\n throw new PmCliError('npm package source must include a package spec after \"npm:\".', EXIT_CODE.USAGE);\n }\n if (options.forceGithub) {\n throw new PmCliError('Options \"--gh/--github\" cannot be combined with npm: package sources.', EXIT_CODE.USAGE);\n }\n if (refOverride) {\n throw new PmCliError('Option \"--ref\" cannot be combined with npm: package sources.', EXIT_CODE.USAGE);\n }\n return {\n kind: \"npm\",\n input: normalizedInput,\n spec,\n };\n }\n\n const maybeGithubByUrl = (() => {\n try {\n const parsed = new URL(normalizedInput);\n if (parsed.hostname !== \"github.com\") {\n return null;\n }\n const pathSpec = parsed.pathname.replace(/^\\/+/, \"\");\n return parseGithubPathSpec(pathSpec, normalizedInput, refOverride);\n } catch {\n return null;\n }\n })();\n if (maybeGithubByUrl) {\n return maybeGithubByUrl;\n }\n\n const strippedDomainInput = normalizedInput.startsWith(\"github.com/\") ? normalizedInput.slice(\"github.com/\".length) : null;\n if (strippedDomainInput) {\n const parsed = parseGithubPathSpec(strippedDomainInput, normalizedInput, refOverride);\n if (!parsed) {\n throw new PmCliError(`Invalid GitHub source \"${normalizedInput}\".`, EXIT_CODE.USAGE);\n }\n return parsed;\n }\n\n if (options.forceGithub) {\n const parsed = parseGithubPathSpec(normalizedInput, normalizedInput, refOverride);\n if (!parsed) {\n throw new PmCliError(`Invalid GitHub shorthand \"${normalizedInput}\".`, EXIT_CODE.USAGE);\n }\n return parsed;\n }\n\n if (/^https?:\\/\\//i.test(normalizedInput)) {\n throw new PmCliError(\n `Unsupported extension source URL \"${normalizedInput}\". Supported remote source host: github.com.`,\n EXIT_CODE.USAGE,\n );\n }\n\n return {\n kind: \"local\",\n input: normalizedInput,\n absolute_path: path.resolve(process.cwd(), normalizedInput),\n };\n}\n\nexport async function runGitCommand(args: string[]): Promise<string> {\n try {\n const result = await execFileAsync(\"git\", args, { encoding: \"utf8\" });\n return (result.stdout ?? \"\").trim();\n } catch (error: unknown) {\n const stderr = typeof error === \"object\" && error !== null && \"stderr\" in error ? String((error as { stderr: unknown }).stderr) : \"\";\n const message = stderr.trim().length > 0 ? stderr.trim() : error instanceof Error ? error.message : String(error);\n throw new PmCliError(`Git command failed: git ${args.join(\" \")}\\n${message}`, EXIT_CODE.GENERIC_FAILURE);\n }\n}\n\nexport function resolveNpmCommandName(platform: NodeJS.Platform = process.platform): \"npm\" | \"npm.cmd\" {\n return platform === \"win32\" ? \"npm.cmd\" : \"npm\";\n}\n\nexport function shouldRunNpmCommandInShell(platform: NodeJS.Platform = process.platform): boolean {\n return platform === \"win32\";\n}\n\nasync function runNpmCommand(args: string[], cwd?: string): Promise<string> {\n const npmCommand = resolveNpmCommandName();\n try {\n const result = await execFileAsync(npmCommand, args, { cwd, encoding: \"utf8\", shell: shouldRunNpmCommandInShell() });\n return (result.stdout ?? \"\").trim();\n } catch (error: unknown) {\n const stderr = typeof error === \"object\" && error !== null && \"stderr\" in error ? String((error as { stderr: unknown }).stderr) : \"\";\n const message = stderr.trim().length > 0 ? stderr.trim() : error instanceof Error ? error.message : String(error);\n throw new PmCliError(`npm command failed: ${npmCommand} ${args.join(\" \")}\\n${message}`, EXIT_CODE.GENERIC_FAILURE);\n }\n}\n\nasync function resolveLocalNpmPackagePath(spec: string): Promise<string | null> {\n if (path.isAbsolute(spec) || spec.startsWith(\".\") || spec.startsWith(\"..\")) {\n const absolutePath = path.resolve(process.cwd(), spec);\n return (await pathExists(absolutePath)) ? absolutePath : null;\n }\n\n try {\n const parsed = new URL(spec);\n if (parsed.protocol === \"file:\") {\n const absolutePath = fileURLToPath(parsed);\n return (await pathExists(absolutePath)) ? absolutePath : null;\n }\n } catch {\n // Registry package specs are not URLs.\n }\n\n if (!/^[a-z][a-z0-9+.-]*:/i.test(spec)) {\n const absolutePath = path.resolve(process.cwd(), spec);\n if (await pathExists(absolutePath)) {\n return absolutePath;\n }\n }\n\n return null;\n}\n\nasync function resolveNpmPackSpec(spec: string): Promise<string> {\n const localPath = await resolveLocalNpmPackagePath(spec);\n if (localPath) {\n return pathToFileURL(localPath).href;\n }\n\n const localFileAlias = normalizeNpmLocalFileAliasSpec(spec);\n if (localFileAlias !== spec) {\n return localFileAlias;\n }\n\n if (/^[a-z][a-z0-9+.-]*:/i.test(spec)) {\n return spec;\n }\n\n return spec;\n}\n\nexport function normalizeNpmLocalFileAliasSpec(spec: string, cwd: string = process.cwd()): string {\n const marker = \"@file:\";\n const markerIndex = spec.lastIndexOf(marker);\n if (markerIndex <= 0) {\n return spec;\n }\n const packageName = spec.slice(0, markerIndex);\n const target = spec.slice(markerIndex + marker.length);\n if (packageName.trim().length === 0 || target.trim().length === 0 || target.startsWith(\"//\")) {\n return spec;\n }\n const absolutePath = path.isAbsolute(target) || path.win32.isAbsolute(target) ? target : path.resolve(cwd, target);\n return `${packageName}@${pathToFileURL(absolutePath).href}`;\n}\n\nfunction parsePackedNpmPackage(stdout: string, packDirectory: string): { tarball: string; package?: string; version?: string } {\n try {\n const parsed = JSON.parse(stdout) as Array<{ filename?: unknown; name?: unknown; version?: unknown }>;\n const first = Array.isArray(parsed) ? parsed[0] : undefined;\n if (first && typeof first.filename === \"string\" && first.filename.trim().length > 0) {\n return {\n tarball: path.resolve(packDirectory, first.filename),\n package: typeof first.name === \"string\" ? first.name : undefined,\n version: typeof first.version === \"string\" ? first.version : undefined,\n };\n }\n } catch {\n // Fall back to the last stdout line for older npm output.\n }\n const lastLine = stdout\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .at(-1);\n if (!lastLine) {\n throw new PmCliError(\"npm pack did not report a tarball filename.\", EXIT_CODE.GENERIC_FAILURE);\n }\n return {\n tarball: path.resolve(packDirectory, lastLine),\n };\n}\n\nasync function resolveNpmSourceDirectory(source: NpmInstallSource): Promise<{\n directory: string;\n package?: string;\n version?: string;\n cleanup: () => Promise<void>;\n}> {\n const localPackageRoot = await resolveLocalNpmPackagePath(source.spec);\n if (localPackageRoot) {\n const packageJsonPath = path.join(localPackageRoot, \"package.json\");\n const packageJson = (await pathExists(packageJsonPath))\n ? JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as { name?: unknown; version?: unknown }\n : {};\n return {\n directory: await resolvePackageExtensionDirectory(localPackageRoot, source.input),\n package: typeof packageJson.name === \"string\" ? packageJson.name : undefined,\n version: typeof packageJson.version === \"string\" ? packageJson.version : undefined,\n cleanup: async () => {},\n };\n }\n\n const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), \"pm-npm-package-source-\"));\n const packDirectory = path.join(tempRoot, \"pack\");\n const extractDirectory = path.join(tempRoot, \"extract\");\n await fs.mkdir(packDirectory, { recursive: true });\n await fs.mkdir(extractDirectory, { recursive: true });\n\n try {\n const packSpec = await resolveNpmPackSpec(source.spec);\n const packStdout = await runNpmCommand([\"pack\", packSpec, \"--json\", \"--pack-destination\", packDirectory]);\n const packed = parsePackedNpmPackage(packStdout, packDirectory);\n await execFileAsync(\"tar\", [\"-xzf\", packed.tarball, \"-C\", extractDirectory], { encoding: \"utf8\" });\n const packageRoot = path.join(extractDirectory, \"package\");\n await installNpmPackageRuntimeDependencies(packageRoot);\n const directory = await resolvePackageExtensionDirectory(packageRoot, source.input);\n return {\n directory,\n package: packed.package,\n version: packed.version,\n cleanup: async () => {\n await fs.rm(tempRoot, { recursive: true, force: true });\n },\n };\n } catch (error: unknown) {\n await fs.rm(tempRoot, { recursive: true, force: true });\n throw error;\n }\n}\n\nasync function installNpmPackageRuntimeDependencies(packageRoot: string): Promise<void> {\n const packageJsonPath = path.join(packageRoot, \"package.json\");\n if (!(await pathExists(packageJsonPath))) {\n return;\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(await fs.readFile(packageJsonPath, \"utf8\")) as unknown;\n } catch {\n return;\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return;\n }\n\n const manifest = parsed as { dependencies?: unknown; optionalDependencies?: unknown; peerDependencies?: unknown };\n const dependencySpecs = runtimeDependencyInstallSpecs(manifest);\n if (dependencySpecs.length === 0) {\n return;\n }\n\n const runtimeOnlyManifest = { ...(parsed as Record<string, unknown>) };\n delete runtimeOnlyManifest.devDependencies;\n await fs.writeFile(packageJsonPath, `${JSON.stringify(runtimeOnlyManifest, null, 2)}\\n`, \"utf8\");\n await Promise.all([\n fs.rm(path.join(packageRoot, \"package-lock.json\"), { force: true }),\n fs.rm(path.join(packageRoot, \"npm-shrinkwrap.json\"), { force: true }),\n ]);\n\n await runNpmCommand(\n [\"install\", \"--ignore-scripts\", \"--no-audit\", \"--fund=false\", \"--package-lock=false\", \"--no-save\", ...dependencySpecs],\n packageRoot,\n );\n}\n\nfunction runtimeDependencyInstallSpecs(manifest: {\n dependencies?: unknown;\n optionalDependencies?: unknown;\n peerDependencies?: unknown;\n}): string[] {\n const specs = new Map<string, string>();\n for (const dependencyMap of [manifest.dependencies, manifest.optionalDependencies, manifest.peerDependencies]) {\n if (typeof dependencyMap !== \"object\" || dependencyMap === null) {\n continue;\n }\n for (const [name, version] of Object.entries(dependencyMap)) {\n if (typeof version !== \"string\" || version.trim().length === 0 || specs.has(name)) {\n continue;\n }\n specs.set(name, `${name}@${version.trim()}`);\n }\n }\n return [...specs.values()];\n}\n\nasync function resolvePackageExtensionDirectory(packageRoot: string, sourceLabel: string): Promise<string> {\n const discovered = await collectPackageExtensionDirectories(packageRoot);\n if (discovered.length === 1) {\n return discovered[0];\n }\n if (discovered.length > 1) {\n const choices = discovered\n .map((entry) => path.relative(packageRoot, entry).replaceAll(path.sep, \"/\"))\n .sort((left, right) => left.localeCompare(right));\n throw new PmCliError(\n `Package source \"${sourceLabel}\" contains multiple extension manifests. Provide an explicit extension path. Candidates: ${choices.join(\", \")}`,\n EXIT_CODE.USAGE,\n );\n }\n throw new PmCliError(\n `Unable to locate a pm extension manifest in package source \"${sourceLabel}\". Package installs currently activate only extension resources, so add package.json pm.extensions or an extensions/ directory. Metadata-only resources like pm.docs/pm.examples are catalog metadata and do not activate commands.`,\n EXIT_CODE.USAGE,\n );\n}\n\nasync function resolveGithubSourceDirectory(cloneDirectory: string, source: GithubInstallSource): Promise<{ directory: string; resolved_subpath?: string }> {\n const candidatePaths: string[] = [];\n if (source.subpath) {\n candidatePaths.push(source.subpath);\n candidatePaths.push(path.posix.join(\".agents/pm/extensions\", source.subpath));\n candidatePaths.push(path.posix.join(\".custom/pm-extensions\", source.subpath));\n candidatePaths.push(path.posix.join(\".custom/pm-extension\", source.subpath));\n }\n\n for (const candidate of candidatePaths) {\n const absolute = path.resolve(cloneDirectory, candidate);\n if (!isPathWithinDirectory(cloneDirectory, absolute)) {\n // source.subpath is user-controlled; never resolve a manifest outside the\n // cloned repository (path-traversal guard).\n continue;\n }\n if (await pathExists(path.join(absolute, \"manifest.json\"))) {\n return { directory: absolute, resolved_subpath: candidate };\n }\n }\n\n if (await pathExists(path.join(cloneDirectory, \"manifest.json\"))) {\n return { directory: cloneDirectory, resolved_subpath: \".\" };\n }\n\n const discoveredDirectory = await resolvePackageExtensionDirectory(cloneDirectory, source.input);\n return {\n directory: discoveredDirectory,\n resolved_subpath: path.relative(cloneDirectory, discoveredDirectory).replaceAll(path.sep, \"/\"),\n };\n}\n\nexport async function resolveInstallSource(source: InstallSource): Promise<ResolvedInstallSource> {\n if (source.kind === \"local\") {\n let localStats;\n try {\n localStats = await fs.stat(source.absolute_path);\n } catch {\n throw new PmCliError(`Local extension source does not exist: \"${source.absolute_path}\".`, EXIT_CODE.NOT_FOUND);\n }\n if (!localStats.isDirectory()) {\n throw new PmCliError(`Local extension source must be a directory: \"${source.absolute_path}\".`, EXIT_CODE.USAGE);\n }\n const directory = await resolvePackageExtensionDirectory(source.absolute_path, source.input);\n return {\n source,\n directory,\n };\n }\n\n if (source.kind === \"npm\") {\n const resolved = await resolveNpmSourceDirectory(source);\n return {\n source,\n directory: resolved.directory,\n cleanup: resolved.cleanup,\n resolved_subpath: path.relative(path.dirname(resolved.directory), resolved.directory).replaceAll(path.sep, \"/\"),\n npm_package: resolved.package,\n npm_version: resolved.version,\n };\n }\n\n const cloneDirectory = await fs.mkdtemp(path.join(os.tmpdir(), \"pm-extension-source-\"));\n const cloneArgs = [\"clone\", \"--depth\", \"1\"];\n if (source.ref) {\n cloneArgs.push(\"--branch\", source.ref);\n }\n cloneArgs.push(source.repository, cloneDirectory);\n\n try {\n await runGitCommand(cloneArgs);\n const commit = await runGitCommand([\"-C\", cloneDirectory, \"rev-parse\", \"HEAD\"]);\n const resolved = await resolveGithubSourceDirectory(cloneDirectory, source);\n return {\n source,\n directory: resolved.directory,\n resolved_subpath: resolved.resolved_subpath,\n commit,\n cleanup: async () => {\n await fs.rm(cloneDirectory, { recursive: true, force: true });\n },\n };\n } catch (error: unknown) {\n await fs.rm(cloneDirectory, { recursive: true, force: true });\n throw error;\n }\n}\n\nexport async function areDirectoriesEquivalent(left: string, right: string): Promise<boolean> {\n if (!(await pathExists(left)) || !(await pathExists(right))) {\n return false;\n }\n const [leftRealPath, rightRealPath] = await Promise.all([fs.realpath(left), fs.realpath(right)]);\n return leftRealPath === rightRealPath;\n}\n"],"names":[],"mappings":"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","debugId":"eaa543ef-b644-5b26-9eb4-dcb40aaa8a53"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="959892a2-f028-5ede-93f4-1b2e5b075b61")}catch(e){}}();
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { toNonEmptyStringOrUndefined } from "../../core/shared/primitives.js";
|
|
@@ -12,6 +12,7 @@ import { acquireLock } from "../../core/lock/lock.js";
|
|
|
12
12
|
import { buildSearchCorpus, buildSemanticCorpusInput } from "../../core/search/corpus.js";
|
|
13
13
|
import { executeEmbeddingBatchesWithRetry } from "../../core/search/embedding-batches.js";
|
|
14
14
|
import { readVectorizationStatusLedger, writeVectorizationStatusLedger } from "../../core/search/cache.js";
|
|
15
|
+
import { REINDEX_LOCK_ID } from "../../core/search/background-refresh.js";
|
|
15
16
|
import { resolveEmbeddingProviders } from "../../core/search/providers.js";
|
|
16
17
|
import { resolveSettingsWithSemanticRuntimeDefaults } from "../../core/search/semantic-defaults.js";
|
|
17
18
|
import { executeVectorUpsert, resolveVectorStores } from "../../core/search/vector-stores.js";
|
|
@@ -23,7 +24,6 @@ import { getSettingsPath, resolvePmRoot } from "../../core/store/paths.js";
|
|
|
23
24
|
import { readSettings } from "../../core/store/settings.js";
|
|
24
25
|
const MANIFEST_PATH = "index/manifest.json";
|
|
25
26
|
const EMBEDDINGS_PATH = "search/embeddings.jsonl";
|
|
26
|
-
const REINDEX_LOCK_ID = "reindex";
|
|
27
27
|
function shouldEmitReindexProgress(options) {
|
|
28
28
|
return options.progress === true || process.stderr.isTTY === true;
|
|
29
29
|
}
|
|
@@ -422,4 +422,4 @@ export async function runReindex(options, global) {
|
|
|
422
422
|
}
|
|
423
423
|
}
|
|
424
424
|
//# sourceMappingURL=reindex.js.map
|
|
425
|
-
//# debugId=
|
|
425
|
+
//# debugId=959892a2-f028-5ede-93f4-1b2e5b075b61
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reindex.js","sources":["cli/commands/reindex.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { getActiveExtensionRegistrations, runActiveOnIndexHooks, runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport {\n resolveRegisteredSearchProvider,\n resolveRegisteredVectorStoreAdapter,\n} from \"../../core/extensions/runtime-registrations.js\";\nimport { pathExists, writeFileAtomic } from \"../../core/fs/fs-utils.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseItemDocument } from \"../../core/item/item-format.js\";\nimport { acquireLock } from \"../../core/lock/lock.js\";\nimport { buildSearchCorpus, buildSemanticCorpusInput } from \"../../core/search/corpus.js\";\nimport { executeEmbeddingBatchesWithRetry } from \"../../core/search/embedding-batches.js\";\nimport { readVectorizationStatusLedger, writeVectorizationStatusLedger } from \"../../core/search/cache.js\";\nimport { resolveEmbeddingProviders } from \"../../core/search/providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"../../core/search/semantic-defaults.js\";\nimport { executeVectorUpsert, resolveVectorStores } from \"../../core/search/vector-stores.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { listAllDocumentCandidatesCached, type CachedDocumentCandidate } from \"../../core/store/front-matter-cache.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemDocument, PmSettings } from \"../../types/index.js\";\n\nconst MANIFEST_PATH = \"index/manifest.json\";\nconst EMBEDDINGS_PATH = \"search/embeddings.jsonl\";\nconst REINDEX_LOCK_ID = \"reindex\";\n\nexport interface ReindexOptions {\n mode?: string;\n progress?: boolean;\n}\n\nexport interface ReindexResult {\n ok: boolean;\n mode: \"keyword\" | \"semantic\" | \"hybrid\";\n total_items: number;\n semantic: {\n enabled: boolean;\n stale_items: number;\n unchanged_items: number;\n embedded_items: number;\n vector_upserted: number;\n batches_completed: number;\n };\n artifacts: {\n manifest: string;\n embeddings: string;\n };\n warnings: string[];\n generated_at: string;\n}\n\nfunction shouldEmitReindexProgress(options: ReindexOptions): boolean {\n return options.progress === true || process.stderr.isTTY === true;\n}\n\nfunction emitReindexProgress(enabled: boolean, message: string): void {\n if (!enabled) {\n return;\n }\n try {\n process.stderr.write(`[pm reindex] ${message}\\n`);\n } catch {\n // Ignore transient stderr write failures.\n }\n}\n\nfunction parseMode(raw: string | undefined): \"keyword\" | \"semantic\" | \"hybrid\" {\n const normalized = (raw ?? \"keyword\").trim().toLowerCase();\n if (normalized === \"keyword\") {\n return \"keyword\";\n }\n if (normalized === \"semantic\" || normalized === \"hybrid\") {\n return normalized;\n }\n throw new PmCliError(\"Reindex mode must be one of keyword|semantic|hybrid\", EXIT_CODE.USAGE);\n}\n\nasync function loadDocumentCandidates(\n pmRoot: string,\n itemFormat: \"toon\" | \"json_markdown\",\n typeToFolder: Record<string, string>,\n schema: PmSettings[\"schema\"],\n): Promise<{ candidates: CachedDocumentCandidate[]; warnings: string[] }> {\n const warnings: string[] = [];\n const candidates = await listAllDocumentCandidatesCached(pmRoot, itemFormat, typeToFolder, warnings, schema);\n return {\n candidates,\n warnings,\n };\n}\n\nasync function hydrateDocuments(\n pmRoot: string,\n candidates: CachedDocumentCandidate[],\n schema: PmSettings[\"schema\"],\n warnings: string[],\n itemIds?: Set<string>,\n): Promise<ItemDocument[]> {\n const hydrated: ItemDocument[] = [];\n for (const candidate of candidates) {\n if (itemIds && !itemIds.has(candidate.metadata.id)) {\n continue;\n }\n if (typeof candidate.body === \"string\") {\n hydrated.push({\n metadata: candidate.metadata,\n body: candidate.body,\n });\n continue;\n }\n try {\n const raw = await fs.readFile(candidate.item_path, \"utf8\");\n const parsed = parseItemDocument(raw, {\n format: candidate.item_format,\n schema,\n onWarning: (warning) => warnings.push(warning),\n });\n hydrated.push({\n metadata: candidate.metadata,\n body: parsed.body,\n });\n } catch {\n warnings.push(`item_list_item_read_failed:${path.relative(pmRoot, candidate.item_path)}`);\n hydrated.push({\n metadata: candidate.metadata,\n body: \"\",\n });\n }\n }\n return hydrated;\n}\n\nfunction buildKeywordRecord(document: ItemDocument, mode: \"keyword\" | \"semantic\" | \"hybrid\"): Record<string, unknown> {\n const item = document.metadata;\n return {\n id: item.id,\n mode,\n updated_at: item.updated_at,\n corpus: buildSearchCorpus(document),\n };\n}\n\ntype ExtensionEmbedBatch = (context: {\n inputs: string[];\n settings: PmSettings;\n model: string;\n}) => Promise<number[][]> | number[][];\n\ntype ExtensionEmbedOne = (context: {\n input: string;\n settings: PmSettings;\n model: string;\n}) => Promise<number[]> | number[];\n\ntype ExtensionVectorUpsert = (context: {\n points: Array<{\n id: string;\n vector: number[];\n payload: Record<string, unknown>;\n }>;\n settings: PmSettings;\n}) => Promise<void> | void;\n\nconst toOptionalNonEmptyString = toNonEmptyStringOrUndefined;\n\nfunction resolveExtensionSearchEmbedding(\n settings: PmSettings,\n): { name: string; embedBatch?: ExtensionEmbedBatch; embed?: ExtensionEmbedOne } | null {\n const registrations = getActiveExtensionRegistrations();\n const providerName = toOptionalNonEmptyString(settings.search?.provider);\n const registration = resolveRegisteredSearchProvider(registrations, providerName);\n if (!registration) {\n return null;\n }\n const runtimeDefinition = registration.runtime_definition ?? registration.definition;\n const name =\n toOptionalNonEmptyString((runtimeDefinition as { name?: unknown }).name) ??\n toOptionalNonEmptyString((registration.definition as { name?: unknown }).name) ??\n providerName;\n if (!name) {\n return null;\n }\n const embedBatch = (runtimeDefinition as { embedBatch?: unknown; embed_batch?: unknown }).embedBatch;\n const embedBatchSnake = (runtimeDefinition as { embedBatch?: unknown; embed_batch?: unknown }).embed_batch;\n const embed = (runtimeDefinition as { embed?: unknown }).embed;\n const resolvedEmbedBatch =\n typeof embedBatch === \"function\"\n ? (embedBatch as ExtensionEmbedBatch)\n : typeof embedBatchSnake === \"function\"\n ? (embedBatchSnake as ExtensionEmbedBatch)\n : undefined;\n const resolvedEmbed = typeof embed === \"function\" ? (embed as ExtensionEmbedOne) : undefined;\n if (!resolvedEmbedBatch && !resolvedEmbed) {\n return null;\n }\n return {\n name,\n embedBatch: resolvedEmbedBatch,\n embed: resolvedEmbed,\n };\n}\n\nfunction resolveExtensionVectorUpsert(settings: PmSettings): { name: string; upsert: ExtensionVectorUpsert } | null {\n const registrations = getActiveExtensionRegistrations();\n const adapterName = toOptionalNonEmptyString(settings.vector_store?.adapter);\n const registration = resolveRegisteredVectorStoreAdapter(registrations, adapterName);\n if (!registration) {\n return null;\n }\n const runtimeDefinition = registration.runtime_definition ?? registration.definition;\n const name =\n toOptionalNonEmptyString((runtimeDefinition as { name?: unknown }).name) ??\n toOptionalNonEmptyString((registration.definition as { name?: unknown }).name) ??\n adapterName;\n const upsert = (runtimeDefinition as { upsert?: unknown }).upsert;\n if (!name || typeof upsert !== \"function\") {\n return null;\n }\n return {\n name,\n upsert: upsert as ExtensionVectorUpsert,\n };\n}\n\nfunction assertVector(value: unknown, context: string): number[] {\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"number\" || !Number.isFinite(entry))) {\n throw new PmCliError(`Invalid vector returned by ${context}`, EXIT_CODE.GENERIC_FAILURE);\n }\n return value;\n}\n\nasync function executeExtensionEmbedding(\n extensionEmbedding: { name: string; embedBatch?: ExtensionEmbedBatch; embed?: ExtensionEmbedOne },\n settings: PmSettings,\n corpusInputs: string[],\n): Promise<number[][]> {\n const model = settings.search?.embedding_model?.trim() || \"text-embedding-3-small\";\n if (extensionEmbedding.embedBatch) {\n const vectors = await Promise.resolve(\n extensionEmbedding.embedBatch({\n inputs: corpusInputs,\n settings,\n model,\n }),\n );\n if (!Array.isArray(vectors)) {\n throw new PmCliError(\n `Extension search provider \"${extensionEmbedding.name}\" embedBatch must return an array of vectors`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n return vectors.map((vector, index) =>\n assertVector(vector, `extension search provider \"${extensionEmbedding.name}\" embedBatch output at index ${index}`),\n );\n }\n if (!extensionEmbedding.embed) {\n throw new PmCliError(\n `Extension search provider \"${extensionEmbedding.name}\" does not implement embed/embedBatch`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const vectors: number[][] = [];\n for (const [index, input] of corpusInputs.entries()) {\n const vector = await Promise.resolve(\n extensionEmbedding.embed({\n input,\n settings,\n model,\n }),\n );\n vectors.push(assertVector(vector, `extension search provider \"${extensionEmbedding.name}\" embed output at index ${index}`));\n }\n return vectors;\n}\n\nexport async function runReindex(options: ReindexOptions, global: GlobalOptions): Promise<ReindexResult> {\n const requestedMode = parseMode(options.mode);\n const progressEnabled = shouldEmitReindexProgress(options);\n emitReindexProgress(progressEnabled, `start mode=${requestedMode}`);\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const settings = resolveSettingsWithSemanticRuntimeDefaults(await readSettings(pmRoot)).settings;\n let releaseReindexLock: (() => Promise<void>) | null = null;\n try {\n releaseReindexLock = await acquireLock(\n pmRoot,\n REINDEX_LOCK_ID,\n settings.locks.ttl_seconds,\n process.env.PM_AUTHOR ?? \"pm-reindex\",\n false,\n settings.governance.force_required_for_stale_lock,\n );\n } catch (error: unknown) {\n if (error instanceof PmCliError && error.exitCode === EXIT_CODE.CONFLICT) {\n throw new PmCliError(\n \"Another pm reindex run is already active for this project. Wait for it to finish before starting a new keyword, semantic, or hybrid reindex.\",\n EXIT_CODE.CONFLICT,\n {\n code: \"reindex_already_running\",\n type: \"urn:pm-cli:error:reindex_already_running\",\n why: \"Semantic reindex can be expensive and duplicate runs compete for the same local embedding model and vector store.\",\n nextSteps: [\n \"Check active pm reindex processes before starting another reindex.\",\n \"Rerun with --progress when you need non-interactive visibility.\",\n ],\n },\n );\n }\n throw error;\n }\n\n try {\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const extensionEmbedding = resolveExtensionSearchEmbedding(settings);\n const extensionVectorUpsert = resolveExtensionVectorUpsert(settings);\n let activeEmbeddingProvider: ReturnType<typeof resolveEmbeddingProviders>[\"active\"] = null;\n let activeVectorStore: ReturnType<typeof resolveVectorStores>[\"active\"] = null;\n if (requestedMode !== \"keyword\") {\n const providerResolution = resolveEmbeddingProviders(settings);\n if (!providerResolution.active && !extensionEmbedding) {\n throw new PmCliError(\n `Reindex mode '${requestedMode}' requires a configured embedding provider in settings.providers.openai/settings.providers.ollama or an extension provider selected by settings.search.provider`,\n EXIT_CODE.USAGE,\n );\n }\n const vectorResolution = resolveVectorStores(settings);\n if (!vectorResolution.active && !extensionVectorUpsert) {\n throw new PmCliError(\n `Reindex mode '${requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,\n EXIT_CODE.USAGE,\n );\n }\n activeEmbeddingProvider = providerResolution.active;\n activeVectorStore = vectorResolution.active;\n }\n const mode = requestedMode;\n emitReindexProgress(progressEnabled, \"loading item corpus\");\n const loadedCandidates = await loadDocumentCandidates(pmRoot, settings.item_format, typeRegistry.type_to_folder, settings.schema);\n const reindexWarnings = [...loadedCandidates.warnings];\n const documentCandidates = loadedCandidates.candidates;\n const metadataDocuments: ItemDocument[] = documentCandidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: typeof candidate.body === \"string\" ? candidate.body : \"\",\n }));\n emitReindexProgress(progressEnabled, `loaded_items=${metadataDocuments.length}`);\n const generatedAt = nowIso();\n\n const manifest = {\n version: 1,\n mode,\n generated_at: generatedAt,\n total_items: metadataDocuments.length,\n items: metadataDocuments.map((document) => ({\n id: document.metadata.id,\n type: document.metadata.type,\n status: document.metadata.status,\n priority: document.metadata.priority,\n updated_at: document.metadata.updated_at,\n })),\n };\n\n const manifestPath = path.join(pmRoot, MANIFEST_PATH);\n const embeddingsPath = path.join(pmRoot, EMBEDDINGS_PATH);\n\n let documentsForKeywordArtifacts =\n mode === \"keyword\"\n ? await hydrateDocuments(pmRoot, documentCandidates, settings.schema, reindexWarnings)\n : metadataDocuments;\n const semanticWarnings: string[] = [];\n const vectorizationLedgerEntries: Record<string, string> = {};\n const semanticSummary = {\n enabled: mode !== \"keyword\",\n stale_items: 0,\n unchanged_items: 0,\n embedded_items: 0,\n vector_upserted: 0,\n batches_completed: 0,\n };\n if (mode !== \"keyword\" && metadataDocuments.length > 0) {\n const ledger = await readVectorizationStatusLedger(pmRoot);\n semanticWarnings.push(...ledger.warnings);\n const staleIds = new Set(\n metadataDocuments\n .filter((document) => ledger.entries[document.metadata.id] !== document.metadata.updated_at)\n .map((document) => document.metadata.id),\n );\n const staleDocuments = staleIds.size > 0\n ? await hydrateDocuments(pmRoot, documentCandidates, settings.schema, reindexWarnings, staleIds)\n : [];\n const freshDocuments = metadataDocuments.length - staleDocuments.length;\n semanticSummary.stale_items = staleDocuments.length;\n semanticSummary.unchanged_items = freshDocuments;\n for (const document of metadataDocuments) {\n vectorizationLedgerEntries[document.metadata.id] = document.metadata.updated_at;\n }\n if (staleDocuments.length === 0) {\n emitReindexProgress(progressEnabled, `embedding_skipped unchanged_items=${freshDocuments}`);\n semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${freshDocuments}`);\n } else {\n emitReindexProgress(progressEnabled, `embedding_start items=${staleDocuments.length} unchanged_items=${freshDocuments}`);\n const semanticProviderName = activeEmbeddingProvider?.name ?? extensionEmbedding?.name;\n const corpusInputs = staleDocuments.map((document) => buildSemanticCorpusInput(document, { providerName: semanticProviderName }));\n let vectors: number[][] = [];\n if (extensionEmbedding) {\n try {\n vectors = await executeExtensionEmbedding(extensionEmbedding, settings, corpusInputs);\n } catch (error: unknown) {\n if (!activeEmbeddingProvider) {\n throw new PmCliError(\n `Extension search provider \"${extensionEmbedding.name}\" failed to generate embeddings: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n semanticWarnings.push(\n `Extension search provider \"${extensionEmbedding.name}\" failed; falling back to built-in provider (${error instanceof Error ? error.message : String(error)})`,\n );\n }\n }\n if (vectors.length === 0) {\n if (!activeEmbeddingProvider) {\n throw new PmCliError(\n `No embedding executor available for reindex mode '${requestedMode}'`,\n EXIT_CODE.USAGE,\n );\n }\n const embeddingResult = await executeEmbeddingBatchesWithRetry(activeEmbeddingProvider, settings, corpusInputs, {\n onProgress: (event) => {\n if (event.phase === \"complete\") {\n semanticSummary.batches_completed = event.batch_index;\n }\n emitReindexProgress(\n progressEnabled,\n `embedding_batch_${event.phase} batch=${event.batch_index}/${event.batch_total} size=${event.batch_size} completed_inputs=${event.completed_inputs}/${event.total_inputs}`,\n );\n },\n });\n semanticWarnings.push(...embeddingResult.warnings);\n vectors = embeddingResult.vectors;\n }\n emitReindexProgress(progressEnabled, `embedding_complete vectors=${vectors.length}`);\n if (vectors.length !== staleDocuments.length) {\n throw new PmCliError(\n `Embedding output size mismatch (expected ${staleDocuments.length}, received ${vectors.length})`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const points = staleDocuments.map((document, index) => ({\n id: document.metadata.id,\n vector: assertVector(vectors[index], `reindex embeddings output at index ${index}`),\n payload: {\n id: document.metadata.id,\n type: document.metadata.type,\n status: document.metadata.status,\n priority: document.metadata.priority,\n updated_at: document.metadata.updated_at,\n },\n }));\n semanticSummary.embedded_items = vectors.length;\n if (extensionVectorUpsert) {\n try {\n emitReindexProgress(progressEnabled, `vector_upsert_start adapter=${extensionVectorUpsert.name} points=${points.length}`);\n await Promise.resolve(\n extensionVectorUpsert.upsert({\n points,\n settings,\n }),\n );\n semanticSummary.vector_upserted = points.length;\n emitReindexProgress(progressEnabled, `vector_upsert_complete adapter=${extensionVectorUpsert.name}`);\n } catch (error: unknown) {\n if (!activeVectorStore) {\n throw new PmCliError(\n `Extension vector adapter \"${extensionVectorUpsert.name}\" failed to upsert vectors: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n semanticWarnings.push(\n `Extension vector adapter \"${extensionVectorUpsert.name}\" failed; falling back to built-in vector store (${error instanceof Error ? error.message : String(error)})`,\n );\n emitReindexProgress(progressEnabled, \"vector_upsert_fallback built_in_store\");\n await executeVectorUpsert(activeVectorStore, points);\n semanticSummary.vector_upserted = points.length;\n emitReindexProgress(progressEnabled, `vector_upsert_complete adapter=${activeVectorStore.name}`);\n }\n } else if (activeVectorStore) {\n emitReindexProgress(progressEnabled, `vector_upsert_start adapter=${activeVectorStore.name} points=${points.length}`);\n await executeVectorUpsert(activeVectorStore, points);\n semanticSummary.vector_upserted = points.length;\n emitReindexProgress(progressEnabled, `vector_upsert_complete adapter=${activeVectorStore.name}`);\n } else {\n throw new PmCliError(\n `No vector upsert executor available for reindex mode '${requestedMode}'`,\n EXIT_CODE.USAGE,\n );\n }\n if (freshDocuments > 0) {\n semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${freshDocuments}`);\n }\n const staleDocumentsById = new Map(staleDocuments.map((document) => [document.metadata.id, document]));\n documentsForKeywordArtifacts = metadataDocuments.map(\n (document) => staleDocumentsById.get(document.metadata.id) ?? document,\n );\n }\n }\n const embeddingsLines = documentsForKeywordArtifacts.map((document) => JSON.stringify(buildKeywordRecord(document, mode))).join(\"\\n\");\n emitReindexProgress(progressEnabled, \"writing keyword artifacts\");\n await writeFileAtomic(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n await writeFileAtomic(embeddingsPath, `${embeddingsLines}\\n`);\n const vectorizationWarnings: string[] = [];\n if (mode !== \"keyword\") {\n try {\n emitReindexProgress(progressEnabled, \"writing vectorization status ledger\");\n await writeVectorizationStatusLedger(pmRoot, vectorizationLedgerEntries);\n } catch (error: unknown) {\n vectorizationWarnings.push(\n `search_vectorization_status_ledger_write_failed:${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: manifestPath,\n scope: \"project\",\n op: \"reindex:manifest\",\n })),\n ...(await runActiveOnWriteHooks({\n path: embeddingsPath,\n scope: \"project\",\n op: \"reindex:embeddings\",\n })),\n ...(await runActiveOnIndexHooks({\n mode,\n total_items: metadataDocuments.length,\n })),\n ];\n emitReindexProgress(progressEnabled, \"done\");\n\n return {\n ok: true,\n mode,\n total_items: metadataDocuments.length,\n semantic: semanticSummary,\n artifacts: {\n manifest: MANIFEST_PATH,\n embeddings: EMBEDDINGS_PATH,\n },\n warnings: [...reindexWarnings, ...semanticWarnings, ...vectorizationWarnings, ...hookWarnings],\n generated_at: generatedAt,\n };\n } finally {\n await releaseReindexLock?.();\n }\n}\n"],"names":[],"mappings":"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","debugId":"1e9c9703-7163-5383-9e69-53a9f1ca5e25"}
|
|
1
|
+
{"version":3,"file":"reindex.js","sources":["cli/commands/reindex.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { getActiveExtensionRegistrations, runActiveOnIndexHooks, runActiveOnWriteHooks } from \"../../core/extensions/index.js\";\nimport {\n resolveRegisteredSearchProvider,\n resolveRegisteredVectorStoreAdapter,\n} from \"../../core/extensions/runtime-registrations.js\";\nimport { pathExists, writeFileAtomic } from \"../../core/fs/fs-utils.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseItemDocument } from \"../../core/item/item-format.js\";\nimport { acquireLock } from \"../../core/lock/lock.js\";\nimport { buildSearchCorpus, buildSemanticCorpusInput } from \"../../core/search/corpus.js\";\nimport { executeEmbeddingBatchesWithRetry } from \"../../core/search/embedding-batches.js\";\nimport { readVectorizationStatusLedger, writeVectorizationStatusLedger } from \"../../core/search/cache.js\";\nimport { REINDEX_LOCK_ID } from \"../../core/search/background-refresh.js\";\nimport { resolveEmbeddingProviders } from \"../../core/search/providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"../../core/search/semantic-defaults.js\";\nimport { executeVectorUpsert, resolveVectorStores } from \"../../core/search/vector-stores.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { listAllDocumentCandidatesCached, type CachedDocumentCandidate } from \"../../core/store/front-matter-cache.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemDocument, PmSettings } from \"../../types/index.js\";\n\nconst MANIFEST_PATH = \"index/manifest.json\";\nconst EMBEDDINGS_PATH = \"search/embeddings.jsonl\";\n\nexport interface ReindexOptions {\n mode?: string;\n progress?: boolean;\n}\n\nexport interface ReindexResult {\n ok: boolean;\n mode: \"keyword\" | \"semantic\" | \"hybrid\";\n total_items: number;\n semantic: {\n enabled: boolean;\n stale_items: number;\n unchanged_items: number;\n embedded_items: number;\n vector_upserted: number;\n batches_completed: number;\n };\n artifacts: {\n manifest: string;\n embeddings: string;\n };\n warnings: string[];\n generated_at: string;\n}\n\nfunction shouldEmitReindexProgress(options: ReindexOptions): boolean {\n return options.progress === true || process.stderr.isTTY === true;\n}\n\nfunction emitReindexProgress(enabled: boolean, message: string): void {\n if (!enabled) {\n return;\n }\n try {\n process.stderr.write(`[pm reindex] ${message}\\n`);\n } catch {\n // Ignore transient stderr write failures.\n }\n}\n\nfunction parseMode(raw: string | undefined): \"keyword\" | \"semantic\" | \"hybrid\" {\n const normalized = (raw ?? \"keyword\").trim().toLowerCase();\n if (normalized === \"keyword\") {\n return \"keyword\";\n }\n if (normalized === \"semantic\" || normalized === \"hybrid\") {\n return normalized;\n }\n throw new PmCliError(\"Reindex mode must be one of keyword|semantic|hybrid\", EXIT_CODE.USAGE);\n}\n\nasync function loadDocumentCandidates(\n pmRoot: string,\n itemFormat: \"toon\" | \"json_markdown\",\n typeToFolder: Record<string, string>,\n schema: PmSettings[\"schema\"],\n): Promise<{ candidates: CachedDocumentCandidate[]; warnings: string[] }> {\n const warnings: string[] = [];\n const candidates = await listAllDocumentCandidatesCached(pmRoot, itemFormat, typeToFolder, warnings, schema);\n return {\n candidates,\n warnings,\n };\n}\n\nasync function hydrateDocuments(\n pmRoot: string,\n candidates: CachedDocumentCandidate[],\n schema: PmSettings[\"schema\"],\n warnings: string[],\n itemIds?: Set<string>,\n): Promise<ItemDocument[]> {\n const hydrated: ItemDocument[] = [];\n for (const candidate of candidates) {\n if (itemIds && !itemIds.has(candidate.metadata.id)) {\n continue;\n }\n if (typeof candidate.body === \"string\") {\n hydrated.push({\n metadata: candidate.metadata,\n body: candidate.body,\n });\n continue;\n }\n try {\n const raw = await fs.readFile(candidate.item_path, \"utf8\");\n const parsed = parseItemDocument(raw, {\n format: candidate.item_format,\n schema,\n onWarning: (warning) => warnings.push(warning),\n });\n hydrated.push({\n metadata: candidate.metadata,\n body: parsed.body,\n });\n } catch {\n warnings.push(`item_list_item_read_failed:${path.relative(pmRoot, candidate.item_path)}`);\n hydrated.push({\n metadata: candidate.metadata,\n body: \"\",\n });\n }\n }\n return hydrated;\n}\n\nfunction buildKeywordRecord(document: ItemDocument, mode: \"keyword\" | \"semantic\" | \"hybrid\"): Record<string, unknown> {\n const item = document.metadata;\n return {\n id: item.id,\n mode,\n updated_at: item.updated_at,\n corpus: buildSearchCorpus(document),\n };\n}\n\ntype ExtensionEmbedBatch = (context: {\n inputs: string[];\n settings: PmSettings;\n model: string;\n}) => Promise<number[][]> | number[][];\n\ntype ExtensionEmbedOne = (context: {\n input: string;\n settings: PmSettings;\n model: string;\n}) => Promise<number[]> | number[];\n\ntype ExtensionVectorUpsert = (context: {\n points: Array<{\n id: string;\n vector: number[];\n payload: Record<string, unknown>;\n }>;\n settings: PmSettings;\n}) => Promise<void> | void;\n\nconst toOptionalNonEmptyString = toNonEmptyStringOrUndefined;\n\nfunction resolveExtensionSearchEmbedding(\n settings: PmSettings,\n): { name: string; embedBatch?: ExtensionEmbedBatch; embed?: ExtensionEmbedOne } | null {\n const registrations = getActiveExtensionRegistrations();\n const providerName = toOptionalNonEmptyString(settings.search?.provider);\n const registration = resolveRegisteredSearchProvider(registrations, providerName);\n if (!registration) {\n return null;\n }\n const runtimeDefinition = registration.runtime_definition ?? registration.definition;\n const name =\n toOptionalNonEmptyString((runtimeDefinition as { name?: unknown }).name) ??\n toOptionalNonEmptyString((registration.definition as { name?: unknown }).name) ??\n providerName;\n if (!name) {\n return null;\n }\n const embedBatch = (runtimeDefinition as { embedBatch?: unknown; embed_batch?: unknown }).embedBatch;\n const embedBatchSnake = (runtimeDefinition as { embedBatch?: unknown; embed_batch?: unknown }).embed_batch;\n const embed = (runtimeDefinition as { embed?: unknown }).embed;\n const resolvedEmbedBatch =\n typeof embedBatch === \"function\"\n ? (embedBatch as ExtensionEmbedBatch)\n : typeof embedBatchSnake === \"function\"\n ? (embedBatchSnake as ExtensionEmbedBatch)\n : undefined;\n const resolvedEmbed = typeof embed === \"function\" ? (embed as ExtensionEmbedOne) : undefined;\n if (!resolvedEmbedBatch && !resolvedEmbed) {\n return null;\n }\n return {\n name,\n embedBatch: resolvedEmbedBatch,\n embed: resolvedEmbed,\n };\n}\n\nfunction resolveExtensionVectorUpsert(settings: PmSettings): { name: string; upsert: ExtensionVectorUpsert } | null {\n const registrations = getActiveExtensionRegistrations();\n const adapterName = toOptionalNonEmptyString(settings.vector_store?.adapter);\n const registration = resolveRegisteredVectorStoreAdapter(registrations, adapterName);\n if (!registration) {\n return null;\n }\n const runtimeDefinition = registration.runtime_definition ?? registration.definition;\n const name =\n toOptionalNonEmptyString((runtimeDefinition as { name?: unknown }).name) ??\n toOptionalNonEmptyString((registration.definition as { name?: unknown }).name) ??\n adapterName;\n const upsert = (runtimeDefinition as { upsert?: unknown }).upsert;\n if (!name || typeof upsert !== \"function\") {\n return null;\n }\n return {\n name,\n upsert: upsert as ExtensionVectorUpsert,\n };\n}\n\nfunction assertVector(value: unknown, context: string): number[] {\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"number\" || !Number.isFinite(entry))) {\n throw new PmCliError(`Invalid vector returned by ${context}`, EXIT_CODE.GENERIC_FAILURE);\n }\n return value;\n}\n\nasync function executeExtensionEmbedding(\n extensionEmbedding: { name: string; embedBatch?: ExtensionEmbedBatch; embed?: ExtensionEmbedOne },\n settings: PmSettings,\n corpusInputs: string[],\n): Promise<number[][]> {\n const model = settings.search?.embedding_model?.trim() || \"text-embedding-3-small\";\n if (extensionEmbedding.embedBatch) {\n const vectors = await Promise.resolve(\n extensionEmbedding.embedBatch({\n inputs: corpusInputs,\n settings,\n model,\n }),\n );\n if (!Array.isArray(vectors)) {\n throw new PmCliError(\n `Extension search provider \"${extensionEmbedding.name}\" embedBatch must return an array of vectors`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n return vectors.map((vector, index) =>\n assertVector(vector, `extension search provider \"${extensionEmbedding.name}\" embedBatch output at index ${index}`),\n );\n }\n if (!extensionEmbedding.embed) {\n throw new PmCliError(\n `Extension search provider \"${extensionEmbedding.name}\" does not implement embed/embedBatch`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const vectors: number[][] = [];\n for (const [index, input] of corpusInputs.entries()) {\n const vector = await Promise.resolve(\n extensionEmbedding.embed({\n input,\n settings,\n model,\n }),\n );\n vectors.push(assertVector(vector, `extension search provider \"${extensionEmbedding.name}\" embed output at index ${index}`));\n }\n return vectors;\n}\n\nexport async function runReindex(options: ReindexOptions, global: GlobalOptions): Promise<ReindexResult> {\n const requestedMode = parseMode(options.mode);\n const progressEnabled = shouldEmitReindexProgress(options);\n emitReindexProgress(progressEnabled, `start mode=${requestedMode}`);\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const settings = resolveSettingsWithSemanticRuntimeDefaults(await readSettings(pmRoot)).settings;\n let releaseReindexLock: (() => Promise<void>) | null = null;\n try {\n releaseReindexLock = await acquireLock(\n pmRoot,\n REINDEX_LOCK_ID,\n settings.locks.ttl_seconds,\n process.env.PM_AUTHOR ?? \"pm-reindex\",\n false,\n settings.governance.force_required_for_stale_lock,\n );\n } catch (error: unknown) {\n if (error instanceof PmCliError && error.exitCode === EXIT_CODE.CONFLICT) {\n throw new PmCliError(\n \"Another pm reindex run is already active for this project. Wait for it to finish before starting a new keyword, semantic, or hybrid reindex.\",\n EXIT_CODE.CONFLICT,\n {\n code: \"reindex_already_running\",\n type: \"urn:pm-cli:error:reindex_already_running\",\n why: \"Semantic reindex can be expensive and duplicate runs compete for the same local embedding model and vector store.\",\n nextSteps: [\n \"Check active pm reindex processes before starting another reindex.\",\n \"Rerun with --progress when you need non-interactive visibility.\",\n ],\n },\n );\n }\n throw error;\n }\n\n try {\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const extensionEmbedding = resolveExtensionSearchEmbedding(settings);\n const extensionVectorUpsert = resolveExtensionVectorUpsert(settings);\n let activeEmbeddingProvider: ReturnType<typeof resolveEmbeddingProviders>[\"active\"] = null;\n let activeVectorStore: ReturnType<typeof resolveVectorStores>[\"active\"] = null;\n if (requestedMode !== \"keyword\") {\n const providerResolution = resolveEmbeddingProviders(settings);\n if (!providerResolution.active && !extensionEmbedding) {\n throw new PmCliError(\n `Reindex mode '${requestedMode}' requires a configured embedding provider in settings.providers.openai/settings.providers.ollama or an extension provider selected by settings.search.provider`,\n EXIT_CODE.USAGE,\n );\n }\n const vectorResolution = resolveVectorStores(settings);\n if (!vectorResolution.active && !extensionVectorUpsert) {\n throw new PmCliError(\n `Reindex mode '${requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,\n EXIT_CODE.USAGE,\n );\n }\n activeEmbeddingProvider = providerResolution.active;\n activeVectorStore = vectorResolution.active;\n }\n const mode = requestedMode;\n emitReindexProgress(progressEnabled, \"loading item corpus\");\n const loadedCandidates = await loadDocumentCandidates(pmRoot, settings.item_format, typeRegistry.type_to_folder, settings.schema);\n const reindexWarnings = [...loadedCandidates.warnings];\n const documentCandidates = loadedCandidates.candidates;\n const metadataDocuments: ItemDocument[] = documentCandidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: typeof candidate.body === \"string\" ? candidate.body : \"\",\n }));\n emitReindexProgress(progressEnabled, `loaded_items=${metadataDocuments.length}`);\n const generatedAt = nowIso();\n\n const manifest = {\n version: 1,\n mode,\n generated_at: generatedAt,\n total_items: metadataDocuments.length,\n items: metadataDocuments.map((document) => ({\n id: document.metadata.id,\n type: document.metadata.type,\n status: document.metadata.status,\n priority: document.metadata.priority,\n updated_at: document.metadata.updated_at,\n })),\n };\n\n const manifestPath = path.join(pmRoot, MANIFEST_PATH);\n const embeddingsPath = path.join(pmRoot, EMBEDDINGS_PATH);\n\n let documentsForKeywordArtifacts =\n mode === \"keyword\"\n ? await hydrateDocuments(pmRoot, documentCandidates, settings.schema, reindexWarnings)\n : metadataDocuments;\n const semanticWarnings: string[] = [];\n const vectorizationLedgerEntries: Record<string, string> = {};\n const semanticSummary = {\n enabled: mode !== \"keyword\",\n stale_items: 0,\n unchanged_items: 0,\n embedded_items: 0,\n vector_upserted: 0,\n batches_completed: 0,\n };\n if (mode !== \"keyword\" && metadataDocuments.length > 0) {\n const ledger = await readVectorizationStatusLedger(pmRoot);\n semanticWarnings.push(...ledger.warnings);\n const staleIds = new Set(\n metadataDocuments\n .filter((document) => ledger.entries[document.metadata.id] !== document.metadata.updated_at)\n .map((document) => document.metadata.id),\n );\n const staleDocuments = staleIds.size > 0\n ? await hydrateDocuments(pmRoot, documentCandidates, settings.schema, reindexWarnings, staleIds)\n : [];\n const freshDocuments = metadataDocuments.length - staleDocuments.length;\n semanticSummary.stale_items = staleDocuments.length;\n semanticSummary.unchanged_items = freshDocuments;\n for (const document of metadataDocuments) {\n vectorizationLedgerEntries[document.metadata.id] = document.metadata.updated_at;\n }\n if (staleDocuments.length === 0) {\n emitReindexProgress(progressEnabled, `embedding_skipped unchanged_items=${freshDocuments}`);\n semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${freshDocuments}`);\n } else {\n emitReindexProgress(progressEnabled, `embedding_start items=${staleDocuments.length} unchanged_items=${freshDocuments}`);\n const semanticProviderName = activeEmbeddingProvider?.name ?? extensionEmbedding?.name;\n const corpusInputs = staleDocuments.map((document) => buildSemanticCorpusInput(document, { providerName: semanticProviderName }));\n let vectors: number[][] = [];\n if (extensionEmbedding) {\n try {\n vectors = await executeExtensionEmbedding(extensionEmbedding, settings, corpusInputs);\n } catch (error: unknown) {\n if (!activeEmbeddingProvider) {\n throw new PmCliError(\n `Extension search provider \"${extensionEmbedding.name}\" failed to generate embeddings: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n semanticWarnings.push(\n `Extension search provider \"${extensionEmbedding.name}\" failed; falling back to built-in provider (${error instanceof Error ? error.message : String(error)})`,\n );\n }\n }\n if (vectors.length === 0) {\n if (!activeEmbeddingProvider) {\n throw new PmCliError(\n `No embedding executor available for reindex mode '${requestedMode}'`,\n EXIT_CODE.USAGE,\n );\n }\n const embeddingResult = await executeEmbeddingBatchesWithRetry(activeEmbeddingProvider, settings, corpusInputs, {\n onProgress: (event) => {\n if (event.phase === \"complete\") {\n semanticSummary.batches_completed = event.batch_index;\n }\n emitReindexProgress(\n progressEnabled,\n `embedding_batch_${event.phase} batch=${event.batch_index}/${event.batch_total} size=${event.batch_size} completed_inputs=${event.completed_inputs}/${event.total_inputs}`,\n );\n },\n });\n semanticWarnings.push(...embeddingResult.warnings);\n vectors = embeddingResult.vectors;\n }\n emitReindexProgress(progressEnabled, `embedding_complete vectors=${vectors.length}`);\n if (vectors.length !== staleDocuments.length) {\n throw new PmCliError(\n `Embedding output size mismatch (expected ${staleDocuments.length}, received ${vectors.length})`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const points = staleDocuments.map((document, index) => ({\n id: document.metadata.id,\n vector: assertVector(vectors[index], `reindex embeddings output at index ${index}`),\n payload: {\n id: document.metadata.id,\n type: document.metadata.type,\n status: document.metadata.status,\n priority: document.metadata.priority,\n updated_at: document.metadata.updated_at,\n },\n }));\n semanticSummary.embedded_items = vectors.length;\n if (extensionVectorUpsert) {\n try {\n emitReindexProgress(progressEnabled, `vector_upsert_start adapter=${extensionVectorUpsert.name} points=${points.length}`);\n await Promise.resolve(\n extensionVectorUpsert.upsert({\n points,\n settings,\n }),\n );\n semanticSummary.vector_upserted = points.length;\n emitReindexProgress(progressEnabled, `vector_upsert_complete adapter=${extensionVectorUpsert.name}`);\n } catch (error: unknown) {\n if (!activeVectorStore) {\n throw new PmCliError(\n `Extension vector adapter \"${extensionVectorUpsert.name}\" failed to upsert vectors: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n semanticWarnings.push(\n `Extension vector adapter \"${extensionVectorUpsert.name}\" failed; falling back to built-in vector store (${error instanceof Error ? error.message : String(error)})`,\n );\n emitReindexProgress(progressEnabled, \"vector_upsert_fallback built_in_store\");\n await executeVectorUpsert(activeVectorStore, points);\n semanticSummary.vector_upserted = points.length;\n emitReindexProgress(progressEnabled, `vector_upsert_complete adapter=${activeVectorStore.name}`);\n }\n } else if (activeVectorStore) {\n emitReindexProgress(progressEnabled, `vector_upsert_start adapter=${activeVectorStore.name} points=${points.length}`);\n await executeVectorUpsert(activeVectorStore, points);\n semanticSummary.vector_upserted = points.length;\n emitReindexProgress(progressEnabled, `vector_upsert_complete adapter=${activeVectorStore.name}`);\n } else {\n throw new PmCliError(\n `No vector upsert executor available for reindex mode '${requestedMode}'`,\n EXIT_CODE.USAGE,\n );\n }\n if (freshDocuments > 0) {\n semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${freshDocuments}`);\n }\n const staleDocumentsById = new Map(staleDocuments.map((document) => [document.metadata.id, document]));\n documentsForKeywordArtifacts = metadataDocuments.map(\n (document) => staleDocumentsById.get(document.metadata.id) ?? document,\n );\n }\n }\n const embeddingsLines = documentsForKeywordArtifacts.map((document) => JSON.stringify(buildKeywordRecord(document, mode))).join(\"\\n\");\n emitReindexProgress(progressEnabled, \"writing keyword artifacts\");\n await writeFileAtomic(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n await writeFileAtomic(embeddingsPath, `${embeddingsLines}\\n`);\n const vectorizationWarnings: string[] = [];\n if (mode !== \"keyword\") {\n try {\n emitReindexProgress(progressEnabled, \"writing vectorization status ledger\");\n await writeVectorizationStatusLedger(pmRoot, vectorizationLedgerEntries);\n } catch (error: unknown) {\n vectorizationWarnings.push(\n `search_vectorization_status_ledger_write_failed:${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: manifestPath,\n scope: \"project\",\n op: \"reindex:manifest\",\n })),\n ...(await runActiveOnWriteHooks({\n path: embeddingsPath,\n scope: \"project\",\n op: \"reindex:embeddings\",\n })),\n ...(await runActiveOnIndexHooks({\n mode,\n total_items: metadataDocuments.length,\n })),\n ];\n emitReindexProgress(progressEnabled, \"done\");\n\n return {\n ok: true,\n mode,\n total_items: metadataDocuments.length,\n semantic: semanticSummary,\n artifacts: {\n manifest: MANIFEST_PATH,\n embeddings: EMBEDDINGS_PATH,\n },\n warnings: [...reindexWarnings, ...semanticWarnings, ...vectorizationWarnings, ...hookWarnings],\n generated_at: generatedAt,\n };\n } finally {\n await releaseReindexLock?.();\n }\n}\n"],"names":[],"mappings":"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","debugId":"959892a2-f028-5ede-93f4-1b2e5b075b61"}
|
|
@@ -37,6 +37,23 @@ export interface SearchResult {
|
|
|
37
37
|
now: string;
|
|
38
38
|
warnings?: string[];
|
|
39
39
|
}
|
|
40
|
+
type ImplicitSemanticFallbackReason = "timeout" | "connection" | "error";
|
|
41
|
+
/**
|
|
42
|
+
* Aggregate the `code` strings found along an error's `cause` chain.
|
|
43
|
+
*
|
|
44
|
+
* undici (Node's fetch) collapses connection errors to the generic message
|
|
45
|
+
* "fetch failed" and stashes the real syscall code (e.g. `ECONNREFUSED`) on
|
|
46
|
+
* `error.cause.code`. Walking the chain (bounded depth) lets the fallback
|
|
47
|
+
* classifier label a downed/unreachable Ollama backend as "connection" rather
|
|
48
|
+
* than the catch-all "error".
|
|
49
|
+
*/
|
|
50
|
+
export declare function collectErrorCauseCodes(error: unknown): string;
|
|
51
|
+
/**
|
|
52
|
+
* Classify why an implicit/explicit semantic search degraded to keyword mode,
|
|
53
|
+
* inspecting both the error message and the {@link collectErrorCauseCodes} chain
|
|
54
|
+
* so undici's generic "fetch failed" is recognised as a connection failure.
|
|
55
|
+
*/
|
|
56
|
+
export declare function classifyImplicitSemanticFallbackReason(error: unknown): ImplicitSemanticFallbackReason;
|
|
40
57
|
export interface SearchTuning {
|
|
41
58
|
title_exact_bonus: number;
|
|
42
59
|
title_weight: number;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="22bb189d-1bb3-5ce3-8b8a-d64dcb0b6c02")}catch(e){}}();
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import { toNonEmptyStringOrUndefined } from "../../core/shared/primitives.js";
|
|
@@ -100,16 +100,46 @@ const LONG_QUERY_TITLE_EXACT_BONUS = 120;
|
|
|
100
100
|
const LONG_QUERY_PHRASE_MULTIPLIER = 6;
|
|
101
101
|
const IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS = 8_000;
|
|
102
102
|
const IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS = 8_000;
|
|
103
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Aggregate the `code` strings found along an error's `cause` chain.
|
|
105
|
+
*
|
|
106
|
+
* undici (Node's fetch) collapses connection errors to the generic message
|
|
107
|
+
* "fetch failed" and stashes the real syscall code (e.g. `ECONNREFUSED`) on
|
|
108
|
+
* `error.cause.code`. Walking the chain (bounded depth) lets the fallback
|
|
109
|
+
* classifier label a downed/unreachable Ollama backend as "connection" rather
|
|
110
|
+
* than the catch-all "error".
|
|
111
|
+
*/
|
|
112
|
+
export function collectErrorCauseCodes(error) {
|
|
113
|
+
const codes = [];
|
|
114
|
+
let current = error;
|
|
115
|
+
for (let depth = 0; depth < 5 && current && typeof current === "object"; depth += 1) {
|
|
116
|
+
const code = current.code;
|
|
117
|
+
if (typeof code === "string") {
|
|
118
|
+
codes.push(code.toLowerCase());
|
|
119
|
+
}
|
|
120
|
+
current = current.cause;
|
|
121
|
+
}
|
|
122
|
+
return codes.join(" ");
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Classify why an implicit/explicit semantic search degraded to keyword mode,
|
|
126
|
+
* inspecting both the error message and the {@link collectErrorCauseCodes} chain
|
|
127
|
+
* so undici's generic "fetch failed" is recognised as a connection failure.
|
|
128
|
+
*/
|
|
129
|
+
export function classifyImplicitSemanticFallbackReason(error) {
|
|
104
130
|
const message = (error instanceof Error ? error.message : String(error)).toLowerCase();
|
|
105
|
-
|
|
131
|
+
const causeCodes = collectErrorCauseCodes(error);
|
|
132
|
+
const haystack = `${message} ${causeCodes}`;
|
|
133
|
+
if (haystack.includes("timed out") || haystack.includes("timeout") || haystack.includes("etimedout")) {
|
|
106
134
|
return "timeout";
|
|
107
135
|
}
|
|
108
|
-
if (
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
136
|
+
if (haystack.includes("econnrefused") ||
|
|
137
|
+
haystack.includes("connection refused") ||
|
|
138
|
+
haystack.includes("connect ") ||
|
|
139
|
+
haystack.includes("enotfound") ||
|
|
140
|
+
haystack.includes("eai_again") ||
|
|
141
|
+
haystack.includes("econnreset") ||
|
|
142
|
+
haystack.includes("fetch failed")) {
|
|
113
143
|
return "connection";
|
|
114
144
|
}
|
|
115
145
|
return "error";
|
|
@@ -152,7 +182,7 @@ async function maybeEmitVectorIndexStaleWarning(pmRoot, filteredDocuments, warni
|
|
|
152
182
|
return;
|
|
153
183
|
}
|
|
154
184
|
warnings.push(`vector_index_stale:${staleIds.length}`);
|
|
155
|
-
process.stderr.write(`[pm] warning: ${staleIds.length} item${staleIds.length === 1 ? " is" : "s are"} new or modified since the last reindex and ${staleIds.length === 1 ? "is" : "are"} NOT in the semantic index yet — they will be missing from semantic/hybrid results until you run 'pm reindex --mode hybrid'. (
|
|
185
|
+
process.stderr.write(`[pm] warning: ${staleIds.length} item${staleIds.length === 1 ? " is" : "s are"} new or modified since the last reindex and ${staleIds.length === 1 ? "is" : "are"} NOT in the semantic index yet — they will be missing from semantic/hybrid results until you run 'pm reindex --mode hybrid'. (Write-time embedding is governed by search.mutation_refresh_policy; staleness means the embed was skipped, failed, or the backend was unreachable.)\n`);
|
|
156
186
|
}
|
|
157
187
|
catch {
|
|
158
188
|
// Best-effort: missing/unreadable ledger is not a query-blocking concern.
|
|
@@ -1092,4 +1122,4 @@ export async function runSearch(query, options, global) {
|
|
|
1092
1122
|
};
|
|
1093
1123
|
}
|
|
1094
1124
|
//# sourceMappingURL=search.js.map
|
|
1095
|
-
//# debugId=
|
|
1125
|
+
//# debugId=22bb189d-1bb3-5ce3-8b8a-d64dcb0b6c02
|