@averyyy/pi-coding-agent 0.86.1-piclient.1 → 0.87.0-piclient.1

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.
Files changed (114) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +36 -0
  3. package/dist/bundle/chunks/{chunk-K53F3E6X.js → chunk-3OMQWEMP.js} +44 -38
  4. package/dist/bundle/chunks/chunk-CJ5EZ24X.js +2 -0
  5. package/dist/bundle/chunks/devin-runtime.js +7 -2
  6. package/dist/bundle/chunks/github-copilot.js +1 -1
  7. package/dist/bundle/chunks/{openai-completions-CYGM3XXP.js → openai-completions-XHML6MTL.js} +1 -1
  8. package/dist/bundle/chunks/{virtual-modules-TAAJ5574.js → virtual-modules-N7I2ZIFC.js} +1 -1
  9. package/dist/bundle/cli-runtime.js +1 -1
  10. package/dist/bundle/index.js +1 -1
  11. package/dist/bundle/rpc-entry.js +1 -1
  12. package/dist/cli/file-processor.d.ts +1 -1
  13. package/dist/cli/file-processor.d.ts.map +1 -1
  14. package/dist/cli/file-processor.js.map +1 -1
  15. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  16. package/dist/core/agent-session-runtime.js +1 -1
  17. package/dist/core/agent-session-runtime.js.map +1 -1
  18. package/dist/core/agent-session.d.ts +28 -3
  19. package/dist/core/agent-session.d.ts.map +1 -1
  20. package/dist/core/agent-session.js +482 -145
  21. package/dist/core/agent-session.js.map +1 -1
  22. package/dist/core/cache-warmer.d.ts +1 -0
  23. package/dist/core/cache-warmer.d.ts.map +1 -1
  24. package/dist/core/cache-warmer.js +15 -1
  25. package/dist/core/cache-warmer.js.map +1 -1
  26. package/dist/core/compaction/compaction.d.ts +3 -1
  27. package/dist/core/compaction/compaction.d.ts.map +1 -1
  28. package/dist/core/compaction/compaction.js +146 -48
  29. package/dist/core/compaction/compaction.js.map +1 -1
  30. package/dist/core/crash-log.d.ts +5 -0
  31. package/dist/core/crash-log.d.ts.map +1 -1
  32. package/dist/core/crash-log.js +68 -0
  33. package/dist/core/crash-log.js.map +1 -1
  34. package/dist/core/export-html/template.js +6 -1
  35. package/dist/core/extensions/index.d.ts +1 -1
  36. package/dist/core/extensions/index.d.ts.map +1 -1
  37. package/dist/core/extensions/index.js.map +1 -1
  38. package/dist/core/extensions/runner.d.ts +16 -3
  39. package/dist/core/extensions/runner.d.ts.map +1 -1
  40. package/dist/core/extensions/runner.js +110 -5
  41. package/dist/core/extensions/runner.js.map +1 -1
  42. package/dist/core/extensions/types.d.ts +77 -6
  43. package/dist/core/extensions/types.d.ts.map +1 -1
  44. package/dist/core/extensions/types.js.map +1 -1
  45. package/dist/core/index.d.ts +1 -1
  46. package/dist/core/index.d.ts.map +1 -1
  47. package/dist/core/index.js.map +1 -1
  48. package/dist/core/model-config.d.ts +52 -0
  49. package/dist/core/model-config.d.ts.map +1 -1
  50. package/dist/core/model-config.js +16 -0
  51. package/dist/core/model-config.js.map +1 -1
  52. package/dist/core/prompt-templates.d.ts +6 -1
  53. package/dist/core/prompt-templates.d.ts.map +1 -1
  54. package/dist/core/prompt-templates.js +61 -35
  55. package/dist/core/prompt-templates.js.map +1 -1
  56. package/dist/core/provider-composer.d.ts +1 -0
  57. package/dist/core/provider-composer.d.ts.map +1 -1
  58. package/dist/core/provider-composer.js +19 -0
  59. package/dist/core/provider-composer.js.map +1 -1
  60. package/dist/core/resource-loader.d.ts.map +1 -1
  61. package/dist/core/resource-loader.js +6 -2
  62. package/dist/core/resource-loader.js.map +1 -1
  63. package/dist/core/sdk.d.ts.map +1 -1
  64. package/dist/core/sdk.js +2 -2
  65. package/dist/core/sdk.js.map +1 -1
  66. package/dist/core/session-manager.d.ts +36 -9
  67. package/dist/core/session-manager.d.ts.map +1 -1
  68. package/dist/core/session-manager.js +97 -7
  69. package/dist/core/session-manager.js.map +1 -1
  70. package/dist/core/tools/read.d.ts +4 -1
  71. package/dist/core/tools/read.d.ts.map +1 -1
  72. package/dist/core/tools/read.js +5 -1
  73. package/dist/core/tools/read.js.map +1 -1
  74. package/dist/index.d.ts +2 -2
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +1 -1
  77. package/dist/index.js.map +1 -1
  78. package/dist/main.d.ts.map +1 -1
  79. package/dist/main.js +4 -3
  80. package/dist/main.js.map +1 -1
  81. package/dist/modes/interactive/bug-report.d.ts.map +1 -1
  82. package/dist/modes/interactive/bug-report.js +4 -0
  83. package/dist/modes/interactive/bug-report.js.map +1 -1
  84. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  85. package/dist/modes/interactive/components/tree-selector.js +7 -0
  86. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  87. package/dist/modes/interactive/interactive-mode.d.ts +3 -0
  88. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  89. package/dist/modes/interactive/interactive-mode.js +64 -2
  90. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  91. package/dist/utils/mime.d.ts.map +1 -1
  92. package/dist/utils/mime.js +1 -1
  93. package/dist/utils/mime.js.map +1 -1
  94. package/dist/utils/tool-result-images.d.ts +3 -1
  95. package/dist/utils/tool-result-images.d.ts.map +1 -1
  96. package/dist/utils/tool-result-images.js +4 -1
  97. package/dist/utils/tool-result-images.js.map +1 -1
  98. package/docs/compaction.md +23 -4
  99. package/docs/extensions.md +70 -6
  100. package/docs/models.md +29 -1
  101. package/docs/sdk.md +13 -2
  102. package/docs/session-format.md +15 -2
  103. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  104. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  105. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  106. package/examples/extensions/gondolin/package-lock.json +2 -2
  107. package/examples/extensions/gondolin/package.json +1 -1
  108. package/examples/extensions/sandbox/package-lock.json +2 -2
  109. package/examples/extensions/sandbox/package.json +1 -1
  110. package/examples/extensions/with-deps/package-lock.json +2 -2
  111. package/examples/extensions/with-deps/package.json +1 -1
  112. package/examples/plugins/pi-example-plugin/src/session.ts +3 -2
  113. package/package.json +8 -8
  114. package/dist/bundle/chunks/chunk-WF5BMKD5.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"crash-log.d.ts","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,wBAAgB,YAAY,CAAC,IAAI,SAAiB,GAAG,WAAW,EAAE,CAejE;AAOD,qEAAqE;AACrE,wBAAgB,WAAW,CAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACvF,IAAI,SAAiB,GACnB,WAAW,GAAG,SAAS,CAiBzB;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,SAAiB,EAAE,GAAG,SAAa,GAAG,WAAW,GAAG,SAAS,CAepG;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAiB,GAAG,IAAI,CAMzD","sourcesContent":["import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir, VERSION } from \"../config.ts\";\n\nexport interface CrashRecord {\n\ttimestamp: string;\n\tversion: string;\n\tkind: \"uncaught_exception\" | \"fatal_error\";\n\tmessage: string;\n\tstack: string | null;\n\tsessionFile: string | null;\n\tcwd: string;\n\tnotified?: boolean;\n}\n\nconst MAX_CRASH_RECORDS = 5;\nconst MAX_AGE = 7 * 24 * 60 * 60 * 1000;\n\nfunction crashLogPath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, \"crashes.json\");\n}\n\nexport function readCrashLog(path = crashLogPath()): CrashRecord[] {\n\ttry {\n\t\tconst records: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\treturn Array.isArray(records)\n\t\t\t? records.filter(\n\t\t\t\t\t(record): record is CrashRecord =>\n\t\t\t\t\t\ttypeof record === \"object\" &&\n\t\t\t\t\t\trecord !== null &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).timestamp === \"string\" &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).message === \"string\",\n\t\t\t\t)\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction writeCrashLog(records: readonly CrashRecord[], path: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(records, null, 2)}\\n`);\n}\n\n/** Best-effort persistence for callers that are already crashing. */\nexport function recordCrash(\n\tcrash: { kind: CrashRecord[\"kind\"]; error: unknown; sessionFile?: string; cwd: string },\n\tpath = crashLogPath(),\n): CrashRecord | undefined {\n\ttry {\n\t\tconst { error } = crash;\n\t\tconst record: CrashRecord = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tversion: VERSION,\n\t\t\tkind: crash.kind,\n\t\t\tmessage: error instanceof Error ? error.message || error.name : String(error),\n\t\t\tstack: error instanceof Error && error.stack ? error.stack : null,\n\t\t\tsessionFile: crash.sessionFile ?? null,\n\t\t\tcwd: crash.cwd,\n\t\t};\n\t\twriteCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);\n\t\treturn record;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Return the newest recent crash, marking pending records as announced. */\nexport function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()): CrashRecord | undefined {\n\tconst records = readCrashLog(path);\n\tconst crash = [...records]\n\t\t.reverse()\n\t\t.find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);\n\tif (!crash) return undefined;\n\ttry {\n\t\twriteCrashLog(\n\t\t\trecords.map((record) => (record.notified ? record : { ...record, notified: true })),\n\t\t\tpath,\n\t\t);\n\t} catch {\n\t\t// Showing the notice again is harmless.\n\t}\n\treturn crash;\n}\n\nexport function clearCrashLog(path = crashLogPath()): void {\n\ttry {\n\t\trmSync(path, { force: true });\n\t} catch {\n\t\t// The records can be attached again if cleanup fails.\n\t}\n}\n"]}
1
+ {"version":3,"file":"crash-log.d.ts","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,oBAAoB,GAAG,aAAa,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AASD,wBAAgB,YAAY,CAAC,IAAI,SAAiB,GAAG,WAAW,EAAE,CAejE;AAOD,KAAK,sBAAsB,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,YAAY,CAAC,CAAC;AAuBtF,iEAAiE;AACjE,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,UAAU,EAAE,SAAS,sBAAsB,EAAE,GAC3C,MAAM,EAAE,CA+CV;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAC1B,KAAK,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACvF,IAAI,SAAiB,GACnB,WAAW,GAAG,SAAS,CAiBzB;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,SAAiB,EAAE,GAAG,SAAa,GAAG,WAAW,GAAG,SAAS,CAepG;AAED,wBAAgB,aAAa,CAAC,IAAI,SAAiB,GAAG,IAAI,CAMzD","sourcesContent":["import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir, VERSION } from \"../config.ts\";\nimport type { Extension } from \"./extensions/types.ts\";\n\nexport interface CrashRecord {\n\ttimestamp: string;\n\tversion: string;\n\tkind: \"uncaught_exception\" | \"fatal_error\";\n\tmessage: string;\n\tstack: string | null;\n\tsessionFile: string | null;\n\tcwd: string;\n\tnotified?: boolean;\n}\n\nconst MAX_CRASH_RECORDS = 5;\nconst MAX_AGE = 7 * 24 * 60 * 60 * 1000;\n\nfunction crashLogPath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, \"crashes.json\");\n}\n\nexport function readCrashLog(path = crashLogPath()): CrashRecord[] {\n\ttry {\n\t\tconst records: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\treturn Array.isArray(records)\n\t\t\t? records.filter(\n\t\t\t\t\t(record): record is CrashRecord =>\n\t\t\t\t\t\ttypeof record === \"object\" &&\n\t\t\t\t\t\trecord !== null &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).timestamp === \"string\" &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).message === \"string\",\n\t\t\t\t)\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction writeCrashLog(records: readonly CrashRecord[], path: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(records, null, 2)}\\n`);\n}\n\ntype ExtensionStackMetadata = Pick<Extension, \"path\" | \"resolvedPath\" | \"sourceInfo\">;\n\nfunction normalizeStackPath(value: string): string {\n\treturn value.replace(/\\\\/g, \"/\").replace(/\\/+$/u, \"\");\n}\n\nfunction stackContainsPath(stack: string, targetPath: string, includeDescendants: boolean): boolean {\n\tconst target = normalizeStackPath(targetPath);\n\tif (!target || target.startsWith(\"<\")) return false;\n\tconst caseInsensitive = /^[a-z]:\\//iu.test(target);\n\tconst haystack = caseInsensitive ? stack.toLowerCase() : stack;\n\tconst needle = caseInsensitive ? target.toLowerCase() : target;\n\tif (includeDescendants) return haystack.includes(`${needle}/`);\n\n\tlet index = haystack.indexOf(needle);\n\twhile (index !== -1) {\n\t\tconst next = haystack[index + needle.length];\n\t\tif (next === undefined || next === \":\" || next === \")\" || /\\s/u.test(next)) return true;\n\t\tindex = haystack.indexOf(needle, index + needle.length);\n\t}\n\treturn false;\n}\n\n/** Find loaded extensions with source files in a stack trace. */\nexport function findExtensionStackMatches(\n\tstack: string | undefined,\n\textensions: readonly ExtensionStackMetadata[],\n): string[] {\n\tif (!stack) return [];\n\tconst normalizedStack = stack\n\t\t.split(\"\\n\")\n\t\t.slice(1)\n\t\t.filter((line) => /^\\s+at\\s/u.test(line))\n\t\t.map((line) => {\n\t\t\ttry {\n\t\t\t\treturn decodeURI(line);\n\t\t\t} catch {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t})\n\t\t.join(\"\\n\")\n\t\t.replace(/\\\\/g, \"/\");\n\tconst matches: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const extension of extensions) {\n\t\tconst resolvedPath = normalizeStackPath(extension.resolvedPath);\n\t\tconst singleFilePackage =\n\t\t\textension.sourceInfo.origin === \"package\" &&\n\t\t\t!/^(?:npm:|git:|https?:\\/\\/|ssh:\\/\\/)/u.test(extension.sourceInfo.source) &&\n\t\t\t/\\.[cm]?[jt]s$/u.test(extension.sourceInfo.source);\n\t\tconst packageRoot =\n\t\t\textension.sourceInfo.origin === \"package\" && !singleFilePackage && extension.sourceInfo.baseDir\n\t\t\t\t? extension.sourceInfo.baseDir\n\t\t\t\t: undefined;\n\t\tconst slashIndex = resolvedPath.lastIndexOf(\"/\");\n\t\tconst directoryEntry = /\\/index\\.[cm]?[jt]s$/u.test(resolvedPath);\n\t\tconst matched = packageRoot\n\t\t\t? stackContainsPath(normalizedStack, packageRoot, true)\n\t\t\t: directoryEntry && slashIndex !== -1\n\t\t\t\t? stackContainsPath(normalizedStack, resolvedPath.slice(0, slashIndex), true)\n\t\t\t\t: stackContainsPath(normalizedStack, resolvedPath, false);\n\t\tif (!matched) continue;\n\n\t\tconst label =\n\t\t\textension.sourceInfo.origin === \"package\" && extension.sourceInfo.source\n\t\t\t\t? extension.sourceInfo.source\n\t\t\t\t: extension.path;\n\t\tif (!seen.has(label)) {\n\t\t\tseen.add(label);\n\t\t\tmatches.push(label);\n\t\t}\n\t}\n\treturn matches;\n}\n\n/** Best-effort persistence for callers that are already crashing. */\nexport function recordCrash(\n\tcrash: { kind: CrashRecord[\"kind\"]; error: unknown; sessionFile?: string; cwd: string },\n\tpath = crashLogPath(),\n): CrashRecord | undefined {\n\ttry {\n\t\tconst { error } = crash;\n\t\tconst record: CrashRecord = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tversion: VERSION,\n\t\t\tkind: crash.kind,\n\t\t\tmessage: error instanceof Error ? error.message || error.name : String(error),\n\t\t\tstack: error instanceof Error && error.stack ? error.stack : null,\n\t\t\tsessionFile: crash.sessionFile ?? null,\n\t\t\tcwd: crash.cwd,\n\t\t};\n\t\twriteCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);\n\t\treturn record;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Return the newest recent crash, marking pending records as announced. */\nexport function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()): CrashRecord | undefined {\n\tconst records = readCrashLog(path);\n\tconst crash = [...records]\n\t\t.reverse()\n\t\t.find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);\n\tif (!crash) return undefined;\n\ttry {\n\t\twriteCrashLog(\n\t\t\trecords.map((record) => (record.notified ? record : { ...record, notified: true })),\n\t\t\tpath,\n\t\t);\n\t} catch {\n\t\t// Showing the notice again is harmless.\n\t}\n\treturn crash;\n}\n\nexport function clearCrashLog(path = crashLogPath()): void {\n\ttry {\n\t\trmSync(path, { force: true });\n\t} catch {\n\t\t// The records can be attached again if cleanup fails.\n\t}\n}\n"]}
@@ -24,6 +24,74 @@ function writeCrashLog(records, path) {
24
24
  mkdirSync(dirname(path), { recursive: true });
25
25
  writeFileSync(path, `${JSON.stringify(records, null, 2)}\n`);
26
26
  }
27
+ function normalizeStackPath(value) {
28
+ return value.replace(/\\/g, "/").replace(/\/+$/u, "");
29
+ }
30
+ function stackContainsPath(stack, targetPath, includeDescendants) {
31
+ const target = normalizeStackPath(targetPath);
32
+ if (!target || target.startsWith("<"))
33
+ return false;
34
+ const caseInsensitive = /^[a-z]:\//iu.test(target);
35
+ const haystack = caseInsensitive ? stack.toLowerCase() : stack;
36
+ const needle = caseInsensitive ? target.toLowerCase() : target;
37
+ if (includeDescendants)
38
+ return haystack.includes(`${needle}/`);
39
+ let index = haystack.indexOf(needle);
40
+ while (index !== -1) {
41
+ const next = haystack[index + needle.length];
42
+ if (next === undefined || next === ":" || next === ")" || /\s/u.test(next))
43
+ return true;
44
+ index = haystack.indexOf(needle, index + needle.length);
45
+ }
46
+ return false;
47
+ }
48
+ /** Find loaded extensions with source files in a stack trace. */
49
+ export function findExtensionStackMatches(stack, extensions) {
50
+ if (!stack)
51
+ return [];
52
+ const normalizedStack = stack
53
+ .split("\n")
54
+ .slice(1)
55
+ .filter((line) => /^\s+at\s/u.test(line))
56
+ .map((line) => {
57
+ try {
58
+ return decodeURI(line);
59
+ }
60
+ catch {
61
+ return line;
62
+ }
63
+ })
64
+ .join("\n")
65
+ .replace(/\\/g, "/");
66
+ const matches = [];
67
+ const seen = new Set();
68
+ for (const extension of extensions) {
69
+ const resolvedPath = normalizeStackPath(extension.resolvedPath);
70
+ const singleFilePackage = extension.sourceInfo.origin === "package" &&
71
+ !/^(?:npm:|git:|https?:\/\/|ssh:\/\/)/u.test(extension.sourceInfo.source) &&
72
+ /\.[cm]?[jt]s$/u.test(extension.sourceInfo.source);
73
+ const packageRoot = extension.sourceInfo.origin === "package" && !singleFilePackage && extension.sourceInfo.baseDir
74
+ ? extension.sourceInfo.baseDir
75
+ : undefined;
76
+ const slashIndex = resolvedPath.lastIndexOf("/");
77
+ const directoryEntry = /\/index\.[cm]?[jt]s$/u.test(resolvedPath);
78
+ const matched = packageRoot
79
+ ? stackContainsPath(normalizedStack, packageRoot, true)
80
+ : directoryEntry && slashIndex !== -1
81
+ ? stackContainsPath(normalizedStack, resolvedPath.slice(0, slashIndex), true)
82
+ : stackContainsPath(normalizedStack, resolvedPath, false);
83
+ if (!matched)
84
+ continue;
85
+ const label = extension.sourceInfo.origin === "package" && extension.sourceInfo.source
86
+ ? extension.sourceInfo.source
87
+ : extension.path;
88
+ if (!seen.has(label)) {
89
+ seen.add(label);
90
+ matches.push(label);
91
+ }
92
+ }
93
+ return matches;
94
+ }
27
95
  /** Best-effort persistence for callers that are already crashing. */
28
96
  export function recordCrash(crash, path = crashLogPath()) {
29
97
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"crash-log.js","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAapD,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAExC,SAAS,YAAY,CAAC,QAAQ,GAAG,WAAW,EAAE,EAAU;IACvD,OAAO,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAAA,CACtC;AAED,MAAM,UAAU,YAAY,CAAC,IAAI,GAAG,YAAY,EAAE,EAAiB;IAClE,IAAI,CAAC;QACJ,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC,MAAM,CACd,CAAC,MAAM,EAAyB,EAAE,CACjC,OAAO,MAAM,KAAK,QAAQ;gBAC1B,MAAM,KAAK,IAAI;gBACf,OAAQ,MAAsB,CAAC,SAAS,KAAK,QAAQ;gBACrD,OAAQ,MAAsB,CAAC,OAAO,KAAK,QAAQ,CACpD;YACF,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;AAAA,CACD;AAED,SAAS,aAAa,CAAC,OAA+B,EAAE,IAAY,EAAQ;IAC3E,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAAA,CAC7D;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAC1B,KAAuF,EACvF,IAAI,GAAG,YAAY,EAAE,EACK;IAC1B,IAAI,CAAC;QACJ,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,MAAM,MAAM,GAAgB;YAC3B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7E,KAAK,EAAE,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACjE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;YACtC,GAAG,EAAE,KAAK,CAAC,GAAG;SACd,CAAC;QACF,aAAa,CAAC,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AAAA,CACD;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,IAAI,GAAG,YAAY,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAA2B;IACrG,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC;SACxB,OAAO,EAAE;SACT,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC;IACtF,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,CAAC;QACJ,aAAa,CACZ,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACnF,IAAI,CACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,wCAAwC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,aAAa,CAAC,IAAI,GAAG,YAAY,EAAE,EAAQ;IAC1D,IAAI,CAAC;QACJ,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACR,sDAAsD;IACvD,CAAC;AAAA,CACD","sourcesContent":["import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir, VERSION } from \"../config.ts\";\n\nexport interface CrashRecord {\n\ttimestamp: string;\n\tversion: string;\n\tkind: \"uncaught_exception\" | \"fatal_error\";\n\tmessage: string;\n\tstack: string | null;\n\tsessionFile: string | null;\n\tcwd: string;\n\tnotified?: boolean;\n}\n\nconst MAX_CRASH_RECORDS = 5;\nconst MAX_AGE = 7 * 24 * 60 * 60 * 1000;\n\nfunction crashLogPath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, \"crashes.json\");\n}\n\nexport function readCrashLog(path = crashLogPath()): CrashRecord[] {\n\ttry {\n\t\tconst records: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\treturn Array.isArray(records)\n\t\t\t? records.filter(\n\t\t\t\t\t(record): record is CrashRecord =>\n\t\t\t\t\t\ttypeof record === \"object\" &&\n\t\t\t\t\t\trecord !== null &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).timestamp === \"string\" &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).message === \"string\",\n\t\t\t\t)\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction writeCrashLog(records: readonly CrashRecord[], path: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(records, null, 2)}\\n`);\n}\n\n/** Best-effort persistence for callers that are already crashing. */\nexport function recordCrash(\n\tcrash: { kind: CrashRecord[\"kind\"]; error: unknown; sessionFile?: string; cwd: string },\n\tpath = crashLogPath(),\n): CrashRecord | undefined {\n\ttry {\n\t\tconst { error } = crash;\n\t\tconst record: CrashRecord = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tversion: VERSION,\n\t\t\tkind: crash.kind,\n\t\t\tmessage: error instanceof Error ? error.message || error.name : String(error),\n\t\t\tstack: error instanceof Error && error.stack ? error.stack : null,\n\t\t\tsessionFile: crash.sessionFile ?? null,\n\t\t\tcwd: crash.cwd,\n\t\t};\n\t\twriteCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);\n\t\treturn record;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Return the newest recent crash, marking pending records as announced. */\nexport function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()): CrashRecord | undefined {\n\tconst records = readCrashLog(path);\n\tconst crash = [...records]\n\t\t.reverse()\n\t\t.find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);\n\tif (!crash) return undefined;\n\ttry {\n\t\twriteCrashLog(\n\t\t\trecords.map((record) => (record.notified ? record : { ...record, notified: true })),\n\t\t\tpath,\n\t\t);\n\t} catch {\n\t\t// Showing the notice again is harmless.\n\t}\n\treturn crash;\n}\n\nexport function clearCrashLog(path = crashLogPath()): void {\n\ttry {\n\t\trmSync(path, { force: true });\n\t} catch {\n\t\t// The records can be attached again if cleanup fails.\n\t}\n}\n"]}
1
+ {"version":3,"file":"crash-log.js","sourceRoot":"","sources":["../../src/core/crash-log.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir, VERSION } from \"../config.ts\";\nimport type { Extension } from \"./extensions/types.ts\";\n\nexport interface CrashRecord {\n\ttimestamp: string;\n\tversion: string;\n\tkind: \"uncaught_exception\" | \"fatal_error\";\n\tmessage: string;\n\tstack: string | null;\n\tsessionFile: string | null;\n\tcwd: string;\n\tnotified?: boolean;\n}\n\nconst MAX_CRASH_RECORDS = 5;\nconst MAX_AGE = 7 * 24 * 60 * 60 * 1000;\n\nfunction crashLogPath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, \"crashes.json\");\n}\n\nexport function readCrashLog(path = crashLogPath()): CrashRecord[] {\n\ttry {\n\t\tconst records: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n\t\treturn Array.isArray(records)\n\t\t\t? records.filter(\n\t\t\t\t\t(record): record is CrashRecord =>\n\t\t\t\t\t\ttypeof record === \"object\" &&\n\t\t\t\t\t\trecord !== null &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).timestamp === \"string\" &&\n\t\t\t\t\t\ttypeof (record as CrashRecord).message === \"string\",\n\t\t\t\t)\n\t\t\t: [];\n\t} catch {\n\t\treturn [];\n\t}\n}\n\nfunction writeCrashLog(records: readonly CrashRecord[], path: string): void {\n\tmkdirSync(dirname(path), { recursive: true });\n\twriteFileSync(path, `${JSON.stringify(records, null, 2)}\\n`);\n}\n\ntype ExtensionStackMetadata = Pick<Extension, \"path\" | \"resolvedPath\" | \"sourceInfo\">;\n\nfunction normalizeStackPath(value: string): string {\n\treturn value.replace(/\\\\/g, \"/\").replace(/\\/+$/u, \"\");\n}\n\nfunction stackContainsPath(stack: string, targetPath: string, includeDescendants: boolean): boolean {\n\tconst target = normalizeStackPath(targetPath);\n\tif (!target || target.startsWith(\"<\")) return false;\n\tconst caseInsensitive = /^[a-z]:\\//iu.test(target);\n\tconst haystack = caseInsensitive ? stack.toLowerCase() : stack;\n\tconst needle = caseInsensitive ? target.toLowerCase() : target;\n\tif (includeDescendants) return haystack.includes(`${needle}/`);\n\n\tlet index = haystack.indexOf(needle);\n\twhile (index !== -1) {\n\t\tconst next = haystack[index + needle.length];\n\t\tif (next === undefined || next === \":\" || next === \")\" || /\\s/u.test(next)) return true;\n\t\tindex = haystack.indexOf(needle, index + needle.length);\n\t}\n\treturn false;\n}\n\n/** Find loaded extensions with source files in a stack trace. */\nexport function findExtensionStackMatches(\n\tstack: string | undefined,\n\textensions: readonly ExtensionStackMetadata[],\n): string[] {\n\tif (!stack) return [];\n\tconst normalizedStack = stack\n\t\t.split(\"\\n\")\n\t\t.slice(1)\n\t\t.filter((line) => /^\\s+at\\s/u.test(line))\n\t\t.map((line) => {\n\t\t\ttry {\n\t\t\t\treturn decodeURI(line);\n\t\t\t} catch {\n\t\t\t\treturn line;\n\t\t\t}\n\t\t})\n\t\t.join(\"\\n\")\n\t\t.replace(/\\\\/g, \"/\");\n\tconst matches: string[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const extension of extensions) {\n\t\tconst resolvedPath = normalizeStackPath(extension.resolvedPath);\n\t\tconst singleFilePackage =\n\t\t\textension.sourceInfo.origin === \"package\" &&\n\t\t\t!/^(?:npm:|git:|https?:\\/\\/|ssh:\\/\\/)/u.test(extension.sourceInfo.source) &&\n\t\t\t/\\.[cm]?[jt]s$/u.test(extension.sourceInfo.source);\n\t\tconst packageRoot =\n\t\t\textension.sourceInfo.origin === \"package\" && !singleFilePackage && extension.sourceInfo.baseDir\n\t\t\t\t? extension.sourceInfo.baseDir\n\t\t\t\t: undefined;\n\t\tconst slashIndex = resolvedPath.lastIndexOf(\"/\");\n\t\tconst directoryEntry = /\\/index\\.[cm]?[jt]s$/u.test(resolvedPath);\n\t\tconst matched = packageRoot\n\t\t\t? stackContainsPath(normalizedStack, packageRoot, true)\n\t\t\t: directoryEntry && slashIndex !== -1\n\t\t\t\t? stackContainsPath(normalizedStack, resolvedPath.slice(0, slashIndex), true)\n\t\t\t\t: stackContainsPath(normalizedStack, resolvedPath, false);\n\t\tif (!matched) continue;\n\n\t\tconst label =\n\t\t\textension.sourceInfo.origin === \"package\" && extension.sourceInfo.source\n\t\t\t\t? extension.sourceInfo.source\n\t\t\t\t: extension.path;\n\t\tif (!seen.has(label)) {\n\t\t\tseen.add(label);\n\t\t\tmatches.push(label);\n\t\t}\n\t}\n\treturn matches;\n}\n\n/** Best-effort persistence for callers that are already crashing. */\nexport function recordCrash(\n\tcrash: { kind: CrashRecord[\"kind\"]; error: unknown; sessionFile?: string; cwd: string },\n\tpath = crashLogPath(),\n): CrashRecord | undefined {\n\ttry {\n\t\tconst { error } = crash;\n\t\tconst record: CrashRecord = {\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tversion: VERSION,\n\t\t\tkind: crash.kind,\n\t\t\tmessage: error instanceof Error ? error.message || error.name : String(error),\n\t\t\tstack: error instanceof Error && error.stack ? error.stack : null,\n\t\t\tsessionFile: crash.sessionFile ?? null,\n\t\t\tcwd: crash.cwd,\n\t\t};\n\t\twriteCrashLog([...readCrashLog(path), record].slice(-MAX_CRASH_RECORDS), path);\n\t\treturn record;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Return the newest recent crash, marking pending records as announced. */\nexport function takeUnnotifiedCrash(path = crashLogPath(), now = Date.now()): CrashRecord | undefined {\n\tconst records = readCrashLog(path);\n\tconst crash = [...records]\n\t\t.reverse()\n\t\t.find((record) => !record.notified && now - Date.parse(record.timestamp) <= MAX_AGE);\n\tif (!crash) return undefined;\n\ttry {\n\t\twriteCrashLog(\n\t\t\trecords.map((record) => (record.notified ? record : { ...record, notified: true })),\n\t\t\tpath,\n\t\t);\n\t} catch {\n\t\t// Showing the notice again is harmless.\n\t}\n\treturn crash;\n}\n\nexport function clearCrashLog(path = crashLogPath()): void {\n\ttry {\n\t\trmSync(path, { force: true });\n\t} catch {\n\t\t// The records can be attached again if cleanup fails.\n\t}\n}\n"]}
@@ -357,6 +357,9 @@
357
357
  case 'thinking_level_change':
358
358
  parts.push('thinking', entry.thinkingLevel);
359
359
  break;
360
+ case 'context_edit':
361
+ parts.push('context edit', entry.replacement === null ? 'omit' : 'replace', entry.targetId);
362
+ break;
360
363
  }
361
364
 
362
365
  return parts.join(' ').toLowerCase();
@@ -385,7 +388,7 @@
385
388
  }
386
389
 
387
390
  // Apply filter mode
388
- const isSettingsEntry = ['label', 'custom', 'model_change', 'thinking_level_change'].includes(entry.type);
391
+ const isSettingsEntry = ['label', 'custom', 'context_edit', 'model_change', 'thinking_level_change'].includes(entry.type);
389
392
  let passesFilter = true;
390
393
 
391
394
  switch (filterMode) {
@@ -696,6 +699,8 @@
696
699
  return labelHtml + `<span class="tree-muted">[model: ${escapeHtml(entry.modelId)}]</span>`;
697
700
  case 'thinking_level_change':
698
701
  return labelHtml + `<span class="tree-muted">[thinking: ${escapeHtml(entry.thinkingLevel)}]</span>`;
702
+ case 'context_edit':
703
+ return labelHtml + `<span class="tree-muted">[context ${entry.replacement === null ? 'omit' : 'replace'}: ${escapeHtml(entry.targetId)}]</span>`;
699
704
  default:
700
705
  return labelHtml + `<span class="tree-muted">[${escapeHtml(entry.type)}]</span>`;
701
706
  }
@@ -6,7 +6,7 @@ export type { SourceInfo } from "../source-info.ts";
6
6
  export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.ts";
7
7
  export type { ExtensionErrorListener, ForkHandler, NavigateTreeHandler, NewSessionHandler, ShutdownHandler, SwitchSessionHandler, } from "./runner.ts";
8
8
  export { ExtensionRunner } from "./runner.ts";
9
- export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult, CompactOptions, ContextEvent, ContextEventResult, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageEndEventResult, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectSource, NormalizedBuildSystemPromptOptions, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, TerminalInputHandler, ThinkingLevelSelectEvent, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UIPromptEndEvent, UIPromptKind, UIPromptStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
9
+ export type { AfterProviderResponseEvent, AgentActivityOutcome, AgentBeforeSettleEvent, AgentBeforeSettleEventResult, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BoundaryContextPreview, BoundaryResult, BoundaryState, BuildSystemPromptOptions, CacheWarmingDecisionEvent, CacheWarmingDecisionEventResult, CompactionEntryDraft, CompactOptions, ContextEditEntryDraft, ContextEvent, ContextEventResult, ContextUsage, ContextWithSystemEvent, CustomEntryDraft, CustomMessageEntryDraft, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageEndEventResult, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectSource, NormalizedBuildSystemPromptOptions, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionBoundaryDraft, SessionCompactEvent, SessionCompactFailedEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, TerminalInputHandler, ThinkingLevelSelectEvent, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnEndEventResult, TurnStartEvent, UIPromptEndEvent, UIPromptKind, UIPromptStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
10
10
  export { defineTool, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isPowerShellToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult, } from "./types.ts";
11
11
  export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.ts";
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n\t// Context\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tNormalizedBuildSystemPromptOptions,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tThinkingLevelSelectEvent,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentActivityOutcome,\n\tAgentBeforeSettleEvent,\n\tAgentBeforeSettleEventResult,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBoundaryContextPreview,\n\tBoundaryResult,\n\tBoundaryState,\n\tBuildSystemPromptOptions,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n\tCompactionEntryDraft,\n\t// Context\n\tCompactOptions,\n\tContextEditEntryDraft,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tContextWithSystemEvent,\n\tCustomEntryDraft,\n\tCustomMessageEntryDraft,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tNormalizedBuildSystemPromptOptions,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionBoundaryDraft,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tThinkingLevelSelectEvent,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnEndEventResult,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAoK9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n\t// Context\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tNormalizedBuildSystemPromptOptions,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tThinkingLevelSelectEvent,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiL9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentActivityOutcome,\n\tAgentBeforeSettleEvent,\n\tAgentBeforeSettleEventResult,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBoundaryContextPreview,\n\tBoundaryResult,\n\tBoundaryState,\n\tBuildSystemPromptOptions,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n\tCompactionEntryDraft,\n\t// Context\n\tCompactOptions,\n\tContextEditEntryDraft,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tContextWithSystemEvent,\n\tCustomEntryDraft,\n\tCustomMessageEntryDraft,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tNormalizedBuildSystemPromptOptions,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionBoundaryDraft,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tThinkingLevelSelectEvent,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnEndEventResult,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisToolCallEventType,\n\tisWriteToolResult,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
@@ -2,7 +2,7 @@
2
2
  * Extension runner - executes extensions and manages their lifecycle.
3
3
  */
4
4
  import type { AgentMessage } from "@earendil-works/pi-agent-core";
5
- import type { ImageContent, Provider, ProviderHeaders } from "@earendil-works/pi-ai";
5
+ import { type ImageContent, type Provider, type ProviderHeaders } from "@earendil-works/pi-ai";
6
6
  import type { KeyId } from "@earendil-works/pi-tui";
7
7
  import type { CacheWarmingAction } from "../cache-warmer.ts";
8
8
  import type { ResourceDiagnostic } from "../diagnostics.ts";
@@ -10,7 +10,7 @@ import type { KeybindingsConfig } from "../keybindings.ts";
10
10
  import type { ModelRegistry } from "../model-registry.ts";
11
11
  import type { SessionManager } from "../session-manager.ts";
12
12
  import { type BuildSystemPromptOptions, type NormalizedBuildSystemPromptOptions } from "../system-prompt.ts";
13
- import type { BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, CacheWarmingDecisionEvent, ContextEvent, EntryRenderer, Extension, ExtensionActions, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFlag, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, InputEvent, InputEventResult, InputSource, LoadExtensionsResult, MarkdownTransformer, MessageEndEvent, MessageRenderer, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventResult, ProviderConfig, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, SessionBeforeCompactResult, SessionBeforeForkResult, SessionBeforeSwitchResult, SessionBeforeTreeResult, SessionShutdownEvent, ToolCallEvent, ToolCallEventResult, ToolResultEvent, ToolResultEventResult, UserBashEvent, UserBashEventResult } from "./types.ts";
13
+ import type { AgentBeforeSettleEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BoundaryContextPreview, CacheWarmingDecisionEvent, ContextEvent, ContextWithSystemEvent, EntryRenderer, Extension, ExtensionActions, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFlag, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, InputEvent, InputEventResult, InputSource, LoadExtensionsResult, MarkdownTransformer, MessageEndEvent, MessageRenderer, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventResult, ProviderConfig, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, SessionBeforeCompactResult, SessionBeforeForkResult, SessionBeforeSwitchResult, SessionBeforeTreeResult, SessionBoundaryDraft, SessionShutdownEvent, ToolCallEvent, ToolCallEventResult, ToolResultEvent, ToolResultEventResult, TurnEndEvent, UserBashEvent, UserBashEventResult } from "./types.ts";
14
14
  /** Combined result from all before_agent_start handlers. */
15
15
  interface BeforeAgentStartCombinedResult {
16
16
  messages: NonNullable<BeforeAgentStartEventResult["message"]>[];
@@ -20,7 +20,7 @@ interface BeforeAgentStartCombinedResult {
20
20
  * Events handled by the generic emit() method.
21
21
  * Events with dedicated emitXxx() methods are excluded for stronger type safety.
22
22
  */
23
- type RunnerEmitEvent = Exclude<ExtensionEvent, ToolCallEvent | ProjectTrustEvent | ToolResultEvent | UserBashEvent | ContextEvent | CacheWarmingDecisionEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | BeforeAgentStartEvent | MessageEndEvent | ResourcesDiscoverEvent | InputEvent>;
23
+ type RunnerEmitEvent = Exclude<ExtensionEvent, ToolCallEvent | ProjectTrustEvent | ToolResultEvent | UserBashEvent | ContextEvent | ContextWithSystemEvent | CacheWarmingDecisionEvent | BeforeProviderRequestEvent | BeforeProviderHeadersEvent | BeforeAgentStartEvent | MessageEndEvent | ResourcesDiscoverEvent | InputEvent | TurnEndEvent | AgentBeforeSettleEvent>;
24
24
  type RunnerEmitResult<TEvent extends RunnerEmitEvent> = TEvent extends {
25
25
  type: "session_before_switch";
26
26
  } ? SessionBeforeSwitchResult | undefined : TEvent extends {
@@ -31,6 +31,13 @@ type RunnerEmitResult<TEvent extends RunnerEmitEvent> = TEvent extends {
31
31
  type: "session_before_tree";
32
32
  } ? SessionBeforeTreeResult | undefined : undefined;
33
33
  export type ExtensionErrorListener = (error: ExtensionError) => void;
34
+ type BoundaryBaseEvent = Omit<TurnEndEvent, "entries" | "continue" | "context"> | Omit<AgentBeforeSettleEvent, "entries" | "continue" | "context">;
35
+ interface BoundaryDispatchResult {
36
+ entries: SessionBoundaryDraft[];
37
+ continue: boolean;
38
+ context: BoundaryContextPreview;
39
+ valid: boolean;
40
+ }
34
41
  export type NewSessionHandler = (options?: {
35
42
  parentSession?: string;
36
43
  setup?: (sessionManager: SessionManager) => Promise<void>;
@@ -148,6 +155,7 @@ export declare class ExtensionRunner {
148
155
  */
149
156
  createContext(): ExtensionContext;
150
157
  createCommandContext(): ExtensionCommandContext;
158
+ emitBoundary(baseEvent: BoundaryBaseEvent, buildContext: (entries: SessionBoundaryDraft[]) => BoundaryContextPreview | Promise<BoundaryContextPreview>): Promise<BoundaryDispatchResult>;
151
159
  private isSessionBeforeEvent;
152
160
  emit<TEvent extends RunnerEmitEvent>(event: TEvent): Promise<RunnerEmitResult<TEvent>>;
153
161
  /** Returns the event's own action unless a handler overrides it; the last override wins. */
@@ -156,6 +164,11 @@ export declare class ExtensionRunner {
156
164
  emitToolResult(event: ToolResultEvent): Promise<ToolResultEventResult | undefined>;
157
165
  emitToolCall(event: ToolCallEvent): Promise<ToolCallEventResult | undefined>;
158
166
  emitUserBash(event: UserBashEvent): Promise<UserBashEventResult | undefined>;
167
+ /**
168
+ * Run the request-time transforms in two phases. `context` handlers see the conversation
169
+ * only and Pi restores the prompt and tool state after each; `context_with_system`
170
+ * handlers then see the full transcript and their output is used as returned.
171
+ */
159
172
  emitContext(messages: AgentMessage[]): Promise<AgentMessage[]>;
160
173
  emitBeforeProviderRequest(payload: unknown): Promise<unknown>;
161
174
  emitBeforeProviderHeaders(headers: ProviderHeaders): Promise<ProviderHeaders>;