@bastani/atomic 0.9.23 → 0.9.24

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 (149) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/builtin/intercom/package.json +1 -1
  3. package/dist/builtin/mcp/CHANGELOG.md +12 -0
  4. package/dist/builtin/mcp/README.md +1 -0
  5. package/dist/builtin/mcp/index.bundle.mjs +244 -58
  6. package/dist/builtin/mcp/package.json +1 -1
  7. package/dist/builtin/subagents/package.json +1 -1
  8. package/dist/builtin/web-access/package.json +1 -1
  9. package/dist/builtin/workflows/CHANGELOG.md +22 -0
  10. package/dist/builtin/workflows/builtin/{chunk-d3xhj946.js → chunk-cpw5gtzg.js} +1 -1
  11. package/dist/builtin/workflows/builtin/{chunk-kgn5wz1c.js → chunk-e1254zvd.js} +139 -15
  12. package/dist/builtin/workflows/builtin/{chunk-hj8mh07f.js → chunk-qy6g0baf.js} +1 -1
  13. package/dist/builtin/workflows/builtin/goal.js +2 -2
  14. package/dist/builtin/workflows/builtin/index.js +3 -3
  15. package/dist/builtin/workflows/builtin/ralph.js +2 -2
  16. package/dist/builtin/workflows/package.json +1 -1
  17. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
  18. package/dist/builtin/workflows/skills/prompt-engineer/references/claude_sonnet_5_5.md +131 -0
  19. package/dist/builtin/workflows/src/extension/index.bundle.mjs +187 -25
  20. package/dist/builtin/workflows/src/index.js +147 -17
  21. package/dist/core/agent-session-events.js +1 -1
  22. package/dist/core/agent-session-events.js.map +1 -1
  23. package/dist/core/agent-session-state.js +5 -2
  24. package/dist/core/agent-session-state.js.map +1 -1
  25. package/dist/core/extensions/api-types.d.ts +12 -0
  26. package/dist/core/extensions/api-types.d.ts.map +1 -1
  27. package/dist/core/extensions/api-types.js.map +1 -1
  28. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  29. package/dist/core/extensions/loader-api.js +42 -0
  30. package/dist/core/extensions/loader-api.js.map +1 -1
  31. package/dist/core/extensions/loader-bindings.d.ts.map +1 -1
  32. package/dist/core/extensions/loader-bindings.js +13 -7
  33. package/dist/core/extensions/loader-bindings.js.map +1 -1
  34. package/dist/core/extensions/loader-resources.d.ts +3 -0
  35. package/dist/core/extensions/loader-resources.d.ts.map +1 -1
  36. package/dist/core/extensions/loader-resources.js.map +1 -1
  37. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  38. package/dist/core/extensions/loader-runtime.js +2 -0
  39. package/dist/core/extensions/loader-runtime.js.map +1 -1
  40. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  41. package/dist/core/extensions/loader-virtual-modules.js +2 -0
  42. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  43. package/dist/core/extensions/mcp-server-registry.d.ts +22 -0
  44. package/dist/core/extensions/mcp-server-registry.d.ts.map +1 -0
  45. package/dist/core/extensions/mcp-server-registry.js +51 -0
  46. package/dist/core/extensions/mcp-server-registry.js.map +1 -0
  47. package/dist/core/extensions/runtime-types.d.ts +3 -0
  48. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  49. package/dist/core/extensions/runtime-types.js.map +1 -1
  50. package/dist/core/keybindings.d.ts +1 -1
  51. package/dist/core/keybindings.d.ts.map +1 -1
  52. package/dist/core/keybindings.js +1 -1
  53. package/dist/core/keybindings.js.map +1 -1
  54. package/dist/core/mcp-servers.d.ts +39 -0
  55. package/dist/core/mcp-servers.d.ts.map +1 -0
  56. package/dist/core/mcp-servers.js +2 -0
  57. package/dist/core/mcp-servers.js.map +1 -0
  58. package/dist/core/model-resolver-defaults.js +2 -2
  59. package/dist/core/model-resolver-defaults.js.map +1 -1
  60. package/dist/core/package-manager-manifest.d.ts +3 -0
  61. package/dist/core/package-manager-manifest.d.ts.map +1 -1
  62. package/dist/core/package-manager-manifest.js +14 -0
  63. package/dist/core/package-manager-manifest.js.map +1 -1
  64. package/dist/core/package-manager-mcp-servers.d.ts +4 -0
  65. package/dist/core/package-manager-mcp-servers.d.ts.map +1 -0
  66. package/dist/core/package-manager-mcp-servers.js +53 -0
  67. package/dist/core/package-manager-mcp-servers.js.map +1 -0
  68. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -1
  69. package/dist/core/package-manager-resource-accumulator.js +2 -0
  70. package/dist/core/package-manager-resource-accumulator.js.map +1 -1
  71. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  72. package/dist/core/package-manager-resource-collector.js +2 -0
  73. package/dist/core/package-manager-resource-collector.js.map +1 -1
  74. package/dist/core/package-manager-resource-patterns.d.ts +4 -0
  75. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  76. package/dist/core/package-manager-resource-patterns.js +36 -12
  77. package/dist/core/package-manager-resource-patterns.js.map +1 -1
  78. package/dist/core/package-manager-types.d.ts +14 -0
  79. package/dist/core/package-manager-types.d.ts.map +1 -1
  80. package/dist/core/package-manager-types.js.map +1 -1
  81. package/dist/core/package-manager.d.ts +1 -1
  82. package/dist/core/package-manager.d.ts.map +1 -1
  83. package/dist/core/package-manager.js.map +1 -1
  84. package/dist/core/resource-loader-core.d.ts +4 -0
  85. package/dist/core/resource-loader-core.d.ts.map +1 -1
  86. package/dist/core/resource-loader-core.js +7 -0
  87. package/dist/core/resource-loader-core.js.map +1 -1
  88. package/dist/core/resource-loader-helpers.d.ts.map +1 -1
  89. package/dist/core/resource-loader-helpers.js +1 -0
  90. package/dist/core/resource-loader-helpers.js.map +1 -1
  91. package/dist/core/resource-loader-internals.d.ts +2 -0
  92. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  93. package/dist/core/resource-loader-internals.js.map +1 -1
  94. package/dist/core/resource-loader-package-resources.d.ts +3 -0
  95. package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
  96. package/dist/core/resource-loader-package-resources.js +25 -2
  97. package/dist/core/resource-loader-package-resources.js.map +1 -1
  98. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  99. package/dist/core/resource-loader-reload.js +4 -1
  100. package/dist/core/resource-loader-reload.js.map +1 -1
  101. package/dist/core/session-manager-core.d.ts +2 -0
  102. package/dist/core/session-manager-core.d.ts.map +1 -1
  103. package/dist/core/session-manager-core.js +6 -1
  104. package/dist/core/session-manager-core.js.map +1 -1
  105. package/dist/core/settings-types.d.ts +1 -0
  106. package/dist/core/settings-types.d.ts.map +1 -1
  107. package/dist/core/settings-types.js.map +1 -1
  108. package/dist/extensions/llama/provider.d.ts +1 -1
  109. package/dist/extensions/llama/provider.d.ts.map +1 -1
  110. package/dist/extensions/llama/provider.js +37 -10
  111. package/dist/extensions/llama/provider.js.map +1 -1
  112. package/dist/index.d.ts +2 -1
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js.map +1 -1
  115. package/dist/modes/interactive/chat-input-actions.d.ts +12 -0
  116. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  117. package/dist/modes/interactive/chat-input-actions.js +44 -18
  118. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  119. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +11 -0
  120. package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -1
  121. package/dist/modes/interactive/components/chat-session-host-editor.js +7 -1
  122. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  123. package/dist/modes/interactive/interactive-hotkeys-debug.js +1 -1
  124. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -1
  125. package/dist/modes/interactive/interactive-input-handling.js +3 -1
  126. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  127. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  128. package/dist/modes/interactive/interactive-mode-helpers.js +1 -6
  129. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  130. package/dist/utils/clipboard-native.d.ts +2 -0
  131. package/dist/utils/clipboard-native.d.ts.map +1 -1
  132. package/dist/utils/clipboard-native.js.map +1 -1
  133. package/dist/utils/clipboard.d.ts +7 -0
  134. package/dist/utils/clipboard.d.ts.map +1 -1
  135. package/dist/utils/clipboard.js +37 -1
  136. package/dist/utils/clipboard.js.map +1 -1
  137. package/docs/extensions/api-reference.md +19 -0
  138. package/docs/extensions.md +4 -0
  139. package/docs/keybindings.md +2 -2
  140. package/docs/llama-cpp.md +13 -0
  141. package/docs/mcp-servers.md +18 -0
  142. package/docs/models/evals.md +16 -4
  143. package/docs/packages/authoring.md +27 -0
  144. package/docs/packages/reference.md +3 -2
  145. package/docs/packages.md +3 -2
  146. package/docs/skills.md +3 -1
  147. package/examples/extensions/gondolin/package-lock.json +3 -3
  148. package/npm-shrinkwrap.json +46 -46
  149. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"resource-loader-reload.js","sourceRoot":"","sources":["../../src/core/resource-loader-reload.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { yieldToEventLoopIfSlow } from \"../utils/event-loop.ts\";\nimport { isLocalPath, resolvePath } from \"../utils/paths.ts\";\nimport { getMandatoryBuiltinExtensionPaths } from \"./builtin-packages.ts\";\nimport { filterSupersededHerdrIntegrationPaths } from \"./extensions/herdr-file-integration.ts\";\nimport { clearExtensionCache, createExtensionRuntime, loadExtensionsCached } from \"./extensions/loader.ts\";\nimport type { Extension, LoadExtensionsResult } from \"./extensions/types.ts\";\nimport { withMandatoryResourceLoader } from \"./mandatory-resource-loader.ts\";\nimport { isTrustedMandatoryRuntimeTool, markTrustedMandatoryRuntimeExtension } from \"./mandatory-runtime-tools.ts\";\nimport type { PathMetadata, ResolvedPaths } from \"./package-manager.ts\";\nimport {\n\tupdatePromptsFromPathsAsync,\n\tupdateSkillsFromPathsAsync,\n\tupdateThemesFromPathsAsync,\n} from \"./resource-loader-assets.ts\";\nimport {\n\tloadProjectContextFiles,\n\tresolveExistingPromptSourcePath,\n\tresolveExistingPromptSourcePaths,\n\tresolvePromptInput,\n} from \"./resource-loader-context-files.ts\";\nimport type { DefaultResourceLoader } from \"./resource-loader-core.ts\";\nimport { discoverAppendSystemPromptFile, discoverSystemPromptFile } from \"./resource-loader-discovery.ts\";\nimport { collectExtensionPackageWarnings, mergeExtensionWarnings } from \"./resource-loader-extension-warnings.ts\";\nimport {\n\tloadExtensionFactories,\n\tloadFinalExtensionSet,\n\tresolveInheritedExtensionOverlaps,\n} from \"./resource-loader-extensions.ts\";\nimport { resourceInternals } from \"./resource-loader-internals.ts\";\nimport {\n\tcollectWorkflowResources,\n\tcreateInheritanceSnapshotProvider,\n\tcreateWorkflowResourceProvider,\n\tresolvePackageResourcePaths,\n\tresolveTrustedBorrowedProjectLocalSources,\n} from \"./resource-loader-package-resources.ts\";\nimport { mergeResourcePaths, resolveResourcePath } from \"./resource-loader-paths.ts\";\nimport { applyExtensionSourceInfo } from \"./resource-loader-source-info.ts\";\nimport type { ResourceLoaderReloadOptions } from \"./resource-loader-types.ts\";\nimport { buildSkillCatalog } from \"./skill-catalog.ts\";\nimport { endTimingSpan, resetTimings, startTimingSpan } from \"./timings.ts\";\n\nfunction getEnabledResources(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): Array<{ path: string; enabled: boolean; metadata: PathMetadata }> {\n\tfor (const r of resources) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\treturn resources.filter((r) => r.enabled);\n}\n\nfunction getEnabledPaths(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): string[] {\n\treturn getEnabledResources(resources, metadataByPath).map((r) => r.path);\n}\n\nfunction getBuiltinExtensionPaths(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n\tnoExtensions: boolean,\n): string[] {\n\tfor (const resource of resources) {\n\t\tif (!metadataByPath.has(resource.path)) metadataByPath.set(resource.path, resource.metadata);\n\t}\n\treturn noExtensions ? [] : resources.filter((resource) => resource.enabled).map((resource) => resource.path);\n}\n\nfunction mapSkillPath(\n\tresource: { path: string; metadata: PathMetadata },\n\tmetadataByPath: Map<string, PathMetadata>,\n): string {\n\tif (resource.metadata.source !== \"auto\" && resource.metadata.origin !== \"package\") {\n\t\treturn resource.path;\n\t}\n\ttry {\n\t\tconst stats = statSync(resource.path);\n\t\tif (!stats.isDirectory()) {\n\t\t\treturn resource.path;\n\t\t}\n\t} catch {\n\t\treturn resource.path;\n\t}\n\tconst skillFile = join(resource.path, \"SKILL.md\");\n\tif (existsSync(skillFile)) {\n\t\tif (!metadataByPath.has(skillFile)) {\n\t\t\tmetadataByPath.set(skillFile, resource.metadata);\n\t\t}\n\t\treturn skillFile;\n\t}\n\treturn resource.path;\n}\n\nfunction addCliMetadata(cliExtensionPaths: ResolvedPaths, metadataByPath: Map<string, PathMetadata>): void {\n\tfor (const r of cliExtensionPaths.extensions) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\tfor (const r of cliExtensionPaths.skills) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n}\n\nexport async function loadProjectTrustExtensions(loader: DefaultResourceLoader): Promise<LoadExtensionsResult> {\n\tconst state = resourceInternals(loader);\n\tstate.settingsManager.setProjectTrusted(false);\n\tawait state.settingsManager.reload();\n\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\tincludeCliProjectLocalResources: false,\n\t});\n\tconst metadataByPath = new Map<string, PathMetadata>();\n\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\tconst builtinEnabledExtensions = getBuiltinExtensionPaths(\n\t\tbuiltinPackagePaths.extensions,\n\t\tmetadataByPath,\n\t\tstate.noExtensions,\n\t);\n\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\tstate.workflowResources = workflowResources;\n\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\t// The builtin Herdr reporter supersedes the installed file integration in a\n\t// Herdr pane; see extensions/herdr-file-integration.ts.\n\tconst extensionPaths = filterSupersededHerdrIntegrationPaths(\n\t\tmergeResourcePaths(\n\t\t\tstate.cwd,\n\t\t\tcliEnabledExtensions,\n\t\t\tstate.noExtensions ? builtinEnabledExtensions : [...enabledExtensions, ...builtinEnabledExtensions],\n\t\t),\n\t);\n\tconst packageWarnings = collectExtensionPackageWarnings(extensionPaths, metadataByPath);\n\tconst extensionsResult = await loadExtensionsCached(\n\t\textensionPaths,\n\t\tstate.cwd,\n\t\tstate.eventBus,\n\t\tworkflowResourceProvider,\n\t\tundefined,\n\t\tinheritanceSnapshotProvider,\n\t);\n\tmergeExtensionWarnings(extensionsResult, packageWarnings);\n\tconst inlineExtensions = await loadExtensionFactories(\n\t\tloader,\n\t\textensionsResult.runtime,\n\t\tworkflowResourceProvider,\n\t\tinheritanceSnapshotProvider,\n\t);\n\textensionsResult.extensions.push(...inlineExtensions.extensions);\n\textensionsResult.errors.push(...inlineExtensions.errors);\n\tconst mandatoryPaths = new Set(getMandatoryBuiltinExtensionPaths().map((path) => resolvePath(path, state.cwd)));\n\tfor (const extension of extensionsResult.extensions) {\n\t\tif (mandatoryPaths.has(extension.resolvedPath)) markTrustedMandatoryRuntimeExtension(extension);\n\t}\n\tapplyExtensionSourceInfo(loader, extensionsResult.extensions, metadataByPath);\n\treturn extensionsResult;\n}\n\nexport async function reloadDefaultResourceLoader(\n\tloader: DefaultResourceLoader,\n\toptions?: ResourceLoaderReloadOptions,\n): Promise<void> {\n\tconst complete = await prepareDefaultResourceLoaderReload(loader, options);\n\tawait complete();\n}\n\n/** Resolve trust without loading the approved project resources until continuation. */\nexport async function prepareDefaultResourceLoaderReload(\n\tloader: DefaultResourceLoader,\n\toptions?: ResourceLoaderReloadOptions,\n): Promise<() => Promise<void>> {\n\tconst state = resourceInternals(loader);\n\tresetTimings(\"extensions\");\n\tif (state.loaded) {\n\t\tclearExtensionCache();\n\t}\n\tlet preTrustExtensions: LoadExtensionsResult | undefined;\n\tconst initialProjectTrusted = state.settingsManager.isProjectTrusted();\n\tif (options?.resolveProjectTrust || options?.resolveBorrowedProjectTrust) {\n\t\tpreTrustExtensions = await loadProjectTrustExtensions(loader);\n\t}\n\tconst resolveTrust = async () => {\n\t\tif (options?.resolveProjectTrust && preTrustExtensions) {\n\t\t\tconst projectTrusted = await options.resolveProjectTrust({ extensionsResult: preTrustExtensions });\n\t\t\tstate.settingsManager.setProjectTrusted(projectTrusted);\n\t\t} else if (preTrustExtensions) {\n\t\t\tstate.settingsManager.setProjectTrusted(initialProjectTrusted);\n\t\t}\n\t\tif (options?.resolveBorrowedProjectTrust) {\n\t\t\tstate.trustedBorrowedProjectLocalSources = await resolveTrustedBorrowedProjectLocalSources(\n\t\t\t\tloader,\n\t\t\t\toptions.resolveBorrowedProjectTrust,\n\t\t\t\tpreTrustExtensions,\n\t\t\t);\n\t\t}\n\t};\n\tif (!options?.deferProjectTrust) await resolveTrust();\n\tconst complete = async () => {\n\t\tif (options?.deferResources && !options.resolveProjectTrust && !options.resolveBorrowedProjectTrust) {\n\t\t\tawait state.settingsManager.reload();\n\t\t\tconst deferredExtensions: LoadExtensionsResult = {\n\t\t\t\textensions: [],\n\t\t\t\terrors: [],\n\t\t\t\truntime: createExtensionRuntime(),\n\t\t\t};\n\t\t\tstate.extensionsResult = state.extensionsOverride\n\t\t\t\t? state.extensionsOverride(deferredExtensions)\n\t\t\t\t: deferredExtensions;\n\t\t\tstate.extensionSkillSourceInfos = new Map();\n\t\t\tstate.extensionPromptSourceInfos = new Map();\n\t\t\tstate.extensionThemeSourceInfos = new Map();\n\t\t\tstate.workflowResources = [];\n\t\t\tstate.resourceMetadataByPath = new Map();\n\t\t\tstate.lastSkillPaths = [];\n\t\t\tconst emptySkills = state.skillsOverride ? state.skillsOverride({ skills: [], diagnostics: [] }) : undefined;\n\t\t\tstate.skills = emptySkills?.skills ?? [];\n\t\t\tstate.skillDiagnostics = emptySkills?.diagnostics ?? [];\n\t\t\tstate.skillCatalog = buildSkillCatalog(state.skills);\n\t\t\tstate.lastPromptPaths = [];\n\t\t\tconst emptyPrompts = state.promptsOverride\n\t\t\t\t? state.promptsOverride({ prompts: [], diagnostics: [] })\n\t\t\t\t: undefined;\n\t\t\tstate.prompts = emptyPrompts?.prompts ?? [];\n\t\t\tstate.promptDiagnostics = emptyPrompts?.diagnostics ?? [];\n\t\t\tstate.lastThemePaths = [];\n\t\t\tconst emptyThemes = state.themesOverride ? state.themesOverride({ themes: [], diagnostics: [] }) : undefined;\n\t\t\tstate.themes = emptyThemes?.themes ?? [];\n\t\t\tstate.themeDiagnostics = emptyThemes?.diagnostics ?? [];\n\t\t\tconst emptyAgentsFiles = { agentsFiles: [] };\n\t\t\tstate.agentsFiles = state.agentsFilesOverride\n\t\t\t\t? state.agentsFilesOverride(emptyAgentsFiles).agentsFiles\n\t\t\t\t: emptyAgentsFiles.agentsFiles;\n\t\t\tconst baseSystemPrompt = state.systemPromptSource\n\t\t\t\t? resolvePromptInput(state.systemPromptSource, \"system prompt\")\n\t\t\t\t: undefined;\n\t\t\tstate.systemPrompt = state.systemPromptOverride\n\t\t\t\t? state.systemPromptOverride(baseSystemPrompt)\n\t\t\t\t: baseSystemPrompt;\n\t\t\tstate.systemPromptSourcePath = resolveExistingPromptSourcePath(state.systemPromptSource);\n\t\t\tconst appendSources = state.appendSystemPromptSource ?? [];\n\t\t\tconst baseAppend = appendSources\n\t\t\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t\t\t.filter((s): s is string => s !== undefined);\n\t\t\tstate.appendSystemPrompt = state.appendSystemPromptOverride\n\t\t\t\t? state.appendSystemPromptOverride(baseAppend)\n\t\t\t\t: baseAppend;\n\t\t\tstate.appendSystemPromptSourcePaths = resolveExistingPromptSourcePaths(appendSources);\n\t\t\tstate.loaded = true;\n\t\t\treturn;\n\t\t}\n\t\tconst resolveSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePackageResourcePaths\");\n\t\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\t\ttrustedBorrowedProjectLocalSources: state.trustedBorrowedProjectLocalSources,\n\t\t});\n\t\tendTimingSpan(resolveSpan);\n\t\t// Kept on the loader so post-reload passes (extendResources) can still resolve\n\t\t// package metadata for paths this reload discovered.\n\t\tstate.resourceMetadataByPath = new Map();\n\t\tconst metadataByPath = state.resourceMetadataByPath;\n\n\t\tstate.extensionSkillSourceInfos = new Map();\n\t\tstate.extensionPromptSourceInfos = new Map();\n\t\tstate.extensionThemeSourceInfos = new Map();\n\n\t\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\t\tconst enabledSkillResources = getEnabledResources(resolvedPaths.skills, metadataByPath);\n\t\tconst enabledPrompts = getEnabledPaths(resolvedPaths.prompts, metadataByPath);\n\t\tconst enabledThemes = getEnabledPaths(resolvedPaths.themes, metadataByPath);\n\n\t\tconst builtinEnabledExtensions = getBuiltinExtensionPaths(\n\t\t\tbuiltinPackagePaths.extensions,\n\t\t\tmetadataByPath,\n\t\t\tstate.noExtensions,\n\t\t);\n\t\tconst builtinEnabledSkillResources = state.noSkills\n\t\t\t? []\n\t\t\t: getEnabledResources(builtinPackagePaths.skills, metadataByPath);\n\t\tconst builtinEnabledPrompts = state.noPromptTemplates\n\t\t\t? []\n\t\t\t: getEnabledPaths(builtinPackagePaths.prompts, metadataByPath);\n\t\tconst builtinEnabledThemes = state.noThemes ? [] : getEnabledPaths(builtinPackagePaths.themes, metadataByPath);\n\n\t\tconst enabledSkills = enabledSkillResources.map((resource) => mapSkillPath(resource, metadataByPath));\n\t\tconst builtinEnabledSkills = builtinEnabledSkillResources.map((resource) =>\n\t\t\tmapSkillPath(resource, metadataByPath),\n\t\t);\n\n\t\taddCliMetadata(cliExtensionPaths, metadataByPath);\n\n\t\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\t\tconst cliEnabledSkills = getEnabledPaths(cliExtensionPaths.skills, metadataByPath);\n\t\tconst cliEnabledPrompts = getEnabledPaths(cliExtensionPaths.prompts, metadataByPath);\n\t\tconst cliEnabledThemes = getEnabledPaths(cliExtensionPaths.themes, metadataByPath);\n\t\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\t\tstate.workflowResources = workflowResources;\n\t\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\n\t\t// The builtin Herdr reporter supersedes the installed file integration in a\n\t\t// Herdr pane; see extensions/herdr-file-integration.ts.\n\t\tconst extensionPaths = filterSupersededHerdrIntegrationPaths(\n\t\t\tmergeResourcePaths(\n\t\t\t\tstate.cwd,\n\t\t\t\tcliEnabledExtensions,\n\t\t\t\tstate.noExtensions ? builtinEnabledExtensions : [...enabledExtensions, ...builtinEnabledExtensions],\n\t\t\t),\n\t\t);\n\n\t\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\t\tconst packageWarnings = collectExtensionPackageWarnings(extensionPaths, metadataByPath);\n\t\tconst extensionsResult: LoadExtensionsResult = options?.deferExtensions\n\t\t\t? { extensions: [], errors: [], runtime: createExtensionRuntime() }\n\t\t\t: await loadFinalExtensionSet(\n\t\t\t\t\tloader,\n\t\t\t\t\textensionPaths,\n\t\t\t\t\tpreTrustExtensions,\n\t\t\t\t\tworkflowResourceProvider,\n\t\t\t\t\tinheritanceSnapshotProvider,\n\t\t\t\t);\n\t\tif (!options?.deferExtensions) mergeExtensionWarnings(extensionsResult, packageWarnings);\n\t\tconst mandatoryExtensionPaths = new Set(\n\t\t\tgetMandatoryBuiltinExtensionPaths().map((path) =>\n\t\t\t\tresolvePath(path, state.cwd, { normalizeUnicodeSpaces: true }),\n\t\t\t),\n\t\t);\n\t\tconst loadedMandatoryExtensions = new Set<Extension>(\n\t\t\textensionsResult.extensions.filter((extension) =>\n\t\t\t\tmandatoryExtensionPaths.has(\n\t\t\t\t\tresolvePath(extension.resolvedPath, state.cwd, { normalizeUnicodeSpaces: true }),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\tfor (const extension of loadedMandatoryExtensions) markTrustedMandatoryRuntimeExtension(extension);\n\n\t\tfor (const p of state.additionalExtensionPaths) {\n\t\t\tif (isLocalPath(p)) {\n\t\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\t\tif (!existsSync(resolved)) {\n\t\t\t\t\textensionsResult.errors.push({ path: resolved, error: `Extension path does not exist: ${resolved}` });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstate.extensionsResult = state.extensionsOverride ? state.extensionsOverride(extensionsResult) : extensionsResult;\n\t\tapplyExtensionSourceInfo(loader, state.extensionsResult.extensions, metadataByPath);\n\t\tif (options?.deferProjectTrust && preTrustExtensions) {\n\t\t\tfor (const extension of preTrustExtensions.extensions) {\n\t\t\t\tif (!extensionsResult.extensions.includes(extension)) extensionsResult.extensions.push(extension);\n\t\t\t}\n\t\t}\n\t\tfor (const extension of state.extensionsResult.extensions) {\n\t\t\tconst registration = extension.tools.get(\"intercom\");\n\t\t\tif (loadedMandatoryExtensions.has(extension) && registration && isTrustedMandatoryRuntimeTool(registration)) {\n\t\t\t\tmarkTrustedMandatoryRuntimeExtension(extension);\n\t\t\t}\n\t\t}\n\t\tresolveInheritedExtensionOverlaps(state.extensionsResult);\n\n\t\tconst skillPaths = state.noSkills\n\t\t\t? mergeResourcePaths(state.cwd, cliEnabledSkills, state.additionalSkillPaths)\n\t\t\t: mergeResourcePaths(\n\t\t\t\t\tstate.cwd,\n\t\t\t\t\t[...cliEnabledSkills, ...enabledSkills, ...builtinEnabledSkills],\n\t\t\t\t\tstate.additionalSkillPaths,\n\t\t\t\t);\n\n\t\tstate.lastSkillPaths = skillPaths;\n\t\tconst skillsStartedAt = Date.now();\n\t\tconst skillsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateSkillsFromPathsAsync\");\n\t\tawait updateSkillsFromPathsAsync(loader, skillPaths, metadataByPath);\n\t\tendTimingSpan(skillsSpan);\n\t\tawait yieldToEventLoopIfSlow(skillsStartedAt);\n\t\tfor (const p of state.additionalSkillPaths) {\n\t\t\tif (isLocalPath(p)) {\n\t\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\t\tif (!existsSync(resolved) && !state.skillDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\tstate.skillDiagnostics.push({ type: \"error\", message: \"Skill path does not exist\", path: resolved });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst promptPaths = state.noPromptTemplates\n\t\t\t? mergeResourcePaths(state.cwd, cliEnabledPrompts, state.additionalPromptTemplatePaths)\n\t\t\t: mergeResourcePaths(\n\t\t\t\t\tstate.cwd,\n\t\t\t\t\t[...cliEnabledPrompts, ...enabledPrompts, ...builtinEnabledPrompts],\n\t\t\t\t\tstate.additionalPromptTemplatePaths,\n\t\t\t\t);\n\n\t\tstate.lastPromptPaths = promptPaths;\n\t\tconst promptsStartedAt = Date.now();\n\t\tconst promptsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updatePromptsFromPathsAsync\");\n\t\tawait updatePromptsFromPathsAsync(loader, promptPaths, metadataByPath);\n\t\tendTimingSpan(promptsSpan);\n\t\tawait yieldToEventLoopIfSlow(promptsStartedAt);\n\t\tfor (const p of state.additionalPromptTemplatePaths) {\n\t\t\tif (isLocalPath(p)) {\n\t\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\t\tif (!existsSync(resolved) && !state.promptDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\tstate.promptDiagnostics.push({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: \"Prompt template path does not exist\",\n\t\t\t\t\t\tpath: resolved,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst themePaths = state.noThemes\n\t\t\t? mergeResourcePaths(state.cwd, cliEnabledThemes, state.additionalThemePaths)\n\t\t\t: mergeResourcePaths(\n\t\t\t\t\tstate.cwd,\n\t\t\t\t\t[...cliEnabledThemes, ...enabledThemes, ...builtinEnabledThemes],\n\t\t\t\t\tstate.additionalThemePaths,\n\t\t\t\t);\n\n\t\tstate.lastThemePaths = themePaths;\n\t\tconst themesStartedAt = Date.now();\n\t\tconst themesSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateThemesFromPathsAsync\");\n\t\tawait updateThemesFromPathsAsync(loader, themePaths, metadataByPath);\n\t\tendTimingSpan(themesSpan);\n\t\tawait yieldToEventLoopIfSlow(themesStartedAt);\n\t\tfor (const p of state.additionalThemePaths) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved) && !state.themeDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\tstate.themeDiagnostics.push({ type: \"error\", message: \"Theme path does not exist\", path: resolved });\n\t\t\t}\n\t\t}\n\n\t\tconst contextFilesStartedAt = Date.now();\n\t\tconst contextFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.loadProjectContextFiles\");\n\t\tconst agentsFiles = {\n\t\t\tagentsFiles: state.noContextFiles\n\t\t\t\t? []\n\t\t\t\t: loadProjectContextFiles({\n\t\t\t\t\t\tcwd: state.cwd,\n\t\t\t\t\t\tagentDir: state.agentDir,\n\t\t\t\t\t\tprojectTrusted: state.settingsManager.isProjectTrusted(),\n\t\t\t\t\t}),\n\t\t};\n\t\tendTimingSpan(contextFilesSpan);\n\t\tawait yieldToEventLoopIfSlow(contextFilesStartedAt);\n\t\tconst resolvedAgentsFiles = state.agentsFilesOverride ? state.agentsFilesOverride(agentsFiles) : agentsFiles;\n\t\tstate.agentsFiles = resolvedAgentsFiles.agentsFiles;\n\n\t\tconst promptFilesStartedAt = Date.now();\n\t\tconst promptFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePromptFiles\");\n\t\tconst systemPromptSource = state.systemPromptSource ?? discoverSystemPromptFile(loader);\n\t\tconst baseSystemPrompt = resolvePromptInput(systemPromptSource, \"system prompt\");\n\t\tstate.systemPrompt = state.systemPromptOverride ? state.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;\n\t\tstate.systemPromptSourcePath = resolveExistingPromptSourcePath(systemPromptSource);\n\n\t\tconst discoveredAppend = discoverAppendSystemPromptFile(loader);\n\t\tconst appendSources = state.appendSystemPromptSource ?? (discoveredAppend ? [discoveredAppend] : []);\n\t\tconst baseAppend = appendSources\n\t\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t\t.filter((s): s is string => s !== undefined);\n\t\tstate.appendSystemPrompt = state.appendSystemPromptOverride\n\t\t\t? state.appendSystemPromptOverride(baseAppend)\n\t\t\t: baseAppend;\n\t\tstate.appendSystemPromptSourcePaths = resolveExistingPromptSourcePaths(appendSources);\n\t\tstate.loaded = true;\n\t\tendTimingSpan(promptFilesSpan);\n\t\tawait yieldToEventLoopIfSlow(promptFilesStartedAt);\n\t};\n\tif (options?.deferProjectTrust && preTrustExtensions) {\n\t\tstate.extensionsResult = preTrustExtensions;\n\t\tpreTrustExtensions = (await withMandatoryResourceLoader(loader, state.cwd)).getExtensions();\n\t\tstate.extensionsResult = preTrustExtensions;\n\t\tlet trustResolution: Promise<void> | undefined;\n\t\toptions.deferProjectTrust(async () => {\n\t\t\ttrustResolution ??= resolveTrust();\n\t\t\tawait trustResolution;\n\t\t\tawait complete();\n\t\t});\n\t\treturn async () => {};\n\t}\n\treturn complete;\n}\n"]}
1
+ {"version":3,"file":"resource-loader-reload.js","sourceRoot":"","sources":["../../src/core/resource-loader-reload.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { yieldToEventLoopIfSlow } from \"../utils/event-loop.ts\";\nimport { isLocalPath, resolvePath } from \"../utils/paths.ts\";\nimport { getMandatoryBuiltinExtensionPaths } from \"./builtin-packages.ts\";\nimport { filterSupersededHerdrIntegrationPaths } from \"./extensions/herdr-file-integration.ts\";\nimport { clearExtensionCache, createExtensionRuntime, loadExtensionsCached } from \"./extensions/loader.ts\";\nimport type { Extension, LoadExtensionsResult } from \"./extensions/types.ts\";\nimport { withMandatoryResourceLoader } from \"./mandatory-resource-loader.ts\";\nimport { isTrustedMandatoryRuntimeTool, markTrustedMandatoryRuntimeExtension } from \"./mandatory-runtime-tools.ts\";\nimport type { PathMetadata, ResolvedPaths } from \"./package-manager.ts\";\nimport {\n\tupdatePromptsFromPathsAsync,\n\tupdateSkillsFromPathsAsync,\n\tupdateThemesFromPathsAsync,\n} from \"./resource-loader-assets.ts\";\nimport {\n\tloadProjectContextFiles,\n\tresolveExistingPromptSourcePath,\n\tresolveExistingPromptSourcePaths,\n\tresolvePromptInput,\n} from \"./resource-loader-context-files.ts\";\nimport type { DefaultResourceLoader } from \"./resource-loader-core.ts\";\nimport { discoverAppendSystemPromptFile, discoverSystemPromptFile } from \"./resource-loader-discovery.ts\";\nimport { collectExtensionPackageWarnings, mergeExtensionWarnings } from \"./resource-loader-extension-warnings.ts\";\nimport {\n\tloadExtensionFactories,\n\tloadFinalExtensionSet,\n\tresolveInheritedExtensionOverlaps,\n} from \"./resource-loader-extensions.ts\";\nimport { resourceInternals } from \"./resource-loader-internals.ts\";\nimport {\n\tcollectMcpServerContributions,\n\tcollectWorkflowResources,\n\tcreateInheritanceSnapshotProvider,\n\tcreateWorkflowResourceProvider,\n\tresolvePackageResourcePaths,\n\tresolveTrustedBorrowedProjectLocalSources,\n} from \"./resource-loader-package-resources.ts\";\nimport { mergeResourcePaths, resolveResourcePath } from \"./resource-loader-paths.ts\";\nimport { applyExtensionSourceInfo } from \"./resource-loader-source-info.ts\";\nimport type { ResourceLoaderReloadOptions } from \"./resource-loader-types.ts\";\nimport { buildSkillCatalog } from \"./skill-catalog.ts\";\nimport { endTimingSpan, resetTimings, startTimingSpan } from \"./timings.ts\";\n\nfunction getEnabledResources(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): Array<{ path: string; enabled: boolean; metadata: PathMetadata }> {\n\tfor (const r of resources) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\treturn resources.filter((r) => r.enabled);\n}\n\nfunction getEnabledPaths(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n): string[] {\n\treturn getEnabledResources(resources, metadataByPath).map((r) => r.path);\n}\n\nfunction getBuiltinExtensionPaths(\n\tresources: Array<{ path: string; enabled: boolean; metadata: PathMetadata }>,\n\tmetadataByPath: Map<string, PathMetadata>,\n\tnoExtensions: boolean,\n): string[] {\n\tfor (const resource of resources) {\n\t\tif (!metadataByPath.has(resource.path)) metadataByPath.set(resource.path, resource.metadata);\n\t}\n\treturn noExtensions ? [] : resources.filter((resource) => resource.enabled).map((resource) => resource.path);\n}\n\nfunction mapSkillPath(\n\tresource: { path: string; metadata: PathMetadata },\n\tmetadataByPath: Map<string, PathMetadata>,\n): string {\n\tif (resource.metadata.source !== \"auto\" && resource.metadata.origin !== \"package\") {\n\t\treturn resource.path;\n\t}\n\ttry {\n\t\tconst stats = statSync(resource.path);\n\t\tif (!stats.isDirectory()) {\n\t\t\treturn resource.path;\n\t\t}\n\t} catch {\n\t\treturn resource.path;\n\t}\n\tconst skillFile = join(resource.path, \"SKILL.md\");\n\tif (existsSync(skillFile)) {\n\t\tif (!metadataByPath.has(skillFile)) {\n\t\t\tmetadataByPath.set(skillFile, resource.metadata);\n\t\t}\n\t\treturn skillFile;\n\t}\n\treturn resource.path;\n}\n\nfunction addCliMetadata(cliExtensionPaths: ResolvedPaths, metadataByPath: Map<string, PathMetadata>): void {\n\tfor (const r of cliExtensionPaths.extensions) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n\tfor (const r of cliExtensionPaths.skills) {\n\t\tif (!metadataByPath.has(r.path)) {\n\t\t\tmetadataByPath.set(r.path, r.metadata);\n\t\t}\n\t}\n}\n\nexport async function loadProjectTrustExtensions(loader: DefaultResourceLoader): Promise<LoadExtensionsResult> {\n\tconst state = resourceInternals(loader);\n\tstate.settingsManager.setProjectTrusted(false);\n\tawait state.settingsManager.reload();\n\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\tincludeCliProjectLocalResources: false,\n\t});\n\tconst metadataByPath = new Map<string, PathMetadata>();\n\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\tconst builtinEnabledExtensions = getBuiltinExtensionPaths(\n\t\tbuiltinPackagePaths.extensions,\n\t\tmetadataByPath,\n\t\tstate.noExtensions,\n\t);\n\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\tstate.workflowResources = workflowResources;\n\tstate.mcpServerContributions = collectMcpServerContributions(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\t// The builtin Herdr reporter supersedes the installed file integration in a\n\t// Herdr pane; see extensions/herdr-file-integration.ts.\n\tconst extensionPaths = filterSupersededHerdrIntegrationPaths(\n\t\tmergeResourcePaths(\n\t\t\tstate.cwd,\n\t\t\tcliEnabledExtensions,\n\t\t\tstate.noExtensions ? builtinEnabledExtensions : [...enabledExtensions, ...builtinEnabledExtensions],\n\t\t),\n\t);\n\tconst packageWarnings = collectExtensionPackageWarnings(extensionPaths, metadataByPath);\n\tconst extensionsResult = await loadExtensionsCached(\n\t\textensionPaths,\n\t\tstate.cwd,\n\t\tstate.eventBus,\n\t\tworkflowResourceProvider,\n\t\tundefined,\n\t\tinheritanceSnapshotProvider,\n\t);\n\tmergeExtensionWarnings(extensionsResult, packageWarnings);\n\tconst inlineExtensions = await loadExtensionFactories(\n\t\tloader,\n\t\textensionsResult.runtime,\n\t\tworkflowResourceProvider,\n\t\tinheritanceSnapshotProvider,\n\t);\n\textensionsResult.extensions.push(...inlineExtensions.extensions);\n\textensionsResult.errors.push(...inlineExtensions.errors);\n\tconst mandatoryPaths = new Set(getMandatoryBuiltinExtensionPaths().map((path) => resolvePath(path, state.cwd)));\n\tfor (const extension of extensionsResult.extensions) {\n\t\tif (mandatoryPaths.has(extension.resolvedPath)) markTrustedMandatoryRuntimeExtension(extension);\n\t}\n\tapplyExtensionSourceInfo(loader, extensionsResult.extensions, metadataByPath);\n\treturn extensionsResult;\n}\n\nexport async function reloadDefaultResourceLoader(\n\tloader: DefaultResourceLoader,\n\toptions?: ResourceLoaderReloadOptions,\n): Promise<void> {\n\tconst complete = await prepareDefaultResourceLoaderReload(loader, options);\n\tawait complete();\n}\n\n/** Resolve trust without loading the approved project resources until continuation. */\nexport async function prepareDefaultResourceLoaderReload(\n\tloader: DefaultResourceLoader,\n\toptions?: ResourceLoaderReloadOptions,\n): Promise<() => Promise<void>> {\n\tconst state = resourceInternals(loader);\n\tresetTimings(\"extensions\");\n\tif (state.loaded) {\n\t\tclearExtensionCache();\n\t}\n\tlet preTrustExtensions: LoadExtensionsResult | undefined;\n\tconst initialProjectTrusted = state.settingsManager.isProjectTrusted();\n\tif (options?.resolveProjectTrust || options?.resolveBorrowedProjectTrust) {\n\t\tpreTrustExtensions = await loadProjectTrustExtensions(loader);\n\t}\n\tconst resolveTrust = async () => {\n\t\tif (options?.resolveProjectTrust && preTrustExtensions) {\n\t\t\tconst projectTrusted = await options.resolveProjectTrust({ extensionsResult: preTrustExtensions });\n\t\t\tstate.settingsManager.setProjectTrusted(projectTrusted);\n\t\t} else if (preTrustExtensions) {\n\t\t\tstate.settingsManager.setProjectTrusted(initialProjectTrusted);\n\t\t}\n\t\tif (options?.resolveBorrowedProjectTrust) {\n\t\t\tstate.trustedBorrowedProjectLocalSources = await resolveTrustedBorrowedProjectLocalSources(\n\t\t\t\tloader,\n\t\t\t\toptions.resolveBorrowedProjectTrust,\n\t\t\t\tpreTrustExtensions,\n\t\t\t);\n\t\t}\n\t};\n\tif (!options?.deferProjectTrust) await resolveTrust();\n\tconst complete = async () => {\n\t\tif (options?.deferResources && !options.resolveProjectTrust && !options.resolveBorrowedProjectTrust) {\n\t\t\tawait state.settingsManager.reload();\n\t\t\tconst deferredExtensions: LoadExtensionsResult = {\n\t\t\t\textensions: [],\n\t\t\t\terrors: [],\n\t\t\t\truntime: createExtensionRuntime(),\n\t\t\t};\n\t\t\tstate.extensionsResult = state.extensionsOverride\n\t\t\t\t? state.extensionsOverride(deferredExtensions)\n\t\t\t\t: deferredExtensions;\n\t\t\tstate.extensionSkillSourceInfos = new Map();\n\t\t\tstate.extensionPromptSourceInfos = new Map();\n\t\t\tstate.extensionThemeSourceInfos = new Map();\n\t\t\tstate.workflowResources = [];\n\t\t\tstate.mcpServerContributions = [];\n\t\t\tstate.resourceMetadataByPath = new Map();\n\t\t\tstate.lastSkillPaths = [];\n\t\t\tconst emptySkills = state.skillsOverride ? state.skillsOverride({ skills: [], diagnostics: [] }) : undefined;\n\t\t\tstate.skills = emptySkills?.skills ?? [];\n\t\t\tstate.skillDiagnostics = emptySkills?.diagnostics ?? [];\n\t\t\tstate.skillCatalog = buildSkillCatalog(state.skills);\n\t\t\tstate.lastPromptPaths = [];\n\t\t\tconst emptyPrompts = state.promptsOverride\n\t\t\t\t? state.promptsOverride({ prompts: [], diagnostics: [] })\n\t\t\t\t: undefined;\n\t\t\tstate.prompts = emptyPrompts?.prompts ?? [];\n\t\t\tstate.promptDiagnostics = emptyPrompts?.diagnostics ?? [];\n\t\t\tstate.lastThemePaths = [];\n\t\t\tconst emptyThemes = state.themesOverride ? state.themesOverride({ themes: [], diagnostics: [] }) : undefined;\n\t\t\tstate.themes = emptyThemes?.themes ?? [];\n\t\t\tstate.themeDiagnostics = emptyThemes?.diagnostics ?? [];\n\t\t\tconst emptyAgentsFiles = { agentsFiles: [] };\n\t\t\tstate.agentsFiles = state.agentsFilesOverride\n\t\t\t\t? state.agentsFilesOverride(emptyAgentsFiles).agentsFiles\n\t\t\t\t: emptyAgentsFiles.agentsFiles;\n\t\t\tconst baseSystemPrompt = state.systemPromptSource\n\t\t\t\t? resolvePromptInput(state.systemPromptSource, \"system prompt\")\n\t\t\t\t: undefined;\n\t\t\tstate.systemPrompt = state.systemPromptOverride\n\t\t\t\t? state.systemPromptOverride(baseSystemPrompt)\n\t\t\t\t: baseSystemPrompt;\n\t\t\tstate.systemPromptSourcePath = resolveExistingPromptSourcePath(state.systemPromptSource);\n\t\t\tconst appendSources = state.appendSystemPromptSource ?? [];\n\t\t\tconst baseAppend = appendSources\n\t\t\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t\t\t.filter((s): s is string => s !== undefined);\n\t\t\tstate.appendSystemPrompt = state.appendSystemPromptOverride\n\t\t\t\t? state.appendSystemPromptOverride(baseAppend)\n\t\t\t\t: baseAppend;\n\t\t\tstate.appendSystemPromptSourcePaths = resolveExistingPromptSourcePaths(appendSources);\n\t\t\tstate.loaded = true;\n\t\t\treturn;\n\t\t}\n\t\tconst resolveSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePackageResourcePaths\");\n\t\tconst { resolvedPaths, cliExtensionPaths, builtinPackagePaths } = await resolvePackageResourcePaths(loader, {\n\t\t\ttrustedBorrowedProjectLocalSources: state.trustedBorrowedProjectLocalSources,\n\t\t});\n\t\tendTimingSpan(resolveSpan);\n\t\t// Kept on the loader so post-reload passes (extendResources) can still resolve\n\t\t// package metadata for paths this reload discovered.\n\t\tstate.resourceMetadataByPath = new Map();\n\t\tconst metadataByPath = state.resourceMetadataByPath;\n\n\t\tstate.extensionSkillSourceInfos = new Map();\n\t\tstate.extensionPromptSourceInfos = new Map();\n\t\tstate.extensionThemeSourceInfos = new Map();\n\n\t\tconst enabledExtensions = getEnabledPaths(resolvedPaths.extensions, metadataByPath);\n\t\tconst enabledSkillResources = getEnabledResources(resolvedPaths.skills, metadataByPath);\n\t\tconst enabledPrompts = getEnabledPaths(resolvedPaths.prompts, metadataByPath);\n\t\tconst enabledThemes = getEnabledPaths(resolvedPaths.themes, metadataByPath);\n\n\t\tconst builtinEnabledExtensions = getBuiltinExtensionPaths(\n\t\t\tbuiltinPackagePaths.extensions,\n\t\t\tmetadataByPath,\n\t\t\tstate.noExtensions,\n\t\t);\n\t\tconst builtinEnabledSkillResources = state.noSkills\n\t\t\t? []\n\t\t\t: getEnabledResources(builtinPackagePaths.skills, metadataByPath);\n\t\tconst builtinEnabledPrompts = state.noPromptTemplates\n\t\t\t? []\n\t\t\t: getEnabledPaths(builtinPackagePaths.prompts, metadataByPath);\n\t\tconst builtinEnabledThemes = state.noThemes ? [] : getEnabledPaths(builtinPackagePaths.themes, metadataByPath);\n\n\t\tconst enabledSkills = enabledSkillResources.map((resource) => mapSkillPath(resource, metadataByPath));\n\t\tconst builtinEnabledSkills = builtinEnabledSkillResources.map((resource) =>\n\t\t\tmapSkillPath(resource, metadataByPath),\n\t\t);\n\n\t\taddCliMetadata(cliExtensionPaths, metadataByPath);\n\n\t\tconst cliEnabledExtensions = getEnabledPaths(cliExtensionPaths.extensions, metadataByPath);\n\t\tconst cliEnabledSkills = getEnabledPaths(cliExtensionPaths.skills, metadataByPath);\n\t\tconst cliEnabledPrompts = getEnabledPaths(cliExtensionPaths.prompts, metadataByPath);\n\t\tconst cliEnabledThemes = getEnabledPaths(cliExtensionPaths.themes, metadataByPath);\n\t\tconst workflowResources = collectWorkflowResources(resolvedPaths, cliExtensionPaths, builtinPackagePaths);\n\t\tstate.workflowResources = workflowResources;\n\t\tstate.mcpServerContributions = collectMcpServerContributions(\n\t\t\tresolvedPaths,\n\t\t\tcliExtensionPaths,\n\t\t\tbuiltinPackagePaths,\n\t\t);\n\t\tconst workflowResourceProvider = createWorkflowResourceProvider(loader);\n\n\t\t// The builtin Herdr reporter supersedes the installed file integration in a\n\t\t// Herdr pane; see extensions/herdr-file-integration.ts.\n\t\tconst extensionPaths = filterSupersededHerdrIntegrationPaths(\n\t\t\tmergeResourcePaths(\n\t\t\t\tstate.cwd,\n\t\t\t\tcliEnabledExtensions,\n\t\t\t\tstate.noExtensions ? builtinEnabledExtensions : [...enabledExtensions, ...builtinEnabledExtensions],\n\t\t\t),\n\t\t);\n\n\t\tconst inheritanceSnapshotProvider = createInheritanceSnapshotProvider(loader);\n\t\tconst packageWarnings = collectExtensionPackageWarnings(extensionPaths, metadataByPath);\n\t\tconst extensionsResult: LoadExtensionsResult = options?.deferExtensions\n\t\t\t? { extensions: [], errors: [], runtime: createExtensionRuntime() }\n\t\t\t: await loadFinalExtensionSet(\n\t\t\t\t\tloader,\n\t\t\t\t\textensionPaths,\n\t\t\t\t\tpreTrustExtensions,\n\t\t\t\t\tworkflowResourceProvider,\n\t\t\t\t\tinheritanceSnapshotProvider,\n\t\t\t\t);\n\t\tif (!options?.deferExtensions) mergeExtensionWarnings(extensionsResult, packageWarnings);\n\t\tconst mandatoryExtensionPaths = new Set(\n\t\t\tgetMandatoryBuiltinExtensionPaths().map((path) =>\n\t\t\t\tresolvePath(path, state.cwd, { normalizeUnicodeSpaces: true }),\n\t\t\t),\n\t\t);\n\t\tconst loadedMandatoryExtensions = new Set<Extension>(\n\t\t\textensionsResult.extensions.filter((extension) =>\n\t\t\t\tmandatoryExtensionPaths.has(\n\t\t\t\t\tresolvePath(extension.resolvedPath, state.cwd, { normalizeUnicodeSpaces: true }),\n\t\t\t\t),\n\t\t\t),\n\t\t);\n\t\tfor (const extension of loadedMandatoryExtensions) markTrustedMandatoryRuntimeExtension(extension);\n\n\t\tfor (const p of state.additionalExtensionPaths) {\n\t\t\tif (isLocalPath(p)) {\n\t\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\t\tif (!existsSync(resolved)) {\n\t\t\t\t\textensionsResult.errors.push({ path: resolved, error: `Extension path does not exist: ${resolved}` });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tstate.extensionsResult = state.extensionsOverride ? state.extensionsOverride(extensionsResult) : extensionsResult;\n\t\tapplyExtensionSourceInfo(loader, state.extensionsResult.extensions, metadataByPath);\n\t\tif (options?.deferProjectTrust && preTrustExtensions) {\n\t\t\tfor (const extension of preTrustExtensions.extensions) {\n\t\t\t\tif (!extensionsResult.extensions.includes(extension)) extensionsResult.extensions.push(extension);\n\t\t\t}\n\t\t}\n\t\tfor (const extension of state.extensionsResult.extensions) {\n\t\t\tconst registration = extension.tools.get(\"intercom\");\n\t\t\tif (loadedMandatoryExtensions.has(extension) && registration && isTrustedMandatoryRuntimeTool(registration)) {\n\t\t\t\tmarkTrustedMandatoryRuntimeExtension(extension);\n\t\t\t}\n\t\t}\n\t\tresolveInheritedExtensionOverlaps(state.extensionsResult);\n\n\t\tconst skillPaths = state.noSkills\n\t\t\t? mergeResourcePaths(state.cwd, cliEnabledSkills, state.additionalSkillPaths)\n\t\t\t: mergeResourcePaths(\n\t\t\t\t\tstate.cwd,\n\t\t\t\t\t[...cliEnabledSkills, ...enabledSkills, ...builtinEnabledSkills],\n\t\t\t\t\tstate.additionalSkillPaths,\n\t\t\t\t);\n\n\t\tstate.lastSkillPaths = skillPaths;\n\t\tconst skillsStartedAt = Date.now();\n\t\tconst skillsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateSkillsFromPathsAsync\");\n\t\tawait updateSkillsFromPathsAsync(loader, skillPaths, metadataByPath);\n\t\tendTimingSpan(skillsSpan);\n\t\tawait yieldToEventLoopIfSlow(skillsStartedAt);\n\t\tfor (const p of state.additionalSkillPaths) {\n\t\t\tif (isLocalPath(p)) {\n\t\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\t\tif (!existsSync(resolved) && !state.skillDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\tstate.skillDiagnostics.push({ type: \"error\", message: \"Skill path does not exist\", path: resolved });\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst promptPaths = state.noPromptTemplates\n\t\t\t? mergeResourcePaths(state.cwd, cliEnabledPrompts, state.additionalPromptTemplatePaths)\n\t\t\t: mergeResourcePaths(\n\t\t\t\t\tstate.cwd,\n\t\t\t\t\t[...cliEnabledPrompts, ...enabledPrompts, ...builtinEnabledPrompts],\n\t\t\t\t\tstate.additionalPromptTemplatePaths,\n\t\t\t\t);\n\n\t\tstate.lastPromptPaths = promptPaths;\n\t\tconst promptsStartedAt = Date.now();\n\t\tconst promptsSpan = startTimingSpan(\"DefaultResourceLoader.reload.updatePromptsFromPathsAsync\");\n\t\tawait updatePromptsFromPathsAsync(loader, promptPaths, metadataByPath);\n\t\tendTimingSpan(promptsSpan);\n\t\tawait yieldToEventLoopIfSlow(promptsStartedAt);\n\t\tfor (const p of state.additionalPromptTemplatePaths) {\n\t\t\tif (isLocalPath(p)) {\n\t\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\t\tif (!existsSync(resolved) && !state.promptDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\t\tstate.promptDiagnostics.push({\n\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\tmessage: \"Prompt template path does not exist\",\n\t\t\t\t\t\tpath: resolved,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst themePaths = state.noThemes\n\t\t\t? mergeResourcePaths(state.cwd, cliEnabledThemes, state.additionalThemePaths)\n\t\t\t: mergeResourcePaths(\n\t\t\t\t\tstate.cwd,\n\t\t\t\t\t[...cliEnabledThemes, ...enabledThemes, ...builtinEnabledThemes],\n\t\t\t\t\tstate.additionalThemePaths,\n\t\t\t\t);\n\n\t\tstate.lastThemePaths = themePaths;\n\t\tconst themesStartedAt = Date.now();\n\t\tconst themesSpan = startTimingSpan(\"DefaultResourceLoader.reload.updateThemesFromPathsAsync\");\n\t\tawait updateThemesFromPathsAsync(loader, themePaths, metadataByPath);\n\t\tendTimingSpan(themesSpan);\n\t\tawait yieldToEventLoopIfSlow(themesStartedAt);\n\t\tfor (const p of state.additionalThemePaths) {\n\t\t\tconst resolved = resolveResourcePath(state.cwd, p);\n\t\t\tif (!existsSync(resolved) && !state.themeDiagnostics.some((d) => d.path === resolved)) {\n\t\t\t\tstate.themeDiagnostics.push({ type: \"error\", message: \"Theme path does not exist\", path: resolved });\n\t\t\t}\n\t\t}\n\n\t\tconst contextFilesStartedAt = Date.now();\n\t\tconst contextFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.loadProjectContextFiles\");\n\t\tconst agentsFiles = {\n\t\t\tagentsFiles: state.noContextFiles\n\t\t\t\t? []\n\t\t\t\t: loadProjectContextFiles({\n\t\t\t\t\t\tcwd: state.cwd,\n\t\t\t\t\t\tagentDir: state.agentDir,\n\t\t\t\t\t\tprojectTrusted: state.settingsManager.isProjectTrusted(),\n\t\t\t\t\t}),\n\t\t};\n\t\tendTimingSpan(contextFilesSpan);\n\t\tawait yieldToEventLoopIfSlow(contextFilesStartedAt);\n\t\tconst resolvedAgentsFiles = state.agentsFilesOverride ? state.agentsFilesOverride(agentsFiles) : agentsFiles;\n\t\tstate.agentsFiles = resolvedAgentsFiles.agentsFiles;\n\n\t\tconst promptFilesStartedAt = Date.now();\n\t\tconst promptFilesSpan = startTimingSpan(\"DefaultResourceLoader.reload.resolvePromptFiles\");\n\t\tconst systemPromptSource = state.systemPromptSource ?? discoverSystemPromptFile(loader);\n\t\tconst baseSystemPrompt = resolvePromptInput(systemPromptSource, \"system prompt\");\n\t\tstate.systemPrompt = state.systemPromptOverride ? state.systemPromptOverride(baseSystemPrompt) : baseSystemPrompt;\n\t\tstate.systemPromptSourcePath = resolveExistingPromptSourcePath(systemPromptSource);\n\n\t\tconst discoveredAppend = discoverAppendSystemPromptFile(loader);\n\t\tconst appendSources = state.appendSystemPromptSource ?? (discoveredAppend ? [discoveredAppend] : []);\n\t\tconst baseAppend = appendSources\n\t\t\t.map((s) => resolvePromptInput(s, \"append system prompt\"))\n\t\t\t.filter((s): s is string => s !== undefined);\n\t\tstate.appendSystemPrompt = state.appendSystemPromptOverride\n\t\t\t? state.appendSystemPromptOverride(baseAppend)\n\t\t\t: baseAppend;\n\t\tstate.appendSystemPromptSourcePaths = resolveExistingPromptSourcePaths(appendSources);\n\t\tstate.loaded = true;\n\t\tendTimingSpan(promptFilesSpan);\n\t\tawait yieldToEventLoopIfSlow(promptFilesStartedAt);\n\t};\n\tif (options?.deferProjectTrust && preTrustExtensions) {\n\t\tstate.extensionsResult = preTrustExtensions;\n\t\tpreTrustExtensions = (await withMandatoryResourceLoader(loader, state.cwd)).getExtensions();\n\t\tstate.extensionsResult = preTrustExtensions;\n\t\tlet trustResolution: Promise<void> | undefined;\n\t\toptions.deferProjectTrust(async () => {\n\t\t\ttrustResolution ??= resolveTrust();\n\t\t\tawait trustResolution;\n\t\t\tawait complete();\n\t\t});\n\t\treturn async () => {};\n\t}\n\treturn complete;\n}\n"]}
@@ -28,6 +28,8 @@ export declare class SessionManager {
28
28
  isPersisted(): boolean;
29
29
  /** Persist the current session tree before an in-process attempt is force-finalized. */
30
30
  flush(): void;
31
+ /** Flush only a session whose file has already been started, so closing an unsaved session writes nothing. */
32
+ flushIfStarted(): void;
31
33
  getCwd(): string;
32
34
  getSessionDir(): string;
33
35
  usesDefaultSessionDir(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager-core.d.ts","sourceRoot":"","sources":["../../src/core/session-manager-core.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-manager-core.d.ts","sourceRoot":"","sources":["../../src/core/session-manager-core.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { buildContextEntries, buildSessionIndex, buildSessionProjection, buildSe
10
10
  import { listAllSessions, listProjectSessions } from "./session-manager-list.js";
11
11
  import { migrateToCurrentVersion } from "./session-manager-migrations.js";
12
12
  import { getDefaultSessionDir, getDefaultSessionDirPath } from "./session-manager-paths.js";
13
- import { ensureDirectory, findMostRecentSession, getSessionHeaderCwd, isInternalHeader, loadEntriesFromFile, persistAppendedEntry, readSessionHeader, sessionCwdMatches, writeSessionEntries, } from "./session-manager-storage.js";
13
+ import { ensureDirectory, findMostRecentSession, getSessionHeaderCwd, hasConversationMessage, isInternalHeader, loadEntriesFromFile, persistAppendedEntry, readSessionHeader, sessionCwdMatches, writeSessionEntries, } from "./session-manager-storage.js";
14
14
  import { assertValidSessionId, createSessionId, generateId } from "./session-manager-validation.js";
15
15
  /** Manages conversation sessions as append-only trees stored in JSONL files. Each session entry has an id and parentId forming a tree structure. The "leaf" pointer tracks the current position. Appending creates a child of the current leaf. Branching moves the leaf to an earlier entry, allowing new branches without modifying history. Use buildSessionContext() to get the resolved message list for the LLM, which applies context-deletion filtering and follows the path from root to current leaf. */
16
16
  export class SessionManager {
@@ -144,6 +144,11 @@ export class SessionManager {
144
144
  this._rewriteFile();
145
145
  this.flushed = true;
146
146
  }
147
+ /** Flush only a session whose file has already been started, so closing an unsaved session writes nothing. */
148
+ flushIfStarted() {
149
+ if (this.flushed || hasConversationMessage(this.fileEntries))
150
+ this.flush();
151
+ }
147
152
  getCwd() {
148
153
  return this.cwd;
149
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager-core.js","sourceRoot":"","sources":["../../src/core/session-manager-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentSystemMessage } from \"@bastani/pi-ai\";\nimport type { ImageContent, Message, TextContent, Usage } from \"@bastani/pi-ai/compat\";\nimport { existsSync, readdirSync, statSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { APP_TITLE } from \"../config.js\";\nimport { normalizePath, resolvePath } from \"../utils/paths.ts\";\nimport type { VerbatimCompactionDetails } from \"./compaction/compaction-types.js\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport { createBackupSnapshot, createBranchedSessionState, forkSessionFromFile } from \"./session-manager-archive.ts\";\nimport { classifiedWorkflowMetadata, validSessionWorkflowMetadata } from \"./session-manager-classification.ts\";\nimport {\n\tcreateBranchSummaryEntry,\n\tcreateCompactionEntry,\n\tcreateContextEditEntry,\n\tcreateCustomEntry,\n\tcreateCustomMessageEntry,\n\tcreateLabelEntry,\n\tcreateMessageEntry,\n\tcreateModelChangeEntry,\n\tcreateSessionFilePath,\n\tcreateSessionHeader,\n\tcreateSessionInfoEntry,\n\tcreateSessionSummaryEntry,\n\tcreateThinkingLevelChangeEntry,\n\tgetEntriesWithoutHeader,\n\tgetLatestSessionName,\n} from \"./session-manager-entries.ts\";\nimport {\n\tbuildContextEntries,\n\tbuildSessionIndex,\n\tbuildSessionProjection,\n\tbuildSessionTree,\n\tgetBranchPath,\n} from \"./session-manager-history.ts\";\nimport { listAllSessions, listProjectSessions } from \"./session-manager-list.ts\";\nimport { migrateToCurrentVersion } from \"./session-manager-migrations.ts\";\nimport { getDefaultSessionDir, getDefaultSessionDirPath } from \"./session-manager-paths.ts\";\nimport {\n\tensureDirectory,\n\tfindMostRecentSession,\n\tgetSessionHeaderCwd,\n\tisInternalHeader,\n\tloadEntriesFromFile,\n\tpersistAppendedEntry,\n\treadSessionHeader,\n\tsessionCwdMatches,\n\twriteSessionEntries,\n} from \"./session-manager-storage.ts\";\nimport type {\n\tBranchSummaryEntry,\n\tContextEditEntry,\n\tFileEntry,\n\tNewSessionOptions,\n\tSessionContext,\n\tSessionEntry,\n\tSessionHeader,\n\tSessionInfo,\n\tSessionListProgress,\n\tSessionNameState,\n\tSessionProjection,\n\tSessionTreeNode,\n\tSessionWorkflowMetadata,\n\tUsageEntry,\n} from \"./session-manager-types.ts\";\nimport { assertValidSessionId, createSessionId, generateId } from \"./session-manager-validation.ts\";\n\n/** Manages conversation sessions as append-only trees stored in JSONL files. Each session entry has an id and parentId forming a tree structure. The \"leaf\" pointer tracks the current position. Appending creates a child of the current leaf. Branching moves the leaf to an earlier entry, allowing new branches without modifying history. Use buildSessionContext() to get the resolved message list for the LLM, which applies context-deletion filtering and follows the path from root to current leaf. */\nexport class SessionManager {\n\tprivate sessionId: string = \"\";\n\tprivate sessionFile: string | undefined;\n\tprivate sessionDir: string;\n\tprivate cwd: string;\n\tprivate persist: boolean;\n\tprivate flushed: boolean = false;\n\tprivate fileEntries: FileEntry[] = [];\n\tprivate byId: Map<string, SessionEntry> = new Map();\n\tprivate labelsById: Map<string, string> = new Map();\n\tprivate labelTimestampsById: Map<string, string> = new Map();\n\tprivate leafId: string | null = null;\n\n\tprivate constructor(\n\t\tcwd: string,\n\t\tsessionDir: string,\n\t\tsessionFile: string | undefined,\n\t\tpersist: boolean,\n\t\tnewSessionOptions?: NewSessionOptions,\n\t\tpreloadedFileEntries?: FileEntry[],\n\t) {\n\t\tthis.cwd = resolvePath(cwd);\n\t\tthis.sessionDir = normalizePath(sessionDir);\n\t\tthis.persist = persist;\n\t\tif (persist && this.sessionDir) {\n\t\t\tensureDirectory(this.sessionDir);\n\t\t}\n\n\t\tif (sessionFile) {\n\t\t\tthis._setSessionFile(sessionFile, preloadedFileEntries);\n\t\t} else if (preloadedFileEntries?.length) {\n\t\t\tthis._loadEntries(preloadedFileEntries, newSessionOptions);\n\t\t} else {\n\t\t\tthis.newSession(newSessionOptions);\n\t\t}\n\t}\n\n\tprivate _loadEntries(entries: FileEntry[], options?: NewSessionOptions): void {\n\t\tconst header = entries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\tif (header) {\n\t\t\tthis.fileEntries = entries;\n\t\t\tthis.sessionId = header.id;\n\t\t\tif (migrateToCurrentVersion(this.fileEntries)) {\n\t\t\t\tthis._rewriteFile();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.newSession(options);\n\t\t\tthis.fileEntries = this.fileEntries.concat(entries);\n\t\t}\n\t\tthis._buildIndex();\n\t}\n\n\t/** Switch to a different session file (used for resume and branching) */\n\tsetSessionFile(sessionFile: string): void {\n\t\tthis._setSessionFile(sessionFile);\n\t}\n\n\tprivate _setSessionFile(sessionFile: string, preloadedFileEntries?: FileEntry[]): void {\n\t\tthis.sessionFile = resolvePath(sessionFile);\n\t\tif (existsSync(this.sessionFile)) {\n\t\t\tthis.fileEntries = preloadedFileEntries ?? loadEntriesFromFile(this.sessionFile);\n\n\t\t\t// If file was empty, initialize it with a valid session header. If it was non-empty but did not parse as a session, fail without modifying it.\n\t\t\tif (this.fileEntries.length === 0) {\n\t\t\t\tconst explicitPath = this.sessionFile;\n\t\t\t\tif (statSync(explicitPath).size > 0) {\n\t\t\t\t\tthrow new Error(`Session file is not a valid ${APP_TITLE} session: ${explicitPath}`);\n\t\t\t\t}\n\t\t\t\tthis.newSession();\n\t\t\t\tthis.sessionFile = explicitPath;\n\t\t\t\tthis._rewriteFile();\n\t\t\t\tthis.flushed = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst header = this.fileEntries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\t\tthis.sessionId = header?.id ?? createSessionId();\n\n\t\t\tif (migrateToCurrentVersion(this.fileEntries)) {\n\t\t\t\tthis._rewriteFile();\n\t\t\t}\n\n\t\t\tthis._buildIndex();\n\t\t\tthis.flushed = true;\n\t\t} else {\n\t\t\tconst explicitPath = this.sessionFile;\n\t\t\tthis.newSession();\n\t\t\tthis.sessionFile = explicitPath; // preserve explicit path from --session flag\n\t\t}\n\t}\n\n\tnewSession(options?: NewSessionOptions): string | undefined {\n\t\tif (options?.id !== undefined) {\n\t\t\tassertValidSessionId(options.id);\n\t\t}\n\t\tthis.sessionId = options?.id ?? createSessionId();\n\t\tconst timestamp = new Date().toISOString();\n\t\tconst header = createSessionHeader(\n\t\t\tthis.sessionId,\n\t\t\tthis.cwd,\n\t\t\ttimestamp,\n\t\t\toptions?.parentSession,\n\t\t\toptions?.internal,\n\t\t\toptions?.workflow,\n\t\t);\n\t\tthis.fileEntries = [header];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.labelTimestampsById.clear();\n\t\tthis.leafId = null;\n\t\tthis.flushed = false;\n\n\t\tif (this.persist) {\n\t\t\tthis.sessionFile = createSessionFilePath(this.getSessionDir(), timestamp, this.sessionId);\n\t\t}\n\t\treturn this.sessionFile;\n\t}\n\n\t/** Mark the session as workflow-owned, repairing malformed markers while preserving valid ownership. */\n\tmarkSessionInternal(workflow?: SessionWorkflowMetadata): void {\n\t\tconst header = this.fileEntries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\tif (!header || classifiedWorkflowMetadata(header)) return;\n\t\tconst validWorkflow = validSessionWorkflowMetadata(workflow);\n\t\tif (!validWorkflow) return;\n\t\theader.internal = true;\n\t\theader.workflow = validWorkflow;\n\t\tif (this.flushed) this._rewriteFile();\n\t}\n\n\tprivate _buildIndex(): void {\n\t\tconst index = buildSessionIndex(this.fileEntries);\n\t\tthis.byId = index.byId;\n\t\tthis.labelsById = index.labelsById;\n\t\tthis.labelTimestampsById = index.labelTimestampsById;\n\t\tthis.leafId = index.leafId;\n\t}\n\n\tprivate _rewriteFile(): void {\n\t\tif (!this.persist || !this.sessionFile) return;\n\t\twriteSessionEntries(this.sessionFile, this.fileEntries);\n\t}\n\n\tisPersisted(): boolean {\n\t\treturn this.persist;\n\t}\n\n\t/** Persist the current session tree before an in-process attempt is force-finalized. */\n\tflush(): void {\n\t\tif (!this.persist || !this.sessionFile) return;\n\t\tthis._rewriteFile();\n\t\tthis.flushed = true;\n\t}\n\n\tgetCwd(): string {\n\t\treturn this.cwd;\n\t}\n\n\tgetSessionDir(): string {\n\t\treturn this.sessionDir;\n\t}\n\n\tusesDefaultSessionDir(): boolean {\n\t\treturn this.sessionDir === getDefaultSessionDirPath(this.cwd);\n\t}\n\n\tgetSessionId(): string {\n\t\treturn this.sessionId;\n\t}\n\n\tgetSessionFile(): string | undefined {\n\t\treturn this.sessionFile;\n\t}\n\n\t_persist(entry: SessionEntry): void {\n\t\tif (!this.persist || !this.sessionFile) return;\n\t\tthis.flushed = persistAppendedEntry(this.sessionFile, this.fileEntries, entry, this.flushed);\n\t}\n\n\tprivate _appendEntry(entry: SessionEntry): void {\n\t\tconst previousLeafId = this.leafId;\n\t\tthis.fileEntries.push(entry);\n\t\tthis.byId.set(entry.id, entry);\n\t\tthis.leafId = entry.id;\n\t\ttry {\n\t\t\tthis._persist(entry);\n\t\t} catch (error) {\n\t\t\t// Unpublish on write failure, so retries cannot point at an unwritten parent.\n\t\t\tthis.fileEntries.pop();\n\t\t\tthis.byId.delete(entry.id);\n\t\t\tthis.leafId = previousLeafId;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/** Append a message as child of current leaf, then advance leaf. Returns entry id. */\n\tappendMessage(message: Message | CustomMessage | BashExecutionMessage): string {\n\t\tconst entry = createMessageEntry(message, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a thinking level change as child of current leaf, then advance leaf. Returns entry id. */\n\tappendThinkingLevelChange(thinkingLevel: string): string {\n\t\tconst entry = createThinkingLevelChangeEntry(thinkingLevel, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Record auxiliary model usage without adding it to the LLM context. */\n\tappendUsage(kind: string, provider: string, model: string, usage: Usage, note?: string): UsageEntry {\n\t\tconst entry: UsageEntry = {\n\t\t\ttype: \"usage\",\n\t\t\tid: generateId(this.byId),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tkind,\n\t\t\tprovider,\n\t\t\tmodel,\n\t\t\tusage,\n\t\t\t...(note === undefined ? {} : { note }),\n\t\t};\n\t\tthis._appendEntry(entry);\n\t\treturn entry;\n\t}\n\n\t/** Append a model change as child of current leaf, then advance leaf. Returns entry id. */\n\tappendModelChange(provider: string, modelId: string): string {\n\t\tconst entry = createModelChangeEntry(provider, modelId, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\tappendCompaction(\n\t\tcompactedText: string,\n\t\tfirstKeptEntryId: string | null,\n\t\ttokensBefore: number,\n\t\tdetails: VerbatimCompactionDetails,\n\t\tusage?: Usage,\n\t): string {\n\t\tif (firstKeptEntryId !== null && !this.byId.has(firstKeptEntryId))\n\t\t\tthrow new Error(`Entry ${firstKeptEntryId} not found`);\n\t\tconst entry = createCompactionEntry(\n\t\t\tcompactedText,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\tdetails,\n\t\t\tusage,\n\t\t\tthis.byId,\n\t\t\tthis.leafId,\n\t\t);\n\t\tconst systemMessage = getCurrentSystemMessage(this.buildSessionProjection().messages);\n\t\tif (systemMessage) entry.systemMessage = { ...systemMessage, timestamp: new Date(entry.timestamp).getTime() };\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Write a recoverable snapshot of the current session entries without mutating the active JSONL. */\n\twriteBackupSnapshot(label = \"compact\"): string | undefined {\n\t\tif (!this.persist) return undefined;\n\t\treturn createBackupSnapshot(this.sessionFile, this.fileEntries, label);\n\t}\n\n\t/** Append a branch-local edit to an earlier model-visible entry. */\n\tappendContextEdit(targetId: string, replacement: ContextEditEntry[\"replacement\"]): string {\n\t\tif (\n\t\t\treplacement !== null &&\n\t\t\t(typeof replacement !== \"object\" ||\n\t\t\t\t!(\"content\" in replacement) ||\n\t\t\t\t(typeof replacement.content !== \"string\" && !Array.isArray(replacement.content)))\n\t\t) {\n\t\t\tthrow new Error(\"Context edit replacement must be null or contain string/array content\");\n\t\t}\n\t\tconst target = this.byId.get(targetId);\n\t\tif (!target) throw new Error(`Entry ${targetId} not found`);\n\t\tif (!this.getBranch().some((entry) => entry.id === targetId)) {\n\t\t\tthrow new Error(`Entry ${targetId} is not on the active branch`);\n\t\t}\n\t\tconst editable =\n\t\t\ttarget.type === \"custom_message\" ||\n\t\t\t(target.type === \"message\" &&\n\t\t\t\t(target.message.role === \"user\" ||\n\t\t\t\t\ttarget.message.role === \"assistant\" ||\n\t\t\t\t\ttarget.message.role === \"toolResult\"));\n\t\tif (!editable) throw new Error(`Entry ${targetId} does not contribute editable model content`);\n\t\tconst targetRole = target.type === \"message\" ? target.message.role : \"custom\";\n\t\tconst normalizedReplacement =\n\t\t\treplacement !== null &&\n\t\t\t(targetRole === \"assistant\" || targetRole === \"toolResult\") &&\n\t\t\ttypeof replacement.content === \"string\"\n\t\t\t\t? { content: [{ type: \"text\" as const, text: replacement.content }] }\n\t\t\t\t: replacement;\n\t\tconst entry = createContextEditEntry(targetId, normalizedReplacement, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a custom entry (for extensions) as child of current leaf, then advance leaf. Returns entry id. */\n\tappendCustomEntry(customType: string, data?: unknown): string {\n\t\tconst entry = createCustomEntry(customType, data, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a session info entry (e.g., display name). Returns entry id. */\n\tappendSessionInfo(name: string): string {\n\t\tconst entry = createSessionInfoEntry(name, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a generated resume summary anchored to the message it describes. Returns entry id. */\n\tappendSessionSummary(summary: string, summarizedThroughId: string, usage?: Usage): string {\n\t\tif (!this.byId.has(summarizedThroughId)) throw new Error(`Entry ${summarizedThroughId} not found`);\n\t\tconst entry = createSessionSummaryEntry(summary, summarizedThroughId, usage, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Get the current session name from the latest session_info entry, if any. */\n\tgetSessionName(): string | undefined {\n\t\treturn this.getSessionNameState().name;\n\t}\n\n\t/**\n\t * Get the session name state. `hasName` is true for a session that was named and\n\t * then cleared even though `name` is undefined; a never-named session reports\n\t * `hasName: false`. Read-side only: the JSONL already records the distinction.\n\t */\n\tgetSessionNameState(): SessionNameState {\n\t\treturn getLatestSessionName(this.getEntries());\n\t}\n\n\t/** Append a custom message entry (for extensions) that participates in LLM context unless excluded. */\n\tappendCustomMessageEntry<T = unknown>(\n\t\tcustomType: string,\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\tdisplay: boolean,\n\t\tdetails?: T,\n\t\texcludeFromContext?: boolean,\n\t\tprotectedReconciliation?: { delivery: \"steer\" | \"followUp\" },\n\t\tstageAdmissionKey?: string,\n\t): string {\n\t\tconst entry = createCustomMessageEntry(\n\t\t\tcustomType,\n\t\t\tcontent,\n\t\t\tdisplay,\n\t\t\tdetails,\n\t\t\texcludeFromContext,\n\t\t\tprotectedReconciliation,\n\t\t\tthis.byId,\n\t\t\tthis.leafId,\n\t\t\tstageAdmissionKey,\n\t\t);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\tgetLeafId(): string | null {\n\t\treturn this.leafId;\n\t}\n\n\tgetLeafEntry(): SessionEntry | undefined {\n\t\treturn this.leafId ? this.byId.get(this.leafId) : undefined;\n\t}\n\n\tgetEntry(id: string): SessionEntry | undefined {\n\t\treturn this.byId.get(id);\n\t}\n\n\t/** Get all direct children of an entry. */\n\tgetChildren(parentId: string): SessionEntry[] {\n\t\tconst children: SessionEntry[] = [];\n\t\tfor (const entry of this.byId.values()) {\n\t\t\tif (entry.parentId === parentId) {\n\t\t\t\tchildren.push(entry);\n\t\t\t}\n\t\t}\n\t\treturn children;\n\t}\n\n\t/** Get the label for an entry, if any. */\n\tgetLabel(id: string): string | undefined {\n\t\treturn this.labelsById.get(id);\n\t}\n\n\t/** Set or clear a label on an entry. */\n\tappendLabelChange(targetId: string, label: string | undefined): string {\n\t\tif (!this.byId.has(targetId)) {\n\t\t\tthrow new Error(`Entry ${targetId} not found`);\n\t\t}\n\t\tconst entry = createLabelEntry(targetId, label, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\tif (label) {\n\t\t\tthis.labelsById.set(targetId, label);\n\t\t\tthis.labelTimestampsById.set(targetId, entry.timestamp);\n\t\t} else {\n\t\t\tthis.labelsById.delete(targetId);\n\t\t\tthis.labelTimestampsById.delete(targetId);\n\t\t}\n\t\treturn entry.id;\n\t}\n\n\t/** Walk from entry to root, returning all entries in path order. */\n\tgetBranch(fromId?: string): SessionEntry[] {\n\t\treturn getBranchPath(fromId ?? this.leafId, this.byId);\n\t}\n\n\t/** Return the active branch entries after applying the latest compaction boundary. */\n\tbuildContextEntries(): SessionEntry[] {\n\t\treturn buildContextEntries(this.getEntries(), this.leafId, this.byId);\n\t}\n\n\t/** Build provenance-preserving, compaction-aware model context from the current leaf. */\n\tbuildSessionProjection(): SessionProjection {\n\t\treturn buildSessionProjection(this.getEntries(), this.leafId, this.byId);\n\t}\n\n\t/** Build the session context (what gets sent to the LLM). */\n\tbuildSessionContext(): SessionContext {\n\t\tconst { messages, thinkingLevel, model } = this.buildSessionProjection();\n\t\treturn { messages, thinkingLevel, model };\n\t}\n\n\t/** Get session header. */\n\tgetHeader(): SessionHeader | null {\n\t\tconst header = this.fileEntries.find((entry) => entry.type === \"session\");\n\t\treturn header ? (header as SessionHeader) : null;\n\t}\n\n\t/** Get all session entries (excludes header). Returns a shallow copy. */\n\tgetEntries(): SessionEntry[] {\n\t\treturn getEntriesWithoutHeader(this.fileEntries);\n\t}\n\n\t/** Get the session as a tree structure. Returns a shallow defensive copy of all entries. */\n\tgetTree(): SessionTreeNode[] {\n\t\treturn buildSessionTree(this.getEntries(), this.labelsById, this.labelTimestampsById);\n\t}\n\n\t/** Start a new branch from an earlier entry. */\n\tbranch(branchFromId: string): void {\n\t\tif (!this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t}\n\n\t/** Reset the leaf pointer to null (before any entries). */\n\tresetLeaf(): void {\n\t\tthis.leafId = null;\n\t}\n\n\t/** Start a new branch with a summary of the abandoned path. */\n\tbranchWithSummary(\n\t\tbranchFromId: string | null,\n\t\tsummary: string,\n\t\tdetails?: unknown,\n\t\tfromHook?: boolean,\n\t\tusage?: import(\"@bastani/pi-ai/compat\").Usage,\n\t\tfromId: string = this.leafId ?? \"root\",\n\t): string {\n\t\tif (branchFromId !== null && !this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t\tconst entry: BranchSummaryEntry = createBranchSummaryEntry(\n\t\t\tbranchFromId,\n\t\t\tfromId,\n\t\t\tsummary,\n\t\t\tdetails,\n\t\t\tusage,\n\t\t\tfromHook,\n\t\t\tthis.byId,\n\t\t);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Create a new session file containing only the path from root to the specified leaf. */\n\tcreateBranchedSession(leafId: string): string | undefined {\n\t\tconst result = createBranchedSessionState({\n\t\t\tleafId,\n\t\t\tpersist: this.persist,\n\t\t\tsessionDir: this.getSessionDir(),\n\t\t\tcwd: this.cwd,\n\t\t\tpreviousSessionFile: this.sessionFile,\n\t\t\tworkflow: classifiedWorkflowMetadata(this.getHeader()),\n\t\t\tpath: this.getBranch(leafId),\n\t\t\tlabelsById: this.labelsById,\n\t\t\tlabelTimestampsById: this.labelTimestampsById,\n\t\t});\n\t\tthis.fileEntries = result.fileEntries;\n\t\tthis.sessionId = result.sessionId;\n\t\tif (result.sessionFile) this.sessionFile = result.sessionFile;\n\t\tthis._buildIndex();\n\n\t\tif (this.persist) {\n\t\t\tif (result.shouldRewriteFile) this._rewriteFile();\n\t\t\tthis.flushed = result.flushed ?? false;\n\t\t\treturn result.sessionFile;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Create a new session. */\n\tstatic create(cwd: string, sessionDir?: string, options?: NewSessionOptions): SessionManager {\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);\n\t\treturn new SessionManager(cwd, dir, undefined, true, options);\n\t}\n\n\t/** Open a specific session file. */\n\tstatic open(path: string, sessionDir?: string, cwdOverride?: string): SessionManager {\n\t\tconst resolvedPath = resolvePath(path);\n\t\tconst entries = loadEntriesFromFile(resolvedPath);\n\t\tconst header = entries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\tconst cwd = cwdOverride ?? header?.cwd ?? process.cwd();\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : resolve(resolvedPath, \"..\");\n\t\treturn new SessionManager(cwd, dir, resolvedPath, true, undefined, entries);\n\t}\n\n\t/** Continue the most recent session (skips internal workflow sessions unless `includeInternal: true`). */\n\tstatic continueRecent(cwd: string, sessionDir?: string, options?: { includeInternal?: boolean }): SessionManager {\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);\n\t\tconst filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);\n\t\tconst mostRecent = findMostRecentSession(dir, filterCwd ? cwd : undefined, options?.includeInternal === true);\n\t\treturn new SessionManager(cwd, dir, mostRecent ?? undefined, true);\n\t}\n\n\t/** Create an in-memory session (no file persistence), optionally preloaded with entries. */\n\tstatic inMemory(cwd: string = process.cwd(), options?: NewSessionOptions, entries?: FileEntry[]): SessionManager {\n\t\treturn new SessionManager(cwd, \"\", undefined, false, options, entries);\n\t}\n\n\t/** Fork a session from another project directory into the current project. */\n\tstatic forkFrom(\n\t\tsourcePath: string,\n\t\ttargetCwd: string,\n\t\tsessionDir?: string,\n\t\toptions?: NewSessionOptions,\n\t): SessionManager {\n\t\tconst forked = forkSessionFromFile(sourcePath, targetCwd, sessionDir, options);\n\t\treturn new SessionManager(forked.cwd, forked.sessionDir, forked.sessionFile, true);\n\t}\n\n\t/** Find an exact, non-internal session ID by reading headers, not transcripts. */\n\tstatic findById(cwd: string, id: string, sessionDir?: string): string | undefined {\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);\n\t\tconst filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);\n\t\tconst resolvedCwd = resolvePath(cwd);\n\t\ttry {\n\t\t\tfor (const file of readdirSync(dir)) {\n\t\t\t\tif (!file.endsWith(\".jsonl\")) continue;\n\t\t\t\tconst path = join(dir, file);\n\t\t\t\tconst header = readSessionHeader(path);\n\t\t\t\tif (header?.id !== id || isInternalHeader(header)) continue;\n\t\t\t\tif (filterCwd && !sessionCwdMatches(getSessionHeaderCwd(header), resolvedCwd)) continue;\n\t\t\t\treturn path;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Discovery is best-effort, matching list().\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** List sessions for a directory. Internal (workflow) sessions are excluded unless `includeInternal: true`. */\n\tstatic async list(\n\t\tcwd: string,\n\t\tsessionDir?: string,\n\t\tonProgress?: SessionListProgress,\n\t\toptions?: { includeInternal?: boolean; signal?: AbortSignal } | AbortSignal,\n\t): Promise<SessionInfo[]> {\n\t\tconst signal = options && \"aborted\" in options ? options : options?.signal;\n\t\treturn listProjectSessions(\n\t\t\tcwd,\n\t\t\tsessionDir,\n\t\t\tonProgress,\n\t\t\toptions !== undefined && \"includeInternal\" in options && options.includeInternal === true,\n\t\t\tsignal,\n\t\t);\n\t}\n\n\t/** List sessions across all directories. Internal (workflow) sessions are excluded unless `includeInternal: true`. */\n\tstatic async listAll(onProgress?: SessionListProgress, signal?: AbortSignal): Promise<SessionInfo[]>;\n\tstatic async listAll(\n\t\tsessionDir?: string,\n\t\tonProgress?: SessionListProgress,\n\t\toptions?: { includeInternal?: boolean; signal?: AbortSignal } | AbortSignal,\n\t): Promise<SessionInfo[]>;\n\tstatic async listAll(\n\t\tsessionDirOrOnProgress?: string | SessionListProgress,\n\t\tonProgress?: SessionListProgress | AbortSignal,\n\t\toptions?: { includeInternal?: boolean; signal?: AbortSignal } | AbortSignal,\n\t): Promise<SessionInfo[]> {\n\t\tconst signal =\n\t\t\toptions && \"aborted\" in options\n\t\t\t\t? options\n\t\t\t\t: (options?.signal ?? (typeof onProgress === \"object\" ? onProgress : undefined));\n\t\treturn listAllSessions(\n\t\t\tsessionDirOrOnProgress,\n\t\t\ttypeof onProgress === \"function\" ? onProgress : undefined,\n\t\t\toptions !== undefined && \"includeInternal\" in options && options.includeInternal === true,\n\t\t\tsignal,\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"file":"session-manager-core.js","sourceRoot":"","sources":["../../src/core/session-manager-core.ts"],"names":[],"mappings":"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","sourcesContent":["import { getCurrentSystemMessage } from \"@bastani/pi-ai\";\nimport type { ImageContent, Message, TextContent, Usage } from \"@bastani/pi-ai/compat\";\nimport { existsSync, readdirSync, statSync } from \"fs\";\nimport { join, resolve } from \"path\";\nimport { APP_TITLE } from \"../config.js\";\nimport { normalizePath, resolvePath } from \"../utils/paths.ts\";\nimport type { VerbatimCompactionDetails } from \"./compaction/compaction-types.js\";\nimport type { BashExecutionMessage, CustomMessage } from \"./messages.ts\";\nimport { createBackupSnapshot, createBranchedSessionState, forkSessionFromFile } from \"./session-manager-archive.ts\";\nimport { classifiedWorkflowMetadata, validSessionWorkflowMetadata } from \"./session-manager-classification.ts\";\nimport {\n\tcreateBranchSummaryEntry,\n\tcreateCompactionEntry,\n\tcreateContextEditEntry,\n\tcreateCustomEntry,\n\tcreateCustomMessageEntry,\n\tcreateLabelEntry,\n\tcreateMessageEntry,\n\tcreateModelChangeEntry,\n\tcreateSessionFilePath,\n\tcreateSessionHeader,\n\tcreateSessionInfoEntry,\n\tcreateSessionSummaryEntry,\n\tcreateThinkingLevelChangeEntry,\n\tgetEntriesWithoutHeader,\n\tgetLatestSessionName,\n} from \"./session-manager-entries.ts\";\nimport {\n\tbuildContextEntries,\n\tbuildSessionIndex,\n\tbuildSessionProjection,\n\tbuildSessionTree,\n\tgetBranchPath,\n} from \"./session-manager-history.ts\";\nimport { listAllSessions, listProjectSessions } from \"./session-manager-list.ts\";\nimport { migrateToCurrentVersion } from \"./session-manager-migrations.ts\";\nimport { getDefaultSessionDir, getDefaultSessionDirPath } from \"./session-manager-paths.ts\";\nimport {\n\tensureDirectory,\n\tfindMostRecentSession,\n\tgetSessionHeaderCwd,\n\thasConversationMessage,\n\tisInternalHeader,\n\tloadEntriesFromFile,\n\tpersistAppendedEntry,\n\treadSessionHeader,\n\tsessionCwdMatches,\n\twriteSessionEntries,\n} from \"./session-manager-storage.ts\";\nimport type {\n\tBranchSummaryEntry,\n\tContextEditEntry,\n\tFileEntry,\n\tNewSessionOptions,\n\tSessionContext,\n\tSessionEntry,\n\tSessionHeader,\n\tSessionInfo,\n\tSessionListProgress,\n\tSessionNameState,\n\tSessionProjection,\n\tSessionTreeNode,\n\tSessionWorkflowMetadata,\n\tUsageEntry,\n} from \"./session-manager-types.ts\";\nimport { assertValidSessionId, createSessionId, generateId } from \"./session-manager-validation.ts\";\n\n/** Manages conversation sessions as append-only trees stored in JSONL files. Each session entry has an id and parentId forming a tree structure. The \"leaf\" pointer tracks the current position. Appending creates a child of the current leaf. Branching moves the leaf to an earlier entry, allowing new branches without modifying history. Use buildSessionContext() to get the resolved message list for the LLM, which applies context-deletion filtering and follows the path from root to current leaf. */\nexport class SessionManager {\n\tprivate sessionId: string = \"\";\n\tprivate sessionFile: string | undefined;\n\tprivate sessionDir: string;\n\tprivate cwd: string;\n\tprivate persist: boolean;\n\tprivate flushed: boolean = false;\n\tprivate fileEntries: FileEntry[] = [];\n\tprivate byId: Map<string, SessionEntry> = new Map();\n\tprivate labelsById: Map<string, string> = new Map();\n\tprivate labelTimestampsById: Map<string, string> = new Map();\n\tprivate leafId: string | null = null;\n\n\tprivate constructor(\n\t\tcwd: string,\n\t\tsessionDir: string,\n\t\tsessionFile: string | undefined,\n\t\tpersist: boolean,\n\t\tnewSessionOptions?: NewSessionOptions,\n\t\tpreloadedFileEntries?: FileEntry[],\n\t) {\n\t\tthis.cwd = resolvePath(cwd);\n\t\tthis.sessionDir = normalizePath(sessionDir);\n\t\tthis.persist = persist;\n\t\tif (persist && this.sessionDir) {\n\t\t\tensureDirectory(this.sessionDir);\n\t\t}\n\n\t\tif (sessionFile) {\n\t\t\tthis._setSessionFile(sessionFile, preloadedFileEntries);\n\t\t} else if (preloadedFileEntries?.length) {\n\t\t\tthis._loadEntries(preloadedFileEntries, newSessionOptions);\n\t\t} else {\n\t\t\tthis.newSession(newSessionOptions);\n\t\t}\n\t}\n\n\tprivate _loadEntries(entries: FileEntry[], options?: NewSessionOptions): void {\n\t\tconst header = entries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\tif (header) {\n\t\t\tthis.fileEntries = entries;\n\t\t\tthis.sessionId = header.id;\n\t\t\tif (migrateToCurrentVersion(this.fileEntries)) {\n\t\t\t\tthis._rewriteFile();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.newSession(options);\n\t\t\tthis.fileEntries = this.fileEntries.concat(entries);\n\t\t}\n\t\tthis._buildIndex();\n\t}\n\n\t/** Switch to a different session file (used for resume and branching) */\n\tsetSessionFile(sessionFile: string): void {\n\t\tthis._setSessionFile(sessionFile);\n\t}\n\n\tprivate _setSessionFile(sessionFile: string, preloadedFileEntries?: FileEntry[]): void {\n\t\tthis.sessionFile = resolvePath(sessionFile);\n\t\tif (existsSync(this.sessionFile)) {\n\t\t\tthis.fileEntries = preloadedFileEntries ?? loadEntriesFromFile(this.sessionFile);\n\n\t\t\t// If file was empty, initialize it with a valid session header. If it was non-empty but did not parse as a session, fail without modifying it.\n\t\t\tif (this.fileEntries.length === 0) {\n\t\t\t\tconst explicitPath = this.sessionFile;\n\t\t\t\tif (statSync(explicitPath).size > 0) {\n\t\t\t\t\tthrow new Error(`Session file is not a valid ${APP_TITLE} session: ${explicitPath}`);\n\t\t\t\t}\n\t\t\t\tthis.newSession();\n\t\t\t\tthis.sessionFile = explicitPath;\n\t\t\t\tthis._rewriteFile();\n\t\t\t\tthis.flushed = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst header = this.fileEntries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\t\tthis.sessionId = header?.id ?? createSessionId();\n\n\t\t\tif (migrateToCurrentVersion(this.fileEntries)) {\n\t\t\t\tthis._rewriteFile();\n\t\t\t}\n\n\t\t\tthis._buildIndex();\n\t\t\tthis.flushed = true;\n\t\t} else {\n\t\t\tconst explicitPath = this.sessionFile;\n\t\t\tthis.newSession();\n\t\t\tthis.sessionFile = explicitPath; // preserve explicit path from --session flag\n\t\t}\n\t}\n\n\tnewSession(options?: NewSessionOptions): string | undefined {\n\t\tif (options?.id !== undefined) {\n\t\t\tassertValidSessionId(options.id);\n\t\t}\n\t\tthis.sessionId = options?.id ?? createSessionId();\n\t\tconst timestamp = new Date().toISOString();\n\t\tconst header = createSessionHeader(\n\t\t\tthis.sessionId,\n\t\t\tthis.cwd,\n\t\t\ttimestamp,\n\t\t\toptions?.parentSession,\n\t\t\toptions?.internal,\n\t\t\toptions?.workflow,\n\t\t);\n\t\tthis.fileEntries = [header];\n\t\tthis.byId.clear();\n\t\tthis.labelsById.clear();\n\t\tthis.labelTimestampsById.clear();\n\t\tthis.leafId = null;\n\t\tthis.flushed = false;\n\n\t\tif (this.persist) {\n\t\t\tthis.sessionFile = createSessionFilePath(this.getSessionDir(), timestamp, this.sessionId);\n\t\t}\n\t\treturn this.sessionFile;\n\t}\n\n\t/** Mark the session as workflow-owned, repairing malformed markers while preserving valid ownership. */\n\tmarkSessionInternal(workflow?: SessionWorkflowMetadata): void {\n\t\tconst header = this.fileEntries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\tif (!header || classifiedWorkflowMetadata(header)) return;\n\t\tconst validWorkflow = validSessionWorkflowMetadata(workflow);\n\t\tif (!validWorkflow) return;\n\t\theader.internal = true;\n\t\theader.workflow = validWorkflow;\n\t\tif (this.flushed) this._rewriteFile();\n\t}\n\n\tprivate _buildIndex(): void {\n\t\tconst index = buildSessionIndex(this.fileEntries);\n\t\tthis.byId = index.byId;\n\t\tthis.labelsById = index.labelsById;\n\t\tthis.labelTimestampsById = index.labelTimestampsById;\n\t\tthis.leafId = index.leafId;\n\t}\n\n\tprivate _rewriteFile(): void {\n\t\tif (!this.persist || !this.sessionFile) return;\n\t\twriteSessionEntries(this.sessionFile, this.fileEntries);\n\t}\n\n\tisPersisted(): boolean {\n\t\treturn this.persist;\n\t}\n\n\t/** Persist the current session tree before an in-process attempt is force-finalized. */\n\tflush(): void {\n\t\tif (!this.persist || !this.sessionFile) return;\n\t\tthis._rewriteFile();\n\t\tthis.flushed = true;\n\t}\n\n\t/** Flush only a session whose file has already been started, so closing an unsaved session writes nothing. */\n\tflushIfStarted(): void {\n\t\tif (this.flushed || hasConversationMessage(this.fileEntries)) this.flush();\n\t}\n\n\tgetCwd(): string {\n\t\treturn this.cwd;\n\t}\n\n\tgetSessionDir(): string {\n\t\treturn this.sessionDir;\n\t}\n\n\tusesDefaultSessionDir(): boolean {\n\t\treturn this.sessionDir === getDefaultSessionDirPath(this.cwd);\n\t}\n\n\tgetSessionId(): string {\n\t\treturn this.sessionId;\n\t}\n\n\tgetSessionFile(): string | undefined {\n\t\treturn this.sessionFile;\n\t}\n\n\t_persist(entry: SessionEntry): void {\n\t\tif (!this.persist || !this.sessionFile) return;\n\t\tthis.flushed = persistAppendedEntry(this.sessionFile, this.fileEntries, entry, this.flushed);\n\t}\n\n\tprivate _appendEntry(entry: SessionEntry): void {\n\t\tconst previousLeafId = this.leafId;\n\t\tthis.fileEntries.push(entry);\n\t\tthis.byId.set(entry.id, entry);\n\t\tthis.leafId = entry.id;\n\t\ttry {\n\t\t\tthis._persist(entry);\n\t\t} catch (error) {\n\t\t\t// Unpublish on write failure, so retries cannot point at an unwritten parent.\n\t\t\tthis.fileEntries.pop();\n\t\t\tthis.byId.delete(entry.id);\n\t\t\tthis.leafId = previousLeafId;\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/** Append a message as child of current leaf, then advance leaf. Returns entry id. */\n\tappendMessage(message: Message | CustomMessage | BashExecutionMessage): string {\n\t\tconst entry = createMessageEntry(message, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a thinking level change as child of current leaf, then advance leaf. Returns entry id. */\n\tappendThinkingLevelChange(thinkingLevel: string): string {\n\t\tconst entry = createThinkingLevelChangeEntry(thinkingLevel, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Record auxiliary model usage without adding it to the LLM context. */\n\tappendUsage(kind: string, provider: string, model: string, usage: Usage, note?: string): UsageEntry {\n\t\tconst entry: UsageEntry = {\n\t\t\ttype: \"usage\",\n\t\t\tid: generateId(this.byId),\n\t\t\tparentId: this.leafId,\n\t\t\ttimestamp: new Date().toISOString(),\n\t\t\tkind,\n\t\t\tprovider,\n\t\t\tmodel,\n\t\t\tusage,\n\t\t\t...(note === undefined ? {} : { note }),\n\t\t};\n\t\tthis._appendEntry(entry);\n\t\treturn entry;\n\t}\n\n\t/** Append a model change as child of current leaf, then advance leaf. Returns entry id. */\n\tappendModelChange(provider: string, modelId: string): string {\n\t\tconst entry = createModelChangeEntry(provider, modelId, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\tappendCompaction(\n\t\tcompactedText: string,\n\t\tfirstKeptEntryId: string | null,\n\t\ttokensBefore: number,\n\t\tdetails: VerbatimCompactionDetails,\n\t\tusage?: Usage,\n\t): string {\n\t\tif (firstKeptEntryId !== null && !this.byId.has(firstKeptEntryId))\n\t\t\tthrow new Error(`Entry ${firstKeptEntryId} not found`);\n\t\tconst entry = createCompactionEntry(\n\t\t\tcompactedText,\n\t\t\tfirstKeptEntryId,\n\t\t\ttokensBefore,\n\t\t\tdetails,\n\t\t\tusage,\n\t\t\tthis.byId,\n\t\t\tthis.leafId,\n\t\t);\n\t\tconst systemMessage = getCurrentSystemMessage(this.buildSessionProjection().messages);\n\t\tif (systemMessage) entry.systemMessage = { ...systemMessage, timestamp: new Date(entry.timestamp).getTime() };\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Write a recoverable snapshot of the current session entries without mutating the active JSONL. */\n\twriteBackupSnapshot(label = \"compact\"): string | undefined {\n\t\tif (!this.persist) return undefined;\n\t\treturn createBackupSnapshot(this.sessionFile, this.fileEntries, label);\n\t}\n\n\t/** Append a branch-local edit to an earlier model-visible entry. */\n\tappendContextEdit(targetId: string, replacement: ContextEditEntry[\"replacement\"]): string {\n\t\tif (\n\t\t\treplacement !== null &&\n\t\t\t(typeof replacement !== \"object\" ||\n\t\t\t\t!(\"content\" in replacement) ||\n\t\t\t\t(typeof replacement.content !== \"string\" && !Array.isArray(replacement.content)))\n\t\t) {\n\t\t\tthrow new Error(\"Context edit replacement must be null or contain string/array content\");\n\t\t}\n\t\tconst target = this.byId.get(targetId);\n\t\tif (!target) throw new Error(`Entry ${targetId} not found`);\n\t\tif (!this.getBranch().some((entry) => entry.id === targetId)) {\n\t\t\tthrow new Error(`Entry ${targetId} is not on the active branch`);\n\t\t}\n\t\tconst editable =\n\t\t\ttarget.type === \"custom_message\" ||\n\t\t\t(target.type === \"message\" &&\n\t\t\t\t(target.message.role === \"user\" ||\n\t\t\t\t\ttarget.message.role === \"assistant\" ||\n\t\t\t\t\ttarget.message.role === \"toolResult\"));\n\t\tif (!editable) throw new Error(`Entry ${targetId} does not contribute editable model content`);\n\t\tconst targetRole = target.type === \"message\" ? target.message.role : \"custom\";\n\t\tconst normalizedReplacement =\n\t\t\treplacement !== null &&\n\t\t\t(targetRole === \"assistant\" || targetRole === \"toolResult\") &&\n\t\t\ttypeof replacement.content === \"string\"\n\t\t\t\t? { content: [{ type: \"text\" as const, text: replacement.content }] }\n\t\t\t\t: replacement;\n\t\tconst entry = createContextEditEntry(targetId, normalizedReplacement, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a custom entry (for extensions) as child of current leaf, then advance leaf. Returns entry id. */\n\tappendCustomEntry(customType: string, data?: unknown): string {\n\t\tconst entry = createCustomEntry(customType, data, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a session info entry (e.g., display name). Returns entry id. */\n\tappendSessionInfo(name: string): string {\n\t\tconst entry = createSessionInfoEntry(name, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Append a generated resume summary anchored to the message it describes. Returns entry id. */\n\tappendSessionSummary(summary: string, summarizedThroughId: string, usage?: Usage): string {\n\t\tif (!this.byId.has(summarizedThroughId)) throw new Error(`Entry ${summarizedThroughId} not found`);\n\t\tconst entry = createSessionSummaryEntry(summary, summarizedThroughId, usage, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Get the current session name from the latest session_info entry, if any. */\n\tgetSessionName(): string | undefined {\n\t\treturn this.getSessionNameState().name;\n\t}\n\n\t/**\n\t * Get the session name state. `hasName` is true for a session that was named and\n\t * then cleared even though `name` is undefined; a never-named session reports\n\t * `hasName: false`. Read-side only: the JSONL already records the distinction.\n\t */\n\tgetSessionNameState(): SessionNameState {\n\t\treturn getLatestSessionName(this.getEntries());\n\t}\n\n\t/** Append a custom message entry (for extensions) that participates in LLM context unless excluded. */\n\tappendCustomMessageEntry<T = unknown>(\n\t\tcustomType: string,\n\t\tcontent: string | (TextContent | ImageContent)[],\n\t\tdisplay: boolean,\n\t\tdetails?: T,\n\t\texcludeFromContext?: boolean,\n\t\tprotectedReconciliation?: { delivery: \"steer\" | \"followUp\" },\n\t\tstageAdmissionKey?: string,\n\t): string {\n\t\tconst entry = createCustomMessageEntry(\n\t\t\tcustomType,\n\t\t\tcontent,\n\t\t\tdisplay,\n\t\t\tdetails,\n\t\t\texcludeFromContext,\n\t\t\tprotectedReconciliation,\n\t\t\tthis.byId,\n\t\t\tthis.leafId,\n\t\t\tstageAdmissionKey,\n\t\t);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\tgetLeafId(): string | null {\n\t\treturn this.leafId;\n\t}\n\n\tgetLeafEntry(): SessionEntry | undefined {\n\t\treturn this.leafId ? this.byId.get(this.leafId) : undefined;\n\t}\n\n\tgetEntry(id: string): SessionEntry | undefined {\n\t\treturn this.byId.get(id);\n\t}\n\n\t/** Get all direct children of an entry. */\n\tgetChildren(parentId: string): SessionEntry[] {\n\t\tconst children: SessionEntry[] = [];\n\t\tfor (const entry of this.byId.values()) {\n\t\t\tif (entry.parentId === parentId) {\n\t\t\t\tchildren.push(entry);\n\t\t\t}\n\t\t}\n\t\treturn children;\n\t}\n\n\t/** Get the label for an entry, if any. */\n\tgetLabel(id: string): string | undefined {\n\t\treturn this.labelsById.get(id);\n\t}\n\n\t/** Set or clear a label on an entry. */\n\tappendLabelChange(targetId: string, label: string | undefined): string {\n\t\tif (!this.byId.has(targetId)) {\n\t\t\tthrow new Error(`Entry ${targetId} not found`);\n\t\t}\n\t\tconst entry = createLabelEntry(targetId, label, this.byId, this.leafId);\n\t\tthis._appendEntry(entry);\n\t\tif (label) {\n\t\t\tthis.labelsById.set(targetId, label);\n\t\t\tthis.labelTimestampsById.set(targetId, entry.timestamp);\n\t\t} else {\n\t\t\tthis.labelsById.delete(targetId);\n\t\t\tthis.labelTimestampsById.delete(targetId);\n\t\t}\n\t\treturn entry.id;\n\t}\n\n\t/** Walk from entry to root, returning all entries in path order. */\n\tgetBranch(fromId?: string): SessionEntry[] {\n\t\treturn getBranchPath(fromId ?? this.leafId, this.byId);\n\t}\n\n\t/** Return the active branch entries after applying the latest compaction boundary. */\n\tbuildContextEntries(): SessionEntry[] {\n\t\treturn buildContextEntries(this.getEntries(), this.leafId, this.byId);\n\t}\n\n\t/** Build provenance-preserving, compaction-aware model context from the current leaf. */\n\tbuildSessionProjection(): SessionProjection {\n\t\treturn buildSessionProjection(this.getEntries(), this.leafId, this.byId);\n\t}\n\n\t/** Build the session context (what gets sent to the LLM). */\n\tbuildSessionContext(): SessionContext {\n\t\tconst { messages, thinkingLevel, model } = this.buildSessionProjection();\n\t\treturn { messages, thinkingLevel, model };\n\t}\n\n\t/** Get session header. */\n\tgetHeader(): SessionHeader | null {\n\t\tconst header = this.fileEntries.find((entry) => entry.type === \"session\");\n\t\treturn header ? (header as SessionHeader) : null;\n\t}\n\n\t/** Get all session entries (excludes header). Returns a shallow copy. */\n\tgetEntries(): SessionEntry[] {\n\t\treturn getEntriesWithoutHeader(this.fileEntries);\n\t}\n\n\t/** Get the session as a tree structure. Returns a shallow defensive copy of all entries. */\n\tgetTree(): SessionTreeNode[] {\n\t\treturn buildSessionTree(this.getEntries(), this.labelsById, this.labelTimestampsById);\n\t}\n\n\t/** Start a new branch from an earlier entry. */\n\tbranch(branchFromId: string): void {\n\t\tif (!this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t}\n\n\t/** Reset the leaf pointer to null (before any entries). */\n\tresetLeaf(): void {\n\t\tthis.leafId = null;\n\t}\n\n\t/** Start a new branch with a summary of the abandoned path. */\n\tbranchWithSummary(\n\t\tbranchFromId: string | null,\n\t\tsummary: string,\n\t\tdetails?: unknown,\n\t\tfromHook?: boolean,\n\t\tusage?: import(\"@bastani/pi-ai/compat\").Usage,\n\t\tfromId: string = this.leafId ?? \"root\",\n\t): string {\n\t\tif (branchFromId !== null && !this.byId.has(branchFromId)) {\n\t\t\tthrow new Error(`Entry ${branchFromId} not found`);\n\t\t}\n\t\tthis.leafId = branchFromId;\n\t\tconst entry: BranchSummaryEntry = createBranchSummaryEntry(\n\t\t\tbranchFromId,\n\t\t\tfromId,\n\t\t\tsummary,\n\t\t\tdetails,\n\t\t\tusage,\n\t\t\tfromHook,\n\t\t\tthis.byId,\n\t\t);\n\t\tthis._appendEntry(entry);\n\t\treturn entry.id;\n\t}\n\n\t/** Create a new session file containing only the path from root to the specified leaf. */\n\tcreateBranchedSession(leafId: string): string | undefined {\n\t\tconst result = createBranchedSessionState({\n\t\t\tleafId,\n\t\t\tpersist: this.persist,\n\t\t\tsessionDir: this.getSessionDir(),\n\t\t\tcwd: this.cwd,\n\t\t\tpreviousSessionFile: this.sessionFile,\n\t\t\tworkflow: classifiedWorkflowMetadata(this.getHeader()),\n\t\t\tpath: this.getBranch(leafId),\n\t\t\tlabelsById: this.labelsById,\n\t\t\tlabelTimestampsById: this.labelTimestampsById,\n\t\t});\n\t\tthis.fileEntries = result.fileEntries;\n\t\tthis.sessionId = result.sessionId;\n\t\tif (result.sessionFile) this.sessionFile = result.sessionFile;\n\t\tthis._buildIndex();\n\n\t\tif (this.persist) {\n\t\t\tif (result.shouldRewriteFile) this._rewriteFile();\n\t\t\tthis.flushed = result.flushed ?? false;\n\t\t\treturn result.sessionFile;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** Create a new session. */\n\tstatic create(cwd: string, sessionDir?: string, options?: NewSessionOptions): SessionManager {\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);\n\t\treturn new SessionManager(cwd, dir, undefined, true, options);\n\t}\n\n\t/** Open a specific session file. */\n\tstatic open(path: string, sessionDir?: string, cwdOverride?: string): SessionManager {\n\t\tconst resolvedPath = resolvePath(path);\n\t\tconst entries = loadEntriesFromFile(resolvedPath);\n\t\tconst header = entries.find((entry) => entry.type === \"session\") as SessionHeader | undefined;\n\t\tconst cwd = cwdOverride ?? header?.cwd ?? process.cwd();\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : resolve(resolvedPath, \"..\");\n\t\treturn new SessionManager(cwd, dir, resolvedPath, true, undefined, entries);\n\t}\n\n\t/** Continue the most recent session (skips internal workflow sessions unless `includeInternal: true`). */\n\tstatic continueRecent(cwd: string, sessionDir?: string, options?: { includeInternal?: boolean }): SessionManager {\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);\n\t\tconst filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);\n\t\tconst mostRecent = findMostRecentSession(dir, filterCwd ? cwd : undefined, options?.includeInternal === true);\n\t\treturn new SessionManager(cwd, dir, mostRecent ?? undefined, true);\n\t}\n\n\t/** Create an in-memory session (no file persistence), optionally preloaded with entries. */\n\tstatic inMemory(cwd: string = process.cwd(), options?: NewSessionOptions, entries?: FileEntry[]): SessionManager {\n\t\treturn new SessionManager(cwd, \"\", undefined, false, options, entries);\n\t}\n\n\t/** Fork a session from another project directory into the current project. */\n\tstatic forkFrom(\n\t\tsourcePath: string,\n\t\ttargetCwd: string,\n\t\tsessionDir?: string,\n\t\toptions?: NewSessionOptions,\n\t): SessionManager {\n\t\tconst forked = forkSessionFromFile(sourcePath, targetCwd, sessionDir, options);\n\t\treturn new SessionManager(forked.cwd, forked.sessionDir, forked.sessionFile, true);\n\t}\n\n\t/** Find an exact, non-internal session ID by reading headers, not transcripts. */\n\tstatic findById(cwd: string, id: string, sessionDir?: string): string | undefined {\n\t\tconst dir = sessionDir ? normalizePath(sessionDir) : getDefaultSessionDir(cwd);\n\t\tconst filterCwd = sessionDir !== undefined && dir !== getDefaultSessionDirPath(cwd);\n\t\tconst resolvedCwd = resolvePath(cwd);\n\t\ttry {\n\t\t\tfor (const file of readdirSync(dir)) {\n\t\t\t\tif (!file.endsWith(\".jsonl\")) continue;\n\t\t\t\tconst path = join(dir, file);\n\t\t\t\tconst header = readSessionHeader(path);\n\t\t\t\tif (header?.id !== id || isInternalHeader(header)) continue;\n\t\t\t\tif (filterCwd && !sessionCwdMatches(getSessionHeaderCwd(header), resolvedCwd)) continue;\n\t\t\t\treturn path;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Discovery is best-effort, matching list().\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/** List sessions for a directory. Internal (workflow) sessions are excluded unless `includeInternal: true`. */\n\tstatic async list(\n\t\tcwd: string,\n\t\tsessionDir?: string,\n\t\tonProgress?: SessionListProgress,\n\t\toptions?: { includeInternal?: boolean; signal?: AbortSignal } | AbortSignal,\n\t): Promise<SessionInfo[]> {\n\t\tconst signal = options && \"aborted\" in options ? options : options?.signal;\n\t\treturn listProjectSessions(\n\t\t\tcwd,\n\t\t\tsessionDir,\n\t\t\tonProgress,\n\t\t\toptions !== undefined && \"includeInternal\" in options && options.includeInternal === true,\n\t\t\tsignal,\n\t\t);\n\t}\n\n\t/** List sessions across all directories. Internal (workflow) sessions are excluded unless `includeInternal: true`. */\n\tstatic async listAll(onProgress?: SessionListProgress, signal?: AbortSignal): Promise<SessionInfo[]>;\n\tstatic async listAll(\n\t\tsessionDir?: string,\n\t\tonProgress?: SessionListProgress,\n\t\toptions?: { includeInternal?: boolean; signal?: AbortSignal } | AbortSignal,\n\t): Promise<SessionInfo[]>;\n\tstatic async listAll(\n\t\tsessionDirOrOnProgress?: string | SessionListProgress,\n\t\tonProgress?: SessionListProgress | AbortSignal,\n\t\toptions?: { includeInternal?: boolean; signal?: AbortSignal } | AbortSignal,\n\t): Promise<SessionInfo[]> {\n\t\tconst signal =\n\t\t\toptions && \"aborted\" in options\n\t\t\t\t? options\n\t\t\t\t: (options?.signal ?? (typeof onProgress === \"object\" ? onProgress : undefined));\n\t\treturn listAllSessions(\n\t\t\tsessionDirOrOnProgress,\n\t\t\ttypeof onProgress === \"function\" ? onProgress : undefined,\n\t\t\toptions !== undefined && \"includeInternal\" in options && options.includeInternal === true,\n\t\t\tsignal,\n\t\t);\n\t}\n}\n"]}
@@ -83,6 +83,7 @@ export type PackageSource = string | {
83
83
  prompts?: string[];
84
84
  themes?: string[];
85
85
  workflows?: string[];
86
+ mcpServers?: string[];
86
87
  };
87
88
  export interface BashInterceptorSettings {
88
89
  enabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-types.d.ts","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-types.d.ts","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC","sourcesContent":["export const CACHE_WARMING_MODES = [\"off\", \"streaming\", \"idle\"] as const;\nexport type CacheWarmingMode = (typeof CACHE_WARMING_MODES)[number];\n\nimport type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar } from \"@earendil-works/pi-tui\";\n\nexport interface CompactionModelOverride {\n\treserveTokens?: number;\n\tpreserve_recent?: number;\n}\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tcompression_ratio?: number; // default: 0.5 (fraction of compactable context to keep)\n\tpreserve_recent?: number; // default: 2 (recent context-eligible messages to keep)\n\tquery?: string; // default: auto-detected from session context\n\tmodelOverrides?: Record<string, CompactionModelOverride>; // exact \"provider/modelId\" keys\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface SessionSummarySettings {\n\tenabled?: boolean; // default: true - generate a one-line resume-picker summary once the agent goes idle\n}\n\nexport interface ProviderRetrySettings {\n\ttimeoutMs?: number; // SDK/provider request timeout in milliseconds\n\tmaxRetries?: number; // SDK/provider retry attempts\n\tmaxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxAgentDelayMs?: number; // default: 60000\n\tprovider?: ProviderRetrySettings;\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\timageWidthCells?: number; // default: 60 (preferred inline image width in terminal cells)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n\tshowTerminalProgress?: boolean; // default: false (OSC 9;4 terminal progress indicators)\n\thyperlinks?: boolean | \"auto\";\n\timages?: \"kitty\" | \"iterm2\" | \"auto\" | false;\n\ttrueColor?: boolean | \"auto\";\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface SearchSettings {\n\tcontextBefore?: number;\n\tcontextAfter?: number;\n}\nexport interface ThinkingBudgetsSettings {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport type MermaidRenderingMode = \"off\" | \"final\" | \"streaming\";\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n\tmermaid?: MermaidRenderingMode; // default: \"streaming\"\n\tlatex?: boolean; // default: true\n}\n\nexport interface WarningSettings {\n\tanthropicExtraUsage?: boolean; // default: true\n}\n\nexport type DefaultProjectTrust = \"ask\" | \"always\" | \"never\";\n\nexport type TransportSetting = Transport;\n\n/** What the terminal keeps when Atomic's fullscreen session exits. */\nexport type FullscreenExitOutput = \"transcript\" | \"resume-hint\";\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n * - autoload=false: start empty and apply only explicit resource patterns\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\tautoload?: boolean;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t\t\tworkflows?: string[];\n\t };\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: false\n}\n\n/** Provider filters for the candidates `model: \"auto\"` may route to. Does not affect `routerModel`. */\nexport interface ModelRoutingSettings {\n\t/** When nonempty, only these provider IDs are routing candidates. */\n\tallowedProviders?: string[];\n\t/** Provider IDs that are never routing candidates; applied after `allowedProviders`. */\n\texcludedProviders?: string[];\n}\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tfirstRunOnboardingStartedVersion?: string;\n\tonboardedVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\trouterModel?: string; // default: \"\"; workflow-stage/subagent auto-model router inference only, never \"auto\"\n\tmodelRouting?: ModelRoutingSettings;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\tmodelThinkingLevels?: Record<string, \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">;\n\tfallbackModels?: string[]; // Ordered main-chat fallback models, optionally suffixed with :thinkingLevel\n\ttransport?: TransportSetting; // default: \"auto\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tenableAnalytics?: boolean; // storage only; no analytics transmission is performed\n\ttrackingId?: string; // stable UUID generated on first analytics opt-in\n\tshowCacheMissNotices?: boolean; // default: false - show cache costs and provider recovery diagnostics\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tsessionSummary?: SessionSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\texternalEditor?: string; // Command for Ctrl+G external editor; takes precedence over VISUAL/EDITOR\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: boolean;\n\tdefaultProjectTrust?: DefaultProjectTrust; // default: \"ask\"; global setting only\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tbashInterceptor?: BashInterceptorSettings; // default: disabled; when enabled, user_bash handlers can intercept bash tool execution\n\tsearch?: SearchSettings; // Context lines for search results; defaults: before=1, after=3\n\tnpmCommand?: string[]; // Command used for npm package lookup/install operations, argv-style (e.g., [\"mise\", \"exec\", \"node@20\", \"--\", \"npm\"])\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tenableInstallTelemetry?: boolean; // default: true - version-adoption ping on first interactive launch with fresh settings or after an update with changelog entries\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tworkflows?: string[]; // Array of local workflow file paths or directories\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\tterminal?: TerminalSettings;\n\therdr?: { enabled?: boolean }; // default: true, only inside an interactive Herdr pane\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tdefaultTools?: string[]; // Initial built-in tool selection; extension and SDK custom tools stay enabled\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\toutputPad?: 0 | 1; // Horizontal padding for chat message output (default: 1)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tfullscreenScrollbar?: ScrollViewScrollbar; // default: \"auto\"\n\tfullscreenExitOutput?: FullscreenExitOutput; // default: \"transcript\"\n\tfullscreenCopyOnSelect?: boolean; // default: true\n\tmarkdown?: MarkdownSettings;\n\twarnings?: WarningSettings;\n\tsessionDir?: string; // Custom session storage directory (same format as --session-dir CLI flag)\n\thttpProxy?: string; // Proxy URL applied as HTTP_PROXY and HTTPS_PROXY; global setting only\n\thttpIdleTimeoutMs?: number | string; // HTTP idle timeout; 0 or \"disabled\" disables it\n\tcacheWarming?: CacheWarmingMode; // Global only; each refresh costs money. Default: streaming.\n\twebsocketConnectTimeoutMs?: number | string; // WebSocket connect timeout; 0 or \"disabled\" disables it\n\tstreamDeadlineMs?: number | string; // Max idle gap between provider stream events; 0 or \"disabled\" disables it\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsManagerCreateOptions {\n\tprojectTrusted?: boolean;\n}\n\nexport type SettingsFieldOrigin = \"primary\" | \"legacy\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n\t/**\n\t * Optional write-specific lock whose callback receives the current primary\n\t * document rather than a layered effective view. Storage implementations\n\t * without a distinct primary document can omit this method; layered storage\n\t * implementations must provide it to keep fallback fields out of the primary\n\t * document.\n\t */\n\twithPrimaryWriteLock?(scope: SettingsScope, fn: (currentPrimary: string | undefined) => string | undefined): void;\n\tgetFieldOrigin?(scope: SettingsScope, field: keyof Settings): SettingsFieldOrigin | undefined;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\tpath?: string;\n\terror: Error;\n}\n"]}
1
+ {"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC","sourcesContent":["export const CACHE_WARMING_MODES = [\"off\", \"streaming\", \"idle\"] as const;\nexport type CacheWarmingMode = (typeof CACHE_WARMING_MODES)[number];\n\nimport type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar } from \"@earendil-works/pi-tui\";\n\nexport interface CompactionModelOverride {\n\treserveTokens?: number;\n\tpreserve_recent?: number;\n}\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tcompression_ratio?: number; // default: 0.5 (fraction of compactable context to keep)\n\tpreserve_recent?: number; // default: 2 (recent context-eligible messages to keep)\n\tquery?: string; // default: auto-detected from session context\n\tmodelOverrides?: Record<string, CompactionModelOverride>; // exact \"provider/modelId\" keys\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface SessionSummarySettings {\n\tenabled?: boolean; // default: true - generate a one-line resume-picker summary once the agent goes idle\n}\n\nexport interface ProviderRetrySettings {\n\ttimeoutMs?: number; // SDK/provider request timeout in milliseconds\n\tmaxRetries?: number; // SDK/provider retry attempts\n\tmaxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxAgentDelayMs?: number; // default: 60000\n\tprovider?: ProviderRetrySettings;\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\timageWidthCells?: number; // default: 60 (preferred inline image width in terminal cells)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n\tshowTerminalProgress?: boolean; // default: false (OSC 9;4 terminal progress indicators)\n\thyperlinks?: boolean | \"auto\";\n\timages?: \"kitty\" | \"iterm2\" | \"auto\" | false;\n\ttrueColor?: boolean | \"auto\";\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface SearchSettings {\n\tcontextBefore?: number;\n\tcontextAfter?: number;\n}\nexport interface ThinkingBudgetsSettings {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport type MermaidRenderingMode = \"off\" | \"final\" | \"streaming\";\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n\tmermaid?: MermaidRenderingMode; // default: \"streaming\"\n\tlatex?: boolean; // default: true\n}\n\nexport interface WarningSettings {\n\tanthropicExtraUsage?: boolean; // default: true\n}\n\nexport type DefaultProjectTrust = \"ask\" | \"always\" | \"never\";\n\nexport type TransportSetting = Transport;\n\n/** What the terminal keeps when Atomic's fullscreen session exits. */\nexport type FullscreenExitOutput = \"transcript\" | \"resume-hint\";\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n * - autoload=false: start empty and apply only explicit resource patterns\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\tautoload?: boolean;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t\t\tworkflows?: string[];\n\t\t\tmcpServers?: string[];\n\t };\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: false\n}\n\n/** Provider filters for the candidates `model: \"auto\"` may route to. Does not affect `routerModel`. */\nexport interface ModelRoutingSettings {\n\t/** When nonempty, only these provider IDs are routing candidates. */\n\tallowedProviders?: string[];\n\t/** Provider IDs that are never routing candidates; applied after `allowedProviders`. */\n\texcludedProviders?: string[];\n}\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tfirstRunOnboardingStartedVersion?: string;\n\tonboardedVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\trouterModel?: string; // default: \"\"; workflow-stage/subagent auto-model router inference only, never \"auto\"\n\tmodelRouting?: ModelRoutingSettings;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\tmodelThinkingLevels?: Record<string, \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">;\n\tfallbackModels?: string[]; // Ordered main-chat fallback models, optionally suffixed with :thinkingLevel\n\ttransport?: TransportSetting; // default: \"auto\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tenableAnalytics?: boolean; // storage only; no analytics transmission is performed\n\ttrackingId?: string; // stable UUID generated on first analytics opt-in\n\tshowCacheMissNotices?: boolean; // default: false - show cache costs and provider recovery diagnostics\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tsessionSummary?: SessionSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\texternalEditor?: string; // Command for Ctrl+G external editor; takes precedence over VISUAL/EDITOR\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: boolean;\n\tdefaultProjectTrust?: DefaultProjectTrust; // default: \"ask\"; global setting only\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tbashInterceptor?: BashInterceptorSettings; // default: disabled; when enabled, user_bash handlers can intercept bash tool execution\n\tsearch?: SearchSettings; // Context lines for search results; defaults: before=1, after=3\n\tnpmCommand?: string[]; // Command used for npm package lookup/install operations, argv-style (e.g., [\"mise\", \"exec\", \"node@20\", \"--\", \"npm\"])\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tenableInstallTelemetry?: boolean; // default: true - version-adoption ping on first interactive launch with fresh settings or after an update with changelog entries\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tworkflows?: string[]; // Array of local workflow file paths or directories\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\tterminal?: TerminalSettings;\n\therdr?: { enabled?: boolean }; // default: true, only inside an interactive Herdr pane\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tdefaultTools?: string[]; // Initial built-in tool selection; extension and SDK custom tools stay enabled\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\toutputPad?: 0 | 1; // Horizontal padding for chat message output (default: 1)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tfullscreenScrollbar?: ScrollViewScrollbar; // default: \"auto\"\n\tfullscreenExitOutput?: FullscreenExitOutput; // default: \"transcript\"\n\tfullscreenCopyOnSelect?: boolean; // default: true\n\tmarkdown?: MarkdownSettings;\n\twarnings?: WarningSettings;\n\tsessionDir?: string; // Custom session storage directory (same format as --session-dir CLI flag)\n\thttpProxy?: string; // Proxy URL applied as HTTP_PROXY and HTTPS_PROXY; global setting only\n\thttpIdleTimeoutMs?: number | string; // HTTP idle timeout; 0 or \"disabled\" disables it\n\tcacheWarming?: CacheWarmingMode; // Global only; each refresh costs money. Default: streaming.\n\twebsocketConnectTimeoutMs?: number | string; // WebSocket connect timeout; 0 or \"disabled\" disables it\n\tstreamDeadlineMs?: number | string; // Max idle gap between provider stream events; 0 or \"disabled\" disables it\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsManagerCreateOptions {\n\tprojectTrusted?: boolean;\n}\n\nexport type SettingsFieldOrigin = \"primary\" | \"legacy\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n\t/**\n\t * Optional write-specific lock whose callback receives the current primary\n\t * document rather than a layered effective view. Storage implementations\n\t * without a distinct primary document can omit this method; layered storage\n\t * implementations must provide it to keep fallback fields out of the primary\n\t * document.\n\t */\n\twithPrimaryWriteLock?(scope: SettingsScope, fn: (currentPrimary: string | undefined) => string | undefined): void;\n\tgetFieldOrigin?(scope: SettingsScope, field: keyof Settings): SettingsFieldOrigin | undefined;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\tpath?: string;\n\terror: Error;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { Provider } from "@bastani/pi-ai";
1
+ import { type Provider } from "@bastani/pi-ai";
2
2
  import { type LlamaModelInfo } from "./client.js";
3
3
  export declare const LLAMA_PROVIDER_ID = "llama.cpp";
4
4
  export declare const DEFAULT_LLAMA_SERVER_URL = "http://127.0.0.1:8080";
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/extensions/llama/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKX,QAAQ,EAGR,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAEN,KAAK,cAAc,EAInB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AA8DhE,MAAM,WAAW,uBAAuB;IACvC,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACzC,UAAU,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAC/G;AAED,wBAAgB,mBAAmB,IAAI,uBAAuB,CAkH7D"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/extensions/llama/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAON,KAAK,QAAQ,EAGb,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAEN,KAAK,cAAc,EAInB,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAiFhE,MAAM,WAAW,uBAAuB;IACvC,QAAQ,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACzC,UAAU,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAC/G;AAED,wBAAgB,mBAAmB,IAAI,uBAAuB,CAuH7D"}