@astralyn/pi 1.4.10 → 1.4.11

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 (97) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/bundle/chunks/{chunk-MF3T3ETJ.js → chunk-NUQMVNKQ.js} +2 -2
  3. package/dist/bundle/chunks/{chunk-6GTUUUCJ.js → chunk-PUU43PDV.js} +14 -29
  4. package/dist/bundle/chunks/{chunk-UCH27AVQ.js → chunk-TH3QDDPD.js} +1 -1
  5. package/dist/bundle/chunks/{execute-FQKRO4XJ.js → execute-VLAIP26K.js} +1 -1
  6. package/dist/bundle/chunks/{virtual-modules-6IJ6V2CG.js → virtual-modules-63XNTSVN.js} +1 -1
  7. package/dist/bundle/cli.js +1 -1
  8. package/dist/bundle/index.js +1 -1
  9. package/dist/bundle/rpc-entry.js +1 -1
  10. package/dist/core/agent-session.d.ts.map +1 -1
  11. package/dist/core/agent-session.js +0 -3
  12. package/dist/core/agent-session.js.map +1 -1
  13. package/dist/core/extensions/index.d.ts +1 -1
  14. package/dist/core/extensions/index.d.ts.map +1 -1
  15. package/dist/core/extensions/index.js.map +1 -1
  16. package/dist/core/extensions/loader.d.ts.map +1 -1
  17. package/dist/core/extensions/loader.js +14 -7
  18. package/dist/core/extensions/loader.js.map +1 -1
  19. package/dist/core/tasks/delivery.d.ts +4 -20
  20. package/dist/core/tasks/delivery.d.ts.map +1 -1
  21. package/dist/core/tasks/delivery.js +5 -58
  22. package/dist/core/tasks/delivery.js.map +1 -1
  23. package/dist/core/tasks/limits.d.ts +3 -19
  24. package/dist/core/tasks/limits.d.ts.map +1 -1
  25. package/dist/core/tasks/limits.js +3 -24
  26. package/dist/core/tasks/limits.js.map +1 -1
  27. package/dist/core/tasks/runtime.d.ts +1 -12
  28. package/dist/core/tasks/runtime.d.ts.map +1 -1
  29. package/dist/core/tasks/runtime.js +1 -81
  30. package/dist/core/tasks/runtime.js.map +1 -1
  31. package/dist/core/tasks/session.d.ts +0 -3
  32. package/dist/core/tasks/session.d.ts.map +1 -1
  33. package/dist/core/tasks/session.js +0 -16
  34. package/dist/core/tasks/session.js.map +1 -1
  35. package/dist/core/tasks/types.d.ts +2 -74
  36. package/dist/core/tasks/types.d.ts.map +1 -1
  37. package/dist/core/tasks/types.js +2 -2
  38. package/dist/core/tasks/types.js.map +1 -1
  39. package/dist/core/tools/shell-tool.js +1 -1
  40. package/dist/core/tools/shell-tool.js.map +1 -1
  41. package/dist/extensions/cached-compaction/summary.d.ts +1 -1
  42. package/dist/extensions/cached-compaction/summary.d.ts.map +1 -1
  43. package/dist/extensions/cached-compaction/summary.js +13 -16
  44. package/dist/extensions/cached-compaction/summary.js.map +1 -1
  45. package/dist/extensions/tasks/tool/actions.d.ts +1 -2
  46. package/dist/extensions/tasks/tool/actions.d.ts.map +1 -1
  47. package/dist/extensions/tasks/tool/actions.js +7 -79
  48. package/dist/extensions/tasks/tool/actions.js.map +1 -1
  49. package/dist/extensions/tasks/tool/constants.d.ts +1 -3
  50. package/dist/extensions/tasks/tool/constants.d.ts.map +1 -1
  51. package/dist/extensions/tasks/tool/constants.js +1 -3
  52. package/dist/extensions/tasks/tool/constants.js.map +1 -1
  53. package/dist/extensions/tasks/tool/schema.d.ts +1 -2
  54. package/dist/extensions/tasks/tool/schema.d.ts.map +1 -1
  55. package/dist/extensions/tasks/tool/schema.js +6 -14
  56. package/dist/extensions/tasks/tool/schema.js.map +1 -1
  57. package/dist/extensions/tasks/tool/types.d.ts +1 -19
  58. package/dist/extensions/tasks/tool/types.d.ts.map +1 -1
  59. package/dist/extensions/tasks/tool/types.js.map +1 -1
  60. package/dist/extensions/tasks/tool.d.ts +1 -2
  61. package/dist/extensions/tasks/tool.d.ts.map +1 -1
  62. package/dist/extensions/tasks/tool.js +2 -4
  63. package/dist/extensions/tasks/tool.js.map +1 -1
  64. package/dist/extensions/tasks/ui/render.d.ts +2 -16
  65. package/dist/extensions/tasks/ui/render.d.ts.map +1 -1
  66. package/dist/extensions/tasks/ui/render.js +3 -79
  67. package/dist/extensions/tasks/ui/render.js.map +1 -1
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js.map +1 -1
  71. package/dist/modes/print-mode.d.ts.map +1 -1
  72. package/dist/modes/print-mode.js +1 -0
  73. package/dist/modes/print-mode.js.map +1 -1
  74. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  75. package/dist/modes/rpc/rpc-mode.js +1 -0
  76. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  77. package/docs/bundled/extensions/agent.md +2 -2
  78. package/docs/bundled/extensions/statusline.md +1 -1
  79. package/docs/bundled/tasks.md +10 -23
  80. package/docs/bundled/tool-presentation.md +1 -1
  81. package/docs/extensions.md +5 -7
  82. package/docs/models-configuration.md +1 -1
  83. package/docs/models.md +7 -85
  84. package/docs/sdk.md +3 -3
  85. package/docs/session-format.md +1 -1
  86. package/package.json +3 -4
  87. package/dist/core/tasks/wait.d.ts +0 -19
  88. package/dist/core/tasks/wait.d.ts.map +0 -1
  89. package/dist/core/tasks/wait.js +0 -45
  90. package/dist/core/tasks/wait.js.map +0 -1
  91. package/dist/modes/interactive/tool-view/tool-execution.d.ts +0 -14
  92. package/dist/modes/interactive/tool-view/tool-execution.d.ts.map +0 -1
  93. package/dist/modes/interactive/tool-view/tool-execution.js +0 -13
  94. package/dist/modes/interactive/tool-view/tool-execution.js.map +0 -1
  95. package/docs/images/doom-extension.png +0 -0
  96. package/docs/images/exy.png +0 -0
  97. package/npm-shrinkwrap.json +0 -4207
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export type { SlashCommandInfo, SlashCommandSource } from "../slash-commands.ts";
5
5
  export type { SourceInfo } from "../source-info.ts";
6
- export type { TaskCompletion, TaskControl, TaskExecution, TaskFact, TaskInput, TaskKind, TaskMode, TaskOutputKind, TaskRead, TaskReadOptions, TaskSnapshot, TaskStatus, TasksContext, TasksSessionContext, TaskTerminalStatus, TaskToolOutcome, TaskUpdate, TaskWaitAnyOptions, TaskWaitAnyResult, TaskWaitOptions, TaskWaitOutcome, TaskWaitResult, } from "../tasks/types.ts";
6
+ export type { TaskCompletion, TaskControl, TaskExecution, TaskFact, TaskInput, TaskKind, TaskMode, TaskOutputKind, TaskRead, TaskReadOptions, TaskSnapshot, TaskStatus, TasksContext, TasksSessionContext, TaskTerminalStatus, TaskToolOutcome, TaskUpdate, } from "../tasks/types.ts";
7
7
  export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.ts";
8
8
  export type { ExtensionErrorListener, ForkHandler, NavigateTreeHandler, NewSessionHandler, ShutdownHandler, SwitchSessionHandler, } from "./runner.ts";
9
9
  export { ExtensionRunner } from "./runner.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AA4BH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAsM9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport type {\n\tTaskCompletion,\n\tTaskControl,\n\tTaskExecution,\n\tTaskFact,\n\tTaskInput,\n\tTaskKind,\n\tTaskMode,\n\tTaskOutputKind,\n\tTaskRead,\n\tTaskReadOptions,\n\tTaskSnapshot,\n\tTaskStatus,\n\tTasksContext,\n\tTasksSessionContext,\n\tTaskTerminalStatus,\n\tTaskToolOutcome,\n\tTaskUpdate,\n\tTaskWaitAnyOptions,\n\tTaskWaitAnyResult,\n\tTaskWaitOptions,\n\tTaskWaitOutcome,\n\tTaskWaitResult,\n} from \"../tasks/types.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentActivityOutcome,\n\tAgentBeforeSettleEvent,\n\tAgentBeforeSettleEventResult,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartCustomEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeAgentStartUserEvent,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBoundaryContextPreview,\n\tBoundaryResult,\n\tBoundaryState,\n\tBuildSystemPromptOptions,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n\tCompactionEntryDraft,\n\t// Context\n\tCompactOptions,\n\tContextEditEntryDraft,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextSnapshot,\n\tContextUsage,\n\tContextWithSystemEvent,\n\tCustomEntryDraft,\n\tCustomMessageEntryDraft,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditorHost,\n\tEditorSubmitEvent,\n\tEditorSubmitHandler,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExecuteToolOptions,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionToolContext,\n\tExtensionTranscriptNoteOptions,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionVirtualModel,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\tMcpServersChangeEvent,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tNormalizedBuildSystemPromptOptions,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tProviderStreamEvent,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionBoundaryDraft,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tThinkingLevelSelectEvent,\n\tToolAnnotations,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionShell,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolExposure,\n\tToolInfo,\n\tToolLoadout,\n\tToolLoadoutChanges,\n\tToolNamespace,\n\tToolRendererResolver,\n\tToolRenderers,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tToolRowGap,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnEndEventResult,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisStaleExtensionContextError,\n\tisToolCallEventType,\n\tisWriteToolResult,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuBH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAsM9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport type {\n\tTaskCompletion,\n\tTaskControl,\n\tTaskExecution,\n\tTaskFact,\n\tTaskInput,\n\tTaskKind,\n\tTaskMode,\n\tTaskOutputKind,\n\tTaskRead,\n\tTaskReadOptions,\n\tTaskSnapshot,\n\tTaskStatus,\n\tTasksContext,\n\tTasksSessionContext,\n\tTaskTerminalStatus,\n\tTaskToolOutcome,\n\tTaskUpdate,\n} from \"../tasks/types.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentActivityOutcome,\n\tAgentBeforeSettleEvent,\n\tAgentBeforeSettleEventResult,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartCustomEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeAgentStartUserEvent,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBoundaryContextPreview,\n\tBoundaryResult,\n\tBoundaryState,\n\tBuildSystemPromptOptions,\n\tCacheWarmingDecisionEvent,\n\tCacheWarmingDecisionEventResult,\n\tCompactionEntryDraft,\n\t// Context\n\tCompactOptions,\n\tContextEditEntryDraft,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextSnapshot,\n\tContextUsage,\n\tContextWithSystemEvent,\n\tCustomEntryDraft,\n\tCustomMessageEntryDraft,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditorHost,\n\tEditorSubmitEvent,\n\tEditorSubmitHandler,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExecuteToolOptions,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionToolContext,\n\tExtensionTranscriptNoteOptions,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionVirtualModel,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\tMcpServersChangeEvent,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageEndEventResult,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tNormalizedBuildSystemPromptOptions,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tProviderStreamEvent,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionBoundaryDraft,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tTerminalInputHandler,\n\tThinkingLevelSelectEvent,\n\tToolAnnotations,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionShell,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolExposure,\n\tToolInfo,\n\tToolLoadout,\n\tToolLoadoutChanges,\n\tToolNamespace,\n\tToolRendererResolver,\n\tToolRenderers,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tToolRowGap,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnEndEventResult,\n\tTurnStartEvent,\n\tUIPromptEndEvent,\n\tUIPromptKind,\n\tUIPromptStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisStaleExtensionContextError,\n\tisToolCallEventType,\n\tisWriteToolResult,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAQhE,OAAO,KAAK,EAEX,SAAS,EAET,gBAAgB,EAChB,gBAAgB,EAEhB,oBAAoB,EAOpB,MAAM,YAAY,CAAC;AA+FpB,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAWD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAgFzD;AAsaD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAGpB;AA+CD,wBAAsB,cAAc,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA2FD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAQhE,OAAO,KAAK,EAEX,SAAS,EAET,gBAAgB,EAChB,gBAAgB,EAEhB,oBAAoB,EAOpB,MAAM,YAAY,CAAC;AAyGpB,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAWD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAgFzD;AAsaD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAGpB;AA+CD,wBAAsB,cAAc,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA2FD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
@@ -42,17 +42,24 @@ function getAliases() {
42
42
  const typeboxEntry = require.resolve("typebox");
43
43
  const typeboxCompileEntry = require.resolve("typebox/compile");
44
44
  const typeboxValueEntry = require.resolve("typebox/value");
45
- const resolveImport = (specifier) => fileURLToPath(import.meta.resolve(specifier));
45
+ const packagesRoot = path.resolve(__dirname, "../../../../");
46
+ const resolveWorkspaceOrImport = (workspaceRelativePath, specifier) => {
47
+ const workspacePath = path.join(packagesRoot, workspaceRelativePath);
48
+ if (fs.existsSync(workspacePath)) {
49
+ return workspacePath;
50
+ }
51
+ return fileURLToPath(import.meta.resolve(specifier));
52
+ };
46
53
  const piCodingAgentEntry = packageIndex;
47
- const piAgentCoreEntry = resolveImport("@earendil-works/pi-agent-core");
48
- const piTuiEntry = resolveImport("@earendil-works/pi-tui");
54
+ const piAgentCoreEntry = resolveWorkspaceOrImport("agent/dist/index.js", "@earendil-works/pi-agent-core");
55
+ const piTuiEntry = resolveWorkspaceOrImport("tui/dist/index.js", "@earendil-works/pi-tui");
49
56
  // Extensions resolve the pi-ai root to the compat entrypoint (a strict
50
57
  // superset of the core entrypoint): existing extensions using the old
51
58
  // global API keep working at runtime until compat is removed.
52
- const piAiCompatEntry = resolveImport("@earendil-works/pi-ai/compat");
53
- const piAiModelsEntry = resolveImport("@earendil-works/pi-ai/models");
54
- const piAiOauthEntry = resolveImport("@earendil-works/pi-ai/oauth");
55
- const piAiProvidersEntry = resolveImport("@earendil-works/pi-ai/providers/all");
59
+ const piAiCompatEntry = resolveWorkspaceOrImport("ai/dist/compat.js", "@earendil-works/pi-ai/compat");
60
+ const piAiModelsEntry = resolveWorkspaceOrImport("ai/dist/models.js", "@earendil-works/pi-ai/models");
61
+ const piAiOauthEntry = resolveWorkspaceOrImport("ai/dist/oauth.js", "@earendil-works/pi-ai/oauth");
62
+ const piAiProvidersEntry = resolveWorkspaceOrImport("ai/dist/providers/all.js", "@earendil-works/pi-ai/providers/all");
56
63
  _aliases = {
57
64
  "@earendil-works/pi-coding-agent": piCodingAgentEntry,
58
65
  [DISTRIBUTION_PACKAGE_NAME]: piCodingAgentEntry,
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIzC,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACtH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAwB,iBAAiB,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACnH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAkBrC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,eAAe,GACpB,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,IAAI,CAAC;IAC5D,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;AACxD,MAAM,yBAAyB,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC;AACzG,MAAM,mBAAmB,GAAG,WAAW,IAAI,eAAe,IAAI,aAAa,CAAC;AAE5E,IAAI,iBAAyD,CAAC;AAE9D,SAAS,aAAa;IACrB,iBAAiB,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAChH,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAC7B,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC1B,CAAC;AAED,IAAI,qBAAmE,CAAC;AAExE,SAAS,iBAAiB;IACzB,qBAAqB,KAAK,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClG,OAAO,qBAAqB,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,IAAI,QAAQ,GAAkC,IAAI,CAAC;AAEnD,SAAS,UAAU;IAClB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAElE,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC/D,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAE3D,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAU,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnG,MAAM,kBAAkB,GAAG,YAAY,CAAC;IACxC,MAAM,gBAAgB,GAAG,aAAa,CAAC,+BAA+B,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAC3D,uEAAuE;IACvE,sEAAsE;IACtE,8DAA8D;IAC9D,MAAM,eAAe,GAAG,aAAa,CAAC,8BAA8B,CAAC,CAAC;IACtE,MAAM,eAAe,GAAG,aAAa,CAAC,8BAA8B,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,aAAa,CAAC,6BAA6B,CAAC,CAAC;IACpE,MAAM,kBAAkB,GAAG,aAAa,CAAC,qCAAqC,CAAC,CAAC;IAEhF,QAAQ,GAAG;QACV,iCAAiC,EAAE,kBAAkB;QACrD,CAAC,yBAAyB,CAAC,EAAE,kBAAkB;QAC/C,+BAA+B,EAAE,gBAAgB;QACjD,wBAAwB,EAAE,UAAU;QACpC,qCAAqC,EAAE,kBAAkB;QACzD,8BAA8B,EAAE,eAAe;QAC/C,8BAA8B,EAAE,eAAe;QAC/C,6BAA6B,EAAE,cAAc;QAC7C,uBAAuB,EAAE,eAAe;QACxC,+BAA+B,EAAE,kBAAkB;QACnD,6BAA6B,EAAE,gBAAgB;QAC/C,sBAAsB,EAAE,UAAU;QAClC,mCAAmC,EAAE,kBAAkB;QACvD,4BAA4B,EAAE,eAAe;QAC7C,4BAA4B,EAAE,eAAe;QAC7C,2BAA2B,EAAE,cAAc;QAC3C,qBAAqB,EAAE,eAAe;QACtC,OAAO,EAAE,YAAY;QACrB,iBAAiB,EAAE,mBAAmB;QACtC,eAAe,EAAE,iBAAiB;QAClC,mBAAmB,EAAE,YAAY;QACjC,2BAA2B,EAAE,mBAAmB;QAChD,yBAAyB,EAAE,iBAAiB;KAC5C,CAAC;IAEF,OAAO,QAAQ,CAAC;AACjB,CAAC;AAID,IAAI,iBAAqC,CAAC;AAC1C,IAAI,wBAAwB,GAAG,CAAC,CAAC;AACjC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA4B,CAAC;AAO3D,MAAM,UAAU,mBAAmB;IAClC,cAAc,CAAC,KAAK,EAAE,CAAC;IACvB,iBAAiB,GAAG,SAAS,CAAC;IAC9B,wBAAwB,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACxC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,KAAK,WAAW,EAAE,CAAC;QAC1E,mBAAmB,EAAE,CAAC;IACvB,CAAC;IACD,iBAAiB,GAAG,WAAW,CAAC;IAChC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,wBAAwB,EAAE,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACrC,MAAM,cAAc,GAAG,GAAG,EAAE;QAC3B,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAC;IACjH,CAAC,CAAC;IACF,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAc,CAAC;IACpD,MAAM,YAAY,GAAG,GAAG,EAAE;QACzB,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACrC,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,OAAO,GAAqB;QACjC,WAAW,EAAE,cAAc;QAC3B,eAAe,EAAE,cAAc;QAC/B,WAAW,EAAE,cAAc;QAC3B,cAAc,EAAE,cAAc;QAC9B,cAAc,EAAE,cAAc;QAC9B,QAAQ,EAAE,cAAc;QACxB,cAAc,EAAE,cAAc;QAC9B,WAAW,EAAE,cAAc;QAC3B,WAAW,EAAE,cAAc;QAC3B,cAAc,EAAE,cAAc;QAC9B,mFAAmF;QACnF,YAAY,EAAE,GAAG,EAAE,GAAE,CAAC;QACtB,WAAW,EAAE,cAAc;QAC3B,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC9E,gBAAgB,EAAE,cAAc;QAChC,gBAAgB,EAAE,cAAc;QAChC,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,4BAA4B,EAAE,EAAE;QAChC,kCAAkC,EAAE,EAAE;QACtC,UAAU,EAAE,IAAI,iBAAiB,EAAE;QACnC,gCAAgC,EAAE,EAAE;QACpC,aAAa,EAAE,cAAc;QAC7B,YAAY;QACZ,UAAU,EAAE,CAAC,OAAO,EAAE,EAAE;YACvB,IAAI,KAAK,CAAC,YAAY;gBAAE,OAAO;YAC/B,KAAK,CAAC,YAAY;gBACjB,OAAO;oBACP,6WAA6W,CAAC;YAC/W,KAAK,MAAM,WAAW,IAAI,qBAAqB;gBAAE,WAAW,EAAE,CAAC;YAC/D,qBAAqB,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;QACD,yBAAyB,EAAE,CAAC,WAAW,EAAE,EAAE;YAC1C,IAAI,MAAM,GAAG,IAAI,CAAC;YAClB,MAAM,kBAAkB,GAAG,GAAG,EAAE;gBAC/B,IAAI,CAAC,MAAM;oBAAE,OAAO;gBACpB,MAAM,GAAG,KAAK,CAAC;gBACf,qBAAqB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBACjD,WAAW,EAAE,CAAC;YACf,CAAC,CAAC;YACF,qBAAqB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC9C,OAAO,kBAAkB,CAAC;QAC3B,CAAC;QACD,sEAAsE;QACtE,2EAA2E;QAC3E,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,GAAG,WAAW,EAAE,EAAE;YAC/D,OAAO,CAAC,4BAA4B,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,sBAAsB,EAAE,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW,EAAE,EAAE;YACjE,OAAO,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,kBAAkB,EAAE,CAAC,IAAI,EAAE,EAAE;YAC5B,OAAO,CAAC,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC3G,OAAO,CAAC,kCAAkC,GAAG,OAAO,CAAC,kCAAkC,CAAC,MAAM,CAC7F,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,CAC7B,CAAC;QACH,CAAC;QACD,oBAAoB,EAAE,CAAC,UAAU,EAAE,aAAa,GAAG,WAAW,EAAE,EAAE;YACjE,OAAO,CAAC,gCAAgC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,sBAAsB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE;YACxC,OAAO,CAAC,gCAAgC,GAAG,OAAO,CAAC,gCAAgC,CAAC,MAAM,CACzF,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,QAAQ,IAAI,UAAU,CAAC,EAAE,KAAK,EAAE,CAC5E,CAAC;QACH,CAAC;KACD,CAAC;IAEF,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAC1B,SAAoB,EACpB,OAAyB,EACzB,GAAW,EACX,QAAkB;IAElB,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA4B,CAAC;IAC9D,MAAM,qBAAqB,GAAsB,EAAE,CAAC;IACpD,MAAM,oBAAoB,GAAsB,EAAE,CAAC;IACnD,IAAI,KAAK,GAAoC,SAAS,CAAC;IACvD,MAAM,YAAY,GAAG,GAAG,EAAE;QACzB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,cAAc,SAAS,CAAC,IAAI,mDAAmD,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,kBAAkB,GAAG,CAAC,MAAkB,EAAE,EAAE;QACjD,IAAI,KAAK,KAAK,SAAS;YAAE,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;YACvD,MAAM,EAAE,CAAC;IACf,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,GAAG,EAAE;QACzB,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,qBAAqB,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG;QACX,4CAA4C;QAC5C,EAAE,CAAC,KAAa,EAAE,OAAkB;YACnC,YAAY,EAAE,CAAC;YACf,MAAM,iBAAiB,GAAc,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC7B,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAEpC,OAAO,GAAG,EAAE;gBACX,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ;oBAAE,OAAO;gBACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACzD,IAAI,YAAY,KAAK,CAAC,CAAC;oBAAE,OAAO;gBAChC,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7D,CAAC,CAAC;QACH,CAAC;QAED,YAAY,CAAC,IAAoB;YAChC,YAAY,EAAE,CAAC;YACf,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvG,MAAM,IAAI,KAAK,CACd,SAAS,IAAI,CAAC,IAAI,8BAA8B,SAAS,CAAC,IAAI,2CAA2C,CACzG,CAAC;YACH,CAAC;YACD,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC9B,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,SAAS,CAAC,UAAU;aAChC,CAAC,CAAC;YACH,OAAO,CAAC,YAAY,EAAE,CAAC;QACxB,CAAC;QAED,eAAe,CAAC,IAAY,EAAE,OAAuD;YACpF,YAAY,EAAE,CAAC;YACf,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CACd,oCAAoC,SAAS,CAAC,IAAI,gGAAgG,CAClJ,CAAC;YACH,CAAC;YACD,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,8BAA8B,SAAS,CAAC,IAAI,0BAA0B,CAAC,CAAC;YAC1G,CAAC;YACD,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE;gBAC5B,IAAI;gBACJ,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,GAAG,OAAO;aACV,CAAC,CAAC;QACJ,CAAC;QAED,gBAAgB,CACf,QAAe,EACf,OAGC;YAED,YAAY,EAAE,CAAC;YACf,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,YAAY,CACX,IAAY,EACZ,OAAyF;YAEzF,YAAY,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC9E,MAAM,IAAI,KAAK,CACd,6BAA6B,IAAI,eAAe,OAAO,CAAC,IAAI,SAAS,OAAO,OAAO,CAAC,OAAO,EAAE,CAC7F,CAAC;YACH,CAAC;YACD,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YAC/E,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;wBAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC/C,CAAC;YACF,CAAC;QACF,CAAC;QAED,uBAAuB,CAAI,UAAkB,EAAE,QAA4B;YAC1E,YAAY,EAAE,CAAC;YACf,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,QAA2B,CAAC,CAAC;QACzE,CAAC;QAED,2BAA2B,CAAC,WAAgC;YAC3D,YAAY,EAAE,CAAC;YACf,SAAS,CAAC,mBAAmB,GAAG,WAAW,CAAC;QAC7C,CAAC;QAED,qBAAqB,CAAI,UAAkB,EAAE,QAA0B;YACtE,YAAY,EAAE,CAAC;YACf,SAAS,CAAC,cAAc,KAAK,IAAI,GAAG,EAAE,CAAC;YACvC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,QAAyB,CAAC,CAAC;QACrE,CAAC;QAED,oBAAoB,CAAC,QAA8B;YAClD,YAAY,EAAE,CAAC;YACf,SAAS,CAAC,aAAa,KAAK,EAAE,CAAC;YAC/B,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,mEAAmE;QACnE,OAAO,CAAC,IAAY;YACnB,YAAY,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,SAAS,CAAC;YACjD,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClG,CAAC;QAED,8CAA8C;QAC9C,WAAW,CAAC,OAAO,EAAE,OAAO;YAC3B,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,eAAe,CAAC,OAAO,EAAE,OAAO;YAC/B,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAED,WAAW,CAAC,UAAkB,EAAE,IAAc;YAC7C,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QAED,cAAc,CAAC,IAAY;YAC1B,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QAED,cAAc;YACb,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC;QAED,QAAQ,CAAC,OAAe,EAAE,KAAyB;YAClD,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,OAAe,EAAE,IAAc,EAAE,OAAqB;YAC1D,YAAY,EAAE,CAAC;YACf,OAAO,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;QAED,cAAc;YACb,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,cAAc,EAAE,CAAC;QACjC,CAAC;QAED,WAAW;YACV,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QAED,WAAW;YACV,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QAED,cAAc,CAAC,SAAmB;YACjC,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAED,WAAW;YACV,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;QAED,QAAQ,CAAC,KAAK;YACb,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,gBAAgB;YACf,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACnC,CAAC;QAED,gBAAgB,CAAC,KAAK;YACrB,YAAY,EAAE,CAAC;YACf,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;QAED,gBAAgB,CAAC,cAAiC,EAAE,MAAuB;YAC1E,YAAY,EAAE,CAAC;YACf,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBACrF,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3F,OAAO;YACR,CAAC;YACD,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,cAAc,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,kBAAkB,CAAC,IAAY;YAC9B,YAAY,EAAE,CAAC;YACf,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,iBAAiB,CAAC,IAAY,EAAE,MAAuB;YACtD,YAAY,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,+CAA+C,SAAS,CAAC,IAAI,MAAM,SAAS,EAAE,CAAC,CAAC;YACjG,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;YAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,yCAAyC,KAAK,GAAG,CAAC,CAAC;YACvF,CAAC;YACD,iEAAiE;YACjE,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU;iBAC9B,IAAI,EAAE;iBACN,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7F,IAAI,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,uCAAuC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YACpG,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YAC3F,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,mBAAmB,CAAC,IAAY;YAC/B,YAAY,EAAE,CAAC;YACf,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,aAAa;YACZ,YAAY,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAClC,CAAC;QAED,oBAAoB,CAAS,KAAoC;YAChE,YAAY,EAAE,CAAC;YACf,wFAAwF;YACxF,wDAAwD;YACxD,MAAM,UAAU,GAA2B;gBAC1C,GAAG,KAAK;gBACR,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAoC,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;aAC9F,CAAC;YACF,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,CAAC;QAED,sBAAsB,CAAC,QAAgB,EAAE,EAAU;YAClD,YAAY,EAAE,CAAC;YACf,kBAAkB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,EAAE;YACP,IAAI,CAAC,OAAO,EAAE,IAAI;gBACjB,YAAY,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,EAAE,CAAC,OAAO,EAAE,OAAO;gBAClB,YAAY,EAAE,CAAC;gBACf,MAAM,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrF,IAAI,KAAK,KAAK,SAAS;oBAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChE,OAAO,WAAW,CAAC;YACpB,CAAC;SACD;KACe,CAAC;IAElB,OAAO;QACN,GAAG;QACH,MAAM,EAAE,GAAG,EAAE;YACZ,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAChC,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxE,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,qBAAqB;gBAAE,KAAK,EAAE,CAAC;YACnD,KAAK,GAAG,QAAQ,CAAC;YACjB,YAAY,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,GAAG,EAAE;YACb,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO;YAChC,KAAK,GAAG,QAAQ,CAAC;YACjB,KAAK,MAAM,WAAW,IAAI,oBAAoB;gBAAE,WAAW,EAAE,CAAC;YAC9D,YAAY,EAAE,CAAC;QAChB,CAAC;KACD,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,UAA2C;IACvE,OAAO,CACN,UAAU,KAAK,SAAS;QACxB,iBAAiB,KAAK,UAAU,CAAC,GAAG;QACpC,wBAAwB,KAAK,UAAU,CAAC,UAAU,CAClD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,aAAqB,EAAE,UAAgC;IACzF,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,aAAa,EAAE,CAAC;YACnB,OAAO,aAAa,CAAC;QACtB,CAAC;IACF,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,aAAa,EAAE,CAAC;IAC7C,4EAA4E;IAC5E,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,iBAAiB,GAAG,mBAAmB;QAC5C,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,iBAAiB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;QACjE,CAAC,CAAC,yBAAyB;YAC1B,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,iBAAiB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;YACpE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;IAC5B,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;QAC5C,WAAW,EAAE,KAAK;QAClB,GAAG,iBAAiB;KACpB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,MAA0B,CAAC;IAC3C,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,aAAqB,EAAE,YAAoB;IACnE,MAAM,MAAM,GAAG,sBAAsB,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC;IAChE,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAExF,OAAO;QACN,IAAI,EAAE,aAAa;QACnB,YAAY;QACZ,UAAU,EAAE,yBAAyB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACzE,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,gBAAgB,EAAE,IAAI,GAAG,EAAE;QAC3B,cAAc,EAAE,IAAI,GAAG,EAAE;QACzB,QAAQ,EAAE,IAAI,GAAG,EAAE;QACnB,KAAK,EAAE,IAAI,GAAG,EAAE;QAChB,SAAS,EAAE,IAAI,GAAG,EAAE;KACpB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CACjC,OAAyB,EACzB,aAAqB,EACrB,YAAoB,EACpB,GAAW,EACX,QAAkB,EAClB,OAAyB;IAEzB,MAAM,SAAS,GAAG,eAAe,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,CAAC;QACJ,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACb,CAAC;IACD,IAAI,CAAC,GAAG,aAAa,UAAU,EAAE,YAAY,CAAC,CAAC;IAC/C,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,aAAa,CAC3B,aAAqB,EACrB,GAAW,EACX,QAAkB,EAClB,OAAyB,EACzB,UAAgC;IAEhC,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvF,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,aAAa,gBAAgB,EAAE,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,uDAAuD,aAAa,EAAE,EAAE,CAAC;QAC3G,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE1G,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,6BAA6B,OAAO,EAAE,EAAE,CAAC;IAC3E,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,OAAyB,EACzB,GAAW,EACX,QAAkB,EAClB,OAAyB,EACzB,aAAa,GAAG,UAAU;IAE1B,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnG,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACpC,KAAe,EACf,GAAW,EACX,QAAmB,EACnB,OAA0B,EAC1B,QAAQ,GAAG,KAAK;IAEhB,MAAM,UAAU,GAAgB,EAAE,CAAC;IACnC,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAA6C,EAAE,CAAC;IAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpE,MAAM,WAAW,GAAG,UAAU,EAAE,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,QAAQ,IAAI,cAAc,EAAE,CAAC;IACtD,MAAM,eAAe,GAAG,OAAO,IAAI,sBAAsB,EAAE,CAAC;IAE5D,KAAK,MAAM,OAAO,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAC/C,OAAO,EACP,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,UAAU,CACV,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACtC,SAAS;QACV,CAAC;QAED,IAAI,SAAS,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,OAAO;QACN,UAAU;QACV,MAAM;QACN,QAAQ;QACR,OAAO,EAAE,eAAe;KACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,KAAe,EACf,GAAW,EACX,QAAmB,EACnB,OAA0B;IAE1B,OAAO,sBAAsB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,KAAe,EACf,GAAW,EACX,QAAmB,EACnB,OAA0B;IAE1B,OAAO,sBAAsB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,uBAAuB,CAAC,GAAW;IAC3C,+CAA+C;IAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YAClC,MAAM,OAAO,GAAa,EAAE,CAAC;YAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACnD,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC/B,CAAC;YACF,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,OAAO,CAAC;YAChB,CAAC;QACF,CAAC;IACF,CAAC;IAED,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,uBAAuB,CAAC,GAAW;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7C,gCAAgC;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/E,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC3B,SAAS;YACV,CAAC;YAED,wBAAwB;YACxB,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC;gBACnD,MAAM,OAAO,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;gBACnD,IAAI,OAAO,EAAE,CAAC;oBACb,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC7B,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,CAAC;IACX,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC9C,eAAyB,EACzB,GAAW,EACX,WAAmB,WAAW,EAAE,EAChC,QAAmB;IAEnB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,MAAM,QAAQ,GAAG,CAAC,KAAe,EAAE,EAAE;QACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IAEF,kEAAkE;IAClE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IAC1E,QAAQ,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC;IAE/C,6CAA6C;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC/D,QAAQ,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC;IAEhD,iCAAiC;IACjC,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/E,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACpE,sDAAsD;YACtD,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,OAAO,EAAE,CAAC;gBACb,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAClB,SAAS;YACV,CAAC;YACD,+DAA+D;YAC/D,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5C,SAAS;QACV,CAAC;QAED,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC","sourcesContent":["/**\n * Extension loader - loads TypeScript extension modules using jiti.\n *\n */\n\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Provider } from \"@earendil-works/pi-ai\";\nimport type { KeyId } from \"@earendil-works/pi-tui\";\nimport type { createJiti } from \"jiti\";\nimport { CONFIG_DIR_NAME, DISTRIBUTION_PACKAGE_NAME, getAgentDir, isBunBinary, isBundledNode } from \"../../config.ts\";\nimport { resolvePath } from \"../../utils/paths.ts\";\nimport { createEventBus, type EventBus } from \"../event-bus.ts\";\nimport type { ExecOptions } from \"../exec.ts\";\nimport { execCommand } from \"../exec.ts\";\nimport { type McpServerConfig, McpServerRegistry, mcpNamespace, validateMcpServerConfig } from \"../mcp-servers.ts\";\nimport { readPiManifest } from \"../pi-manifest.ts\";\nimport { createSyntheticSourceInfo, getSyntheticPathSource, isSyntheticPath } from \"../source-info.ts\";\nimport { time } from \"../timings.ts\";\nimport type { ModelRouteRequest, VirtualModelDefinition } from \"../virtual-models.ts\";\nimport type {\n\tEntryRenderer,\n\tExtension,\n\tExtensionAPI,\n\tExtensionFactory,\n\tExtensionRuntime,\n\tExtensionVirtualModel,\n\tLoadExtensionsResult,\n\tMarkdownTransformer,\n\tMessageRenderer,\n\tProviderConfig,\n\tRegisteredCommand,\n\tToolDefinition,\n\tToolRendererResolver,\n} from \"./types.ts\";\n\nconst require = createRequire(import.meta.url);\n\nconst isNodeSeaBinary =\n\t(\"sea\" in process.features && process.features.sea === true) ||\n\tprocess.getBuiltinModule(\"node:sea\")?.isSea() === true;\nconst isTypeScriptSourceRuntime = !isBunBinary && path.extname(fileURLToPath(import.meta.url)) === \".ts\";\nconst usesEmbeddedModules = isBunBinary || isNodeSeaBinary || isBundledNode;\n\nlet createJitiPromise: Promise<typeof createJiti> | undefined;\n\nfunction getCreateJiti(): Promise<typeof createJiti> {\n\tcreateJitiPromise ??= (usesEmbeddedModules ? import(\"./jiti-static-loader.ts\") : import(\"./jiti-loader.ts\")).then(\n\t\t(module) => module.createJiti,\n\t);\n\treturn createJitiPromise;\n}\n\nlet virtualModulesPromise: Promise<Record<string, unknown>> | undefined;\n\nfunction getVirtualModules(): Promise<Record<string, unknown>> {\n\tvirtualModulesPromise ??= import(\"./virtual-modules.ts\").then((module) => module.VIRTUAL_MODULES);\n\treturn virtualModulesPromise;\n}\n\n/**\n * Get aliases for jiti (used in built Node.js mode).\n * In compiled binary mode, virtualModules is used instead.\n */\nlet _aliases: Record<string, string> | null = null;\n\nfunction getAliases(): Record<string, string> {\n\tif (_aliases) return _aliases;\n\n\tconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\tconst packageIndex = path.resolve(__dirname, \"../..\", \"index.js\");\n\n\tconst typeboxEntry = require.resolve(\"typebox\");\n\tconst typeboxCompileEntry = require.resolve(\"typebox/compile\");\n\tconst typeboxValueEntry = require.resolve(\"typebox/value\");\n\n\tconst resolveImport = (specifier: string): string => fileURLToPath(import.meta.resolve(specifier));\n\n\tconst piCodingAgentEntry = packageIndex;\n\tconst piAgentCoreEntry = resolveImport(\"@earendil-works/pi-agent-core\");\n\tconst piTuiEntry = resolveImport(\"@earendil-works/pi-tui\");\n\t// Extensions resolve the pi-ai root to the compat entrypoint (a strict\n\t// superset of the core entrypoint): existing extensions using the old\n\t// global API keep working at runtime until compat is removed.\n\tconst piAiCompatEntry = resolveImport(\"@earendil-works/pi-ai/compat\");\n\tconst piAiModelsEntry = resolveImport(\"@earendil-works/pi-ai/models\");\n\tconst piAiOauthEntry = resolveImport(\"@earendil-works/pi-ai/oauth\");\n\tconst piAiProvidersEntry = resolveImport(\"@earendil-works/pi-ai/providers/all\");\n\n\t_aliases = {\n\t\t\"@earendil-works/pi-coding-agent\": piCodingAgentEntry,\n\t\t[DISTRIBUTION_PACKAGE_NAME]: piCodingAgentEntry,\n\t\t\"@earendil-works/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@earendil-works/pi-tui\": piTuiEntry,\n\t\t\"@earendil-works/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@earendil-works/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@earendil-works/pi-ai/models\": piAiModelsEntry,\n\t\t\"@earendil-works/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@earendil-works/pi-ai\": piAiCompatEntry,\n\t\t\"@mariozechner/pi-coding-agent\": piCodingAgentEntry,\n\t\t\"@mariozechner/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@mariozechner/pi-tui\": piTuiEntry,\n\t\t\"@mariozechner/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@mariozechner/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@mariozechner/pi-ai/models\": piAiModelsEntry,\n\t\t\"@mariozechner/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@mariozechner/pi-ai\": piAiCompatEntry,\n\t\ttypebox: typeboxEntry,\n\t\t\"typebox/compile\": typeboxCompileEntry,\n\t\t\"typebox/value\": typeboxValueEntry,\n\t\t\"@sinclair/typebox\": typeboxEntry,\n\t\t\"@sinclair/typebox/compile\": typeboxCompileEntry,\n\t\t\"@sinclair/typebox/value\": typeboxValueEntry,\n\t};\n\n\treturn _aliases;\n}\n\ntype HandlerFn = (...args: unknown[]) => Promise<unknown>;\n\nlet extensionCacheCwd: string | undefined;\nlet extensionCacheGeneration = 0;\nconst extensionCache = new Map<string, ExtensionFactory>();\n\ninterface ExtensionCacheToken {\n\tcwd: string;\n\tgeneration: number;\n}\n\nexport function clearExtensionCache(): void {\n\textensionCache.clear();\n\textensionCacheCwd = undefined;\n\textensionCacheGeneration++;\n}\n\nfunction useExtensionCacheCwd(cwd: string): ExtensionCacheToken {\n\tconst resolvedCwd = resolvePath(cwd);\n\tif (extensionCacheCwd !== undefined && extensionCacheCwd !== resolvedCwd) {\n\t\tclearExtensionCache();\n\t}\n\textensionCacheCwd = resolvedCwd;\n\treturn { cwd: resolvedCwd, generation: extensionCacheGeneration };\n}\n\n/**\n * Create a runtime with throwing stubs for action methods.\n * Runner.bindCore() replaces these with real implementations.\n */\nexport function createExtensionRuntime(): ExtensionRuntime {\n\tconst notInitialized = () => {\n\t\tthrow new Error(\"Extension runtime not initialized. Action methods cannot be called during extension loading.\");\n\t};\n\tconst state: { staleMessage?: string } = {};\n\tconst eventBusUnsubscribers = new Set<() => void>();\n\tconst assertActive = () => {\n\t\tif (state.staleMessage) {\n\t\t\tthrow new Error(state.staleMessage);\n\t\t}\n\t};\n\n\tconst runtime: ExtensionRuntime = {\n\t\tsendMessage: notInitialized,\n\t\tsendUserMessage: notInitialized,\n\t\tappendEntry: notInitialized,\n\t\tsetSessionName: notInitialized,\n\t\tgetSessionName: notInitialized,\n\t\tsetLabel: notInitialized,\n\t\tgetActiveTools: notInitialized,\n\t\tgetAllTools: notInitialized,\n\t\tgetSettings: notInitialized,\n\t\tsetActiveTools: notInitialized,\n\t\t// registerTool() is valid during extension load; refresh is only needed post-bind.\n\t\trefreshTools: () => {},\n\t\tgetCommands: notInitialized,\n\t\tsetModel: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tgetThinkingLevel: notInitialized,\n\t\tsetThinkingLevel: notInitialized,\n\t\tflagValues: new Map(),\n\t\tpendingProviderRegistrations: [],\n\t\tpendingNativeProviderRegistrations: [],\n\t\tmcpServers: new McpServerRegistry(),\n\t\tpendingVirtualModelRegistrations: [],\n\t\tcreateContext: notInitialized,\n\t\tassertActive,\n\t\tinvalidate: (message) => {\n\t\t\tif (state.staleMessage) return;\n\t\t\tstate.staleMessage =\n\t\t\t\tmessage ??\n\t\t\t\t\"This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().\";\n\t\t\tfor (const unsubscribe of eventBusUnsubscribers) unsubscribe();\n\t\t\teventBusUnsubscribers.clear();\n\t\t},\n\t\ttrackEventBusSubscription: (unsubscribe) => {\n\t\t\tlet active = true;\n\t\t\tconst trackedUnsubscribe = () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tactive = false;\n\t\t\t\teventBusUnsubscribers.delete(trackedUnsubscribe);\n\t\t\t\tunsubscribe();\n\t\t\t};\n\t\t\teventBusUnsubscribers.add(trackedUnsubscribe);\n\t\t\treturn trackedUnsubscribe;\n\t\t},\n\t\t// Pre-bind: queue registrations so bindCore() can flush them once the\n\t\t// model registry is available. bindCore() replaces both with direct calls.\n\t\tregisterProvider: (name, config, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingProviderRegistrations.push({ name, config, extensionPath });\n\t\t},\n\t\tregisterNativeProvider: (provider, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingNativeProviderRegistrations.push({ provider, extensionPath });\n\t\t},\n\t\tunregisterProvider: (name) => {\n\t\t\truntime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);\n\t\t\truntime.pendingNativeProviderRegistrations = runtime.pendingNativeProviderRegistrations.filter(\n\t\t\t\t(r) => r.provider.id !== name,\n\t\t\t);\n\t\t},\n\t\tregisterVirtualModel: (definition, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingVirtualModelRegistrations.push({ definition, extensionPath });\n\t\t},\n\t\tunregisterVirtualModel: (provider, id) => {\n\t\t\truntime.pendingVirtualModelRegistrations = runtime.pendingVirtualModelRegistrations.filter(\n\t\t\t\t({ definition }) => definition.provider !== provider || definition.id !== id,\n\t\t\t);\n\t\t},\n\t};\n\n\treturn runtime;\n}\n\n/**\n * Create the ExtensionAPI for an extension.\n * Registration methods write to the extension object.\n * Action methods delegate to the shared runtime.\n */\nfunction createExtensionAPI(\n\textension: Extension,\n\truntime: ExtensionRuntime,\n\tcwd: string,\n\teventBus: EventBus,\n): { api: ExtensionAPI; commit: () => void; discard: () => void } {\n\tconst pendingFlagValues = new Map<string, boolean | string>();\n\tconst pendingRuntimeChanges: Array<() => void> = [];\n\tconst loadingUnsubscribers: Array<() => void> = [];\n\tlet state: \"loading\" | \"active\" | \"failed\" = \"loading\";\n\tconst assertActive = () => {\n\t\tif (state === \"failed\") {\n\t\t\tthrow new Error(`Extension \"${extension.path}\" failed to load and its API is no longer active.`);\n\t\t}\n\t\truntime.assertActive();\n\t};\n\tconst applyRuntimeChange = (change: () => void) => {\n\t\tif (state === \"loading\") pendingRuntimeChanges.push(change);\n\t\telse change();\n\t};\n\tconst clearPending = () => {\n\t\tpendingFlagValues.clear();\n\t\tpendingRuntimeChanges.length = 0;\n\t\tloadingUnsubscribers.length = 0;\n\t};\n\n\tconst api = {\n\t\t// Registration methods - write to extension\n\t\ton(event: string, handler: HandlerFn): () => void {\n\t\t\tassertActive();\n\t\t\tconst registeredHandler: HandlerFn = (...args) => handler(...args);\n\t\t\tconst list = extension.handlers.get(event) ?? [];\n\t\t\tlist.push(registeredHandler);\n\t\t\textension.handlers.set(event, list);\n\n\t\t\treturn () => {\n\t\t\t\tconst handlers = extension.handlers.get(event);\n\t\t\t\tif (!handlers) return;\n\t\t\t\tconst handlerIndex = handlers.indexOf(registeredHandler);\n\t\t\t\tif (handlerIndex === -1) return;\n\t\t\t\thandlers.splice(handlerIndex, 1);\n\t\t\t\tif (handlers.length === 0) extension.handlers.delete(event);\n\t\t\t};\n\t\t},\n\n\t\tregisterTool(tool: ToolDefinition): void {\n\t\t\tassertActive();\n\t\t\tif (typeof tool.parameters !== \"object\" || tool.parameters === null || Array.isArray(tool.parameters)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tool \"${tool.name}\" registered by extension \"${extension.path}\" must define an object parameter schema.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\textension.tools.set(tool.name, {\n\t\t\t\tdefinition: tool,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t});\n\t\t\truntime.refreshTools();\n\t\t},\n\n\t\tregisterCommand(name: string, options: Omit<RegisteredCommand, \"name\" | \"sourceInfo\">): void {\n\t\t\tassertActive();\n\t\t\tif (typeof name !== \"string\" || name.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Command registered by extension \"${extension.path}\" must have a non-empty string name. Use pi.registerCommand(\"name\", { description, handler }).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof options?.handler !== \"function\") {\n\t\t\t\tthrow new Error(`Command \"/${name}\" registered by extension \"${extension.path}\" must define handler().`);\n\t\t\t}\n\t\t\textension.commands.set(name, {\n\t\t\t\tname,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t\t...options,\n\t\t\t});\n\t\t},\n\n\t\tregisterShortcut(\n\t\t\tshortcut: KeyId,\n\t\t\toptions: {\n\t\t\t\tdescription?: string;\n\t\t\t\thandler: (ctx: import(\"./types.ts\").ExtensionContext) => Promise<void> | void;\n\t\t\t},\n\t\t): void {\n\t\t\tassertActive();\n\t\t\textension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });\n\t\t},\n\n\t\tregisterFlag(\n\t\t\tname: string,\n\t\t\toptions: { description?: string; type: \"boolean\" | \"string\"; default?: boolean | string },\n\t\t): void {\n\t\t\tassertActive();\n\t\t\tif (options.default !== undefined && typeof options.default !== options.type) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid default for flag \"${name}\": expected ${options.type}, got ${typeof options.default}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\textension.flags.set(name, { name, extensionPath: extension.path, ...options });\n\t\t\tif (options.default !== undefined && !runtime.flagValues.has(name)) {\n\t\t\t\tif (state === \"loading\") {\n\t\t\t\t\tif (!pendingFlagValues.has(name)) pendingFlagValues.set(name, options.default);\n\t\t\t\t} else {\n\t\t\t\t\truntime.flagValues.set(name, options.default);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tregisterMessageRenderer<T>(customType: string, renderer: MessageRenderer<T>): void {\n\t\t\tassertActive();\n\t\t\textension.messageRenderers.set(customType, renderer as MessageRenderer);\n\t\t},\n\n\t\tregisterMarkdownTransformer(transformer: MarkdownTransformer): void {\n\t\t\tassertActive();\n\t\t\textension.markdownTransformer = transformer;\n\t\t},\n\n\t\tregisterEntryRenderer<T>(customType: string, renderer: EntryRenderer<T>): void {\n\t\t\tassertActive();\n\t\t\textension.entryRenderers ??= new Map();\n\t\t\textension.entryRenderers.set(customType, renderer as EntryRenderer);\n\t\t},\n\n\t\tregisterToolRenderer(resolver: ToolRendererResolver): void {\n\t\t\tassertActive();\n\t\t\textension.toolRenderers ??= [];\n\t\t\textension.toolRenderers.push(resolver);\n\t\t},\n\n\t\t// Flag access - checks extension registered it, reads from runtime\n\t\tgetFlag(name: string): boolean | string | undefined {\n\t\t\tassertActive();\n\t\t\tif (!extension.flags.has(name)) return undefined;\n\t\t\treturn runtime.flagValues.has(name) ? runtime.flagValues.get(name) : pendingFlagValues.get(name);\n\t\t},\n\n\t\t// Action methods - delegate to shared runtime\n\t\tsendMessage(message, options): void {\n\t\t\tassertActive();\n\t\t\truntime.sendMessage(message, options);\n\t\t},\n\n\t\tsendUserMessage(content, options): void {\n\t\t\tassertActive();\n\t\t\truntime.sendUserMessage(content, options);\n\t\t},\n\n\t\tappendEntry(customType: string, data?: unknown): void {\n\t\t\tassertActive();\n\t\t\truntime.appendEntry(customType, data);\n\t\t},\n\n\t\tsetSessionName(name: string): void {\n\t\t\tassertActive();\n\t\t\truntime.setSessionName(name);\n\t\t},\n\n\t\tgetSessionName(): string | undefined {\n\t\t\tassertActive();\n\t\t\treturn runtime.getSessionName();\n\t\t},\n\n\t\tsetLabel(entryId: string, label: string | undefined): void {\n\t\t\tassertActive();\n\t\t\truntime.setLabel(entryId, label);\n\t\t},\n\n\t\texec(command: string, args: string[], options?: ExecOptions) {\n\t\t\tassertActive();\n\t\t\treturn execCommand(command, args, options?.cwd ?? cwd, options);\n\t\t},\n\n\t\tgetActiveTools(): string[] {\n\t\t\tassertActive();\n\t\t\treturn runtime.getActiveTools();\n\t\t},\n\n\t\tgetAllTools() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getAllTools();\n\t\t},\n\n\t\tgetSettings() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getSettings();\n\t\t},\n\n\t\tsetActiveTools(toolNames: string[]): void {\n\t\t\tassertActive();\n\t\t\truntime.setActiveTools(toolNames);\n\t\t},\n\n\t\tgetCommands() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getCommands();\n\t\t},\n\n\t\tsetModel(model) {\n\t\t\tassertActive();\n\t\t\treturn runtime.setModel(model);\n\t\t},\n\n\t\tgetThinkingLevel() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getThinkingLevel();\n\t\t},\n\n\t\tsetThinkingLevel(level) {\n\t\t\tassertActive();\n\t\t\truntime.setThinkingLevel(level);\n\t\t},\n\n\t\tregisterProvider(providerOrName: Provider | string, config?: ProviderConfig) {\n\t\t\tassertActive();\n\t\t\tif (typeof providerOrName === \"string\") {\n\t\t\t\tif (!config) throw new Error(\"Provider config is required when registering by name\");\n\t\t\t\tapplyRuntimeChange(() => runtime.registerProvider(providerOrName, config, extension.path));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tapplyRuntimeChange(() => runtime.registerNativeProvider(providerOrName, extension.path));\n\t\t},\n\n\t\tunregisterProvider(name: string) {\n\t\t\tassertActive();\n\t\t\tapplyRuntimeChange(() => runtime.unregisterProvider(name, extension.path));\n\t\t},\n\n\t\tregisterMcpServer(name: string, config: McpServerConfig) {\n\t\t\tassertActive();\n\t\t\tconst validated = validateMcpServerConfig(name, config);\n\t\t\tif (typeof validated === \"string\") {\n\t\t\t\tthrow new Error(`Invalid MCP server registered by extension \"${extension.path}\": ${validated}`);\n\t\t\t}\n\t\t\tconst owner = runtime.mcpServers.get(name)?.extensionPath;\n\t\t\tif (owner !== undefined && owner !== extension.path) {\n\t\t\t\tthrow new Error(`MCP server \"${name}\" is already registered by extension \"${owner}\"`);\n\t\t\t}\n\t\t\t// Names that differ only in `-` and `_` would share a namespace.\n\t\t\tconst clash = runtime.mcpServers\n\t\t\t\t.list()\n\t\t\t\t.find((server) => server.name !== name && mcpNamespace(server.name) === mcpNamespace(name));\n\t\t\tif (clash) throw new Error(`MCP server \"${name}\" conflicts with registered server \"${clash.name}\"`);\n\t\t\tconst server = { name, config: structuredClone(validated), extensionPath: extension.path };\n\t\t\tapplyRuntimeChange(() => runtime.mcpServers.register(server));\n\t\t},\n\n\t\tunregisterMcpServer(name: string) {\n\t\t\tassertActive();\n\t\t\tapplyRuntimeChange(() => runtime.mcpServers.unregister(name, extension.path));\n\t\t},\n\n\t\tgetMcpServers() {\n\t\t\tassertActive();\n\t\t\treturn runtime.mcpServers.list();\n\t\t},\n\n\t\tregisterVirtualModel<TState>(model: ExtensionVirtualModel<TState>) {\n\t\t\tassertActive();\n\t\t\t// Routing runs after the runner binds, so the context is created per request. The state\n\t\t\t// comes from the session branch that this router wrote.\n\t\t\tconst definition: VirtualModelDefinition = {\n\t\t\t\t...model,\n\t\t\t\troute: (request) => model.route(request as ModelRouteRequest<TState>, runtime.createContext()),\n\t\t\t};\n\t\t\tapplyRuntimeChange(() => runtime.registerVirtualModel(definition, extension.path));\n\t\t},\n\n\t\tunregisterVirtualModel(provider: string, id: string) {\n\t\t\tassertActive();\n\t\t\tapplyRuntimeChange(() => runtime.unregisterVirtualModel(provider, id));\n\t\t},\n\n\t\tevents: {\n\t\t\temit(channel, data) {\n\t\t\t\tassertActive();\n\t\t\t\teventBus.emit(channel, data);\n\t\t\t},\n\t\t\ton(channel, handler) {\n\t\t\t\tassertActive();\n\t\t\t\tconst unsubscribe = runtime.trackEventBusSubscription(eventBus.on(channel, handler));\n\t\t\t\tif (state === \"loading\") loadingUnsubscribers.push(unsubscribe);\n\t\t\t\treturn unsubscribe;\n\t\t\t},\n\t\t},\n\t} as ExtensionAPI;\n\n\treturn {\n\t\tapi,\n\t\tcommit: () => {\n\t\t\tif (state !== \"loading\") return;\n\t\t\truntime.assertActive();\n\t\t\tfor (const [name, value] of pendingFlagValues) {\n\t\t\t\tif (!runtime.flagValues.has(name)) runtime.flagValues.set(name, value);\n\t\t\t}\n\t\t\tfor (const apply of pendingRuntimeChanges) apply();\n\t\t\tstate = \"active\";\n\t\t\tclearPending();\n\t\t},\n\t\tdiscard: () => {\n\t\t\tif (state !== \"loading\") return;\n\t\t\tstate = \"failed\";\n\t\t\tfor (const unsubscribe of loadingUnsubscribers) unsubscribe();\n\t\t\tclearPending();\n\t\t},\n\t};\n}\n\nfunction isCurrentCacheToken(cacheToken: ExtensionCacheToken | undefined): cacheToken is ExtensionCacheToken {\n\treturn (\n\t\tcacheToken !== undefined &&\n\t\textensionCacheCwd === cacheToken.cwd &&\n\t\textensionCacheGeneration === cacheToken.generation\n\t);\n}\n\nasync function loadExtensionModule(extensionPath: string, cacheToken?: ExtensionCacheToken) {\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\tconst cachedFactory = extensionCache.get(extensionPath);\n\t\tif (cachedFactory) {\n\t\t\treturn cachedFactory;\n\t\t}\n\t}\n\n\tconst createJitiImpl = await getCreateJiti();\n\t// Compiled binaries and the bundled Node distribution use embedded modules.\n\t// Source TypeScript reuses host modules and root tsconfig paths. Unbundled\n\t// Node builds use dist aliases and do not need the bundled virtual modules.\n\tconst resolutionOptions = usesEmbeddedModules\n\t\t? { virtualModules: await getVirtualModules(), tryNative: false }\n\t\t: isTypeScriptSourceRuntime\n\t\t\t? { virtualModules: await getVirtualModules(), tsconfigPaths: true }\n\t\t\t: { alias: getAliases() };\n\tconst jiti = createJitiImpl(import.meta.url, {\n\t\tmoduleCache: false,\n\t\t...resolutionOptions,\n\t});\n\n\tconst module = await jiti.import(extensionPath, { default: true });\n\tconst factory = module as ExtensionFactory;\n\tif (typeof factory !== \"function\") {\n\t\treturn undefined;\n\t}\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\textensionCache.set(extensionPath, factory);\n\t}\n\treturn factory;\n}\n\n/**\n * Create an Extension object with empty collections.\n */\nfunction createExtension(extensionPath: string, resolvedPath: string): Extension {\n\tconst source = getSyntheticPathSource(extensionPath) ?? \"local\";\n\tconst baseDir = isSyntheticPath(extensionPath) ? undefined : path.dirname(resolvedPath);\n\n\treturn {\n\t\tpath: extensionPath,\n\t\tresolvedPath,\n\t\tsourceInfo: createSyntheticSourceInfo(extensionPath, { source, baseDir }),\n\t\thandlers: new Map(),\n\t\ttools: new Map(),\n\t\tmessageRenderers: new Map(),\n\t\tentryRenderers: new Map(),\n\t\tcommands: new Map(),\n\t\tflags: new Map(),\n\t\tshortcuts: new Map(),\n\t};\n}\n\nasync function initializeExtension(\n\tfactory: ExtensionFactory,\n\textensionPath: string,\n\tresolvedPath: string,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n): Promise<Extension> {\n\tconst extension = createExtension(extensionPath, resolvedPath);\n\tconst load = createExtensionAPI(extension, runtime, cwd, eventBus);\n\ttry {\n\t\tawait factory(load.api);\n\t\tload.commit();\n\t} catch (error) {\n\t\tload.discard();\n\t\tthrow error;\n\t}\n\ttime(`${extensionPath} factory`, \"extensions\");\n\treturn extension;\n}\n\nasync function loadExtension(\n\textensionPath: string,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\tcacheToken?: ExtensionCacheToken,\n): Promise<{ extension: Extension | null; error: string | null }> {\n\tconst resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });\n\n\ttry {\n\t\tconst factory = await loadExtensionModule(resolvedPath, cacheToken);\n\t\ttime(`${extensionPath} module import`, \"extensions\");\n\t\tif (!factory) {\n\t\t\treturn { extension: null, error: `Extension does not export a valid factory function: ${extensionPath}` };\n\t\t}\n\n\t\tconst extension = await initializeExtension(factory, extensionPath, resolvedPath, cwd, eventBus, runtime);\n\n\t\treturn { extension, error: null };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\treturn { extension: null, error: `Failed to load extension: ${message}` };\n\t}\n}\n\n/**\n * Create an Extension from an inline factory function.\n */\nexport async function loadExtensionFromFactory(\n\tfactory: ExtensionFactory,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\textensionPath = \"<inline>\",\n): Promise<Extension> {\n\tconst resolvedCwd = resolvePath(cwd);\n\treturn initializeExtension(factory, extensionPath, extensionPath, resolvedCwd, eventBus, runtime);\n}\n\n/**\n * Load extensions from paths.\n */\nasync function loadExtensionsInternal(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n\tuseCache = false,\n): Promise<LoadExtensionsResult> {\n\tconst extensions: Extension[] = [];\n\tconst errors: Array<{ path: string; error: string }> = [];\n\tconst warnings: Array<{ path: string; warning: string }> = [];\n\tconst cacheToken = useCache ? useExtensionCacheCwd(cwd) : undefined;\n\tconst resolvedCwd = cacheToken?.cwd ?? resolvePath(cwd);\n\tconst resolvedEventBus = eventBus ?? createEventBus();\n\tconst resolvedRuntime = runtime ?? createExtensionRuntime();\n\n\tfor (const extPath of paths) {\n\t\tconst { extension, error } = await loadExtension(\n\t\t\textPath,\n\t\t\tresolvedCwd,\n\t\t\tresolvedEventBus,\n\t\t\tresolvedRuntime,\n\t\t\tcacheToken,\n\t\t);\n\n\t\tif (error) {\n\t\t\terrors.push({ path: extPath, error });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (extension) {\n\t\t\textensions.push(extension);\n\t\t}\n\t}\n\n\treturn {\n\t\textensions,\n\t\terrors,\n\t\twarnings,\n\t\truntime: resolvedRuntime,\n\t};\n}\n\nexport async function loadExtensions(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime);\n}\n\nexport async function loadExtensionsCached(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime, true);\n}\n\nfunction isExtensionFile(name: string): boolean {\n\treturn name.endsWith(\".ts\") || name.endsWith(\".js\");\n}\n\n/**\n * Resolve extension entry points from a directory.\n *\n * Checks for:\n * 1. package.json with \"pi.extensions\" field -> returns declared paths\n * 2. index.ts or index.js -> returns the index file\n *\n * Returns resolved paths or null if no entry points found.\n */\nfunction resolveExtensionEntries(dir: string): string[] | null {\n\t// Check for package.json with \"pi\" field first\n\tconst packageJsonPath = path.join(dir, \"package.json\");\n\tif (fs.existsSync(packageJsonPath)) {\n\t\tconst manifest = readPiManifest(packageJsonPath);\n\t\tif (manifest?.extensions?.length) {\n\t\t\tconst entries: string[] = [];\n\t\t\tfor (const extPath of manifest.extensions) {\n\t\t\t\tconst resolvedExtPath = path.resolve(dir, extPath);\n\t\t\t\tif (fs.existsSync(resolvedExtPath)) {\n\t\t\t\t\tentries.push(resolvedExtPath);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entries.length > 0) {\n\t\t\t\treturn entries;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for index.ts or index.js\n\tconst indexTs = path.join(dir, \"index.ts\");\n\tconst indexJs = path.join(dir, \"index.js\");\n\tif (fs.existsSync(indexTs)) {\n\t\treturn [indexTs];\n\t}\n\tif (fs.existsSync(indexJs)) {\n\t\treturn [indexJs];\n\t}\n\n\treturn null;\n}\n\n/**\n * Discover extensions in a directory.\n *\n * Discovery rules:\n * 1. Direct files: `extensions/*.ts` or `*.js` → load\n * 2. Subdirectory with index: `extensions/* /index.ts` or `index.js` → load\n * 3. Subdirectory with package.json: `extensions/* /package.json` with \"pi\" field → load what it declares\n *\n * No recursion beyond one level. Complex packages must use package.json manifest.\n */\nfunction discoverExtensionsInDir(dir: string): string[] {\n\tif (!fs.existsSync(dir)) {\n\t\treturn [];\n\t}\n\n\tconst discovered: string[] = [];\n\n\ttry {\n\t\tconst entries = fs.readdirSync(dir, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst entryPath = path.join(dir, entry.name);\n\n\t\t\t// 1. Direct files: *.ts or *.js\n\t\t\tif ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {\n\t\t\t\tdiscovered.push(entryPath);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 2 & 3. Subdirectories\n\t\t\tif (entry.isDirectory() || entry.isSymbolicLink()) {\n\t\t\t\tconst entries = resolveExtensionEntries(entryPath);\n\t\t\t\tif (entries) {\n\t\t\t\t\tdiscovered.push(...entries);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\treturn [];\n\t}\n\n\treturn discovered;\n}\n\n/**\n * Discover and load extensions from standard locations.\n */\nexport async function discoverAndLoadExtensions(\n\tconfiguredPaths: string[],\n\tcwd: string,\n\tagentDir: string = getAgentDir(),\n\teventBus?: EventBus,\n): Promise<LoadExtensionsResult> {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst resolvedAgentDir = resolvePath(agentDir);\n\tconst allPaths: string[] = [];\n\tconst seen = new Set<string>();\n\n\tconst addPaths = (paths: string[]) => {\n\t\tfor (const p of paths) {\n\t\t\tconst resolved = path.resolve(p);\n\t\t\tif (!seen.has(resolved)) {\n\t\t\t\tseen.add(resolved);\n\t\t\t\tallPaths.push(p);\n\t\t\t}\n\t\t}\n\t};\n\n\t// 1. Project-local extensions: cwd/${CONFIG_DIR_NAME}/extensions/\n\tconst localExtDir = path.join(resolvedCwd, CONFIG_DIR_NAME, \"extensions\");\n\taddPaths(discoverExtensionsInDir(localExtDir));\n\n\t// 2. Global extensions: agentDir/extensions/\n\tconst globalExtDir = path.join(resolvedAgentDir, \"extensions\");\n\taddPaths(discoverExtensionsInDir(globalExtDir));\n\n\t// 3. Explicitly configured paths\n\tfor (const p of configuredPaths) {\n\t\tconst resolved = resolvePath(p, resolvedCwd, { normalizeUnicodeSpaces: true });\n\t\tif (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {\n\t\t\t// Check for package.json with pi manifest or index.ts\n\t\t\tconst entries = resolveExtensionEntries(resolved);\n\t\t\tif (entries) {\n\t\t\t\taddPaths(entries);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// No explicit entries - discover individual files in directory\n\t\t\taddPaths(discoverExtensionsInDir(resolved));\n\t\t\tcontinue;\n\t\t}\n\n\t\taddPaths([resolved]);\n\t}\n\n\treturn loadExtensions(allPaths, resolvedCwd, eventBus);\n}\n"]}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Extension loader - loads TypeScript extension modules using jiti.\n *\n */\n\nimport * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { Provider } from \"@earendil-works/pi-ai\";\nimport type { KeyId } from \"@earendil-works/pi-tui\";\nimport type { createJiti } from \"jiti\";\nimport { CONFIG_DIR_NAME, DISTRIBUTION_PACKAGE_NAME, getAgentDir, isBunBinary, isBundledNode } from \"../../config.ts\";\nimport { resolvePath } from \"../../utils/paths.ts\";\nimport { createEventBus, type EventBus } from \"../event-bus.ts\";\nimport type { ExecOptions } from \"../exec.ts\";\nimport { execCommand } from \"../exec.ts\";\nimport { type McpServerConfig, McpServerRegistry, mcpNamespace, validateMcpServerConfig } from \"../mcp-servers.ts\";\nimport { readPiManifest } from \"../pi-manifest.ts\";\nimport { createSyntheticSourceInfo, getSyntheticPathSource, isSyntheticPath } from \"../source-info.ts\";\nimport { time } from \"../timings.ts\";\nimport type { ModelRouteRequest, VirtualModelDefinition } from \"../virtual-models.ts\";\nimport type {\n\tEntryRenderer,\n\tExtension,\n\tExtensionAPI,\n\tExtensionFactory,\n\tExtensionRuntime,\n\tExtensionVirtualModel,\n\tLoadExtensionsResult,\n\tMarkdownTransformer,\n\tMessageRenderer,\n\tProviderConfig,\n\tRegisteredCommand,\n\tToolDefinition,\n\tToolRendererResolver,\n} from \"./types.ts\";\n\nconst require = createRequire(import.meta.url);\n\nconst isNodeSeaBinary =\n\t(\"sea\" in process.features && process.features.sea === true) ||\n\tprocess.getBuiltinModule(\"node:sea\")?.isSea() === true;\nconst isTypeScriptSourceRuntime = !isBunBinary && path.extname(fileURLToPath(import.meta.url)) === \".ts\";\nconst usesEmbeddedModules = isBunBinary || isNodeSeaBinary || isBundledNode;\n\nlet createJitiPromise: Promise<typeof createJiti> | undefined;\n\nfunction getCreateJiti(): Promise<typeof createJiti> {\n\tcreateJitiPromise ??= (usesEmbeddedModules ? import(\"./jiti-static-loader.ts\") : import(\"./jiti-loader.ts\")).then(\n\t\t(module) => module.createJiti,\n\t);\n\treturn createJitiPromise;\n}\n\nlet virtualModulesPromise: Promise<Record<string, unknown>> | undefined;\n\nfunction getVirtualModules(): Promise<Record<string, unknown>> {\n\tvirtualModulesPromise ??= import(\"./virtual-modules.ts\").then((module) => module.VIRTUAL_MODULES);\n\treturn virtualModulesPromise;\n}\n\n/**\n * Get aliases for jiti (used in built Node.js mode).\n * In compiled binary mode, virtualModules is used instead.\n */\nlet _aliases: Record<string, string> | null = null;\n\nfunction getAliases(): Record<string, string> {\n\tif (_aliases) return _aliases;\n\n\tconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\tconst packageIndex = path.resolve(__dirname, \"../..\", \"index.js\");\n\n\tconst typeboxEntry = require.resolve(\"typebox\");\n\tconst typeboxCompileEntry = require.resolve(\"typebox/compile\");\n\tconst typeboxValueEntry = require.resolve(\"typebox/value\");\n\n\tconst packagesRoot = path.resolve(__dirname, \"../../../../\");\n\tconst resolveWorkspaceOrImport = (workspaceRelativePath: string, specifier: string): string => {\n\t\tconst workspacePath = path.join(packagesRoot, workspaceRelativePath);\n\t\tif (fs.existsSync(workspacePath)) {\n\t\t\treturn workspacePath;\n\t\t}\n\t\treturn fileURLToPath(import.meta.resolve(specifier));\n\t};\n\n\tconst piCodingAgentEntry = packageIndex;\n\tconst piAgentCoreEntry = resolveWorkspaceOrImport(\"agent/dist/index.js\", \"@earendil-works/pi-agent-core\");\n\tconst piTuiEntry = resolveWorkspaceOrImport(\"tui/dist/index.js\", \"@earendil-works/pi-tui\");\n\t// Extensions resolve the pi-ai root to the compat entrypoint (a strict\n\t// superset of the core entrypoint): existing extensions using the old\n\t// global API keep working at runtime until compat is removed.\n\tconst piAiCompatEntry = resolveWorkspaceOrImport(\"ai/dist/compat.js\", \"@earendil-works/pi-ai/compat\");\n\tconst piAiModelsEntry = resolveWorkspaceOrImport(\"ai/dist/models.js\", \"@earendil-works/pi-ai/models\");\n\tconst piAiOauthEntry = resolveWorkspaceOrImport(\"ai/dist/oauth.js\", \"@earendil-works/pi-ai/oauth\");\n\tconst piAiProvidersEntry = resolveWorkspaceOrImport(\n\t\t\"ai/dist/providers/all.js\",\n\t\t\"@earendil-works/pi-ai/providers/all\",\n\t);\n\n\t_aliases = {\n\t\t\"@earendil-works/pi-coding-agent\": piCodingAgentEntry,\n\t\t[DISTRIBUTION_PACKAGE_NAME]: piCodingAgentEntry,\n\t\t\"@earendil-works/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@earendil-works/pi-tui\": piTuiEntry,\n\t\t\"@earendil-works/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@earendil-works/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@earendil-works/pi-ai/models\": piAiModelsEntry,\n\t\t\"@earendil-works/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@earendil-works/pi-ai\": piAiCompatEntry,\n\t\t\"@mariozechner/pi-coding-agent\": piCodingAgentEntry,\n\t\t\"@mariozechner/pi-agent-core\": piAgentCoreEntry,\n\t\t\"@mariozechner/pi-tui\": piTuiEntry,\n\t\t\"@mariozechner/pi-ai/providers/all\": piAiProvidersEntry,\n\t\t\"@mariozechner/pi-ai/compat\": piAiCompatEntry,\n\t\t\"@mariozechner/pi-ai/models\": piAiModelsEntry,\n\t\t\"@mariozechner/pi-ai/oauth\": piAiOauthEntry,\n\t\t\"@mariozechner/pi-ai\": piAiCompatEntry,\n\t\ttypebox: typeboxEntry,\n\t\t\"typebox/compile\": typeboxCompileEntry,\n\t\t\"typebox/value\": typeboxValueEntry,\n\t\t\"@sinclair/typebox\": typeboxEntry,\n\t\t\"@sinclair/typebox/compile\": typeboxCompileEntry,\n\t\t\"@sinclair/typebox/value\": typeboxValueEntry,\n\t};\n\n\treturn _aliases;\n}\n\ntype HandlerFn = (...args: unknown[]) => Promise<unknown>;\n\nlet extensionCacheCwd: string | undefined;\nlet extensionCacheGeneration = 0;\nconst extensionCache = new Map<string, ExtensionFactory>();\n\ninterface ExtensionCacheToken {\n\tcwd: string;\n\tgeneration: number;\n}\n\nexport function clearExtensionCache(): void {\n\textensionCache.clear();\n\textensionCacheCwd = undefined;\n\textensionCacheGeneration++;\n}\n\nfunction useExtensionCacheCwd(cwd: string): ExtensionCacheToken {\n\tconst resolvedCwd = resolvePath(cwd);\n\tif (extensionCacheCwd !== undefined && extensionCacheCwd !== resolvedCwd) {\n\t\tclearExtensionCache();\n\t}\n\textensionCacheCwd = resolvedCwd;\n\treturn { cwd: resolvedCwd, generation: extensionCacheGeneration };\n}\n\n/**\n * Create a runtime with throwing stubs for action methods.\n * Runner.bindCore() replaces these with real implementations.\n */\nexport function createExtensionRuntime(): ExtensionRuntime {\n\tconst notInitialized = () => {\n\t\tthrow new Error(\"Extension runtime not initialized. Action methods cannot be called during extension loading.\");\n\t};\n\tconst state: { staleMessage?: string } = {};\n\tconst eventBusUnsubscribers = new Set<() => void>();\n\tconst assertActive = () => {\n\t\tif (state.staleMessage) {\n\t\t\tthrow new Error(state.staleMessage);\n\t\t}\n\t};\n\n\tconst runtime: ExtensionRuntime = {\n\t\tsendMessage: notInitialized,\n\t\tsendUserMessage: notInitialized,\n\t\tappendEntry: notInitialized,\n\t\tsetSessionName: notInitialized,\n\t\tgetSessionName: notInitialized,\n\t\tsetLabel: notInitialized,\n\t\tgetActiveTools: notInitialized,\n\t\tgetAllTools: notInitialized,\n\t\tgetSettings: notInitialized,\n\t\tsetActiveTools: notInitialized,\n\t\t// registerTool() is valid during extension load; refresh is only needed post-bind.\n\t\trefreshTools: () => {},\n\t\tgetCommands: notInitialized,\n\t\tsetModel: () => Promise.reject(new Error(\"Extension runtime not initialized\")),\n\t\tgetThinkingLevel: notInitialized,\n\t\tsetThinkingLevel: notInitialized,\n\t\tflagValues: new Map(),\n\t\tpendingProviderRegistrations: [],\n\t\tpendingNativeProviderRegistrations: [],\n\t\tmcpServers: new McpServerRegistry(),\n\t\tpendingVirtualModelRegistrations: [],\n\t\tcreateContext: notInitialized,\n\t\tassertActive,\n\t\tinvalidate: (message) => {\n\t\t\tif (state.staleMessage) return;\n\t\t\tstate.staleMessage =\n\t\t\t\tmessage ??\n\t\t\t\t\"This extension ctx is stale after session replacement or reload. Do not use a captured pi or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().\";\n\t\t\tfor (const unsubscribe of eventBusUnsubscribers) unsubscribe();\n\t\t\teventBusUnsubscribers.clear();\n\t\t},\n\t\ttrackEventBusSubscription: (unsubscribe) => {\n\t\t\tlet active = true;\n\t\t\tconst trackedUnsubscribe = () => {\n\t\t\t\tif (!active) return;\n\t\t\t\tactive = false;\n\t\t\t\teventBusUnsubscribers.delete(trackedUnsubscribe);\n\t\t\t\tunsubscribe();\n\t\t\t};\n\t\t\teventBusUnsubscribers.add(trackedUnsubscribe);\n\t\t\treturn trackedUnsubscribe;\n\t\t},\n\t\t// Pre-bind: queue registrations so bindCore() can flush them once the\n\t\t// model registry is available. bindCore() replaces both with direct calls.\n\t\tregisterProvider: (name, config, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingProviderRegistrations.push({ name, config, extensionPath });\n\t\t},\n\t\tregisterNativeProvider: (provider, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingNativeProviderRegistrations.push({ provider, extensionPath });\n\t\t},\n\t\tunregisterProvider: (name) => {\n\t\t\truntime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);\n\t\t\truntime.pendingNativeProviderRegistrations = runtime.pendingNativeProviderRegistrations.filter(\n\t\t\t\t(r) => r.provider.id !== name,\n\t\t\t);\n\t\t},\n\t\tregisterVirtualModel: (definition, extensionPath = \"<unknown>\") => {\n\t\t\truntime.pendingVirtualModelRegistrations.push({ definition, extensionPath });\n\t\t},\n\t\tunregisterVirtualModel: (provider, id) => {\n\t\t\truntime.pendingVirtualModelRegistrations = runtime.pendingVirtualModelRegistrations.filter(\n\t\t\t\t({ definition }) => definition.provider !== provider || definition.id !== id,\n\t\t\t);\n\t\t},\n\t};\n\n\treturn runtime;\n}\n\n/**\n * Create the ExtensionAPI for an extension.\n * Registration methods write to the extension object.\n * Action methods delegate to the shared runtime.\n */\nfunction createExtensionAPI(\n\textension: Extension,\n\truntime: ExtensionRuntime,\n\tcwd: string,\n\teventBus: EventBus,\n): { api: ExtensionAPI; commit: () => void; discard: () => void } {\n\tconst pendingFlagValues = new Map<string, boolean | string>();\n\tconst pendingRuntimeChanges: Array<() => void> = [];\n\tconst loadingUnsubscribers: Array<() => void> = [];\n\tlet state: \"loading\" | \"active\" | \"failed\" = \"loading\";\n\tconst assertActive = () => {\n\t\tif (state === \"failed\") {\n\t\t\tthrow new Error(`Extension \"${extension.path}\" failed to load and its API is no longer active.`);\n\t\t}\n\t\truntime.assertActive();\n\t};\n\tconst applyRuntimeChange = (change: () => void) => {\n\t\tif (state === \"loading\") pendingRuntimeChanges.push(change);\n\t\telse change();\n\t};\n\tconst clearPending = () => {\n\t\tpendingFlagValues.clear();\n\t\tpendingRuntimeChanges.length = 0;\n\t\tloadingUnsubscribers.length = 0;\n\t};\n\n\tconst api = {\n\t\t// Registration methods - write to extension\n\t\ton(event: string, handler: HandlerFn): () => void {\n\t\t\tassertActive();\n\t\t\tconst registeredHandler: HandlerFn = (...args) => handler(...args);\n\t\t\tconst list = extension.handlers.get(event) ?? [];\n\t\t\tlist.push(registeredHandler);\n\t\t\textension.handlers.set(event, list);\n\n\t\t\treturn () => {\n\t\t\t\tconst handlers = extension.handlers.get(event);\n\t\t\t\tif (!handlers) return;\n\t\t\t\tconst handlerIndex = handlers.indexOf(registeredHandler);\n\t\t\t\tif (handlerIndex === -1) return;\n\t\t\t\thandlers.splice(handlerIndex, 1);\n\t\t\t\tif (handlers.length === 0) extension.handlers.delete(event);\n\t\t\t};\n\t\t},\n\n\t\tregisterTool(tool: ToolDefinition): void {\n\t\t\tassertActive();\n\t\t\tif (typeof tool.parameters !== \"object\" || tool.parameters === null || Array.isArray(tool.parameters)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tool \"${tool.name}\" registered by extension \"${extension.path}\" must define an object parameter schema.`,\n\t\t\t\t);\n\t\t\t}\n\t\t\textension.tools.set(tool.name, {\n\t\t\t\tdefinition: tool,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t});\n\t\t\truntime.refreshTools();\n\t\t},\n\n\t\tregisterCommand(name: string, options: Omit<RegisteredCommand, \"name\" | \"sourceInfo\">): void {\n\t\t\tassertActive();\n\t\t\tif (typeof name !== \"string\" || name.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Command registered by extension \"${extension.path}\" must have a non-empty string name. Use pi.registerCommand(\"name\", { description, handler }).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof options?.handler !== \"function\") {\n\t\t\t\tthrow new Error(`Command \"/${name}\" registered by extension \"${extension.path}\" must define handler().`);\n\t\t\t}\n\t\t\textension.commands.set(name, {\n\t\t\t\tname,\n\t\t\t\tsourceInfo: extension.sourceInfo,\n\t\t\t\t...options,\n\t\t\t});\n\t\t},\n\n\t\tregisterShortcut(\n\t\t\tshortcut: KeyId,\n\t\t\toptions: {\n\t\t\t\tdescription?: string;\n\t\t\t\thandler: (ctx: import(\"./types.ts\").ExtensionContext) => Promise<void> | void;\n\t\t\t},\n\t\t): void {\n\t\t\tassertActive();\n\t\t\textension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });\n\t\t},\n\n\t\tregisterFlag(\n\t\t\tname: string,\n\t\t\toptions: { description?: string; type: \"boolean\" | \"string\"; default?: boolean | string },\n\t\t): void {\n\t\t\tassertActive();\n\t\t\tif (options.default !== undefined && typeof options.default !== options.type) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid default for flag \"${name}\": expected ${options.type}, got ${typeof options.default}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\textension.flags.set(name, { name, extensionPath: extension.path, ...options });\n\t\t\tif (options.default !== undefined && !runtime.flagValues.has(name)) {\n\t\t\t\tif (state === \"loading\") {\n\t\t\t\t\tif (!pendingFlagValues.has(name)) pendingFlagValues.set(name, options.default);\n\t\t\t\t} else {\n\t\t\t\t\truntime.flagValues.set(name, options.default);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tregisterMessageRenderer<T>(customType: string, renderer: MessageRenderer<T>): void {\n\t\t\tassertActive();\n\t\t\textension.messageRenderers.set(customType, renderer as MessageRenderer);\n\t\t},\n\n\t\tregisterMarkdownTransformer(transformer: MarkdownTransformer): void {\n\t\t\tassertActive();\n\t\t\textension.markdownTransformer = transformer;\n\t\t},\n\n\t\tregisterEntryRenderer<T>(customType: string, renderer: EntryRenderer<T>): void {\n\t\t\tassertActive();\n\t\t\textension.entryRenderers ??= new Map();\n\t\t\textension.entryRenderers.set(customType, renderer as EntryRenderer);\n\t\t},\n\n\t\tregisterToolRenderer(resolver: ToolRendererResolver): void {\n\t\t\tassertActive();\n\t\t\textension.toolRenderers ??= [];\n\t\t\textension.toolRenderers.push(resolver);\n\t\t},\n\n\t\t// Flag access - checks extension registered it, reads from runtime\n\t\tgetFlag(name: string): boolean | string | undefined {\n\t\t\tassertActive();\n\t\t\tif (!extension.flags.has(name)) return undefined;\n\t\t\treturn runtime.flagValues.has(name) ? runtime.flagValues.get(name) : pendingFlagValues.get(name);\n\t\t},\n\n\t\t// Action methods - delegate to shared runtime\n\t\tsendMessage(message, options): void {\n\t\t\tassertActive();\n\t\t\truntime.sendMessage(message, options);\n\t\t},\n\n\t\tsendUserMessage(content, options): void {\n\t\t\tassertActive();\n\t\t\truntime.sendUserMessage(content, options);\n\t\t},\n\n\t\tappendEntry(customType: string, data?: unknown): void {\n\t\t\tassertActive();\n\t\t\truntime.appendEntry(customType, data);\n\t\t},\n\n\t\tsetSessionName(name: string): void {\n\t\t\tassertActive();\n\t\t\truntime.setSessionName(name);\n\t\t},\n\n\t\tgetSessionName(): string | undefined {\n\t\t\tassertActive();\n\t\t\treturn runtime.getSessionName();\n\t\t},\n\n\t\tsetLabel(entryId: string, label: string | undefined): void {\n\t\t\tassertActive();\n\t\t\truntime.setLabel(entryId, label);\n\t\t},\n\n\t\texec(command: string, args: string[], options?: ExecOptions) {\n\t\t\tassertActive();\n\t\t\treturn execCommand(command, args, options?.cwd ?? cwd, options);\n\t\t},\n\n\t\tgetActiveTools(): string[] {\n\t\t\tassertActive();\n\t\t\treturn runtime.getActiveTools();\n\t\t},\n\n\t\tgetAllTools() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getAllTools();\n\t\t},\n\n\t\tgetSettings() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getSettings();\n\t\t},\n\n\t\tsetActiveTools(toolNames: string[]): void {\n\t\t\tassertActive();\n\t\t\truntime.setActiveTools(toolNames);\n\t\t},\n\n\t\tgetCommands() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getCommands();\n\t\t},\n\n\t\tsetModel(model) {\n\t\t\tassertActive();\n\t\t\treturn runtime.setModel(model);\n\t\t},\n\n\t\tgetThinkingLevel() {\n\t\t\tassertActive();\n\t\t\treturn runtime.getThinkingLevel();\n\t\t},\n\n\t\tsetThinkingLevel(level) {\n\t\t\tassertActive();\n\t\t\truntime.setThinkingLevel(level);\n\t\t},\n\n\t\tregisterProvider(providerOrName: Provider | string, config?: ProviderConfig) {\n\t\t\tassertActive();\n\t\t\tif (typeof providerOrName === \"string\") {\n\t\t\t\tif (!config) throw new Error(\"Provider config is required when registering by name\");\n\t\t\t\tapplyRuntimeChange(() => runtime.registerProvider(providerOrName, config, extension.path));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tapplyRuntimeChange(() => runtime.registerNativeProvider(providerOrName, extension.path));\n\t\t},\n\n\t\tunregisterProvider(name: string) {\n\t\t\tassertActive();\n\t\t\tapplyRuntimeChange(() => runtime.unregisterProvider(name, extension.path));\n\t\t},\n\n\t\tregisterMcpServer(name: string, config: McpServerConfig) {\n\t\t\tassertActive();\n\t\t\tconst validated = validateMcpServerConfig(name, config);\n\t\t\tif (typeof validated === \"string\") {\n\t\t\t\tthrow new Error(`Invalid MCP server registered by extension \"${extension.path}\": ${validated}`);\n\t\t\t}\n\t\t\tconst owner = runtime.mcpServers.get(name)?.extensionPath;\n\t\t\tif (owner !== undefined && owner !== extension.path) {\n\t\t\t\tthrow new Error(`MCP server \"${name}\" is already registered by extension \"${owner}\"`);\n\t\t\t}\n\t\t\t// Names that differ only in `-` and `_` would share a namespace.\n\t\t\tconst clash = runtime.mcpServers\n\t\t\t\t.list()\n\t\t\t\t.find((server) => server.name !== name && mcpNamespace(server.name) === mcpNamespace(name));\n\t\t\tif (clash) throw new Error(`MCP server \"${name}\" conflicts with registered server \"${clash.name}\"`);\n\t\t\tconst server = { name, config: structuredClone(validated), extensionPath: extension.path };\n\t\t\tapplyRuntimeChange(() => runtime.mcpServers.register(server));\n\t\t},\n\n\t\tunregisterMcpServer(name: string) {\n\t\t\tassertActive();\n\t\t\tapplyRuntimeChange(() => runtime.mcpServers.unregister(name, extension.path));\n\t\t},\n\n\t\tgetMcpServers() {\n\t\t\tassertActive();\n\t\t\treturn runtime.mcpServers.list();\n\t\t},\n\n\t\tregisterVirtualModel<TState>(model: ExtensionVirtualModel<TState>) {\n\t\t\tassertActive();\n\t\t\t// Routing runs after the runner binds, so the context is created per request. The state\n\t\t\t// comes from the session branch that this router wrote.\n\t\t\tconst definition: VirtualModelDefinition = {\n\t\t\t\t...model,\n\t\t\t\troute: (request) => model.route(request as ModelRouteRequest<TState>, runtime.createContext()),\n\t\t\t};\n\t\t\tapplyRuntimeChange(() => runtime.registerVirtualModel(definition, extension.path));\n\t\t},\n\n\t\tunregisterVirtualModel(provider: string, id: string) {\n\t\t\tassertActive();\n\t\t\tapplyRuntimeChange(() => runtime.unregisterVirtualModel(provider, id));\n\t\t},\n\n\t\tevents: {\n\t\t\temit(channel, data) {\n\t\t\t\tassertActive();\n\t\t\t\teventBus.emit(channel, data);\n\t\t\t},\n\t\t\ton(channel, handler) {\n\t\t\t\tassertActive();\n\t\t\t\tconst unsubscribe = runtime.trackEventBusSubscription(eventBus.on(channel, handler));\n\t\t\t\tif (state === \"loading\") loadingUnsubscribers.push(unsubscribe);\n\t\t\t\treturn unsubscribe;\n\t\t\t},\n\t\t},\n\t} as ExtensionAPI;\n\n\treturn {\n\t\tapi,\n\t\tcommit: () => {\n\t\t\tif (state !== \"loading\") return;\n\t\t\truntime.assertActive();\n\t\t\tfor (const [name, value] of pendingFlagValues) {\n\t\t\t\tif (!runtime.flagValues.has(name)) runtime.flagValues.set(name, value);\n\t\t\t}\n\t\t\tfor (const apply of pendingRuntimeChanges) apply();\n\t\t\tstate = \"active\";\n\t\t\tclearPending();\n\t\t},\n\t\tdiscard: () => {\n\t\t\tif (state !== \"loading\") return;\n\t\t\tstate = \"failed\";\n\t\t\tfor (const unsubscribe of loadingUnsubscribers) unsubscribe();\n\t\t\tclearPending();\n\t\t},\n\t};\n}\n\nfunction isCurrentCacheToken(cacheToken: ExtensionCacheToken | undefined): cacheToken is ExtensionCacheToken {\n\treturn (\n\t\tcacheToken !== undefined &&\n\t\textensionCacheCwd === cacheToken.cwd &&\n\t\textensionCacheGeneration === cacheToken.generation\n\t);\n}\n\nasync function loadExtensionModule(extensionPath: string, cacheToken?: ExtensionCacheToken) {\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\tconst cachedFactory = extensionCache.get(extensionPath);\n\t\tif (cachedFactory) {\n\t\t\treturn cachedFactory;\n\t\t}\n\t}\n\n\tconst createJitiImpl = await getCreateJiti();\n\t// Compiled binaries and the bundled Node distribution use embedded modules.\n\t// Source TypeScript reuses host modules and root tsconfig paths. Unbundled\n\t// Node builds use dist aliases and do not need the bundled virtual modules.\n\tconst resolutionOptions = usesEmbeddedModules\n\t\t? { virtualModules: await getVirtualModules(), tryNative: false }\n\t\t: isTypeScriptSourceRuntime\n\t\t\t? { virtualModules: await getVirtualModules(), tsconfigPaths: true }\n\t\t\t: { alias: getAliases() };\n\tconst jiti = createJitiImpl(import.meta.url, {\n\t\tmoduleCache: false,\n\t\t...resolutionOptions,\n\t});\n\n\tconst module = await jiti.import(extensionPath, { default: true });\n\tconst factory = module as ExtensionFactory;\n\tif (typeof factory !== \"function\") {\n\t\treturn undefined;\n\t}\n\tif (isCurrentCacheToken(cacheToken)) {\n\t\textensionCache.set(extensionPath, factory);\n\t}\n\treturn factory;\n}\n\n/**\n * Create an Extension object with empty collections.\n */\nfunction createExtension(extensionPath: string, resolvedPath: string): Extension {\n\tconst source = getSyntheticPathSource(extensionPath) ?? \"local\";\n\tconst baseDir = isSyntheticPath(extensionPath) ? undefined : path.dirname(resolvedPath);\n\n\treturn {\n\t\tpath: extensionPath,\n\t\tresolvedPath,\n\t\tsourceInfo: createSyntheticSourceInfo(extensionPath, { source, baseDir }),\n\t\thandlers: new Map(),\n\t\ttools: new Map(),\n\t\tmessageRenderers: new Map(),\n\t\tentryRenderers: new Map(),\n\t\tcommands: new Map(),\n\t\tflags: new Map(),\n\t\tshortcuts: new Map(),\n\t};\n}\n\nasync function initializeExtension(\n\tfactory: ExtensionFactory,\n\textensionPath: string,\n\tresolvedPath: string,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n): Promise<Extension> {\n\tconst extension = createExtension(extensionPath, resolvedPath);\n\tconst load = createExtensionAPI(extension, runtime, cwd, eventBus);\n\ttry {\n\t\tawait factory(load.api);\n\t\tload.commit();\n\t} catch (error) {\n\t\tload.discard();\n\t\tthrow error;\n\t}\n\ttime(`${extensionPath} factory`, \"extensions\");\n\treturn extension;\n}\n\nasync function loadExtension(\n\textensionPath: string,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\tcacheToken?: ExtensionCacheToken,\n): Promise<{ extension: Extension | null; error: string | null }> {\n\tconst resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });\n\n\ttry {\n\t\tconst factory = await loadExtensionModule(resolvedPath, cacheToken);\n\t\ttime(`${extensionPath} module import`, \"extensions\");\n\t\tif (!factory) {\n\t\t\treturn { extension: null, error: `Extension does not export a valid factory function: ${extensionPath}` };\n\t\t}\n\n\t\tconst extension = await initializeExtension(factory, extensionPath, resolvedPath, cwd, eventBus, runtime);\n\n\t\treturn { extension, error: null };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\treturn { extension: null, error: `Failed to load extension: ${message}` };\n\t}\n}\n\n/**\n * Create an Extension from an inline factory function.\n */\nexport async function loadExtensionFromFactory(\n\tfactory: ExtensionFactory,\n\tcwd: string,\n\teventBus: EventBus,\n\truntime: ExtensionRuntime,\n\textensionPath = \"<inline>\",\n): Promise<Extension> {\n\tconst resolvedCwd = resolvePath(cwd);\n\treturn initializeExtension(factory, extensionPath, extensionPath, resolvedCwd, eventBus, runtime);\n}\n\n/**\n * Load extensions from paths.\n */\nasync function loadExtensionsInternal(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n\tuseCache = false,\n): Promise<LoadExtensionsResult> {\n\tconst extensions: Extension[] = [];\n\tconst errors: Array<{ path: string; error: string }> = [];\n\tconst warnings: Array<{ path: string; warning: string }> = [];\n\tconst cacheToken = useCache ? useExtensionCacheCwd(cwd) : undefined;\n\tconst resolvedCwd = cacheToken?.cwd ?? resolvePath(cwd);\n\tconst resolvedEventBus = eventBus ?? createEventBus();\n\tconst resolvedRuntime = runtime ?? createExtensionRuntime();\n\n\tfor (const extPath of paths) {\n\t\tconst { extension, error } = await loadExtension(\n\t\t\textPath,\n\t\t\tresolvedCwd,\n\t\t\tresolvedEventBus,\n\t\t\tresolvedRuntime,\n\t\t\tcacheToken,\n\t\t);\n\n\t\tif (error) {\n\t\t\terrors.push({ path: extPath, error });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (extension) {\n\t\t\textensions.push(extension);\n\t\t}\n\t}\n\n\treturn {\n\t\textensions,\n\t\terrors,\n\t\twarnings,\n\t\truntime: resolvedRuntime,\n\t};\n}\n\nexport async function loadExtensions(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime);\n}\n\nexport async function loadExtensionsCached(\n\tpaths: string[],\n\tcwd: string,\n\teventBus?: EventBus,\n\truntime?: ExtensionRuntime,\n): Promise<LoadExtensionsResult> {\n\treturn loadExtensionsInternal(paths, cwd, eventBus, runtime, true);\n}\n\nfunction isExtensionFile(name: string): boolean {\n\treturn name.endsWith(\".ts\") || name.endsWith(\".js\");\n}\n\n/**\n * Resolve extension entry points from a directory.\n *\n * Checks for:\n * 1. package.json with \"pi.extensions\" field -> returns declared paths\n * 2. index.ts or index.js -> returns the index file\n *\n * Returns resolved paths or null if no entry points found.\n */\nfunction resolveExtensionEntries(dir: string): string[] | null {\n\t// Check for package.json with \"pi\" field first\n\tconst packageJsonPath = path.join(dir, \"package.json\");\n\tif (fs.existsSync(packageJsonPath)) {\n\t\tconst manifest = readPiManifest(packageJsonPath);\n\t\tif (manifest?.extensions?.length) {\n\t\t\tconst entries: string[] = [];\n\t\t\tfor (const extPath of manifest.extensions) {\n\t\t\t\tconst resolvedExtPath = path.resolve(dir, extPath);\n\t\t\t\tif (fs.existsSync(resolvedExtPath)) {\n\t\t\t\t\tentries.push(resolvedExtPath);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entries.length > 0) {\n\t\t\t\treturn entries;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for index.ts or index.js\n\tconst indexTs = path.join(dir, \"index.ts\");\n\tconst indexJs = path.join(dir, \"index.js\");\n\tif (fs.existsSync(indexTs)) {\n\t\treturn [indexTs];\n\t}\n\tif (fs.existsSync(indexJs)) {\n\t\treturn [indexJs];\n\t}\n\n\treturn null;\n}\n\n/**\n * Discover extensions in a directory.\n *\n * Discovery rules:\n * 1. Direct files: `extensions/*.ts` or `*.js` → load\n * 2. Subdirectory with index: `extensions/* /index.ts` or `index.js` → load\n * 3. Subdirectory with package.json: `extensions/* /package.json` with \"pi\" field → load what it declares\n *\n * No recursion beyond one level. Complex packages must use package.json manifest.\n */\nfunction discoverExtensionsInDir(dir: string): string[] {\n\tif (!fs.existsSync(dir)) {\n\t\treturn [];\n\t}\n\n\tconst discovered: string[] = [];\n\n\ttry {\n\t\tconst entries = fs.readdirSync(dir, { withFileTypes: true });\n\n\t\tfor (const entry of entries) {\n\t\t\tconst entryPath = path.join(dir, entry.name);\n\n\t\t\t// 1. Direct files: *.ts or *.js\n\t\t\tif ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {\n\t\t\t\tdiscovered.push(entryPath);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 2 & 3. Subdirectories\n\t\t\tif (entry.isDirectory() || entry.isSymbolicLink()) {\n\t\t\t\tconst entries = resolveExtensionEntries(entryPath);\n\t\t\t\tif (entries) {\n\t\t\t\t\tdiscovered.push(...entries);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch {\n\t\treturn [];\n\t}\n\n\treturn discovered;\n}\n\n/**\n * Discover and load extensions from standard locations.\n */\nexport async function discoverAndLoadExtensions(\n\tconfiguredPaths: string[],\n\tcwd: string,\n\tagentDir: string = getAgentDir(),\n\teventBus?: EventBus,\n): Promise<LoadExtensionsResult> {\n\tconst resolvedCwd = resolvePath(cwd);\n\tconst resolvedAgentDir = resolvePath(agentDir);\n\tconst allPaths: string[] = [];\n\tconst seen = new Set<string>();\n\n\tconst addPaths = (paths: string[]) => {\n\t\tfor (const p of paths) {\n\t\t\tconst resolved = path.resolve(p);\n\t\t\tif (!seen.has(resolved)) {\n\t\t\t\tseen.add(resolved);\n\t\t\t\tallPaths.push(p);\n\t\t\t}\n\t\t}\n\t};\n\n\t// 1. Project-local extensions: cwd/${CONFIG_DIR_NAME}/extensions/\n\tconst localExtDir = path.join(resolvedCwd, CONFIG_DIR_NAME, \"extensions\");\n\taddPaths(discoverExtensionsInDir(localExtDir));\n\n\t// 2. Global extensions: agentDir/extensions/\n\tconst globalExtDir = path.join(resolvedAgentDir, \"extensions\");\n\taddPaths(discoverExtensionsInDir(globalExtDir));\n\n\t// 3. Explicitly configured paths\n\tfor (const p of configuredPaths) {\n\t\tconst resolved = resolvePath(p, resolvedCwd, { normalizeUnicodeSpaces: true });\n\t\tif (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {\n\t\t\t// Check for package.json with pi manifest or index.ts\n\t\t\tconst entries = resolveExtensionEntries(resolved);\n\t\t\tif (entries) {\n\t\t\t\taddPaths(entries);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// No explicit entries - discover individual files in directory\n\t\t\taddPaths(discoverExtensionsInDir(resolved));\n\t\t\tcontinue;\n\t\t}\n\n\t\taddPaths([resolved]);\n\t}\n\n\treturn loadExtensions(allPaths, resolvedCwd, eventBus);\n}\n"]}
@@ -11,7 +11,7 @@ export interface TaskDeliveryOptions {
11
11
  }
12
12
  /**
13
13
  * Sole owner of "has this completion reached the model": the pending queue, claims, the in-flight
14
- * completion, failures, pauses, wait receipts and observation holds. An undelivered completion is
14
+ * completion, failures and pauses. An undelivered completion is
15
15
  * a retention lease on its task, so the runtime keeps the record and its output exactly as long
16
16
  * as delivery needs them, and a bare runtime carries no delivery concept at all.
17
17
  */
@@ -23,10 +23,7 @@ export declare class TaskDelivery {
23
23
  private delivery?;
24
24
  /** Settlement order. */
25
25
  private readonly completions;
26
- /** Task IDs under an observation hold or wait receipt, with the number of holders. */
27
- private readonly holds;
28
26
  private readonly failures;
29
- private readonly waits;
30
27
  private readonly listeners;
31
28
  constructor(options: TaskDeliveryOptions);
32
29
  private get service();
@@ -37,8 +34,7 @@ export declare class TaskDelivery {
37
34
  /**
38
35
  * Whether a completion is in flight or will be delivered without further input: queued on the
39
36
  * current runtime, visible on the branch and not failed. A failed delivery only retries on the
40
- * next input, so it does not count. Held completions count: releasing the hold, or the
41
- * acknowledgement that replaces it, always follows.
37
+ * next input, so it does not count.
42
38
  */
43
39
  hasDeliverableWork(): boolean;
44
40
  /** Nestable across asynchronous preflight and service replacement. */
@@ -51,13 +47,8 @@ export declare class TaskDelivery {
51
47
  /** Release every lease held for a runtime that closed or was replaced, so its output cleanup can run. */
52
48
  discard(service: TaskDeliveryService): void;
53
49
  /**
54
- * Keep `taskIds` out of automatic delivery until the release runs. Holds may precede
55
- * settlement, and releasing one re-evaluates the queue.
56
- */
57
- hold(taskIds: readonly string[]): () => void;
58
- /**
59
- * Completions that would be delivered next, oldest launch first: on the visible branch, not
60
- * claimed and not held. Failed deliveries stay listed until the next retry.
50
+ * Completions that would be delivered next, oldest launch first: on the visible branch and not
51
+ * claimed. Failed deliveries stay listed until the next retry.
61
52
  */
62
53
  pending(): TaskSnapshot[];
63
54
  schedule(): void;
@@ -70,13 +61,6 @@ export declare class TaskDelivery {
70
61
  queueCleared(): void;
71
62
  /** Acknowledge only successful appends, using identity even when metadata was rewritten. */
72
63
  messagePersisted(message: AgentMessage): void;
73
- /**
74
- * A wait observed a settled background task. Its observation hold is still in place; take over
75
- * the hold until the wait's tool result is persisted, then acknowledge it instead of notifying.
76
- */
77
- bindWait(toolCallId: string, taskId: string): void;
78
- private acknowledgeWait;
79
- private releaseWaits;
80
64
  dispose(): void;
81
65
  }
82
66
  //# sourceMappingURL=delivery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,6FAA6F;AAC7F,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;AAE/F,MAAM,WAAW,mBAAmB;IACnC,OAAO,IAAI,mBAAmB,CAAC;IAC/B,UAAU,IAAI,OAAO,CAAC;IACtB,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAmBD;;;;;GAKG;AACH,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAC,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,wBAAwB;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0D;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBACvC,OAAO,EAAE,mBAAmB;IAGxC,OAAO,KAAK,OAAO,GAElB;IACD,OAAO,CAAC,IAAI;IAGZ,0EAA0E;IAC1E,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C,OAAO,CAAC,OAAO;IAUf;;;;;OAKG;IACH,kBAAkB,IAAI,OAAO;IAY7B,sEAAsE;IACtE,KAAK,IAAI,MAAM,IAAI;IAWnB,KAAK,IAAI,IAAI;IAMb,oGAAoG;IACpG,OAAO,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO3D,yGAAyG;IACzG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQjC,yGAAyG;IACzG,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAS3C;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,IAAI;IAiB5C;;;OAGG;IACH,OAAO,IAAI,YAAY,EAAE;IASzB,QAAQ,IAAI,IAAI;IAWhB,OAAO,CAAC,UAAU;YAMJ,KAAK;IAiDnB,mFAAmF;IACnF,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAK3C,gFAAgF;IAChF,UAAU,IAAI,IAAI;IAQlB,YAAY,IAAI,IAAI;IAIpB,4FAA4F;IAC5F,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAU7C;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKlD,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,YAAY;IAKpB,OAAO,IAAI,IAAI;CAWf"}
1
+ {"version":3,"file":"delivery.d.ts","sourceRoot":"","sources":["../../../src/core/tasks/delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,6FAA6F;AAC7F,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;AAE/F,MAAM,WAAW,mBAAmB;IACnC,OAAO,IAAI,mBAAmB,CAAC;IAC/B,UAAU,IAAI,OAAO,CAAC;IACtB,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAmBD;;;;;GAKG;AACH,qBAAa,YAAY;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,KAAK,CAAC,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,wBAAwB;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBACvC,OAAO,EAAE,mBAAmB;IAGxC,OAAO,KAAK,OAAO,GAElB;IACD,OAAO,CAAC,IAAI;IAGZ,0EAA0E;IAC1E,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C,OAAO,CAAC,OAAO;IAUf;;;;OAIG;IACH,kBAAkB,IAAI,OAAO;IAY7B,sEAAsE;IACtE,KAAK,IAAI,MAAM,IAAI;IAWnB,KAAK,IAAI,IAAI;IAMb,oGAAoG;IACpG,OAAO,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAO3D,yGAAyG;IACzG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQjC,yGAAyG;IACzG,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAS3C;;;OAGG;IACH,OAAO,IAAI,YAAY,EAAE;IASzB,QAAQ,IAAI,IAAI;IAWhB,OAAO,CAAC,UAAU;YAMJ,KAAK;IAiDnB,mFAAmF;IACnF,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAK3C,gFAAgF;IAChF,UAAU,IAAI,IAAI;IAOlB,YAAY,IAAI,IAAI;IAIpB,4FAA4F;IAC5F,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAS7C,OAAO,IAAI,IAAI;CAUf"}
@@ -1,7 +1,7 @@
1
1
  import { taskCompletionMessage } from "./presentation.js";
2
2
  /**
3
3
  * Sole owner of "has this completion reached the model": the pending queue, claims, the in-flight
4
- * completion, failures, pauses, wait receipts and observation holds. An undelivered completion is
4
+ * completion, failures and pauses. An undelivered completion is
5
5
  * a retention lease on its task, so the runtime keeps the record and its output exactly as long
6
6
  * as delivery needs them, and a bare runtime carries no delivery concept at all.
7
7
  */
@@ -11,10 +11,7 @@ export class TaskDelivery {
11
11
  this.pauses = 0;
12
12
  /** Settlement order. */
13
13
  this.completions = new Map();
14
- /** Task IDs under an observation hold or wait receipt, with the number of holders. */
15
- this.holds = new Map();
16
14
  this.failures = new Set();
17
- this.waits = new Map();
18
15
  this.listeners = new Set();
19
16
  this.options = options;
20
17
  }
@@ -44,8 +41,7 @@ export class TaskDelivery {
44
41
  /**
45
42
  * Whether a completion is in flight or will be delivered without further input: queued on the
46
43
  * current runtime, visible on the branch and not failed. A failed delivery only retries on the
47
- * next input, so it does not count. Held completions count: releasing the hold, or the
48
- * acknowledgement that replaces it, always follows.
44
+ * next input, so it does not count.
49
45
  */
50
46
  hasDeliverableWork() {
51
47
  if (this.disposed)
@@ -107,32 +103,8 @@ export class TaskDelivery {
107
103
  this.changed();
108
104
  }
109
105
  /**
110
- * Keep `taskIds` out of automatic delivery until the release runs. Holds may precede
111
- * settlement, and releasing one re-evaluates the queue.
112
- */
113
- hold(taskIds) {
114
- const ids = [...taskIds];
115
- for (const id of ids)
116
- this.holds.set(id, (this.holds.get(id) ?? 0) + 1);
117
- let released = false;
118
- return () => {
119
- if (released)
120
- return;
121
- released = true;
122
- for (const id of ids) {
123
- const count = (this.holds.get(id) ?? 1) - 1;
124
- if (count > 0)
125
- this.holds.set(id, count);
126
- else
127
- this.holds.delete(id);
128
- }
129
- this.schedule();
130
- this.changed();
131
- };
132
- }
133
- /**
134
- * Completions that would be delivered next, oldest launch first: on the visible branch, not
135
- * claimed and not held. Failed deliveries stay listed until the next retry.
106
+ * Completions that would be delivered next, oldest launch first: on the visible branch and not
107
+ * claimed. Failed deliveries stay listed until the next retry.
136
108
  */
137
109
  pending() {
138
110
  const service = this.service;
@@ -140,7 +112,7 @@ export class TaskDelivery {
140
112
  return [];
141
113
  return service.list().filter((task) => {
142
114
  const completion = this.completions.get(task.id);
143
- return completion?.service === service && !completion.claimed && !this.holds.has(task.id);
115
+ return completion?.service === service && !completion.claimed;
144
116
  });
145
117
  }
146
118
  schedule() {
@@ -213,7 +185,6 @@ export class TaskDelivery {
213
185
  }
214
186
  /** A queued message that was never emitted remains claimed for the next run. */
215
187
  agentEnded() {
216
- this.releaseWaits();
217
188
  const delivery = this.delivery;
218
189
  if (delivery?.phase === "started") {
219
190
  delivery.queued?.reject(new Error("the completion message was not persisted"));
@@ -230,33 +201,9 @@ export class TaskDelivery {
230
201
  this.acknowledge(delivery.id);
231
202
  delivery.queued?.resolve();
232
203
  }
233
- if (message.role === "toolResult")
234
- this.acknowledgeWait(message.toolCallId);
235
- }
236
- /**
237
- * A wait observed a settled background task. Its observation hold is still in place; take over
238
- * the hold until the wait's tool result is persisted, then acknowledge it instead of notifying.
239
- */
240
- bindWait(toolCallId, taskId) {
241
- this.waits.get(toolCallId)?.release();
242
- this.waits.set(toolCallId, { taskId, release: this.hold([taskId]) });
243
- }
244
- acknowledgeWait(toolCallId) {
245
- const receipt = this.waits.get(toolCallId);
246
- if (!receipt)
247
- return;
248
- this.waits.delete(toolCallId);
249
- this.acknowledge(receipt.taskId);
250
- receipt.release();
251
- }
252
- releaseWaits() {
253
- for (const receipt of this.waits.values())
254
- receipt.release();
255
- this.waits.clear();
256
204
  }
257
205
  dispose() {
258
206
  this.disposed = true;
259
- this.releaseWaits();
260
207
  for (const completion of this.completions.values())
261
208
  completion.release();
262
209
  this.completions.clear();