@cortexkit/aft-bridge 0.35.1 → 0.35.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,35 @@
1
+ /** Shape of the Rust mutation response fields this helper reads. */
2
+ export interface EditSummaryInput {
3
+ /** Files modified in a multi-file transaction (Rust `files_modified`). */
4
+ files_modified?: number;
5
+ /** Number of match replacements (find/replace, replaceAll). */
6
+ replacements?: number;
7
+ /** Number of edits applied in batch mode (Rust `edits_applied`). */
8
+ edits_applied?: number;
9
+ /** True when a new file was created (append/write create path). */
10
+ created?: boolean;
11
+ /** True when the post-write content is byte-identical to before. */
12
+ no_op?: boolean;
13
+ /** True when the write was reverted (e.g. generated invalid syntax). */
14
+ rolled_back?: boolean;
15
+ /** Whether the file was auto-formatted after the write. */
16
+ formatted?: boolean;
17
+ /** Diff counts. before/after content is intentionally ignored here. */
18
+ diff?: {
19
+ additions?: number;
20
+ deletions?: number;
21
+ };
22
+ }
23
+ /**
24
+ * Build the compact agent-facing summary line for a successful mutation.
25
+ *
26
+ * Returns just the headline sentence; callers append their own conditional
27
+ * notes (no-op, format-skip, LSP diagnostics, pending/exited servers) which
28
+ * already exist per-plugin and carry real signal.
29
+ *
30
+ * Honesty: when `rolled_back` is true the change did NOT land, so we never say
31
+ * "applied" — we say the file was left unchanged. This was previously buried
32
+ * inside a raw `"rolled_back":false` JSON field the agent had to parse.
33
+ */
34
+ export declare function formatEditSummary(data: EditSummaryInput): string;
35
+ //# sourceMappingURL=edit-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-summary.d.ts","sourceRoot":"","sources":["../src/edit-summary.ts"],"names":[],"mappings":"AAeA,oEAAoE;AACpE,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAqChE"}
@@ -0,0 +1,62 @@
1
+ // Shared, compact agent-facing summary for file-mutation tool results
2
+ // (edit / write / apply_patch transaction). Both the OpenCode and Pi plugins
3
+ // render the SAME agent-facing text from this helper so the two harnesses stay
4
+ // in parity.
5
+ //
6
+ // Design (see session decision): the agent already supplied the path and the
7
+ // content it wants, so we do NOT echo the file path, the before/after content,
8
+ // or the raw Rust JSON envelope back to the model. Doing so makes the payload
9
+ // scale with file size, not edit size. The rich data (diff body, backup id,
10
+ // status-bar counts, etc.) stays in the plugin's UI `metadata`/`details`; the
11
+ // status-bar line is injected separately by the bridge layer.
12
+ //
13
+ // The model only needs: did it apply, how much changed (cheap confirmation),
14
+ // and any signal it must act on (rollback, no-op, format-skip, LSP errors).
15
+ /**
16
+ * Build the compact agent-facing summary line for a successful mutation.
17
+ *
18
+ * Returns just the headline sentence; callers append their own conditional
19
+ * notes (no-op, format-skip, LSP diagnostics, pending/exited servers) which
20
+ * already exist per-plugin and carry real signal.
21
+ *
22
+ * Honesty: when `rolled_back` is true the change did NOT land, so we never say
23
+ * "applied" — we say the file was left unchanged. This was previously buried
24
+ * inside a raw `"rolled_back":false` JSON field the agent had to parse.
25
+ */
26
+ export function formatEditSummary(data) {
27
+ // Rollback is the one case where "applied" would be a lie. The write was
28
+ // reverted (typically because the result failed syntax validation), so the
29
+ // file is unchanged and the agent must retry differently.
30
+ if (data.rolled_back === true) {
31
+ return "Edit rolled back: the change produced invalid syntax, so the file was left unchanged.";
32
+ }
33
+ // Multi-file transaction (operations array): report file count, not per-file
34
+ // diffs (those are in the UI metadata).
35
+ if (typeof data.files_modified === "number") {
36
+ const n = data.files_modified;
37
+ return `Applied edits to ${n} file${n === 1 ? "" : "s"}.`;
38
+ }
39
+ const additions = data.diff?.additions ?? 0;
40
+ const deletions = data.diff?.deletions ?? 0;
41
+ const counts = `+${additions}/-${deletions}`;
42
+ // Append/write create path.
43
+ if (data.created === true) {
44
+ let s = `Created file (${counts}).`;
45
+ if (data.formatted)
46
+ s += " Auto-formatted.";
47
+ return s;
48
+ }
49
+ // Batch mode reports edits_applied; replaceAll reports replacements > 1.
50
+ let detail = counts;
51
+ if (typeof data.edits_applied === "number" && data.edits_applied > 1) {
52
+ detail = `${counts}, ${data.edits_applied} edits`;
53
+ }
54
+ else if (typeof data.replacements === "number" && data.replacements > 1) {
55
+ detail = `${counts}, ${data.replacements} replacements`;
56
+ }
57
+ let s = `Edited (${detail}).`;
58
+ if (data.formatted)
59
+ s += " Auto-formatted.";
60
+ return s;
61
+ }
62
+ //# sourceMappingURL=edit-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit-summary.js","sourceRoot":"","sources":["../src/edit-summary.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,6EAA6E;AAC7E,+EAA+E;AAC/E,aAAa;AACb,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,8DAA8D;AAC9D,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAsB5E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAsB;IACtD,yEAAyE;IACzE,2EAA2E;IAC3E,0DAA0D;IAC1D,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC9B,OAAO,uFAAuF,CAAC;IACjG,CAAC;IAED,6EAA6E;IAC7E,wCAAwC;IACxC,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9B,OAAO,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5D,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;IAE7C,4BAA4B;IAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,iBAAiB,MAAM,IAAI,CAAC;QACpC,IAAI,IAAI,CAAC,SAAS;YAAE,CAAC,IAAI,kBAAkB,CAAC;QAC5C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,yEAAyE;IACzE,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,GAAG,GAAG,MAAM,KAAK,IAAI,CAAC,aAAa,QAAQ,CAAC;IACpD,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,GAAG,GAAG,MAAM,KAAK,IAAI,CAAC,YAAY,eAAe,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,GAAG,WAAW,MAAM,IAAI,CAAC;IAC9B,IAAI,IAAI,CAAC,SAAS;QAAE,CAAC,IAAI,kBAAkB,CAAC;IAC5C,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/index.d.ts CHANGED
@@ -11,11 +11,15 @@ export { maybeAppendConflictsHint, maybeAppendGrepHint } from "./bash-hints.js";
11
11
  export type { BashCompletedPayload, BashLongRunningPayload, BridgeOptions, BridgeRequestOptions, ConfigureWarning, ConfigureWarningsContext, StatusSnapshot, } from "./bridge.js";
12
12
  export { BinaryBridge, compareSemver, tagStderrLine } from "./bridge.js";
13
13
  export { downloadBinary, ensureBinary, getBinaryName, getCacheDir, getCachedBinaryPath, } from "./downloader.js";
14
+ export type { EditSummaryInput } from "./edit-summary.js";
15
+ export { formatEditSummary } from "./edit-summary.js";
14
16
  export { compressionSavingsPercent, formatTokenCount } from "./format.js";
15
17
  export { stripJsoncSymbols } from "./jsonc.js";
16
18
  export type { Logger, LogMeta } from "./logger.js";
17
19
  export type { MigrationHarness, MigrationOptions, MigrationStatus } from "./migration.js";
18
20
  export { ensureStorageMigrated, getMigrationStatus, resolveCortexKitStorageRoot, resolveLegacyStorageRoot, } from "./migration.js";
21
+ export type { ResolvedNpm } from "./npm-resolver.js";
22
+ export { isNpmAvailable, npmSpawnEnv, probeNpmVersion, resolveNpm, } from "./npm-resolver.js";
19
23
  export { __test__ as __onnxTest__, cleanupOnnxRuntime, ensureOnnxRuntime, getManualInstallHint, isOrtAutoDownloadSupported, } from "./onnx-runtime.js";
20
24
  export { markAnnouncementSeen, repairRootScopedStorageFile, resolveHarnessStoragePath, shouldShowAnnouncement, } from "./paths.js";
21
25
  export { PLATFORM_ARCH_MAP, PLATFORM_ASSET_MAP } from "./platform.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChF,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAElF,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,0BAA0B,EAC1B,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5F,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChF,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEzE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE1F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAElF,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,0BAA0B,EAC1B,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5F,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -14,12 +14,14 @@ export { maybeAppendConflictsHint, maybeAppendGrepHint } from "./bash-hints.js";
14
14
  export { BinaryBridge, compareSemver, tagStderrLine } from "./bridge.js";
15
15
  // --- binary resolution ---
16
16
  export { downloadBinary, ensureBinary, getBinaryName, getCacheDir, getCachedBinaryPath, } from "./downloader.js";
17
+ export { formatEditSummary } from "./edit-summary.js";
17
18
  // --- compact UI formatting ---
18
19
  export { compressionSavingsPercent, formatTokenCount } from "./format.js";
19
20
  // --- jsonc helpers ---
20
21
  export { stripJsoncSymbols } from "./jsonc.js";
21
22
  // --- storage migration ---
22
23
  export { ensureStorageMigrated, getMigrationStatus, resolveCortexKitStorageRoot, resolveLegacyStorageRoot, } from "./migration.js";
24
+ export { isNpmAvailable, npmSpawnEnv, probeNpmVersion, resolveNpm, } from "./npm-resolver.js";
23
25
  // --- ONNX runtime ---
24
26
  export { __test__ as __onnxTest__, cleanupOnnxRuntime, ensureOnnxRuntime, getManualInstallHint, isOrtAutoDownloadSupported, } from "./onnx-runtime.js";
25
27
  export { markAnnouncementSeen, repairRootScopedStorageFile, resolveHarnessStoragePath, shouldShowAnnouncement, } from "./paths.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,0DAA0D;AAC1D,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAUhF,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,4BAA4B;AAC5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,gCAAgC;AAChC,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,4BAA4B;AAC5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AACxB,uBAAuB;AACvB,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAiBlF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5F,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,0DAA0D;AAC1D,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAUhF,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,4BAA4B;AAC5B,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,gCAAgC;AAChC,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,wBAAwB;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C,4BAA4B;AAC5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,cAAc,EACd,WAAW,EACX,eAAe,EACf,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,uBAAuB;AACvB,OAAO,EACL,QAAQ,IAAI,YAAY,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AACpB,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAiBlF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5F,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,42 @@
1
+ export interface ResolvedNpm {
2
+ /** Absolute path to the npm executable (or a bare name if only PATH-resolved). */
3
+ command: string;
4
+ /** Directory containing npm, prepended to PATH at spawn time so npm's
5
+ * `#!/usr/bin/env node` shebang can find its sibling node. Null when the
6
+ * command was found via the OS PATH resolver and no augmentation is needed. */
7
+ binDir: string | null;
8
+ }
9
+ interface ResolveNpmDeps {
10
+ platform: NodeJS.Platform;
11
+ env: NodeJS.ProcessEnv;
12
+ home: string;
13
+ execPath: string;
14
+ /**
15
+ * Absolute system bin directories scanned last (e.g. /usr/local/bin). Defaults
16
+ * to the platform's well-known list. Injectable so tests can pass `[]` to stay
17
+ * hermetic — otherwise a real system npm (present on CI runners) leaks in and
18
+ * breaks the "returns null" cases.
19
+ */
20
+ systemNpmDirs?: string[];
21
+ }
22
+ /**
23
+ * Resolve npm, preferring PATH, then node-adjacent, then well-known version
24
+ * manager / system locations. Returns null only when npm genuinely cannot be
25
+ * found anywhere we know to look.
26
+ */
27
+ export declare function resolveNpm(deps?: ResolveNpmDeps): ResolvedNpm | null;
28
+ /**
29
+ * Build a spawn env that makes a resolved npm runnable: prepend its bin dir to
30
+ * PATH so npm's `#!/usr/bin/env node` shebang finds its sibling node, even when
31
+ * the inherited PATH was stripped by a GUI launch.
32
+ */
33
+ export declare function npmSpawnEnv(resolved: ResolvedNpm, baseEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
34
+ /**
35
+ * Quick boolean check: can we run npm at all? Used by pre-flight gating before
36
+ * destructive auto-update steps.
37
+ */
38
+ export declare function isNpmAvailable(deps?: ResolveNpmDeps): boolean;
39
+ /** Test seam: verify a resolved npm actually executes (used by diagnostics). */
40
+ export declare function probeNpmVersion(resolved: ResolvedNpm): string | null;
41
+ export {};
42
+ //# sourceMappingURL=npm-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-resolver.d.ts","sourceRoot":"","sources":["../src/npm-resolver.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,OAAO,EAAE,MAAM,CAAC;IAChB;;mFAE+E;IAC/E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAuHD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,GAAE,cAA8B,GAAG,WAAW,GAAG,IAAI,CAkBnF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,WAAW,EACrB,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,CAAC,UAAU,CAKnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,cAA8B,GAAG,OAAO,CAE5E;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAapE"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Resolve an `npm` executable when it is not on PATH.
3
+ *
4
+ * OpenCode and Pi are frequently launched from a GUI / dock / Desktop app,
5
+ * which gives the process a stripped PATH that does NOT include a Node version
6
+ * manager's bin directory (nvm, mise, volta, fnm, asdf) or even Homebrew. When
7
+ * that happens, `spawn("npm", ...)` fails with "Executable not found in $PATH",
8
+ * so the auto-updater and LSP auto-install silently break. See issue: a user's
9
+ * auto-update churned every launch (rewrite package.json -> delete package ->
10
+ * npm install fails -> restore) and they stayed pinned to the old version.
11
+ *
12
+ * `npm` is itself a Node script (`#!/usr/bin/env node` shebang on Unix), so once
13
+ * we find npm's absolute path we must also make its sibling `node` reachable, or
14
+ * the shebang fails the same way. `resolveNpm()` returns both the command and
15
+ * its bin directory; `npmSpawnEnv()` prepends that directory to PATH for the
16
+ * spawn so npm can find its own node.
17
+ */
18
+ import { execFileSync } from "node:child_process";
19
+ import { readdirSync, statSync } from "node:fs";
20
+ import { homedir } from "node:os";
21
+ import { delimiter, dirname, isAbsolute, join } from "node:path";
22
+ function defaultDeps() {
23
+ return {
24
+ platform: process.platform,
25
+ env: process.env,
26
+ home: homedir(),
27
+ execPath: process.execPath,
28
+ };
29
+ }
30
+ function npmBinaryName(platform) {
31
+ return platform === "win32" ? "npm.cmd" : "npm";
32
+ }
33
+ function isFile(p) {
34
+ try {
35
+ return statSync(p).isFile();
36
+ }
37
+ catch {
38
+ return false;
39
+ }
40
+ }
41
+ /** Scan the PATH env for npm. Returns the first match's directory, or null. */
42
+ function npmFromPath(deps) {
43
+ const name = npmBinaryName(deps.platform);
44
+ const raw = deps.env.PATH ?? deps.env.Path ?? "";
45
+ for (const entry of raw.split(delimiter)) {
46
+ const dir = entry.trim().replace(/^"|"$/g, "");
47
+ if (!dir || !isAbsolute(dir))
48
+ continue;
49
+ if (isFile(join(dir, name)))
50
+ return dir;
51
+ }
52
+ return null;
53
+ }
54
+ /** npm ships beside node in standard installs (e.g. /opt/homebrew/bin/{node,npm}). */
55
+ function npmAdjacentToNode(deps) {
56
+ // process.execPath is the running node/bun binary. Under Node this is
57
+ // .../bin/node with npm as a sibling; under Bun (OpenCode TUI) there is no
58
+ // npm sibling, which is fine — we fall through to well-known locations.
59
+ const dir = dirname(deps.execPath);
60
+ return isFile(join(dir, npmBinaryName(deps.platform))) ? dir : null;
61
+ }
62
+ /**
63
+ * Pick the highest-version subdirectory under a version-manager `installs`
64
+ * directory that actually contains npm. Used for nvm / mise layouts like
65
+ * `~/.nvm/versions/node/<ver>/bin/npm`.
66
+ */
67
+ function highestVersionedNodeBin(installsDir, name) {
68
+ let entries;
69
+ try {
70
+ entries = readdirSync(installsDir);
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ const candidates = entries
76
+ .filter((v) => isFile(join(installsDir, v, "bin", name)))
77
+ .sort((a, b) => compareVersionsDesc(a, b));
78
+ return candidates.length > 0 ? join(installsDir, candidates[0], "bin") : null;
79
+ }
80
+ /** Descending semver-ish compare; non-numeric segments sort after numeric. */
81
+ function compareVersionsDesc(a, b) {
82
+ const pa = a
83
+ .replace(/^v/, "")
84
+ .split(".")
85
+ .map((n) => Number.parseInt(n, 10));
86
+ const pb = b
87
+ .replace(/^v/, "")
88
+ .split(".")
89
+ .map((n) => Number.parseInt(n, 10));
90
+ for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
91
+ const na = Number.isFinite(pa[i]) ? pa[i] : -1;
92
+ const nb = Number.isFinite(pb[i]) ? pb[i] : -1;
93
+ if (na !== nb)
94
+ return nb - na;
95
+ }
96
+ return b.localeCompare(a);
97
+ }
98
+ /** Well-known npm bin directories, in priority order, for the current platform. */
99
+ function wellKnownNpmDirs(deps) {
100
+ const { platform, env, home } = deps;
101
+ const name = npmBinaryName(platform);
102
+ const dirs = [];
103
+ const push = (dir) => {
104
+ if (dir && !dirs.includes(dir))
105
+ dirs.push(dir);
106
+ };
107
+ if (platform === "win32") {
108
+ const programFiles = env.ProgramFiles || "C:\\Program Files";
109
+ const appData = env.APPDATA;
110
+ const localAppData = env.LOCALAPPDATA;
111
+ push(join(programFiles, "nodejs"));
112
+ if (appData)
113
+ push(join(appData, "npm"));
114
+ if (localAppData)
115
+ push(join(localAppData, "Volta", "bin"));
116
+ // nvm-windows
117
+ if (env.NVM_SYMLINK)
118
+ push(env.NVM_SYMLINK);
119
+ }
120
+ else {
121
+ // Active node version manager hints (set even when PATH is otherwise stripped).
122
+ if (env.NVM_BIN)
123
+ push(env.NVM_BIN);
124
+ // Version-manager installs (pick highest version with npm).
125
+ push(highestVersionedNodeBin(join(home, ".nvm", "versions", "node"), name));
126
+ push(highestVersionedNodeBin(join(home, ".local", "share", "mise", "installs", "node"), name));
127
+ push(highestVersionedNodeBin(join(home, ".asdf", "installs", "nodejs"), name));
128
+ // Fixed-location managers.
129
+ push(join(home, ".volta", "bin"));
130
+ push(join(home, ".asdf", "shims"));
131
+ // Homebrew + system (injectable so tests stay hermetic; see ResolveNpmDeps).
132
+ const systemDirs = deps.systemNpmDirs ??
133
+ (platform === "darwin"
134
+ ? ["/opt/homebrew/bin", "/usr/local/bin"]
135
+ : ["/usr/local/bin", "/usr/bin", join(home, ".local", "bin")]);
136
+ for (const dir of systemDirs)
137
+ push(dir);
138
+ }
139
+ return dirs;
140
+ }
141
+ /**
142
+ * Resolve npm, preferring PATH, then node-adjacent, then well-known version
143
+ * manager / system locations. Returns null only when npm genuinely cannot be
144
+ * found anywhere we know to look.
145
+ */
146
+ export function resolveNpm(deps = defaultDeps()) {
147
+ const name = npmBinaryName(deps.platform);
148
+ // 1. PATH — respects the user's own setup when it survived to this process.
149
+ const onPath = npmFromPath(deps);
150
+ if (onPath)
151
+ return { command: join(onPath, name), binDir: onPath };
152
+ // 2. Node-adjacent (npm sits next to node in standard installs).
153
+ const adjacent = npmAdjacentToNode(deps);
154
+ if (adjacent)
155
+ return { command: join(adjacent, name), binDir: adjacent };
156
+ // 3. Well-known version-manager / system locations.
157
+ for (const dir of wellKnownNpmDirs(deps)) {
158
+ const candidate = join(dir, name);
159
+ if (isFile(candidate))
160
+ return { command: candidate, binDir: dir };
161
+ }
162
+ return null;
163
+ }
164
+ /**
165
+ * Build a spawn env that makes a resolved npm runnable: prepend its bin dir to
166
+ * PATH so npm's `#!/usr/bin/env node` shebang finds its sibling node, even when
167
+ * the inherited PATH was stripped by a GUI launch.
168
+ */
169
+ export function npmSpawnEnv(resolved, baseEnv = process.env) {
170
+ if (!resolved.binDir)
171
+ return { ...baseEnv };
172
+ const existing = baseEnv.PATH ?? baseEnv.Path ?? "";
173
+ const next = existing ? `${resolved.binDir}${delimiter}${existing}` : resolved.binDir;
174
+ return { ...baseEnv, PATH: next };
175
+ }
176
+ /**
177
+ * Quick boolean check: can we run npm at all? Used by pre-flight gating before
178
+ * destructive auto-update steps.
179
+ */
180
+ export function isNpmAvailable(deps = defaultDeps()) {
181
+ return resolveNpm(deps) !== null;
182
+ }
183
+ /** Test seam: verify a resolved npm actually executes (used by diagnostics). */
184
+ export function probeNpmVersion(resolved) {
185
+ try {
186
+ const out = execFileSync(resolved.command, ["--version"], {
187
+ env: npmSpawnEnv(resolved),
188
+ encoding: "utf-8",
189
+ timeout: 5000,
190
+ stdio: ["ignore", "pipe", "ignore"],
191
+ });
192
+ const v = out.trim();
193
+ return /^\d+\.\d+\.\d+/.test(v) ? v : null;
194
+ }
195
+ catch {
196
+ return null;
197
+ }
198
+ }
199
+ //# sourceMappingURL=npm-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-resolver.js","sourceRoot":"","sources":["../src/npm-resolver.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cortexkit/aft-bridge",
3
- "version": "0.35.1",
3
+ "version": "0.35.2",
4
4
  "type": "module",
5
5
  "description": "Shared NDJSON bridge transport, binary resolution, and ONNX runtime helpers for AFT agent-host plugins (OpenCode, Pi)",
6
6
  "license": "MIT",