@robota-sdk/agent-core 3.0.0-beta.1 → 3.0.0-beta.100
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1202 -0
- package/LICENSE +661 -21
- package/README.md +267 -156
- package/dist/browser/bounded-output-BdWv9SX3.js +2 -0
- package/dist/browser/bounded-output-BdWv9SX3.js.map +1 -0
- package/dist/browser/command-executor-DIXaSMrr.js +2 -0
- package/dist/browser/command-executor-DIXaSMrr.js.map +1 -0
- package/dist/browser/http-executor-B4YgCJg7.js +2 -0
- package/dist/browser/http-executor-B4YgCJg7.js.map +1 -0
- package/dist/browser/index.d.ts +6904 -3346
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +15 -4
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/verdict-decoder-Dz_rjoIZ.js +2 -0
- package/dist/browser/verdict-decoder-Dz_rjoIZ.js.map +1 -0
- package/dist/node/bounded-output-BdWv9SX3.js +2 -0
- package/dist/node/bounded-output-BdWv9SX3.js.map +1 -0
- package/dist/node/command-executor-D_UBZHxh.js +2 -0
- package/dist/node/command-executor-D_UBZHxh.js.map +1 -0
- package/dist/node/command-executor-wBgBdWXr.cjs +1 -0
- package/dist/node/http-executor-ADn4locH.js +2 -0
- package/dist/node/http-executor-ADn4locH.js.map +1 -0
- package/dist/node/http-executor-CeAAZotH.cjs +1 -0
- package/dist/node/index-BFTag17m.d.ts +7464 -0
- package/dist/node/index-BFTag17m.d.ts.map +1 -0
- package/dist/node/index-De7jXKGE.d.cts +7464 -0
- package/dist/node/index-De7jXKGE.d.cts.map +1 -0
- package/dist/node/index.cjs +14 -4
- package/dist/node/index.d.cts +3 -4237
- package/dist/node/index.d.ts +3 -4237
- package/dist/node/index.js +15 -4
- package/dist/node/index.js.map +1 -0
- package/dist/node/node.cjs +1 -0
- package/dist/node/node.d.cts +247 -0
- package/dist/node/node.d.cts.map +1 -0
- package/dist/node/node.d.ts +247 -0
- package/dist/node/node.d.ts.map +1 -0
- package/dist/node/node.js +2 -0
- package/dist/node/node.js.map +1 -0
- package/dist/node/project-tool-schema-DrDjGKnH.cjs +1 -0
- package/dist/node/project-tool-schema-_UKfY7yO.js +2 -0
- package/dist/node/project-tool-schema-_UKfY7yO.js.map +1 -0
- package/dist/node/rolldown-runtime-DK3Fl9T5.js +1 -0
- package/dist/node/rolldown-runtime-DWNI8pZO.cjs +1 -0
- package/dist/node/testing/index.cjs +1 -0
- package/dist/node/testing/index.d.cts +102 -0
- package/dist/node/testing/index.d.cts.map +1 -0
- package/dist/node/testing/index.d.ts +102 -0
- package/dist/node/testing/index.d.ts.map +1 -0
- package/dist/node/testing/index.js +2 -0
- package/dist/node/testing/index.js.map +1 -0
- package/dist/node/types-Ge2XB-y-.d.cts +334 -0
- package/dist/node/types-Ge2XB-y-.d.cts.map +1 -0
- package/dist/node/types-Ge2XB-y-.d.ts +334 -0
- package/dist/node/types-Ge2XB-y-.d.ts.map +1 -0
- package/dist/node/verdict-decoder-DQqwwDE7.cjs +1 -0
- package/dist/node/verdict-decoder-Dz_rjoIZ.js +2 -0
- package/dist/node/verdict-decoder-Dz_rjoIZ.js.map +1 -0
- package/package.json +103 -33
- package/dist/abstracts/abstract-agent.d.ts +0 -56
- package/dist/abstracts/abstract-agent.d.ts.map +0 -1
- package/dist/abstracts/abstract-agent.js +0 -55
- package/dist/abstracts/abstract-agent.js.map +0 -1
- package/dist/abstracts/abstract-ai-provider.d.ts +0 -187
- package/dist/abstracts/abstract-ai-provider.d.ts.map +0 -1
- package/dist/abstracts/abstract-ai-provider.js +0 -252
- package/dist/abstracts/abstract-ai-provider.js.map +0 -1
- package/dist/abstracts/abstract-executor.d.ts +0 -110
- package/dist/abstracts/abstract-executor.d.ts.map +0 -1
- package/dist/abstracts/abstract-executor.js +0 -156
- package/dist/abstracts/abstract-executor.js.map +0 -1
- package/dist/abstracts/abstract-manager.d.ts +0 -42
- package/dist/abstracts/abstract-manager.d.ts.map +0 -1
- package/dist/abstracts/abstract-manager.js +0 -49
- package/dist/abstracts/abstract-manager.js.map +0 -1
- package/dist/abstracts/abstract-module.d.ts +0 -365
- package/dist/abstracts/abstract-module.d.ts.map +0 -1
- package/dist/abstracts/abstract-module.js +0 -474
- package/dist/abstracts/abstract-module.js.map +0 -1
- package/dist/abstracts/abstract-plugin.d.ts +0 -369
- package/dist/abstracts/abstract-plugin.d.ts.map +0 -1
- package/dist/abstracts/abstract-plugin.js +0 -258
- package/dist/abstracts/abstract-plugin.js.map +0 -1
- package/dist/abstracts/abstract-tool.d.ts +0 -175
- package/dist/abstracts/abstract-tool.d.ts.map +0 -1
- package/dist/abstracts/abstract-tool.js +0 -140
- package/dist/abstracts/abstract-tool.js.map +0 -1
- package/dist/abstracts/abstract-workflow-converter.d.ts +0 -136
- package/dist/abstracts/abstract-workflow-converter.d.ts.map +0 -1
- package/dist/abstracts/abstract-workflow-converter.js +0 -252
- package/dist/abstracts/abstract-workflow-converter.js.map +0 -1
- package/dist/abstracts/abstract-workflow-validator.d.ts +0 -203
- package/dist/abstracts/abstract-workflow-validator.d.ts.map +0 -1
- package/dist/abstracts/abstract-workflow-validator.js +0 -447
- package/dist/abstracts/abstract-workflow-validator.js.map +0 -1
- package/dist/abstracts/index.d.ts +0 -6
- package/dist/abstracts/index.d.ts.map +0 -1
- package/dist/abstracts/index.js +0 -9
- package/dist/abstracts/index.js.map +0 -1
- package/dist/agents/constants.d.ts +0 -23
- package/dist/agents/constants.d.ts.map +0 -1
- package/dist/agents/constants.js +0 -22
- package/dist/agents/constants.js.map +0 -1
- package/dist/agents/index.d.ts +0 -1
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js +0 -4
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/robota.test.d.ts +0 -2
- package/dist/agents/robota.test.d.ts.map +0 -1
- package/dist/agents/robota.test.js +0 -416
- package/dist/agents/robota.test.js.map +0 -1
- package/dist/browser/builtin-templates.json +0 -107
- package/dist/core/robota.d.ts +0 -694
- package/dist/core/robota.d.ts.map +0 -1
- package/dist/core/robota.js +0 -1277
- package/dist/core/robota.js.map +0 -1
- package/dist/executors/local-executor.d.ts +0 -96
- package/dist/executors/local-executor.d.ts.map +0 -1
- package/dist/executors/local-executor.js +0 -197
- package/dist/executors/local-executor.js.map +0 -1
- package/dist/executors/local-executor.test.d.ts +0 -2
- package/dist/executors/local-executor.test.d.ts.map +0 -1
- package/dist/executors/local-executor.test.js +0 -192
- package/dist/executors/local-executor.test.js.map +0 -1
- package/dist/index.d.ts +0 -274
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -235
- package/dist/index.js.map +0 -1
- package/dist/interfaces/agent.d.ts +0 -198
- package/dist/interfaces/agent.d.ts.map +0 -1
- package/dist/interfaces/agent.js +0 -2
- package/dist/interfaces/agent.js.map +0 -1
- package/dist/interfaces/event-service.d.ts +0 -79
- package/dist/interfaces/event-service.d.ts.map +0 -1
- package/dist/interfaces/event-service.js +0 -2
- package/dist/interfaces/event-service.js.map +0 -1
- package/dist/interfaces/executor.d.ts +0 -128
- package/dist/interfaces/executor.d.ts.map +0 -1
- package/dist/interfaces/executor.js +0 -2
- package/dist/interfaces/executor.js.map +0 -1
- package/dist/interfaces/history-module.d.ts +0 -19
- package/dist/interfaces/history-module.d.ts.map +0 -1
- package/dist/interfaces/history-module.js +0 -2
- package/dist/interfaces/history-module.js.map +0 -1
- package/dist/interfaces/index.d.ts +0 -13
- package/dist/interfaces/index.d.ts.map +0 -1
- package/dist/interfaces/index.js +0 -4
- package/dist/interfaces/index.js.map +0 -1
- package/dist/interfaces/manager.d.ts +0 -142
- package/dist/interfaces/manager.d.ts.map +0 -1
- package/dist/interfaces/manager.js +0 -2
- package/dist/interfaces/manager.js.map +0 -1
- package/dist/interfaces/messages.d.ts +0 -75
- package/dist/interfaces/messages.d.ts.map +0 -1
- package/dist/interfaces/messages.js +0 -29
- package/dist/interfaces/messages.js.map +0 -1
- package/dist/interfaces/progress-reporting.d.ts +0 -86
- package/dist/interfaces/progress-reporting.d.ts.map +0 -1
- package/dist/interfaces/progress-reporting.js +0 -37
- package/dist/interfaces/progress-reporting.js.map +0 -1
- package/dist/interfaces/provider.d.ts +0 -217
- package/dist/interfaces/provider.d.ts.map +0 -1
- package/dist/interfaces/provider.js +0 -2
- package/dist/interfaces/provider.js.map +0 -1
- package/dist/interfaces/service.d.ts +0 -205
- package/dist/interfaces/service.d.ts.map +0 -1
- package/dist/interfaces/service.js +0 -6
- package/dist/interfaces/service.js.map +0 -1
- package/dist/interfaces/tool.d.ts +0 -248
- package/dist/interfaces/tool.d.ts.map +0 -1
- package/dist/interfaces/tool.js +0 -2
- package/dist/interfaces/tool.js.map +0 -1
- package/dist/interfaces/types.d.ts +0 -71
- package/dist/interfaces/types.d.ts.map +0 -1
- package/dist/interfaces/types.js +0 -33
- package/dist/interfaces/types.js.map +0 -1
- package/dist/interfaces/workflow-converter.d.ts +0 -193
- package/dist/interfaces/workflow-converter.d.ts.map +0 -1
- package/dist/interfaces/workflow-converter.js +0 -11
- package/dist/interfaces/workflow-converter.js.map +0 -1
- package/dist/interfaces/workflow-validator.d.ts +0 -209
- package/dist/interfaces/workflow-validator.d.ts.map +0 -1
- package/dist/interfaces/workflow-validator.js +0 -16
- package/dist/interfaces/workflow-validator.js.map +0 -1
- package/dist/managers/agent-factory.d.ts +0 -132
- package/dist/managers/agent-factory.d.ts.map +0 -1
- package/dist/managers/agent-factory.js +0 -284
- package/dist/managers/agent-factory.js.map +0 -1
- package/dist/managers/agent-factory.test.d.ts +0 -2
- package/dist/managers/agent-factory.test.d.ts.map +0 -1
- package/dist/managers/agent-factory.test.js +0 -249
- package/dist/managers/agent-factory.test.js.map +0 -1
- package/dist/managers/agent-templates.d.ts +0 -84
- package/dist/managers/agent-templates.d.ts.map +0 -1
- package/dist/managers/agent-templates.js +0 -159
- package/dist/managers/agent-templates.js.map +0 -1
- package/dist/managers/ai-provider-manager.d.ts +0 -80
- package/dist/managers/ai-provider-manager.d.ts.map +0 -1
- package/dist/managers/ai-provider-manager.js +0 -226
- package/dist/managers/ai-provider-manager.js.map +0 -1
- package/dist/managers/conversation-history-manager.d.ts +0 -455
- package/dist/managers/conversation-history-manager.d.ts.map +0 -1
- package/dist/managers/conversation-history-manager.js +0 -578
- package/dist/managers/conversation-history-manager.js.map +0 -1
- package/dist/managers/conversation-history-manager.test.d.ts +0 -2
- package/dist/managers/conversation-history-manager.test.d.ts.map +0 -1
- package/dist/managers/conversation-history-manager.test.js +0 -374
- package/dist/managers/conversation-history-manager.test.js.map +0 -1
- package/dist/managers/index.d.ts +0 -8
- package/dist/managers/index.d.ts.map +0 -1
- package/dist/managers/index.js +0 -8
- package/dist/managers/index.js.map +0 -1
- package/dist/managers/module-registry.d.ts +0 -161
- package/dist/managers/module-registry.d.ts.map +0 -1
- package/dist/managers/module-registry.js +0 -519
- package/dist/managers/module-registry.js.map +0 -1
- package/dist/managers/module-type-registry.d.ts +0 -113
- package/dist/managers/module-type-registry.d.ts.map +0 -1
- package/dist/managers/module-type-registry.js +0 -439
- package/dist/managers/module-type-registry.js.map +0 -1
- package/dist/managers/plugins.d.ts +0 -166
- package/dist/managers/plugins.d.ts.map +0 -1
- package/dist/managers/plugins.js +0 -339
- package/dist/managers/plugins.js.map +0 -1
- package/dist/managers/tool-manager.d.ts +0 -70
- package/dist/managers/tool-manager.d.ts.map +0 -1
- package/dist/managers/tool-manager.js +0 -138
- package/dist/managers/tool-manager.js.map +0 -1
- package/dist/managers/tool-manager.test.d.ts +0 -2
- package/dist/managers/tool-manager.test.d.ts.map +0 -1
- package/dist/managers/tool-manager.test.js +0 -186
- package/dist/managers/tool-manager.test.js.map +0 -1
- package/dist/node/builtin-templates.json +0 -107
- package/dist/plugins/conversation-history/conversation-history-plugin.d.ts +0 -67
- package/dist/plugins/conversation-history/conversation-history-plugin.d.ts.map +0 -1
- package/dist/plugins/conversation-history/conversation-history-plugin.js +0 -270
- package/dist/plugins/conversation-history/conversation-history-plugin.js.map +0 -1
- package/dist/plugins/conversation-history/index.d.ts +0 -3
- package/dist/plugins/conversation-history/index.d.ts.map +0 -1
- package/dist/plugins/conversation-history/index.js +0 -2
- package/dist/plugins/conversation-history/index.js.map +0 -1
- package/dist/plugins/conversation-history/storages/database-storage.d.ts +0 -19
- package/dist/plugins/conversation-history/storages/database-storage.d.ts.map +0 -1
- package/dist/plugins/conversation-history/storages/database-storage.js +0 -94
- package/dist/plugins/conversation-history/storages/database-storage.js.map +0 -1
- package/dist/plugins/conversation-history/storages/file-storage.d.ts +0 -15
- package/dist/plugins/conversation-history/storages/file-storage.d.ts.map +0 -1
- package/dist/plugins/conversation-history/storages/file-storage.js +0 -94
- package/dist/plugins/conversation-history/storages/file-storage.js.map +0 -1
- package/dist/plugins/conversation-history/storages/index.d.ts +0 -4
- package/dist/plugins/conversation-history/storages/index.d.ts.map +0 -1
- package/dist/plugins/conversation-history/storages/index.js +0 -4
- package/dist/plugins/conversation-history/storages/index.js.map +0 -1
- package/dist/plugins/conversation-history/storages/memory-storage.d.ts +0 -15
- package/dist/plugins/conversation-history/storages/memory-storage.d.ts.map +0 -1
- package/dist/plugins/conversation-history/storages/memory-storage.js +0 -33
- package/dist/plugins/conversation-history/storages/memory-storage.js.map +0 -1
- package/dist/plugins/conversation-history/types.d.ts +0 -61
- package/dist/plugins/conversation-history/types.d.ts.map +0 -1
- package/dist/plugins/conversation-history/types.js +0 -2
- package/dist/plugins/conversation-history/types.js.map +0 -1
- package/dist/plugins/error-handling/context-adapter.d.ts +0 -30
- package/dist/plugins/error-handling/context-adapter.d.ts.map +0 -1
- package/dist/plugins/error-handling/context-adapter.js +0 -41
- package/dist/plugins/error-handling/context-adapter.js.map +0 -1
- package/dist/plugins/error-handling/error-handling-plugin.d.ts +0 -49
- package/dist/plugins/error-handling/error-handling-plugin.d.ts.map +0 -1
- package/dist/plugins/error-handling/error-handling-plugin.js +0 -229
- package/dist/plugins/error-handling/error-handling-plugin.js.map +0 -1
- package/dist/plugins/error-handling/index.d.ts +0 -10
- package/dist/plugins/error-handling/index.d.ts.map +0 -1
- package/dist/plugins/error-handling/index.js +0 -10
- package/dist/plugins/error-handling/index.js.map +0 -1
- package/dist/plugins/error-handling/types.d.ts +0 -73
- package/dist/plugins/error-handling/types.d.ts.map +0 -1
- package/dist/plugins/error-handling/types.js +0 -14
- package/dist/plugins/error-handling/types.js.map +0 -1
- package/dist/plugins/event-emitter/metrics.d.ts +0 -17
- package/dist/plugins/event-emitter/metrics.d.ts.map +0 -1
- package/dist/plugins/event-emitter/metrics.js +0 -17
- package/dist/plugins/event-emitter/metrics.js.map +0 -1
- package/dist/plugins/event-emitter/types.d.ts +0 -112
- package/dist/plugins/event-emitter/types.d.ts.map +0 -1
- package/dist/plugins/event-emitter/types.js +0 -65
- package/dist/plugins/event-emitter/types.js.map +0 -1
- package/dist/plugins/event-emitter-plugin.d.ts +0 -222
- package/dist/plugins/event-emitter-plugin.d.ts.map +0 -1
- package/dist/plugins/event-emitter-plugin.js +0 -432
- package/dist/plugins/event-emitter-plugin.js.map +0 -1
- package/dist/plugins/event-emitter-plugin.test.d.ts +0 -2
- package/dist/plugins/event-emitter-plugin.test.d.ts.map +0 -1
- package/dist/plugins/event-emitter-plugin.test.js +0 -94
- package/dist/plugins/event-emitter-plugin.test.js.map +0 -1
- package/dist/plugins/execution/execution-analytics-plugin.d.ts +0 -129
- package/dist/plugins/execution/execution-analytics-plugin.d.ts.map +0 -1
- package/dist/plugins/execution/execution-analytics-plugin.js +0 -517
- package/dist/plugins/execution/execution-analytics-plugin.js.map +0 -1
- package/dist/plugins/execution/index.d.ts +0 -3
- package/dist/plugins/execution/index.d.ts.map +0 -1
- package/dist/plugins/execution/index.js +0 -2
- package/dist/plugins/execution/index.js.map +0 -1
- package/dist/plugins/execution/types.d.ts +0 -90
- package/dist/plugins/execution/types.d.ts.map +0 -1
- package/dist/plugins/execution/types.js +0 -2
- package/dist/plugins/execution/types.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -11
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/limits/types.d.ts +0 -61
- package/dist/plugins/limits/types.d.ts.map +0 -1
- package/dist/plugins/limits/types.js +0 -2
- package/dist/plugins/limits/types.js.map +0 -1
- package/dist/plugins/limits-plugin.d.ts +0 -113
- package/dist/plugins/limits-plugin.d.ts.map +0 -1
- package/dist/plugins/limits-plugin.js +0 -380
- package/dist/plugins/limits-plugin.js.map +0 -1
- package/dist/plugins/logging/formatters.d.ts +0 -14
- package/dist/plugins/logging/formatters.d.ts.map +0 -1
- package/dist/plugins/logging/formatters.js +0 -24
- package/dist/plugins/logging/formatters.js.map +0 -1
- package/dist/plugins/logging/index.d.ts +0 -3
- package/dist/plugins/logging/index.d.ts.map +0 -1
- package/dist/plugins/logging/index.js +0 -2
- package/dist/plugins/logging/index.js.map +0 -1
- package/dist/plugins/logging/logging-plugin.d.ts +0 -91
- package/dist/plugins/logging/logging-plugin.d.ts.map +0 -1
- package/dist/plugins/logging/logging-plugin.js +0 -335
- package/dist/plugins/logging/logging-plugin.js.map +0 -1
- package/dist/plugins/logging/storages/console-storage.d.ts +0 -14
- package/dist/plugins/logging/storages/console-storage.d.ts.map +0 -1
- package/dist/plugins/logging/storages/console-storage.js +0 -38
- package/dist/plugins/logging/storages/console-storage.js.map +0 -1
- package/dist/plugins/logging/storages/file-storage.d.ts +0 -14
- package/dist/plugins/logging/storages/file-storage.d.ts.map +0 -1
- package/dist/plugins/logging/storages/file-storage.js +0 -41
- package/dist/plugins/logging/storages/file-storage.js.map +0 -1
- package/dist/plugins/logging/storages/index.d.ts +0 -5
- package/dist/plugins/logging/storages/index.d.ts.map +0 -1
- package/dist/plugins/logging/storages/index.js +0 -5
- package/dist/plugins/logging/storages/index.js.map +0 -1
- package/dist/plugins/logging/storages/remote-storage.d.ts +0 -20
- package/dist/plugins/logging/storages/remote-storage.d.ts.map +0 -1
- package/dist/plugins/logging/storages/remote-storage.js +0 -61
- package/dist/plugins/logging/storages/remote-storage.js.map +0 -1
- package/dist/plugins/logging/storages/silent-storage.d.ts +0 -10
- package/dist/plugins/logging/storages/silent-storage.d.ts.map +0 -1
- package/dist/plugins/logging/storages/silent-storage.js +0 -15
- package/dist/plugins/logging/storages/silent-storage.js.map +0 -1
- package/dist/plugins/logging/types.d.ts +0 -84
- package/dist/plugins/logging/types.d.ts.map +0 -1
- package/dist/plugins/logging/types.js +0 -2
- package/dist/plugins/logging/types.js.map +0 -1
- package/dist/plugins/performance/collectors/system-metrics-collector.d.ts +0 -12
- package/dist/plugins/performance/collectors/system-metrics-collector.d.ts.map +0 -1
- package/dist/plugins/performance/collectors/system-metrics-collector.js +0 -65
- package/dist/plugins/performance/collectors/system-metrics-collector.js.map +0 -1
- package/dist/plugins/performance/index.d.ts +0 -5
- package/dist/plugins/performance/index.d.ts.map +0 -1
- package/dist/plugins/performance/index.js +0 -4
- package/dist/plugins/performance/index.js.map +0 -1
- package/dist/plugins/performance/performance-plugin.d.ts +0 -49
- package/dist/plugins/performance/performance-plugin.d.ts.map +0 -1
- package/dist/plugins/performance/performance-plugin.js +0 -293
- package/dist/plugins/performance/performance-plugin.js.map +0 -1
- package/dist/plugins/performance/storages/index.d.ts +0 -2
- package/dist/plugins/performance/storages/index.d.ts.map +0 -1
- package/dist/plugins/performance/storages/index.js +0 -4
- package/dist/plugins/performance/storages/index.js.map +0 -1
- package/dist/plugins/performance/storages/memory-storage.d.ts +0 -19
- package/dist/plugins/performance/storages/memory-storage.d.ts.map +0 -1
- package/dist/plugins/performance/storages/memory-storage.js +0 -69
- package/dist/plugins/performance/storages/memory-storage.js.map +0 -1
- package/dist/plugins/performance/types.d.ts +0 -154
- package/dist/plugins/performance/types.d.ts.map +0 -1
- package/dist/plugins/performance/types.js +0 -2
- package/dist/plugins/performance/types.js.map +0 -1
- package/dist/plugins/usage/aggregate-usage-stats.d.ts +0 -12
- package/dist/plugins/usage/aggregate-usage-stats.d.ts.map +0 -1
- package/dist/plugins/usage/aggregate-usage-stats.js +0 -115
- package/dist/plugins/usage/aggregate-usage-stats.js.map +0 -1
- package/dist/plugins/usage/index.d.ts +0 -5
- package/dist/plugins/usage/index.d.ts.map +0 -1
- package/dist/plugins/usage/index.js +0 -4
- package/dist/plugins/usage/index.js.map +0 -1
- package/dist/plugins/usage/storages/file-storage.d.ts +0 -22
- package/dist/plugins/usage/storages/file-storage.d.ts.map +0 -1
- package/dist/plugins/usage/storages/file-storage.js +0 -111
- package/dist/plugins/usage/storages/file-storage.js.map +0 -1
- package/dist/plugins/usage/storages/index.d.ts +0 -5
- package/dist/plugins/usage/storages/index.d.ts.map +0 -1
- package/dist/plugins/usage/storages/index.js +0 -5
- package/dist/plugins/usage/storages/index.js.map +0 -1
- package/dist/plugins/usage/storages/memory-storage.d.ts +0 -22
- package/dist/plugins/usage/storages/memory-storage.d.ts.map +0 -1
- package/dist/plugins/usage/storages/memory-storage.js +0 -42
- package/dist/plugins/usage/storages/memory-storage.js.map +0 -1
- package/dist/plugins/usage/storages/remote-storage.d.ts +0 -26
- package/dist/plugins/usage/storages/remote-storage.d.ts.map +0 -1
- package/dist/plugins/usage/storages/remote-storage.js +0 -115
- package/dist/plugins/usage/storages/remote-storage.js.map +0 -1
- package/dist/plugins/usage/storages/silent-storage.d.ts +0 -19
- package/dist/plugins/usage/storages/silent-storage.d.ts.map +0 -1
- package/dist/plugins/usage/storages/silent-storage.js +0 -26
- package/dist/plugins/usage/storages/silent-storage.js.map +0 -1
- package/dist/plugins/usage/types.d.ts +0 -127
- package/dist/plugins/usage/types.d.ts.map +0 -1
- package/dist/plugins/usage/types.js +0 -2
- package/dist/plugins/usage/types.js.map +0 -1
- package/dist/plugins/usage/usage-plugin.d.ts +0 -67
- package/dist/plugins/usage/usage-plugin.d.ts.map +0 -1
- package/dist/plugins/usage/usage-plugin.js +0 -309
- package/dist/plugins/usage/usage-plugin.js.map +0 -1
- package/dist/plugins/webhook/http-client.d.ts +0 -30
- package/dist/plugins/webhook/http-client.d.ts.map +0 -1
- package/dist/plugins/webhook/http-client.js +0 -110
- package/dist/plugins/webhook/http-client.js.map +0 -1
- package/dist/plugins/webhook/index.d.ts +0 -9
- package/dist/plugins/webhook/index.d.ts.map +0 -1
- package/dist/plugins/webhook/index.js +0 -9
- package/dist/plugins/webhook/index.js.map +0 -1
- package/dist/plugins/webhook/transformer.d.ts +0 -63
- package/dist/plugins/webhook/transformer.d.ts.map +0 -1
- package/dist/plugins/webhook/transformer.js +0 -157
- package/dist/plugins/webhook/transformer.js.map +0 -1
- package/dist/plugins/webhook/types.d.ts +0 -183
- package/dist/plugins/webhook/types.d.ts.map +0 -1
- package/dist/plugins/webhook/types.js +0 -2
- package/dist/plugins/webhook/types.js.map +0 -1
- package/dist/plugins/webhook/webhook-plugin.d.ts +0 -92
- package/dist/plugins/webhook/webhook-plugin.d.ts.map +0 -1
- package/dist/plugins/webhook/webhook-plugin.js +0 -328
- package/dist/plugins/webhook/webhook-plugin.js.map +0 -1
- package/dist/schemas/agent-template-schema.d.ts +0 -137
- package/dist/schemas/agent-template-schema.d.ts.map +0 -1
- package/dist/schemas/agent-template-schema.js +0 -87
- package/dist/schemas/agent-template-schema.js.map +0 -1
- package/dist/services/conversation-service/index.d.ts +0 -88
- package/dist/services/conversation-service/index.d.ts.map +0 -1
- package/dist/services/conversation-service/index.js +0 -441
- package/dist/services/conversation-service/index.js.map +0 -1
- package/dist/services/conversation-service/types.d.ts +0 -32
- package/dist/services/conversation-service/types.d.ts.map +0 -1
- package/dist/services/conversation-service/types.js +0 -8
- package/dist/services/conversation-service/types.js.map +0 -1
- package/dist/services/event-service.d.ts +0 -61
- package/dist/services/event-service.d.ts.map +0 -1
- package/dist/services/event-service.js +0 -110
- package/dist/services/event-service.js.map +0 -1
- package/dist/services/event-service.test.d.ts +0 -2
- package/dist/services/event-service.test.d.ts.map +0 -1
- package/dist/services/event-service.test.js +0 -86
- package/dist/services/event-service.test.js.map +0 -1
- package/dist/services/execution-service.d.ts +0 -151
- package/dist/services/execution-service.d.ts.map +0 -1
- package/dist/services/execution-service.js +0 -1262
- package/dist/services/execution-service.js.map +0 -1
- package/dist/services/execution-service.test.d.ts +0 -2
- package/dist/services/execution-service.test.d.ts.map +0 -1
- package/dist/services/execution-service.test.js +0 -338
- package/dist/services/execution-service.test.js.map +0 -1
- package/dist/services/history-module.d.ts +0 -15
- package/dist/services/history-module.d.ts.map +0 -1
- package/dist/services/history-module.js +0 -42
- package/dist/services/history-module.js.map +0 -1
- package/dist/services/in-memory-history-store.d.ts +0 -12
- package/dist/services/in-memory-history-store.d.ts.map +0 -1
- package/dist/services/in-memory-history-store.js +0 -41
- package/dist/services/in-memory-history-store.js.map +0 -1
- package/dist/services/index.d.ts +0 -7
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -13
- package/dist/services/index.js.map +0 -1
- package/dist/services/task-events.d.ts +0 -6
- package/dist/services/task-events.d.ts.map +0 -1
- package/dist/services/task-events.js +0 -6
- package/dist/services/task-events.js.map +0 -1
- package/dist/services/tool-execution-service.d.ts +0 -74
- package/dist/services/tool-execution-service.d.ts.map +0 -1
- package/dist/services/tool-execution-service.js +0 -189
- package/dist/services/tool-execution-service.js.map +0 -1
- package/dist/services/user-events.d.ts +0 -7
- package/dist/services/user-events.d.ts.map +0 -1
- package/dist/services/user-events.js +0 -6
- package/dist/services/user-events.js.map +0 -1
- package/dist/tools/implementations/function-tool/index.d.ts +0 -9
- package/dist/tools/implementations/function-tool/index.d.ts.map +0 -1
- package/dist/tools/implementations/function-tool/index.js +0 -13
- package/dist/tools/implementations/function-tool/index.js.map +0 -1
- package/dist/tools/implementations/function-tool/schema-converter.d.ts +0 -32
- package/dist/tools/implementations/function-tool/schema-converter.d.ts.map +0 -1
- package/dist/tools/implementations/function-tool/schema-converter.js +0 -164
- package/dist/tools/implementations/function-tool/schema-converter.js.map +0 -1
- package/dist/tools/implementations/function-tool/types.d.ts +0 -72
- package/dist/tools/implementations/function-tool/types.d.ts.map +0 -1
- package/dist/tools/implementations/function-tool/types.js +0 -14
- package/dist/tools/implementations/function-tool/types.js.map +0 -1
- package/dist/tools/implementations/function-tool.d.ts +0 -49
- package/dist/tools/implementations/function-tool.d.ts.map +0 -1
- package/dist/tools/implementations/function-tool.js +0 -223
- package/dist/tools/implementations/function-tool.js.map +0 -1
- package/dist/tools/implementations/index.d.ts +0 -4
- package/dist/tools/implementations/index.d.ts.map +0 -1
- package/dist/tools/implementations/index.js +0 -5
- package/dist/tools/implementations/index.js.map +0 -1
- package/dist/tools/implementations/mcp-tool.d.ts +0 -72
- package/dist/tools/implementations/mcp-tool.d.ts.map +0 -1
- package/dist/tools/implementations/mcp-tool.js +0 -246
- package/dist/tools/implementations/mcp-tool.js.map +0 -1
- package/dist/tools/implementations/openapi-tool.d.ts +0 -56
- package/dist/tools/implementations/openapi-tool.d.ts.map +0 -1
- package/dist/tools/implementations/openapi-tool.js +0 -324
- package/dist/tools/implementations/openapi-tool.js.map +0 -1
- package/dist/tools/implementations/relay-mcp-tool.d.ts +0 -38
- package/dist/tools/implementations/relay-mcp-tool.d.ts.map +0 -1
- package/dist/tools/implementations/relay-mcp-tool.js +0 -46
- package/dist/tools/implementations/relay-mcp-tool.js.map +0 -1
- package/dist/tools/index.d.ts +0 -3
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -4
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/registry/index.d.ts +0 -2
- package/dist/tools/registry/index.d.ts.map +0 -1
- package/dist/tools/registry/index.js +0 -3
- package/dist/tools/registry/index.js.map +0 -1
- package/dist/tools/registry/tool-registry.d.ts +0 -54
- package/dist/tools/registry/tool-registry.d.ts.map +0 -1
- package/dist/tools/registry/tool-registry.js +0 -146
- package/dist/tools/registry/tool-registry.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -155
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -203
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/execution-proxy.d.ts +0 -75
- package/dist/utils/execution-proxy.d.ts.map +0 -1
- package/dist/utils/execution-proxy.js +0 -230
- package/dist/utils/execution-proxy.js.map +0 -1
- package/dist/utils/index.d.ts +0 -11
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -7
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -74
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -143
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/message-converter.d.ts +0 -68
- package/dist/utils/message-converter.d.ts.map +0 -1
- package/dist/utils/message-converter.js +0 -87
- package/dist/utils/message-converter.js.map +0 -1
- package/dist/utils/periodic-task.d.ts +0 -14
- package/dist/utils/periodic-task.d.ts.map +0 -1
- package/dist/utils/periodic-task.js +0 -26
- package/dist/utils/periodic-task.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -40
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -162
- package/dist/utils/validation.js.map +0 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
|
-
import Dr from'jssha';import {spawn}from'child_process';var Z={isPrimitive:i=>i==null||typeof i=="string"||typeof i=="number"||typeof i=="boolean",isArray:i=>Array.isArray(i)&&i.every(e=>Z.isUniversalValue(e)),isObject:i=>typeof i=="object"&&i!==null&&!Array.isArray(i)&&!(i instanceof Date)&&Object.values(i).every(e=>Z.isUniversalValue(e)),isUniversalValue:i=>i instanceof Date?true:Z.isPrimitive(i)||Z.isArray(i)||Z.isObject(i)};function lt(i){return "generateImage"in i&&typeof i.generateImage=="function"}function ut(i){return "createVideo"in i&&"getVideoJob"in i&&"cancelVideoJob"in i&&typeof i.createVideo=="function"&&typeof i.getVideoJob=="function"&&typeof i.cancelVideoJob=="function"}function pe(i){return "getEstimatedDuration"in i||"getExecutionSteps"in i||"setProgressCallback"in i}function Wt(i,e){if(pe(i)&&i.getEstimatedDuration)return i.getEstimatedDuration(e)}function Yt(i,e){if(pe(i)&&i.getExecutionSteps)return i.getExecutionSteps(e)}function Jt(i,e){return pe(i)&&i.setProgressCallback?(i.setProgressCallback(e),true):false}var fe=class{history=[];isInitialized=false;config;async configure(e){this.config=e,await this.ensureInitialized();}getHistory(){return [...this.history]}clearHistory(){this.history=[];}addMessage(e){this.history.push(e);}validateInput(e){if(!e||typeof e!="string")throw new Error("Input must be a non-empty string")}async ensureInitialized(){this.isInitialized||(await this.initialize(),this.isInitialized=true);}async dispose(){this.clearHistory(),this.isInitialized=false;}};var j=class{initialized=false;async initialize(){this.initialized||(await this.doInitialize(),this.initialized=true);}async dispose(){await this.doDispose(),this.initialized=false;}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw new Error(`${this.constructor.name} is not initialized`)}};function Kt(i){return i.role==="user"}function ve(i){return i.role==="assistant"}function Zt(i){return i.role==="system"}function Qt(i){return i.role==="tool"}var L={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}},Q=class i{static instance;globalLevel;constructor(){this.globalLevel="warn";}static getInstance(){return i.instance||(i.instance=new i),i.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e;}},Xe=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||L;}debug(...e){if(this.shouldLog("debug")){let[t,r]=e;this.forward("debug",String(t??""),Ee(r)?r:void 0);}}info(...e){if(this.shouldLog("info")){let[t,r]=e;this.forward("info",String(t??""),Ee(r)?r:void 0);}}warn(...e){if(this.shouldLog("warn")){let[t,r]=e;this.forward("warn",String(t??""),Ee(r)?r:void 0);}}error(...e){if(this.shouldLog("error")){let[t,r]=e;this.forward("error",String(t??""),Ee(r)?r:void 0);}}log(...e){this.info(...e);}getLevel(){return this.level||Q.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t==="silent")return false;let r=["debug","info","warn","error","silent"];return r.indexOf(e)>=r.indexOf(t)}forward(e,t,r){let o={timestamp:new Date().toISOString(),level:e,message:t,...r&&{context:r},packageName:this.packageName},s=`[${o.timestamp}] [${o.level.toUpperCase()}] [${o.packageName}] ${o.message}`;switch(e){case "debug":this.sinkLogger.debug(s,r??{});return;case "info":this.sinkLogger.info(s,r??{});return;case "warn":this.sinkLogger.warn(s,r??{});return;case "error":this.sinkLogger.error(s,r??{});return;case "silent":return}}};function Ee(i){return typeof i=="object"&&i!==null&&!(i instanceof Error)&&!(i instanceof Date)&&!Array.isArray(i)}function P(i,e){return new Xe(i,e)}function Fe(i){Q.getInstance().setGlobalLevel(i);}function ro(){return Q.getInstance().getGlobalLevel()}var T=P("agents");var qe=class{config;executor;logger;constructor(e=L){this.logger=e;}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor);}hasExecutor(e){return typeof e=="object"&&e!==null&&"executor"in e}async generateResponse(e){let t=await this.chat(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}});return {content:t.content??null,toolCalls:ve(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}async*generateStreamingResponse(e){if(!this.chatStream)throw new Error(`[AI-PROVIDER] Streaming is not supported by provider "${this.name}"`);for await(let t of this.chatStream(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}}))yield {content:t.content??null,toolCalls:ve(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata};}supportsTools(){return true}validateConfig(){return true}validateMessages(e){if(!Array.isArray(e))throw new Error("Messages must be an array");if(e.length===0)throw new Error("Messages array cannot be empty");for(let t of e)if(!t.role||!["user","assistant","system","tool"].includes(t.role))throw new Error(`Invalid message role: ${t.role}`)}validateTools(e){if(e){if(!Array.isArray(e))throw new Error("Tools must be an array");for(let t of e){if(!t.name||typeof t.name!="string")throw new Error("Tool must have a valid name");if(!t.description||typeof t.description!="string")throw new Error("Tool must have a valid description");if(!t.parameters||typeof t.parameters!="object"||t.parameters===null||Array.isArray(t.parameters))throw new Error("Tool must have valid parameters")}}}async executeViaExecutorOrDirect(e,t){if(!this.executor)throw new Error(`Executor is required for ${this.name} provider. Configure an executor or use direct execution path.`);if(!t?.model)throw new Error(`Model is required for executor execution in ${this.name} provider.`);return await this.executor.executeChat({messages:e,options:t,provider:this.name,model:t.model,...t.tools&&{tools:t.tools}})}async*executeStreamViaExecutorOrDirect(e,t){if(!this.executor||!this.executor.executeChatStream)throw new Error(`Streaming executor is required for ${this.name} provider.`);if(!t?.model)throw new Error(`Model is required for executor streaming in ${this.name} provider.`);this.logger.debug?.("\u{1F50D} [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request",{provider:this.name,model:t.model,hasTools:!!t.tools,toolsCount:t.tools?.length||0,toolNames:t.tools?.map(o=>o.name)||[]});let r=this.executor.executeChatStream({messages:e,options:t,provider:this.name,model:t.model,stream:true,...t.tools&&{tools:t.tools}});for await(let o of r)yield o;}async dispose(){this.executor?.dispose&&await this.executor.dispose();}};var M={CREATED:"created",EXECUTION_START:"execution_start",EXECUTION_COMPLETE:"execution_complete",EXECUTION_ERROR:"execution_error",AGGREGATION_COMPLETE:"aggregation_complete",CONFIG_UPDATED:"config_updated"},z="agent";var R=class extends Error{constructor(t,r){super(t);this.context=r;this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype);}},m=class extends R{code="CONFIGURATION_ERROR";category="user";recoverable=false;constructor(e,t){super(`Configuration Error: ${e}`,t);}},I=class extends R{constructor(t,r,o){super(`Validation Error: ${t}`,o);this.field=r;}code="VALIDATION_ERROR";category="user";recoverable=false},je=class extends R{constructor(t,r,o,s){super(`Provider Error (${r}): ${t}`,s);this.provider=r;this.originalError=o;}code="PROVIDER_ERROR";category="provider";recoverable=true},dt=class extends R{constructor(t,r,o){super(`Authentication Error: ${t}`,o);this.provider=r;}code="AUTHENTICATION_ERROR";category="user";recoverable=false},gt=class extends R{constructor(t,r,o,s){super(`Rate Limit Error: ${t}`,s);this.retryAfter=r;this.provider=o;}code="RATE_LIMIT_ERROR";category="provider";recoverable=true},ct=class extends R{constructor(t,r,o){super(`Network Error: ${t}`,o);this.originalError=r;}code="NETWORK_ERROR";category="system";recoverable=true},D=class extends R{constructor(t,r,o,s){super(`Tool Execution Error (${r}): ${t}`,s);this.toolName=r;this.originalError=o;}code="TOOL_EXECUTION_ERROR";category="system";recoverable=false},mt=class extends R{constructor(t,r,o,s){super(`Model "${t}" is not available for provider "${r}"`,s);this.availableModels=o;}code="MODEL_NOT_AVAILABLE";category="user";recoverable=false},pt=class extends R{code="CIRCUIT_BREAKER_OPEN";category="system";recoverable=true;constructor(e="Circuit breaker is open",t){super(e,t);}},B=class extends R{constructor(t,r,o){super(`Plugin Error (${r}): ${t}`,o);this.pluginName=r;}code="PLUGIN_ERROR";category="system";recoverable=false},ft=class extends R{code="STORAGE_ERROR";category="system";recoverable=true;constructor(e,t){super(`Storage Error: ${e}`,t);}},he=class extends R{code="CACHE_INTEGRITY_ERROR";category="system";recoverable=false;constructor(e,t){super(`Cache Integrity Error: ${e}`,t);}},vt=class{static isRecoverable(e){return e instanceof R?e.recoverable:false}static getErrorCode(e){return e instanceof R?e.code:"UNKNOWN_ERROR"}static fromUnknown(e,t="An unknown error occurred"){if(e instanceof R)return e;if(e instanceof Error)return new m(e.message||t);let r=typeof e=="string"?e:t;return new m(r)}static wrapProviderError(e,t,r){let o=e instanceof Error?e:new Error(String(e));return new je(`Failed to ${r}`,t,o,{operation:r})}};var A={CALL_START:"call_start",CALL_COMPLETE:"call_complete",CALL_ERROR:"call_error",CALL_RESPONSE_READY:"call_response_ready"},G="tool",Ie=class{tools;logger;constructor(e,t=L){this.tools=e,this.logger=t;}requireExecutionRequestFields(e){if(!e.executionId)throw new I("[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId");if(!e.ownerType)throw new I(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new I(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return {executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}async executeTool(e,t,r){this.logger.debug(`Executing tool: ${e}`);try{if(!r?.executionId)throw new I("ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext");let o=r.eventService;if(o){let l={timestamp:new Date,toolName:e,parameters:t};o.emit(A.CALL_START,l);}let{toolName:s,parameters:n,...a}=r,u={...a,toolName:e,parameters:t,executionId:r.executionId},d=await this.tools.executeTool(e,t,u);if(this.logger.debug(`Tool execution completed: ${e}`),o){let l={timestamp:new Date,toolName:e,result:d};o.emit(A.CALL_COMPLETE,l),o.emit(A.CALL_RESPONSE_READY,l);}return {success:!0,result:d,toolName:e,executionId:u.executionId}}catch(o){this.logger.error(`Tool execution failed: ${e}`);let s=o instanceof Error?o:new Error(String(o)),n=r?.eventService;if(n&&r?.executionId){let a={timestamp:new Date,toolName:e,error:s.message};n.emit(A.CALL_ERROR,a);}return {success:false,error:s.message,toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(r=>{let o;try{o=JSON.parse(r.function.arguments);}catch{throw new I(`Failed to parse arguments for tool "${r.function.name}" (call ${r.id}): invalid JSON`)}return {toolName:r.function.name,parameters:o,executionId:r.id,ownerType:"tool",ownerId:r.id,ownerPath:[...t.ownerPathBase,{type:"tool",id:r.id}],metadata:t.metadataFactory?t.metadataFactory(r):void 0}})}async executeTools(e){this.logger.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let t=[],r=[];if(e.mode==="parallel"){let o=e.requests.map(n=>(()=>{let a=this.requireExecutionRequestFields(n);return this.executeTool(n.toolName,n.parameters,{toolName:n.toolName,parameters:n.parameters,executionId:a.executionId,ownerType:a.ownerType,ownerId:a.ownerId,ownerPath:n.ownerPath,metadata:n.metadata,eventService:n.eventService,baseEventService:n.baseEventService})})());if((await Promise.allSettled(o)).forEach((n,a)=>{let u=e.requests[a];if(!u)return;if(n.status==="fulfilled"){let l=n.value;if(t.push(l),!l.success){let g=new Error(`Tool execution failed: toolName=${String(l.toolName)} executionId=${String(l.executionId)} error=${String(l.error||"Unknown error")}`);r.push(g);}return}let d=n.reason instanceof Error?n.reason:new Error(String(n.reason));r.push(d),t.push({toolName:u.toolName,result:null,success:false,error:d.message,executionId:u.executionId});}),r.length>0&&!e.continueOnError)throw r[0]}else for(let o of e.requests)try{let s=this.requireExecutionRequestFields(o),n=await this.executeTool(o.toolName,o.parameters,{toolName:o.toolName,parameters:o.parameters,executionId:s.executionId,ownerType:s.ownerType,ownerId:s.ownerId,ownerPath:o.ownerPath,metadata:o.metadata,eventService:o.eventService,baseEventService:o.baseEventService});if(t.push(n),n.success||r.push(new Error(`Tool execution failed: toolName=${String(n.toolName)} executionId=${String(n.executionId)} error=${String(n.error||"Unknown error")}`)),!n.success&&!e.continueOnError)break}catch(s){let n=s instanceof Error?s:new Error(String(s));if(r.push(n),!e.continueOnError)break}return {results:t,errors:r}}};var y={START:"start",COMPLETE:"complete",ERROR:"error",ASSISTANT_MESSAGE_START:"assistant_message_start",ASSISTANT_MESSAGE_COMPLETE:"assistant_message_complete",USER_MESSAGE:"user_message",TOOL_RESULTS_TO_LLM:"tool_results_to_llm",TOOL_RESULTS_READY:"tool_results_ready"},U="execution";function Te(i){return "executionId"in i||"toolName"in i}function ye(i){let e=0,t=false;for(let r=0;r<i.length;r++){let o=i[r]===" "||i[r]===" "||i[r]===`
|
|
2
|
-
`||i[r]==="\r";!o&&!t?(e++,t=true):o&&(t=false);}return e}var ee=class{listeners=new Set;subscribe(e){this.listeners.add(e);}unsubscribe(e){this.listeners.delete(e);}notifyListeners(e,t,r){for(let o of this.listeners)o(e,t,r);}},te=class extends ee{emit(e,t,r){}},Me=new te;function W(i){return i===Me||i instanceof te}function ht(i,e){if(!i||i.trim().length===0)throw new Error("[EVENTS] ownerType is required to compose event names.");if(i.includes("."))throw new Error(`[EVENTS] ownerType must not contain '.': "${i}"`);if(!e||e.trim().length===0)throw new Error("[EVENTS] local event name is required.");if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);return `${i}.${e}`}var Et=36,er=10;function tr(){return `span_${Date.now().toString(Et)}_${Math.random().toString(Et).slice(2,er)}`}var xe=class extends ee{base;binding;constructor(e,t){super(),this.base=e,this.binding=t;}emit(e,t,r){if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let o={...r,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:r?.spanId??tr()},s=ht(this.binding.ownerType,e);this.base.emit(s,t,o);}subscribe(e){this.base.subscribe(e);}unsubscribe(e){this.base.unsubscribe(e);}};function V(i,e){return new xe(i,e)}var be={ASSIGNED:"assigned",COMPLETED:"completed"};var Pe=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,r){this.baseEventService=e,this.logger=t,this.ownerPathBase=this.buildBaseOwnerPath(r),this.toolEventServices=new Map,this.agentOwnerPathBase=[];}prepareOwnerPathBases(e){this.toolEventServices.clear();let t=[...this.ownerPathBase,{type:"agent",id:e}];this.agentOwnerPathBase=t;}resetOwnerPathBases(){this.toolEventServices.clear(),this.agentOwnerPathBase=[];}ensureToolEventService(e,t){if(W(this.baseEventService))return this.baseEventService;if(!e)throw new Error("[EVENT-SERVICE] Missing ownerId for tool event context");if(!t||t.length===0)throw new Error("[EVENT-SERVICE] Missing ownerPath for tool event context");if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let r=V(this.baseEventService,{ownerType:G,ownerId:e,ownerPath:t.map(o=>({...o}))});return this.toolEventServices.set(e,r),r}clearToolEventServices(){this.toolEventServices.clear();}getBaseEventService(){return this.baseEventService}buildBaseOwnerPath(e){return e?.ownerPath?.length?e.ownerPath.map(t=>({...t})):[]}buildExecutionOwnerContext(e,t){if(!e||e.length===0)throw new Error("[EXECUTION] Missing rootId for execution owner context");if(!t||t.length===0)throw new Error("[EXECUTION] Missing executionId for execution owner context");let o=[...this.agentOwnerPathBase.length?this.agentOwnerPathBase:this.ownerPathBase];return e&&!o.some(s=>s.type==="agent"&&s.id===e)&&o.push({type:"agent",id:e}),o.push({type:"execution",id:t}),{ownerType:U,ownerId:t,ownerPath:o}}buildThinkingOwnerContext(e,t,r,o){if(!r||r.length===0)throw new Error("[EXECUTION] Missing thinkingNodeId for thinking owner context");let n=[...this.buildExecutionOwnerContext(e,t).ownerPath];return o&&(n.push({type:"thinking",id:o}),n.push({type:"tool_result",id:`tool_result_${o}`})),n.push({type:"thinking",id:r}),{ownerType:U,ownerId:t,ownerPath:n}}buildToolOwnerContext(e,t,r){if(!r||r.length===0)throw new Error("[EXECUTION] Missing toolCallId for tool owner context");let s=[...this.buildExecutionOwnerContext(e,t).ownerPath,{type:"tool",id:r}];return {ownerType:G,ownerId:r,ownerPath:s}}buildResponseOwnerContext(e,t,r,o){let s=this.buildThinkingOwnerContext(e,t,r,o).ownerPath,n=`response_${r}`,a=[...s,{type:"response",id:n}];return {ownerType:U,ownerId:t,ownerPath:a}}emitExecution(e,t,r,o){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(r,o),s=>{if(!s.ownerType||!s.ownerId)throw new Error("[EXECUTION] Missing owner context for execution event");return V(this.baseEventService,{ownerType:s.ownerType,ownerId:s.ownerId,ownerPath:s.ownerPath})});}emitTool(e,t,r,o,s){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(r,o,s),n=>this.ensureToolEventService(n.ownerId,n.ownerPath));}emitWithContext(e,t,r,o){if(W(this.baseEventService))return;let s=r(),n=o(s),a={timestamp:new Date,...t};n.emit(e,a,s);}emitExecutionStartEvent(e,t,r,o,s,n){this.emitExecution(y.START,{parameters:{input:e,agentConfiguration:o.aiProviderInfo,availableTools:o.toolsInfo,toolCount:o.toolsInfo.length,hasTools:o.toolsInfo.length>0,systemMessage:t.defaultModel.systemMessage,provider:t.defaultModel.provider,model:t.defaultModel.model,temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens},metadata:{method:"execute",inputLength:e.length,messageCount:r.length,aiProvider:o.aiProviderInfo.providerName,model:o.aiProviderInfo.model,toolsAvailable:o.toolsInfo.map(a=>a.name),agentCapabilities:{canUseTools:o.toolsInfo.length>0,supportedActions:o.toolsInfo.map(a=>a.name)}}},s,n);}emitUserMessageEvent(e,t,r){this.emitExecution(y.USER_MESSAGE,{parameters:{input:e,userPrompt:e,userMessageContent:e,messageLength:e.length,wordCount:ye(e),characterCount:e.length},metadata:{messageRole:"user",inputLength:e.length,messageType:"user_message",hasQuestions:e.includes("?"),containsUrgency:/urgent|asap|critical|emergency/i.test(e),estimatedComplexity:e.length>200?"high":e.length>50?"medium":"low"}},t,r);}emitAssistantMessageComplete(e,t,r,o,s,n){if(typeof e.content!="string"||e.content.length===0)throw new Error("[EXECUTION] assistant response must have content or tool calls");if(!(e.timestamp instanceof Date))throw new Error("[EXECUTION] assistant response timestamp is required");let a=e.content,u=e.timestamp,d=new Date().getTime()-u.getTime();this.emitWithContext(y.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:a,responseLength:a.length,wordCount:ye(a),responseTime:d,contentPreview:a.length>200?a.substring(0,200)+"...":a},result:{success:true,data:a.substring(0,100)+"...",fullResponse:a,responseMetrics:{length:a.length,estimatedReadTime:Math.ceil(ye(a)/200),hasCodeBlocks:/```/.test(a),hasLinks:/https?:\/\//.test(a),complexity:a.length>1e3?"high":a.length>300?"medium":"low"}},metadata:{executionId:t,round:r,completed:true,reason:"no_tool_calls",responseCharacteristics:{hasQuestions:a.includes("?"),isError:/error|fail|wrong/i.test(a),isComplete:/complete|done|finish/i.test(a),containsNumbers:/\d/.test(a)}}},()=>this.buildResponseOwnerContext(o,t,s,n),l=>{if(!l.ownerType||!l.ownerId)throw new Error("[EXECUTION] Missing owner context for response event");return V(this.baseEventService,{ownerType:l.ownerType,ownerId:l.ownerId,ownerPath:l.ownerPath})});}emitToolResultsEvents(e,t,r,o,s,n,a,u){let d=e.map(c=>{if(!c.id||c.id.length===0)throw new Error("[EXECUTION] Tool call missing id for tool results ready payload");return c.id});if(d.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds");let l=()=>this.buildThinkingOwnerContext(o,s,a,u),g=c=>{if(!c.ownerType||!c.ownerId)throw new Error("[EXECUTION] Missing owner context for tool results event");return V(this.baseEventService,{ownerType:c.ownerType,ownerId:c.ownerId,ownerPath:c.ownerPath})};this.emitWithContext(y.TOOL_RESULTS_READY,{parameters:{toolCallIds:d,round:n},metadata:{round:n}},l,g),this.emitWithContext(y.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:r.length,round:n},metadata:{toolsExecuted:t.results.map(c=>{if(!c.toolName||c.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return c.toolName}),round:n}},l,g);}};var ar={beforeRun:async(i,e)=>{i.beforeRun&&e.input&&await i.beforeRun(e.input,e.metadata);},afterRun:async(i,e)=>{i.afterRun&&e.input&&e.response&&await i.afterRun(e.input,e.response,e.metadata);},beforeProviderCall:async(i,e)=>{i.beforeProviderCall&&e.messages&&await i.beforeProviderCall(e.messages);},afterProviderCall:async(i,e)=>{i.afterProviderCall&&e.messages&&e.responseMessage&&await i.afterProviderCall(e.messages,e.responseMessage);},onError:async(i,e)=>{if(i.onError&&e.error){let t={action:`${U}.${y.ERROR}`,metadata:{}},r=e.executionContext?.executionId;typeof r=="string"&&r.length>0&&(t.executionId=r);let o=e.executionContext?.sessionId;typeof o=="string"&&o.length>0&&(t.sessionId=o);let s=e.executionContext?.userId;typeof s=="string"&&s.length>0&&(t.userId=s),await i.onError(e.error,t);}}};async function _(i,e,t,r){let o=ar[e];if(o)for(let s of i)try{await o(s,t);}catch(n){r.warn("Plugin hook failed",{pluginName:s.name,hookName:e,error:n instanceof Error?n.message:String(n)});}}async function*Tt(i,e,t,r,o){let{aiProviders:s,tools:n,conversationHistory:a,toolExecutionService:u,plugins:d,logger:l,eventEmitter:g}=o;l.debug("ExecutionService.executeStream called");let c=o.generateExecutionId(),E=Date.now();if(!r?.conversationId||r.conversationId.length===0)throw new Error("[EXECUTION] conversationId is required for streaming");let f=r.conversationId;g.prepareOwnerPathBases(f);try{let p=a.getConversationSession(r.conversationId);i&&p.addUserMessage(i,{executionId:c}),await _(d,"beforeRun",{input:i,...r?.metadata?{metadata:r.metadata}:{}},l);let S=s.getCurrentProvider();if(!S)throw new Error("No AI provider configured");let C=s.getProvider(S.provider);if(!C)throw new Error(`AI provider '${S.provider}' not found`);if(typeof C.chatStream!="function")throw new Error("Provider must have chatStream method to support streaming execution");l.debug("ExecutionService calling provider.chatStream");let w=p.getMessages(),h=Array.isArray(t.tools)?t.tools.length:void 0;l.debug("[EXECUTION-SERVICE] config.tools:",{length:h});let N=n.getTools(),b=Array.isArray(N)?N.length:void 0;l.debug("[EXECUTION-SERVICE] this.tools.getTools():",{length:b}),l.debug("[EXECUTION-SERVICE] config.tools exists:",{exists:!!t.tools}),l.debug("[EXECUTION-SERVICE] config.tools.length > 0:",{hasTools:t.tools&&t.tools.length>0});let F={model:t.defaultModel.model,...t.tools&&t.tools.length>0&&{tools:n.getTools()}};l.debug("[EXECUTION-SERVICE] Final chatOptions has tools:",{hasTools:!!F.tools});let Ft=Array.isArray(F.tools)?F.tools.length:void 0;l.debug("[EXECUTION-SERVICE] Final chatOptions.tools length:",{length:Ft});let nt=C.chatStream;if(!nt)throw new Error("Provider does not support streaming");let qt=nt.call(C,w,F),me="",k=[],q=-1;for await(let K of qt)if(K.content&&(me+=K.content,yield {chunk:K.content,isComplete:!1}),K.role==="assistant"){let Ge=K;if(Array.isArray(Ge.toolCalls)&&Ge.toolCalls.length>0){for(let x of Ge.toolCalls)if(x.id&&x.id!==""){if(!x.type||x.type.length===0)throw new Error(`[EXECUTION] Tool call "${x.id}" missing type in stream`);if(!x.function?.name||x.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${x.id}" missing function name in stream`);if(typeof x.function.arguments!="string")throw new Error(`[EXECUTION] Tool call "${x.id}" missing arguments in stream`);q=k.length,k.push({id:x.id,type:x.type,function:{name:x.function.name,arguments:x.function.arguments}}),l.debug(`[TOOL-STREAM] New tool call started: ${x.id} (${x.function?.name})`);}else if(q>=0){let at=typeof x.function?.name=="string"&&x.function.name.length>0,Be=typeof x.function?.arguments=="string"&&x.function.arguments.length>0;if(!at&&!Be)throw new Error(`[EXECUTION] Tool call fragment missing name/arguments for ${k[q].id}`);at&&(k[q].function.name+=x.function.name),Be&&(k[q].function.arguments+=x.function.arguments);let jt=Be?x.function.arguments:x.function.name;l.debug(`[TOOL-STREAM] Adding fragment to tool ${k[q].id}: "${jt}"`);}}}if(l.debug("[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:",{count:k.length}),typeof me!="string")throw new Error("[EXECUTION] Streaming response content is required");p.addAssistantMessage(me,k,{executionId:c}),k.length>0&&(yield*lr(k,p,f,c,u,g,l)),await _(d,"afterRun",{input:i,response:me,...r?.metadata?{metadata:r.metadata}:{}},l),yield {chunk:"",isComplete:!0};}catch(p){throw l.error("ExecutionService streaming execution failed",{error:p instanceof Error?p.message:String(p),executionTime:Date.now()-E}),await _(d,"onError",{input:i,error:p instanceof Error?p:new Error(String(p)),...r?.metadata?{metadata:r.metadata}:{}},l),p}finally{g.resetOwnerPathBases();}}async function*lr(i,e,t,r,o,s,n){n.debug("[EXECUTION-SERVICE-STREAM] Executing tools:",{tools:i.map(f=>f.function.name)});let a=t,u=`thinking_${a}_${Date.now()}_${r}`,d=[...s.buildExecutionOwnerContext(a,r).ownerPath,{type:"thinking",id:u}],g={requests:o.createExecutionRequestsWithContext(i,{ownerPathBase:d}),mode:"parallel",maxConcurrency:5,continueOnError:true},c=await o.executeTools(g);for(let f of i){if(!f.id)throw new Error("[EXECUTION] Tool call missing id in streaming mode");if(!f.function?.name||f.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${f.id}" missing function name in streaming mode`);let p=c.results.find(h=>h.executionId===f.id),S=c.errors.find(h=>Te(h)&&h.executionId===f.id),C,w={executionId:r};if(p&&p.success){if(typeof p.result>"u")throw new Error("[EXECUTION] Tool result missing result payload in streaming mode");C=typeof p.result=="string"?p.result:JSON.stringify(p.result),w.success=true,p.toolName&&(w.toolName=p.toolName),yield {chunk:`
|
|
3
|
-
[Tool: ${f.function.name} executed successfully]`,isComplete:false};}else if(S){let h=S,N=h.error?.message?h.error.message:h.message?h.message:"";if(!N||N.length===0)throw new Error("[EXECUTION] Tool execution error missing message in streaming mode");C=`Error: ${N}`,w.success=false,w.error=N,h.toolName&&(w.toolName=h.toolName),yield {chunk:`
|
|
4
|
-
[Tool: ${f.function.name} failed: ${N}]`,isComplete:false};}else throw new Error(`[EXECUTION] Missing tool result for tool call "${f.id}" in streaming mode`);e.addToolMessageWithId(C,f.id,f.function.name,w);}let E=i.map(f=>{if(!f.id||f.id.length===0)throw new Error("[EXECUTION] Tool call missing id for streaming tool results ready payload");return f.id});if(E.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds in streaming mode");s.emitExecution(y.TOOL_RESULTS_READY,{parameters:{toolCallIds:E,round:1},metadata:{toolsExecuted:c.results.map(f=>{if(!f.toolName||f.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return f.toolName}),round:1}},t,r);}function gr(i,e){let t=Array.isArray(e.lastTrackedAssistantMessage?.toolCalls)&&e.lastTrackedAssistantMessage.toolCalls.length>0,r=`thinking_${i}_round${e.runningAssistantCount+1}`,o=t?`thinking_${i}_round${e.runningAssistantCount}`:void 0;return {thinkingNodeId:r,previousThinkingNodeId:o}}async function cr(i,e,t,r){if(!e.defaultModel?.model)throw new Error("Model is required in defaultModel configuration. Please specify a model.");if(typeof e.defaultModel.model!="string"||e.defaultModel.model.trim()==="")throw new Error("Model must be a non-empty string in defaultModel configuration.");let o={model:e.defaultModel.model,...e.defaultModel.maxTokens!==void 0&&{maxTokens:e.defaultModel.maxTokens},...e.defaultModel.temperature!==void 0&&{temperature:e.defaultModel.temperature},...t.availableTools.length>0&&{tools:t.availableTools}};if(r){let s=r.lookup(i,e.defaultModel.model,e.defaultModel.provider,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens});if(s)return {role:"assistant",content:s,timestamp:new Date};let n=await t.provider.chat(i,o);return typeof n.content=="string"&&r.store(i,e.defaultModel.model,e.defaultModel.provider,n.content,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}),n}return t.provider.chat(i,o)}function mr(i,e,t,r,o){let s=i.role==="assistant"?i.toolCalls:void 0,n=Array.isArray(s)&&s.length>0;if(typeof i.content!="string"&&!n)throw new Error("[EXECUTION] Provider response must have content or tool calls");if(s&&!Array.isArray(s))throw new Error("[EXECUTION] assistant toolCalls must be an array");let a=i.content??"";if(o.debug(`[ROUND-${r}] Provider response completed`,{executionId:e,conversationId:t,round:r,responseLength:a.length,hasToolCalls:Array.isArray(s)&&s.length>0,toolCallsCount:Array.isArray(s)?s.length:0}),i.role!=="assistant")throw new Error(`Unexpected response role: ${i.role}`);let u=i,d=u.toolCalls??[];if(!Array.isArray(d))throw new Error("[EXECUTION] assistantResponse.toolCalls must be an array");return {assistantResponse:u,assistantToolCalls:d}}async function pr(i,e,t,r,o,s,n,a,u){let{toolExecutionService:d,logger:l,eventEmitter:g}=u;l.debug("Tool calls detected, executing tools",{toolCallCount:i.length,round:o,toolCalls:i.map(h=>({id:h.id,name:h.function?.name}))});let c=g.buildThinkingOwnerContext(t,r,s,n).ownerPath,E=i.length,f=`${s}`,C={requests:d.createExecutionRequestsWithContext(i,{ownerPathBase:c,metadataFactory:h=>({conversationId:t,round:o,directParentId:s,batchId:f,expectedCount:E,toolCallId:h.id})}).map(h=>{if(!h.ownerId)throw new Error("[EXECUTION] Tool request missing ownerId");return {...h,eventService:g.ensureToolEventService(h.ownerId,h.ownerPath),baseEventService:g.getBaseEventService()}}),mode:"parallel",maxConcurrency:5,continueOnError:true},w=await d.executeTools(C);a.toolsExecuted.push(...w.results.map(h=>{if(!h.toolName||h.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return h.toolName})),fr(i,w,e,o,l),g.emitToolResultsEvents(i,w,a.toolsExecuted,t,r,o,s,n),g.clearToolEventServices();}function fr(i,e,t,r,o){for(let s of i){if(!s.id)throw new Error(`Tool call missing ID: ${JSON.stringify(s)}`);let n=s.function?.name;if(!n||n.length===0)throw new Error(`[EXECUTION] Tool call "${s.id}" missing function name`);let a=e.results.find(g=>g.executionId===s.id),u=e.errors.find(g=>Te(g)&&g.executionId===s.id),d,l={round:r};if(a&&a.success){if(typeof a.result>"u")throw new Error("[EXECUTION] Tool result missing result payload");d=typeof a.result=="string"?a.result:JSON.stringify(a.result),l.success=true,a.toolName&&(l.toolName=a.toolName);}else if(a&&!a.success){if(!a.error||a.error.length===0)throw new Error("[EXECUTION] Tool result missing error message");d=`Error: ${a.error}`,l.success=false,l.error=a.error,a.toolName&&(l.toolName=a.toolName);}else if(u){let g=u,c=g.error?.message?g.error.message:g.message?g.message:"";if(!c||c.length===0)throw new Error("[EXECUTION] Tool execution error missing message");d=`Error: ${c}`,l.success=false,l.error=c,g.toolName&&(l.toolName=g.toolName);}else throw new Error(`No execution result found for tool call ID: ${s.id}`);o.debug("Adding tool result to conversation",{toolCallId:s.id,toolName:n,content:d.substring(0,100),round:r,currentHistoryLength:t.getMessages().length}),t.addToolMessageWithId(d,s.id,n,l),o.debug("Tool result added to history",{toolCallId:s.id,newHistoryLength:t.getMessages().length,round:r});}}async function yt(i,e,t,r,o,s,n,a,u){let{plugins:d,logger:l,eventEmitter:g,cacheService:c}=u,E=i.currentRound;l.debug(`[ROUND-${E}] Starting execution round ${E}`,{executionId:o,conversationId:s.conversationId,round:E,maxRounds:e});let f=t.getMessages();if(!Array.isArray(f))throw new Error("[EXECUTION] Conversation messages must be an array");let{thinkingNodeId:p,previousThinkingNodeId:S}=gr(r,i),C=f;l.debug("Current conversation messages",{round:E,messageCount:C.length,fullHistory:C.map((b,F)=>({index:F,role:b.role,content:b.content?.substring(0,100),hasToolCalls:"toolCalls"in b?!!b.toolCalls?.length:false,toolCallId:"toolCallId"in b?b.toolCallId:void 0,toolCallsCount:"toolCalls"in b?b.toolCalls?.length:0}))}),await _(d,"beforeProviderCall",{messages:C},l),l.debug("Sending messages to AI provider",{round:E,messageCount:C.length,lastFewMessages:C.slice(-5).map(b=>({role:b.role,content:b.content?.substring(0,50),hasToolCalls:"toolCalls"in b?!!b.toolCalls?.length:false,toolCallId:"toolCallId"in b?b.toolCallId:void 0}))}),g.emitWithContext(y.ASSISTANT_MESSAGE_START,{parameters:{round:E,messageCount:C.length},metadata:{round:E,thinkingNodeId:p}},()=>g.buildThinkingOwnerContext(r,o,p,S),b=>{if(!b.ownerType||!b.ownerId)throw new Error("[EXECUTION] Missing owner context for thinking event");return V(g.getBaseEventService(),{ownerType:b.ownerType,ownerId:b.ownerId,ownerPath:b.ownerPath})});let w=await cr(C,n,a,c),{assistantResponse:h,assistantToolCalls:N}=mr(w,o,s.conversationId,E,l);return await _(d,"afterProviderCall",{messages:C,responseMessage:w},l),t.addAssistantMessage(h.content??"",N,{round:E,...h.metadata?.usage&&{usage:h.metadata.usage}}),i.runningAssistantCount++,i.lastTrackedAssistantMessage=h,N.length===0?(l.debug(`[AGENT-FLOW-CONTROL] Round ${E} completed - no tool calls, execution finished for agent ${s.conversationId}`),g.emitAssistantMessageComplete(h,o,E,r,p,S),true):(await pr(N,t,r,o,E,p,S,i,u),l.debug(`Round ${E} completed - continuing to next round for agent ${s.conversationId}`),false)}var Ce=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,r,o,s,n){if(this.toolExecutionService=new Ie(t),this.aiProviders=e,this.tools=t,this.conversationHistory=r,this.plugins=[],this.logger=P("ExecutionService"),!o)throw new Error("[EXECUTION] EventService is required");this.eventEmitter=new Pe(o,this.logger,s),this.cacheService=n;}registerPlugin(e){let t=e.priority??0,r=this.plugins.findIndex(o=>(o.priority??0)<t);r===-1?this.plugins.push(e):this.plugins.splice(r,0,e),this.logger.debug("Plugin registered",{pluginName:e.name,priority:t,hasBeforeRun:typeof e.beforeRun,hasAfterRun:typeof e.afterRun,hasBeforeProviderCall:typeof e.beforeProviderCall,hasAfterProviderCall:typeof e.afterProviderCall});}removePlugin(e){let t=this.plugins.findIndex(r=>r.name===e);return t!==-1?(this.plugins.splice(t,1),this.logger.debug("Plugin removed",{pluginName:e}),true):false}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return [...this.plugins]}async execute(e,t,r,o){let s=this.generateExecutionId(),n=new Date,a=this.requireConversationId(o,"execute"),u={messages:t,config:r,startTime:n,executionId:s,conversationId:a,...o?.sessionId&&{sessionId:o.sessionId},...o?.userId&&{userId:o.userId},...o?.metadata&&{metadata:o.metadata}};this.eventEmitter.prepareOwnerPathBases(a),this.logger.debug("Starting execution pipeline",{executionId:s,conversationId:a,messageCount:t.length,hasContext:!!o});let d=this.resolveProviderAndTools(r);this.eventEmitter.emitExecutionStartEvent(e,r,t,d,a,s);try{let l=this.initializeConversationSession(a,t,r,s);l.addUserMessage(e,{executionId:s}),this.eventEmitter.emitUserMessageEvent(e,a,s),await _(this.plugins,"beforeRun",{input:e,...o?.metadata?{metadata:o.metadata}:{}},this.logger),this.validateProvider(d);let g={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0},c=l.getMessages();for(let S of c)S.role==="assistant"&&(g.runningAssistantCount++,g.lastTrackedAssistantMessage=S);let E=10,f={toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService};for(;g.currentRound<E&&(g.currentRound++,!await yt(g,E,l,a,s,u,r,d,f)););g.currentRound>=E&&this.logger.warn("Maximum execution rounds reached",{maxRounds:E,conversationId:a});let p=this.buildFinalResult(l,s,n,g.toolsExecuted);return await _(this.plugins,"afterRun",{input:e,response:p.response,metadata:o?.metadata},this.logger),this.logger.debug("Execution pipeline completed successfully",{executionId:s,conversationId:a,duration:p.duration,tokensUsed:p.tokensUsed,toolsExecuted:p.toolsExecuted.length,rounds:g.currentRound}),this.eventEmitter.emitExecution(y.COMPLETE,{result:{success:!0,data:p.response.substring(0,100)+"..."},metadata:{method:"execute",success:!0,duration:p.duration,tokensUsed:p.tokensUsed,toolsExecuted:p.toolsExecuted}},a,s),p}catch(l){throw await this.handleExecutionError(l,u,n,a,s),l}finally{this.eventEmitter.resetOwnerPathBases();}}async*executeStream(e,t,r,o){yield*Tt(e,t,r,o,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>this.generateExecutionId()});}async getStats(){return {pluginCount:this.plugins.length,pluginNames:this.plugins.map(e=>e.name),historyStats:this.conversationHistory.getStats()}}clearPlugins(){this.plugins=[],this.logger.debug("All plugins cleared");}resolveProviderAndTools(e){let t=this.aiProviders.getCurrentProvider(),r=t?this.aiProviders.getProvider(t.provider):null;if(!t||!t.provider||!r)throw new Error("[EXECUTION] Provider is required");let o=this.tools.getTools(),s={providerName:t.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens},n=o.map(a=>{let d=a.parameters?.properties;if(!a.description||a.description.length===0)throw new Error(`[EXECUTION] Tool "${a.name}" is missing description`);return {name:a.name,description:a.description,parameters:d&&typeof d=="object"?Object.keys(d):[]}});return {provider:r,currentInfo:t,aiProviderInfo:s,toolsInfo:n,availableTools:o}}validateProvider(e){if(!e.currentInfo)throw new Error("No AI provider configured");if(!e.provider)throw new Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!="function")throw new Error("Provider must have chat method to support execution")}initializeConversationSession(e,t,r,o){let s=this.conversationHistory.getConversationSession(e);if(s.getMessageCount()===0&&t.length>0){for(let n of t)if(n.role==="user")s.addUserMessage(n.content,n.metadata,n.parts);else if(n.role==="assistant")s.addAssistantMessage(n.content,n.toolCalls,n.metadata,n.parts);else if(n.role==="system")s.addSystemMessage(n.content,n.metadata,n.parts);else if(n.role==="tool"){let a=n.metadata?.toolName;if(typeof a!="string"||a.length===0)throw new Error("[EXECUTION] Tool message missing toolName metadata");s.addToolMessageWithId(n.content,n.toolCallId,a,n.metadata,n.parts);}}return r.systemMessage&&s.addSystemMessage(r.systemMessage,{executionId:o}),s}buildFinalResult(e,t,r,o){let s=e.getMessages(),n=s.filter(u=>u.role==="assistant").pop();if(!n||typeof n.content!="string"||n.content.length===0)throw new Error("[EXECUTION] Final assistant message is required");let a=Date.now()-r.getTime();return {response:n.content,messages:s.map(u=>{if(typeof u.content!="string")throw new Error("[EXECUTION] Message content is required");return {role:u.role,content:u.content,timestamp:u.timestamp,metadata:u.metadata,...u.role==="assistant"&&"toolCalls"in u?{toolCalls:u.toolCalls}:{},...u.role==="tool"&&"toolCallId"in u?{toolCallId:u.toolCallId}:{}}}),executionId:t,duration:a,tokensUsed:s.filter(u=>u.metadata?.usage).reduce((u,d)=>{let l=d.metadata?.usage;if(l&&typeof l=="object"&&"totalTokens"in l){let g=Number(l.totalTokens);if(Number.isNaN(g))throw new Error("[EXECUTION] totalTokens must be a number");return u+g}return u},0),toolsExecuted:o,success:true}}async handleExecutionError(e,t,r,o,s){let n=Date.now()-r.getTime(),a=e instanceof Error?e:new Error(String(e));await _(this.plugins,"onError",{error:a,executionContext:this.convertExecutionContextToPluginFormat(t)},this.logger),this.logger.error("Execution pipeline failed",{executionId:s,conversationId:o,duration:n,error:e instanceof Error?e.message:String(e)}),this.eventEmitter.emitExecution(y.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:"execute",success:false,duration:n}},o,s);}generateExecutionId(){return `exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}requireConversationId(e,t){if(!e?.conversationId||e.conversationId.length===0)throw new Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}convertExecutionContextToPluginFormat(e){let r={conversationId:this.requireConversationId(e,"plugin-context"),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(r.sessionId=e.sessionId),e.userId&&(r.userId=e.userId),r}};var H=(i,e)=>`${i}.${e}`,We={START:H(U,y.START),COMPLETE:H(U,y.COMPLETE),ERROR:H(U,y.ERROR)},hr={CALL_START:H(G,A.CALL_START),CALL_COMPLETE:H(G,A.CALL_COMPLETE),CALL_ERROR:H(G,A.CALL_ERROR)},Re={EXECUTION_START:H(z,M.EXECUTION_START),EXECUTION_COMPLETE:H(z,M.EXECUTION_COMPLETE),EXECUTION_ERROR:H(z,M.EXECUTION_ERROR),CREATED:H(z,M.CREATED)},v={EXECUTION_START:We.START,EXECUTION_COMPLETE:We.COMPLETE,EXECUTION_ERROR:We.ERROR,TOOL_BEFORE_EXECUTE:"tool.beforeExecute",TOOL_AFTER_EXECUTE:"tool.afterExecute",TOOL_SUCCESS:"tool.success",TOOL_ERROR:hr.CALL_ERROR,CONVERSATION_START:"conversation.start",CONVERSATION_COMPLETE:"conversation.complete",CONVERSATION_ERROR:"conversation.error",AGENT_EXECUTION_START:Re.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Re.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Re.EXECUTION_ERROR,AGENT_CREATED:Re.CREATED,AGENT_DESTROYED:"agent.destroyed",PLUGIN_LOADED:"plugin.loaded",PLUGIN_UNLOADED:"plugin.unloaded",PLUGIN_ERROR:"plugin.error",ERROR_OCCURRED:"error.occurred",WARNING_OCCURRED:"warning.occurred",MODULE_INITIALIZE_START:"module.initialize.start",MODULE_INITIALIZE_COMPLETE:"module.initialize.complete",MODULE_INITIALIZE_ERROR:"module.initialize.error",MODULE_EXECUTION_START:"module.execution.start",MODULE_EXECUTION_COMPLETE:"module.execution.complete",MODULE_EXECUTION_ERROR:"module.execution.error",MODULE_DISPOSE_START:"module.dispose.start",MODULE_DISPOSE_COMPLETE:"module.dispose.complete",MODULE_DISPOSE_ERROR:"module.dispose.error",MODULE_REGISTERED:"module.registered",MODULE_UNREGISTERED:"module.unregistered",EXECUTION_HIERARCHY:"execution.hierarchy",EXECUTION_REALTIME:"execution.realtime",TOOL_REALTIME:"tool.realtime",CUSTOM:"custom"};var Ye=(l=>(l.MONITORING="monitoring",l.LOGGING="logging",l.STORAGE="storage",l.NOTIFICATION="notification",l.SECURITY="security",l.PERFORMANCE="performance",l.ERROR_HANDLING="error_handling",l.LIMITS="limits",l.EVENT_PROCESSING="event_processing",l.CUSTOM="custom",l))(Ye||{}),Ir=1e3,Tr=800,yr=500,xr=200,Mr=100,re=(s=>(s[s.CRITICAL=Ir]="CRITICAL",s[s.HIGH=Tr]="HIGH",s[s.NORMAL=yr]="NORMAL",s[s.LOW=xr]="LOW",s[s.MINIMAL=Mr]="MINIMAL",s))(re||{});var Se=class{enabled=true;category="custom";priority=re.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=P("AbstractPlugin");stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&"enabled"in e&&typeof e.enabled=="boolean"?this.enabled=e.enabled:this.enabled=true,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(typeof e.priority=="number",e.priority));}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(v.MODULE_INITIALIZE_START,v.MODULE_INITIALIZE_COMPLETE,v.MODULE_INITIALIZE_ERROR,v.MODULE_EXECUTION_START,v.MODULE_EXECUTION_COMPLETE,v.MODULE_EXECUTION_ERROR,v.MODULE_DISPOSE_START,v.MODULE_DISPOSE_COMPLETE,v.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let r of t){let o=this.eventEmitter.on(r,async n=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(r,n);}catch(a){this.stats.errors++;let u=a instanceof Error?a:new Error(String(a));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(r)}"`,{plugin:this.name,eventType:String(r),error:u.message});}}),s=this.eventHandlers.get(r);s?s.push(o):this.eventHandlers.set(r,[o]),this.subscribedEvents.push(r);}}async unsubscribeFromModuleEvents(e){for(let[t,r]of this.eventHandlers.entries())for(let o of r)e.off(t,o);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0;}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter);}enable(){this.enabled=true;}disable(){this.enabled=false;}isEnabled(){return this.enabled}getConfig(){return {}}updateConfig(e){}getData(){return {name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return {name:this.name,version:this.version,enabled:this.enabled,initialized:true,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return {enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date;}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date;}};var oe=class{logger;constructor(e=L){this.logger=e;}supportsTools(){return false}validateConfig(){return true}async dispose(){}async withRetry(e,t=3,r=1e3){let o;for(let s=0;s<=t;s++)try{return await e()}catch(n){o=n instanceof Error?n:new Error(String(n)),s<t&&(this.logger.warn?.(`[${this.name}] Attempt ${s+1} failed, retrying in ${r}ms`,{error:o.message,attempt:s+1,maxRetries:t}),await this.delay(r));}throw o}withTimeout(e,t){let r;return Promise.race([e.then(o=>(clearTimeout(r),o)),new Promise((o,s)=>{r=setTimeout(()=>s(new Error(`Operation timed out after ${t}ms`)),t);})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t);}logError(e,t,r){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...r});}validateRequest(e){if(!e.messages||e.messages.length===0)throw new Error("Request must include at least one message");if(!e.provider)throw new Error("Request must specify a provider");if(!e.model)throw new Error("Request must specify a model")}validateResponse(e){if(!e.role)throw new Error("Response must have a role");let t=e.role==="assistant"&&"toolCalls"in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw new Error("Response must have content or tool calls")}};var we=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??L;}setEventService(e){this.eventService=e;}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t);}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return (this.schema.parameters.required||[]).every(r=>r in e)}validateParameters(e){let t=this.schema.parameters.required||[],r=[],o=e;for(let s of t)s in o||r.push(`Missing required parameter: ${s}`);return {isValid:r.length===0,errors:r}}getDescription(){return this.schema.description}getName(){return this.schema.name}};var xt=class{static toProviderFormat(e,t){switch(t.toLowerCase()){case "openai":return this.toOpenAIFormat(e);case "anthropic":return this.toAnthropicFormat(e);case "google":return this.toGoogleFormat(e);default:return this.toUniversalFormat(e)}}static toOpenAIFormat(e){return e.map(t=>{let r={role:t.role,content:t.content};return t.role==="assistant"&&"toolCalls"in t&&t.toolCalls&&(r.tool_calls=t.toolCalls.map(o=>({id:o.id,type:o.type,function:o.function}))),t.role==="tool"&&"toolCallId"in t&&(r.tool_call_id=t.toolCallId,r.name=t.name),r})}static toAnthropicFormat(e){return e.filter(t=>t.role!=="system").map(t=>({role:t.role==="assistant"?"assistant":"user",content:t.content||""}))}static toGoogleFormat(e){return e.map(t=>({role:t.role==="assistant"?"model":"user",parts:[{text:t.content||""}]}))}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(r=>r.role==="system")?.content}static filterNonSystemMessages(e){return e.filter(t=>t.role!=="system")}};var $=class{static validateAgentConfig(e){let t=[],r=[];return e.name||t.push("name is required"),(!e.aiProviders||e.aiProviders.length===0)&&t.push("aiProviders array is required and must have at least one provider"),e.defaultModel?(e.defaultModel.provider||t.push("defaultModel.provider is required"),e.defaultModel.model||t.push("defaultModel.model is required")):t.push("defaultModel is required"),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(s=>s.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!="number"||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push("defaultModel.temperature must be a number between 0 and 2"),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!="number"||e.defaultModel.maxTokens<=0)&&t.push("defaultModel.maxTokens must be a positive number"),e.systemMessage&&e.systemMessage.length>1e3&&r.push("systemMessage is quite long, consider keeping it concise for better performance"),e.tools&&e.tools.length>20&&r.push("Large number of tools may impact performance, consider grouping related tools"),{isValid:t.length===0,errors:t,warnings:r}}static validateUserInput(e){let t=[],r=[];return !e||typeof e!="string"?t.push("Input must be a non-empty string"):(e.trim().length===0&&t.push("Input cannot be only whitespace"),e.length>1e4&&r.push("Very long input may be truncated by AI providers")),{isValid:t.length===0,errors:t,warnings:r}}static validateProviderName(e){let t=[];return !e||typeof e!="string"?t.push("Provider name must be a non-empty string"):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push("Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens"),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return !e||typeof e!="string"?t.push("Model name must be a non-empty string"):e.trim().length===0&&t.push("Model name cannot be only whitespace"),{isValid:t.length===0,errors:t}}static validateApiKey(e,t){let r=[],o=[];if(!e||typeof e!="string")return r.push("API key must be a non-empty string"),{isValid:false,errors:r};switch(t?.toLowerCase()){case "openai":e.startsWith("sk-")||o.push('OpenAI API keys typically start with "sk-"');break;case "anthropic":e.startsWith("sk-ant-")||o.push('Anthropic API keys typically start with "sk-ant-"');break}return e.length<10&&r.push("API key appears to be too short"),/\s/.test(e)&&r.push("API key should not contain whitespace"),{isValid:r.length===0,errors:r,warnings:o}}},Je=$.validateAgentConfig,Ti=$.validateUserInput,yi=$.validateProviderName,xi=$.validateModelName,Mi=$.validateApiKey;function Pi(i,e,t){return setInterval(()=>{(async()=>{try{await t();}catch(o){i.error("Periodic task failed",{task:e.name,error:o instanceof Error?o.message:String(o)});}})();},e.intervalMs)}function Ci(i){i&&clearInterval(i);}var Ke=class extends oe{name="local";version="1.0.0";providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:false,...e};}registerProvider(e,t){this.providers.set(e,t);}unregisterProvider(e){this.providers.delete(e);}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw new Error(`Provider "${e.provider}" does not implement chat method`);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let r=await this.withRetry(async()=>await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools}),this.config.timeout),this.config.maxRetries,this.config.retryDelay);if(r.role!=="assistant")throw new Error(`Expected assistant message, got ${r.role}`);return this.validateResponse(r),r}catch(r){let o=r instanceof Error?r:new Error(String(r));throw this.logError("Chat execution failed",o,{provider:e.provider,model:e.model}),o}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw new Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let r=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools});for await(let o of r)this.validateResponse(o),yield o;}catch(r){let o=r instanceof Error?r:new Error(String(r));throw this.logError("Streaming chat execution failed",o,{provider:e.provider,model:e.model}),o}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return true;return false}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return !1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return !1;return !0}catch{return false}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear();}};var ie=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1;}incrementErrors(){this.totalErrors+=1;}getSnapshot(){return {totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};var br=100,se=class extends Se{name="EventEmitterPlugin";version="1.0.0";pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=P("EventEmitterPlugin"),this.metrics=e.metrics??new ie,this.validateOptions(e),this.pluginOptions={enabled:e.enabled??true,events:e.events??[v.AGENT_EXECUTION_START,v.AGENT_EXECUTION_COMPLETE,v.AGENT_EXECUTION_ERROR,v.TOOL_BEFORE_EXECUTE,v.TOOL_AFTER_EXECUTE,v.TOOL_SUCCESS,v.TOOL_ERROR],maxListeners:e.maxListeners??br,async:e.async??true,catchErrors:e.catchErrors??true,filters:e.filters??{},buffer:e.buffer??{enabled:false,maxSize:1e3,flushInterval:5e3},category:e.category??"event_processing",priority:e.priority??re.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??false},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer();},this.pluginOptions.buffer.flushInterval));}async beforeExecution(e){await this.emit(v.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}});}async afterExecution(e,t){await this.emit(v.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}});}async beforeConversation(e){await this.emit(v.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(t=>({role:t.role,content:t.content||"",timestamp:t.timestamp?t.timestamp.toISOString():new Date().toISOString()})),config:e.config}});}async afterConversation(e,t){await this.emit(v.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(r=>({id:r.id||"",name:r.name||"",arguments:JSON.stringify(r.arguments||{}),result:String(r.result||"")}))}});}async beforeToolExecution(e,t){t&&await this.emit(v.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}});}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let r of t.toolCalls){let o=r.result===null?v.TOOL_ERROR:v.TOOL_SUCCESS,s={executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:r.name||"",toolId:r.id||"",toolResult:r.result!==null?String(r.result):void 0,duration:t.duration,success:r.result!==null}};await this.emit(o,s),await this.emit(v.TOOL_AFTER_EXECUTE,{...s,data:{...s.data,toolResult:String(r.result||"")}});}}async onError(e,t){await this.emit(v.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:new Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}});}on(e,t,r){let o=`handler_${this.nextHandlerId++}`;this.handlers.has(e)||this.handlers.set(e,[]);let s=this.handlers.get(e);if(s.length>=this.pluginOptions.maxListeners)throw new B(`Maximum listeners (${this.pluginOptions.maxListeners}) exceeded for event type: ${e}`,this.name,{eventType:e,currentListeners:s.length});return s.push({id:o,listener:t,once:r?.once??false,...r?.filter&&{filter:r.filter}}),o}once(e,t,r){return this.on(e,t,{once:true,...r&&{filter:r}})}off(e,t){let r=this.handlers.get(e);if(!r)return false;let o=typeof t=="string"?r.findIndex(s=>s.id===t):r.findIndex(s=>s.listener===t);return o!==-1?(r.splice(o,1),true):false}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let r={type:e,timestamp:new Date,...t},o=this.pluginOptions.filters[e];if(!(o&&!o(r))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(r),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&this.flushBuffer();return}await this.processEvent(r);}}async processEvent(e){let t=this.handlers.get(e.type);if(!t||t.length===0)return;let r=t.filter(o=>!o.filter||o.filter(e));if(r.length!==0){for(let o of r.filter(s=>s.once))this.off(e.type,o.id);if(this.pluginOptions.async){await Promise.all(r.map(o=>this.executeHandler(o,e)));return}for(let o of r)await this.executeHandler(o,e);}}async executeHandler(e,t){try{await e.listener(t);}catch(r){throw this.metrics.incrementErrors(),this.pluginOptions.catchErrors&&this.logger.error("Event handler error",{eventType:t.type,handlerId:e.id,error:r instanceof Error?r.message:String(r)}),r instanceof Error?r:new Error(String(r))}}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t);}getStats(){let e=super.getStats(),t=this.metrics.getSnapshot(),r={},o=0;for(let[s,n]of this.handlers)r[s]=n.length,o+=n.length;return {...e,eventTypes:Array.from(this.handlers.keys()),listenerCounts:r,totalListeners:o,bufferedEvents:this.eventBuffer.length,totalEmitted:t.totalEmitted,totalErrors:t.totalErrors}}clearAllListeners(){this.handlers.clear();}async destroy(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners();}validateOptions(e){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new B(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,this.name,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new B(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,this.name,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new B(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,this.name,{bufferFlushInterval:e.buffer.flushInterval})}};function Mt(){return [{type:"storage",category:"storage",layer:"infrastructure",capabilities:["data-persistence","data-retrieval"]},{type:"memory-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["in-memory-storage","fast-access"]},{type:"file-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["persistent-storage","file-system-access"]},{type:"text-processing",category:"processing",layer:"application",capabilities:["text-analysis","content-transformation"]},{type:"file-processing",category:"processing",layer:"application",dependencies:["storage"],capabilities:["file-parsing","content-extraction"]},{type:"api-integration",category:"integration",layer:"application",capabilities:["external-api-access","data-synchronization"]},{type:"database-integration",category:"integration",layer:"infrastructure",dependencies:["storage"],capabilities:["database-access","query-execution"]},{type:"rag",category:"capability",layer:"domain",dependencies:["storage","text-processing"],capabilities:["document-search","context-retrieval","semantic-search"]},{type:"speech-processing",category:"capability",layer:"domain",capabilities:["speech-to-text","text-to-speech","audio-processing"]},{type:"image-analysis",category:"capability",layer:"domain",capabilities:["image-recognition","visual-analysis","content-extraction"]}]}function bt(i,e){let t=[],r=[];if((!i.type||i.type.trim()==="")&&t.push("Module type is required and cannot be empty"),i.category||t.push("Module category is required"),i.layer||t.push("Module layer is required"),i.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(i.type)&&t.push("Module type must start with a letter and contain only letters, numbers, hyphens, and underscores"),i.dependencies){for(let o of i.dependencies)(!o||o.trim()==="")&&t.push("Dependencies cannot be empty");i.dependencies.includes(i.type)&&t.push("Module cannot depend on itself");}if(i.capabilities)for(let o of i.capabilities)(!o||o.trim()==="")&&t.push("Capabilities cannot be empty");if(i.dependencies){let o=["infrastructure","core","application","domain","presentation"],s=o.indexOf(i.layer);for(let n of i.dependencies){let a=e(n);a&&o.indexOf(a.layer)>s&&r.push(`Module '${i.type}' (${i.layer}) depends on '${n}' (${a.layer}) which is in a higher layer`);}}return {valid:t.length===0,errors:t,warnings:r}}function Pt(i,e,t){let r=new Set,o=new Set,s=[],n=[],a=[];for(let d of i){let l=e(d);if(!l){a.push(d);continue}if(l.dependencies)for(let g of l.dependencies)!t(g)&&!a.includes(g)&&a.push(g);}let u=(d,l=[])=>{if(o.has(d)){let E=l.indexOf(d);n.push(l.slice(E).concat([d]));return}if(r.has(d))return;let g=e(d);if(!g)return;o.add(d);let c=[...l,d];if(g.dependencies)for(let E of g.dependencies)(i.includes(E)||t(E))&&u(E,c);o.delete(d),r.add(d),s.push(d);};for(let d of i)r.has(d)||u(d);return {resolved:a.length===0&&n.length===0,order:s,circularDependencies:n,missingDependencies:a}}function Ct(i,e){let t=[],r=[],o=new Map;for(let n of i){let a=e(n);a&&(o.has(a.layer)||o.set(a.layer,[]),o.get(a.layer).push(n));}let s=new Map;for(let n of i){let a=e(n);if(a?.capabilities)for(let u of a.capabilities)s.has(u)||s.set(u,[]),s.get(u).push(n);}for(let[n,a]of Array.from(s.entries()))if(a.length>1)for(let u=0;u<a.length;u++)for(let d=u+1;d<a.length;d++){let l=a[u],g=a[d];l&&g&&t.push({module1:l,module2:g,reason:`Both modules provide capability '${n}'`});}return t.length>0&&(r.push("Consider using only one module per capability"),r.push("Check if modules can be configured to avoid conflicts")),!o.has("infrastructure")&&i.length>1&&r.push("Consider adding infrastructure modules for better foundation"),{compatible:t.length===0,conflicts:t,suggestions:r}}function Rt(i){let e={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},t={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,o=0;for(let s of i.values())e[s.category]++,t[s.layer]++,s.dependencies&&s.dependencies.length>0&&r++,s.capabilities&&s.capabilities.length>0&&o++;return {totalTypes:i.size,typesByCategory:e,typesByLayer:t,typesWithDependencies:r,typesWithCapabilities:o}}var Ae=class{registeredTypes=new Map;logger;constructor(){this.logger=P("ModuleDescriptorRegistry"),this.registerBuiltinTypes();}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new m(`Invalid module type descriptor: ${t.errors.join(", ")}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let r=this.registeredTypes.get(e.type);this.logger.warn("Overriding existing module type",{type:e.type,previousCategory:r?.category||"unknown",newCategory:e.category});}this.registeredTypes.set(e.type,e),this.logger.info("Module type registered",{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0});}unregisterType(e){if(!this.registeredTypes.has(e))return false;let t=this.findDependentTypes(e);if(t.length>0)throw new m(`Cannot unregister module type '${e}' - it is required by: ${t.join(", ")}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info("Module type unregistered",{type:e}),true}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return bt(e,t=>this.getType(t))}resolveDependencies(e){return Pt(e,t=>this.getType(t),t=>this.hasType(t))}checkCompatibility(e){return Ct(e,t=>this.getType(t))}findDependentTypes(e){let t=[];for(let[r,o]of this.registeredTypes)o.dependencies?.includes(e)&&t.push(r);return t}registerBuiltinTypes(){for(let e of Mt())this.registerType(e);this.logger.info("Built-in module types registered",{totalTypes:this.registeredTypes.size});}clearAllTypes(){this.registeredTypes.clear(),this.logger.info("All module types cleared");}getStats(){return Rt(this.registeredTypes)}};function St(i,e,t){if(!i.name||i.name.trim()==="")throw new m("Module name is required");if(!i.version||i.version.trim()==="")throw new m("Module version is required");let r=i.getModuleType(),o=e.validateTypeDescriptor(r);if(!o.valid)throw new m(`Invalid module type: ${o.errors.join(", ")}`,{moduleName:i.name,errors:o.errors});o.warnings.length>0&&t.warn("Module type validation warnings",{moduleName:i.name,warnings:o.warnings});}async function wt(i,e,t,r){let o=i.getModuleType();if(!o.dependencies||o.dependencies.length===0)return;for(let a of o.dependencies)if(!e.hasType(a))throw new m(`Module '${i.name}' depends on unregistered type '${a}'`,{moduleName:i.name,dependencyType:a});let s=new Set;for(let a of t.values())s.add(a.getModuleType().type);let n=[];for(let a of o.dependencies)s.has(a)||n.push(a);n.length>0&&r.warn("Module has unmet dependencies",{moduleName:i.name,missingDependencies:n});}function At(i,e){let t=e.get(i);if(!t)return [];let r=t.getModuleType().type,o=[];for(let[s,n]of e.entries())s!==i&&n.getModuleType().dependencies?.includes(r)&&o.push(s);return o}function Ot(i,e){let t={},r=0,o=0,s=0,n=0,a=0,u=0;for(let d of i.values()){let l=d.getModuleType().type;t[l]=(t[l]||0)+1,d.isInitialized()&&r++,d.isEnabled()&&o++;}for(let d of e.values())s+=d.totalExecutions,n+=d.successfulExecutions,a+=d.failedExecutions,u+=d.totalExecutionTime;return {totalModules:i.size,initializedModules:r,enabledModules:o,modulesByType:t,totalExecutions:s,totalSuccessfulExecutions:n,totalFailedExecutions:a,averageExecutionTime:s>0?u/s:0}}var Nt={REGISTERED:"module.registered",UNREGISTERED:"module.unregistered"},Oe=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=false;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new Ae,this.logger=P("ModuleRegistry");}async registerModule(e,t={}){if(this.isDisposing)throw new m("Cannot register modules during disposal");if(St(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new m(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==false&&await wt(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let r=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:r.type,enabled:e.isEnabled(),initialized:false,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:r.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(Nt.REGISTERED,{data:{moduleName:e.name,moduleType:r.type},timestamp:new Date});}async unregisterModule(e){let t=this.modules.get(e);if(!t)return false;let r=At(e,this.modules);if(r.length>0)throw new m(`Cannot unregister module '${e}' - it is required by: ${r.join(", ")}`,{moduleName:e,dependents:r});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let o=this.registrationOrder.indexOf(e);o!==-1&&this.registrationOrder.splice(o,1);let s=this.initializationOrder.indexOf(e);return s!==-1&&this.initializationOrder.splice(s,1),this.eventEmitter&&await this.eventEmitter.emit(Nt.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),true}async initializeModule(e,t){let r=this.modules.get(e);if(!r)throw new m(`Module '${e}' not found`);if(r.isInitialized())return;let o=this.moduleOptions.get(e),s=r.initialize(o,this.eventEmitter);if(t&&t>0){let a,u=new Promise((d,l)=>{a=setTimeout(()=>{l(new Error(`Module '${e}' initialization timed out after ${t}ms`));},t);});await Promise.race([s.then(d=>(clearTimeout(a),d)),u]);}else await s;let n=this.moduleStatuses.get(e);n&&(n.initialized=true,n.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e);}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let r=t.map(s=>this.modules.get(s).getModuleType().type),o=this.typeRegistry.resolveDependencies(r);if(!o.resolved){let s=[];throw o.missingDependencies.length>0&&s.push(`Missing dependencies: ${o.missingDependencies.join(", ")}`),o.circularDependencies.length>0&&s.push(`Circular dependencies: ${o.circularDependencies.map(n=>n.join(" -> ")).join("; ")}`),new m(`Cannot initialize modules: ${s.join("; ")}`,{missingDependencies:o.missingDependencies,circularDependencies:o.circularDependencies.map(n=>n.join(" -> "))})}for(let s of o.order){let n=t.find(a=>this.modules.get(a).getModuleType().type===s);n&&await this.initializeModule(n,e);}}async executeModule(e,t){let r=this.modules.get(e);if(!r)throw new m(`Module '${e}' not found`);if(!r.isInitialized())throw new m(`Module '${e}' is not initialized`);if(!r.isEnabled())throw new m(`Module '${e}' is disabled`);let o=this.moduleStats.get(e),s=Date.now();try{if(!r.execute)throw new m(`Module '${e}' does not support execute()`);let n=await r.execute(t),a=Date.now()-s;o.totalExecutions++,o.successfulExecutions++,o.totalExecutionTime+=a,o.averageExecutionTime=o.totalExecutionTime/o.totalExecutions,o.lastExecutionTime=new Date;let u=this.moduleStatuses.get(e);return u&&(u.lastActivity=new Date),n}catch(n){let a=Date.now()-s;throw o.totalExecutions++,o.failedExecutions++,o.totalExecutionTime+=a,o.averageExecutionTime=o.totalExecutionTime/o.totalExecutions,o.lastExecutionTime=new Date,n}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,r]of this.moduleStats.entries())e[t]={...r};return e}async disposeAllModules(){this.isDisposing=true;let e=[...this.initializationOrder].reverse();for(let t of e){let r=this.modules.get(t);if(r&&r.isInitialized())try{r.dispose&&await r.dispose();let o=this.moduleStatuses.get(t);o&&(o.initialized=!1);}catch(o){this.logger.error("Failed to dispose module",{name:t,error:o instanceof Error?o.message:String(o)});}}this.initializationOrder=[],this.isDisposing=false;}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=false;}getRegistryStats(){return Ot(this.modules,this.moduleStats)}};var Ne=class extends j{providers=new Map;currentProvider;currentModel;constructor(){super();}async doInitialize(){T.debug("AIProviders initialized");}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),T.debug(`Closed AI provider: ${e}`);}catch(r){T.warn(`Failed to close AI provider ${e}`,{error:r instanceof Error?r.message:String(r)});}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,T.debug("AIProviders disposed");}addProvider(e,t){this.ensureInitialized();let r=$.validateProviderName(e);if(!r.isValid)throw new I(`Invalid provider name: ${r.errors.join(", ")}`);if(!t||typeof t!="object"||t===null||Array.isArray(t))throw new I("Provider must be a valid object instance");if(!t.name||typeof t.name!="string")throw new I("Provider must have a valid name");if(typeof t.chat!="function")throw new I("Provider must have a chat method");this.providers.has(e)&&T.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),T.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream=="function"});}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){T.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(r=>{T.warn(`Failed to close provider ${e}`,{error:r.message});}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,T.debug(`Cleared current provider selection after removing "${e}"`)),T.debug(`AI provider "${e}" removed successfully`);}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new m(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,T.debug(`Current AI provider set to "${e}" with model "${t}"`);}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return {provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getAvailableModels(e){if(this.ensureInitialized(),!this.providers.get(e))throw new m(`Provider "${e}" is not registered`);return T.warn("getAvailableModels() is deprecated. Models are now handled by providers internally."),[]}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e=="string"?new RegExp(e):e,r={};for(let[o,s]of this.providers)t.test(o)&&(r[o]=s);return r}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return false;let r=this.providers.get(t);return !!(r&&typeof r.chatStream=="function")}getProviderCount(){return this.ensureInitialized(),this.providers.size}};var ne=class{tools=new Map;register(e){if(!e.schema?.name)throw new I("Tool must have a valid schema with name");let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&T.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),T.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})});}unregister(e){if(!this.tools.has(e)){T.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),T.debug(`Tool "${e}" unregistered successfully`);}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return T.debug("[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction",{count:e.length,tools:e.map(t=>({name:t.schema?.name??"unnamed",hasSchema:!!t.schema,schemaType:typeof t.schema,toolType:t.constructor?.name||"unknown"}))}),this.getAll().map(t=>t.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),T.debug(`Cleared ${e} tools from registry`);}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e=="string"?new RegExp(e):e;return this.getAll().filter(r=>t.test(r.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!="string")throw new I("Tool schema must have a valid name");if(!e.description||typeof e.description!="string")throw new I("Tool schema must have a description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new I("Tool schema must have parameters object");if(e.parameters.type!=="object")throw new I('Tool parameters type must be "object"');if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let r=e.parameters.properties[t];if(!r?.type)throw new I(`Parameter "${t}" must have a type`);if(!["string","number","boolean","array","object"].includes(r.type))throw new I(`Parameter "${t}" has invalid type "${r.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let r of e.parameters.required)if(!t[r])throw new I(`Required parameter "${r}" is not defined in properties`)}}};var ae=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs();}getName(){return this.schema.name}setEventService(e){this.eventService=e;}async execute(e,t){let r=this.schema.name;if(!this.validate(e)){let a=this.getValidationErrors(e);throw new I(`Invalid parameters for tool "${r}": ${a.join(", ")}`)}let o=Date.now(),s;try{s=await this.fn(e,t);}catch(a){throw a instanceof D||a instanceof I?a:new D(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,r,a instanceof Error?a:new Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let n=Date.now()-o;return {success:true,data:s,metadata:{executionTime:n,toolName:r,parameters:e}}}validate(e){return this.getValidationErrors(e).length===0}validateParameters(e){let t=this.getValidationErrors(e);return {isValid:t.length===0,errors:t}}getDescription(){return this.schema.description}getValidationErrors(e){let t=[],r=this.schema.parameters.required||[],o=this.schema.parameters.properties||{};for(let s of r)s in e||t.push(`Missing required parameter: ${s}`);for(let[s,n]of Object.entries(e)){let a=o[s];if(!a){t.push(`Unknown parameter: ${s}`);continue}let u=this.validateParameterType(s,n,a);u&&t.push(u);}return t}validateParameterType(e,t,r){switch(r.type){case "string":if(typeof t!="string")return `Parameter "${e}" must be a string, got ${typeof t}`;break;case "number":if(typeof t!="number"||isNaN(t))return `Parameter "${e}" must be a number, got ${typeof t}`;break;case "boolean":if(typeof t!="boolean")return `Parameter "${e}" must be a boolean, got ${typeof t}`;break;case "array":if(!Array.isArray(t))return `Parameter "${e}" must be an array, got ${typeof t}`;if(r.items)for(let s=0;s<t.length;s++){let n=this.validateParameterType(`${e}[${s}]`,t[s],r.items);if(n)return n}break;case "object":if(typeof t!="object"||t===null||Array.isArray(t))return `Parameter "${e}" must be an object, got ${typeof t}`;break}if(r.enum&&r.enum.length>0){let s=r.enum,n=false;for(let a of s)if(t===a){n=true;break}if(!n)return `Parameter "${e}" must be one of: ${s.join(", ")}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new I("Tool schema is required");if(!this.fn||typeof this.fn!="function")throw new I("Tool function is required and must be a function");if(!this.schema.name)throw new I("Tool schema must have a name")}};var De=class extends j{registry;allowedTools;constructor(){super(),this.registry=new ne;}async doInitialize(){T.debug("Tools initialized");}async doDispose(){this.registry.clear(),delete this.allowedTools,T.debug("Tools disposed");}addTool(e,t){this.ensureInitialized();let r=new ae(e,t);this.registry.register(r),T.debug(`Tool "${e.name}" registered successfully`);}removeTool(e){this.ensureInitialized(),this.registry.unregister(e);}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas();return this.allowedTools?e.filter(t=>this.allowedTools.includes(t.name)):e}async executeTool(e,t,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new D(`Tool "${e}" is not in the allowed tools list`,e);let o=this.registry.get(e);if(!o)throw new D(`Tool "${e}" is not registered`,e);let s;try{s=await o.execute(t,r);}catch(n){throw n instanceof Error?new D(n.message,e,n):new D(String(n),e)}if(!s.success)throw new D(s.error||"Tool execution failed",e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(s)});if(typeof s.data>"u")throw new D("Tool execution succeeded but returned no data",e);return s.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],T.debug(`Set allowed tools: ${e.join(", ")}`);}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};var le=class{templates=new Map;logger;constructor(){this.logger=P("AgentTemplates"),this.logger.info("AgentTemplates initialized");}registerTemplate(e){if(!e.id)throw new Error("Template must have an ID");this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags});}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(o=>t.tags?.includes(o))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let r=[],o=false,s={...e.config},n={...s,...t},a=d=>{d in t&&s[d]!==t[d]&&(o=true,s[d]!==void 0&&r.push(`Override: ${d} changed from "${String(s[d])}" to "${String(t[d])}"`));};t.name!==void 0&&a("name"),t.systemMessage!==void 0&&a("systemMessage");let u=n;return this.logger.debug("Template applied",{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:r.length,modified:o}),{config:u,template:e,warnings:r,modified:o}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info("All templates cleared");}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(n=>n.category).filter(n=>typeof n=="string"&&n.length>0))],r=[...new Set(e.flatMap(n=>n.tags||[]))],o=[...new Set(e.map(n=>n.config.defaultModel?.provider).filter(n=>typeof n=="string"&&n.length>0))],s=[...new Set(e.map(n=>n.config.defaultModel?.model).filter(n=>typeof n=="string"&&n.length>0))];return {totalTemplates:e.length,categories:t,tags:r,providers:o,models:s}}};var Rr=100,Sr=.7,wr=36,Ar=8,ue=class{agentTemplates;initialized=false;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new le,this.logger=P("AgentFactory"),this.options={defaultModel:e.defaultModel||"gpt-4",defaultProvider:e.defaultProvider||"openai",maxConcurrentAgents:e.maxConcurrentAgents||Rr,defaultSystemMessage:e.defaultSystemMessage||"You are a helpful AI assistant.",strictValidation:e.strictValidation??true},this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug("AgentFactory initialized",{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null});}async initialize(){this.initialized||(this.logger.debug("Initializing AgentFactory"),this.initialized=true,this.logger.debug("AgentFactory initialization completed"));}async createAgent(e,t,r=false){let o;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new m(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(o=this.applyDefaults(t),this.options.strictValidation){let u=Je(o);if(!u.isValid)throw new I(`Invalid agent configuration: ${u.errors.join(", ")}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(o);let s=new e(o),n=s;typeof n.initialize=="function"&&await n.initialize();let a=this.generateAgentId();return this.activeAgents.set(a,s),this.updateCreationStats(r),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(s,o),this.logger.info("Agent created successfully",{agentId:a,model:o.defaultModel.model,provider:o.defaultModel.provider}),s}catch(s){let n=s instanceof Error?s:new Error(String(s));throw this.lifecycleEvents.onCreateError&&o&&await this.lifecycleEvents.onCreateError(n,o),this.logger.error("Failed to create agent",{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}async createFromTemplate(e,t,r={}){let o=this.agentTemplates.getTemplate(t);if(!o)throw new m(`Template not found: ${t}`);let s=this.applyTemplate(o,r);s.warnings.length>0&&this.logger.warn("Template application warnings",{templateId:t,warnings:s.warnings});let n=await this.createAgent(e,s.config,true);return this.logger.info("Agent created from template",{templateId:t,modified:s.modified,warnings:s.warnings.length}),n}registerTemplate(e){this.agentTemplates.registerTemplate(e);}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return false;try{let r=t;return typeof r.cleanup=="function"&&await r.cleanup(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info("Agent destroyed",{agentId:e}),!0}catch(r){throw this.logger.error("Error destroying agent",{agentId:e,error:r instanceof Error?r.message:String(r)}),r}}getCreationStats(){return {...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return Je(e)}applyDefaults(e){if(!e.aiProviders||e.aiProviders.length===0)throw new m("At least one AI provider must be specified in aiProviders array");let t=e.defaultModel||{provider:e.aiProviders[0]?.name||this.options.defaultProvider,model:this.options.defaultModel,temperature:.7,systemMessage:this.options.defaultSystemMessage};return {id:e.id||this.generateAgentId(),name:e.name||"Unnamed Agent",aiProviders:e.aiProviders,defaultModel:{provider:t.provider,model:t.model,temperature:t.temperature??Sr,...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.topP!==void 0&&{topP:t.topP},systemMessage:t.systemMessage||this.options.defaultSystemMessage},tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}generateAgentId(){let e=Date.now(),t=Math.random().toString(wr).substring(2,Ar);return `agent_${e}_${t}`}updateCreationStats(e){this.creationStats.totalCreated++,this.creationStats.activeCount++,e?this.creationStats.fromTemplates++:this.creationStats.customConfigured++,this.creationStats.templateUsageRatio=this.creationStats.totalCreated>0?this.creationStats.fromTemplates/this.creationStats.totalCreated:0;}};function Ze(i){return i.role==="assistant"}function Ue(i){return i.role==="system"}function Qe(i){return i.role==="tool"}function et(i,e){let t={role:"user",content:i,timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function tt(i,e){let t={role:"assistant",content:i,timestamp:new Date};return e?.toolCalls&&(t.toolCalls=e.toolCalls),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function rt(i,e){let t={role:"system",content:i,timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function ot(i,e){let t={role:"tool",content:i,toolCallId:e.toolCallId,timestamp:new Date};return e.name&&(t.name=e.name),e.metadata&&(t.metadata=e.metadata),e.parts&&(t.parts=e.parts),t}var Le=class{maxMessages;messages=[];constructor(e){this.maxMessages=e?.maxMessages||0;}addMessage(e){this.messages.push(e),this.messages=this.applyMessageLimit(this.messages);}addUserMessage(e,t,r){this.addMessage(et(e,{...t&&{metadata:t},...r&&{parts:r}}));}addAssistantMessage(e,t,r,o){this.addMessage(tt(e,{...t&&{toolCalls:t},...r&&{metadata:r},...o&&{parts:o}}));}addSystemMessage(e,t,r){this.addMessage(rt(e,{...t&&{metadata:t},...r&&{parts:r}}));}addToolMessageWithId(e,t,r,o,s){this.addMessage(ot(e,{toolCallId:t,name:r,...o&&{metadata:o},...s&&{parts:s}}));}getMessages(){return [...this.messages]}getMessagesByRole(e){return this.messages.filter(t=>t.role===e)}getRecentMessages(e){return this.messages.slice(-e)}getMessageCount(){return this.messages.length}clear(){this.messages=[];}applyMessageLimit(e){if(this.maxMessages>0&&e.length>this.maxMessages){let t=e.filter(Ue),r=e.filter(s=>!Ue(s)),o=Math.max(0,this.maxMessages-t.length);return [...t,...r.slice(-o)]}return e}};var J=class{history;toolCallIds=new Set;constructor(e=100){this.history=new Le({maxMessages:e});}addMessage(e){this.history.addMessage(e);}addUserMessage(e,t,r){this.history.addUserMessage(e,t,r);}addAssistantMessage(e,t,r,o){this.history.addAssistantMessage(e,t,r,o);}addSystemMessage(e,t,r){this.history.addSystemMessage(e,t,r);}addToolMessage(e,t,r,o,s){this.history.addToolMessageWithId(e,t,r||"unknown",o,s);}addToolMessageWithId(e,t,r,o,s){if(this.toolCallIds.has(t))throw new Error(`Duplicate tool message detected for toolCallId: ${t}. Tool messages must have unique toolCallIds.`);this.toolCallIds.add(t),this.history.addToolMessageWithId(e,t,r,o,s);}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return e.role==="assistant"&&Ze(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),e.role==="tool"&&Qe(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear(),this.toolCallIds.clear();}};var Or=100,Nr=50,de=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||Or,this.maxConversations=e.maxConversations||Nr,this.logger=P("ConversationHistory");}getConversationSession(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new J(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug("Removed conversation",{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug("Cleared all conversations",{removedCount:e});}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((r,o)=>r+o.getMessageCount(),0);return {totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e);}};var _e=class{constructor(e,t,r,o,s){this.agentName=e;this.moduleRegistry=t;this.logger=r;this.isReady=o;this.ensureReady=s;}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??true,validateDependencies:t?.validateDependencies??true}),this.logger.info("Module registered",{moduleName:e.name,moduleType:e.getModuleType().type});}async unregisterModule(e){if(!this.isReady())return false;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info("Module unregistered",{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):false}async executeModule(e,t){await this.ensureReady();let r={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,r)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}};var ke=class{constructor(e,t,r){this.logger=e;this.isReady=t;this.getExecutionService=r;}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new m("Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.",{pluginName:e.name});t.registerPlugin(e),this.logger.debug("Plugin added",{pluginName:e.name});}removePlugin(e){let t=this.getExecutionService();if(!t)return false;let r=t.removePlugin(e);return r&&this.logger.debug("Plugin removed",{pluginName:e}),r}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return !this.isReady()||!e?[]:e.getPlugins().map(t=>t.name)}};function Dt(i){if(!i.name)throw new m("Agent name is required",{component:"Robota"});if(!i.aiProviders||i.aiProviders.length===0)throw new m("At least one AI provider is required",{component:"Robota"});if(!i.defaultModel)throw new m("Default model configuration is required",{component:"Robota"});if(!i.defaultModel.provider||!i.defaultModel.model)throw new m("Default model must specify both provider and model",{component:"Robota"});let e=i.aiProviders.map(r=>r.name),t=e.filter((r,o)=>e.indexOf(r)!==o);if(t.length>0)throw new m(`Duplicate AI provider names: ${t.join(", ")}`,{component:"Robota",duplicates:t});if(!e.includes(i.defaultModel.provider))throw new m(`Default provider '${i.defaultModel.provider}' not found in AI providers list. Available: ${e.join(", ")}`,{component:"Robota",defaultProvider:i.defaultModel.provider,availableProviders:e})}var Ve=class{constructor(e,t,r,o,s,n,a,u,d,l,g,c,E){this.logger=e;this.getAIProviders=t;this.getTools=r;this.getEventService=o;this.isReady=s;this.ensureReady=n;this.getConfig=a;this.setConfig=u;this.getConfigVersion=d;this.bumpConfigVersion=l;this.getConfigUpdatedAt=g;this.setConfigUpdatedAt=c;this.emitAgentEvent=E;}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new m("updateTools: next must be an array of tools");this.getTools().getRegistry().clear();let r=[],o=this.getEventService();for(let a of e){o&&a.setEventService(o);let u=async(l,g)=>{if(!g)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await a.execute(l,g)).data};this.getTools().addTool(a.schema,u);let d=a.schema.name;typeof d=="string"&&d.length>0&&r.push(d);}let s=this.getConfig();s.tools=e,this.setConfig(s);let n=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(M.CONFIG_UPDATED,{parameters:{tools:r,systemMessage:s.defaultModel.systemMessage,provider:s.defaultModel.provider,model:s.defaultModel.model,temperature:s.defaultModel.temperature,maxTokens:s.defaultModel.maxTokens},metadata:{version:n}}),{version:n}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new m("updateConfiguration: only tools patch is supported at this time")}async getConfiguration(){await this.ensureReady();let t=this.getTools().getTools().map(r=>({name:r.name,parameters:(()=>{let s=r.parameters?.properties;return s&&typeof s=="object"?Object.keys(s):void 0})()}));return {version:this.getConfigVersion(),tools:t,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new m("Both provider and model are required",{component:"Robota"});if(!this.isReady())throw new m("Agent must be fully initialized before changing model configuration",{component:"Robota"});let t=this.getAIProviders(),r=t.getProviderNames();if(!r.includes(e.provider))throw new m(`AI Provider '${e.provider}' not found. Available: ${r.join(", ")}`,{component:"Robota",provider:e.provider,availableProviders:r});t.setCurrentProvider(e.provider,e.model);let o=this.getConfig();this.setConfig({...o,defaultModel:{...o.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.systemMessage!==void 0&&{systemMessage:e.systemMessage}}}),this.logger.debug("Model configuration updated",e);}getModel(){if(!this.isReady())throw new m("Agent must be fully initialized before getting model configuration",{component:"Robota"});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new m("No provider is currently set",{component:"Robota"});let t=this.getConfig();return {provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.systemMessage!==void 0&&{systemMessage:t.defaultModel.systemMessage}}}registerTool(e,t){if(t.hasTool(e.schema.name))throw new Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);let r=async(o,s)=>{if(!s)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await e.execute(o,s)).data};t.addTool(e.schema,r),this.logger.debug("Tool registered",{toolName:e.schema.name});}};var X=class{build(e,t,r,o){let s=e.map(a=>({role:a.role,content:a.content})),n=JSON.stringify({messages:s,model:t,provider:r,temperature:o?.temperature,maxTokens:o?.maxTokens});return {hash:this.sha256(n),model:t,provider:r}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new Dr("SHA-256","TEXT");return t.update(e),t.getHash("HEX")}};var ge=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new X;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs;}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let r=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==r)throw this.cache.delete(e),this.removeFromAccessOrder(e),new he(`Integrity check failed for cache entry ${e}`,{hash:e,expected:r,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t);}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),true):false}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0;}getStats(){let e=this.hits+this.misses;return {hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e);}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1);}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e);}};var ce=class{constructor(e,t){this.storage=e;this.keyBuilder=t;}lookup(e,t,r,o){let s=this.keyBuilder.build(e,t,r,o),n=this.storage.get(s.hash);return n?n.response:void 0}store(e,t,r,o,s){let n=this.keyBuilder.build(e,t,r,s);this.storage.set({key:n,response:o,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(o)});}getStats(){return this.storage.getStats()}};async function Ut(i){let{config:e,aiProviders:t,tools:r,agentFactory:o,conversationHistory:s,moduleRegistry:n,eventEmitter:a,eventService:u,logger:d}=i;if(d.debug("Starting Robota initialization with independent managers"),await Promise.all([t.initialize(),r.initialize(),o.initialize()]),e.aiProviders)for(let c of e.aiProviders)t.addProvider(c.name,c);if(e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),e.modules){for(let c of e.modules)await n.registerModule(c,{autoInitialize:true,validateDependencies:true});d.debug("Modules registered and initialized",{moduleCount:e.modules.length,moduleNames:e.modules.map(c=>c.name)});}if(e.tools)for(let c of e.tools){c instanceof we&&u&&c.setEventService(u);let E=async(f,p)=>{if(!p)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await c.execute(f,p)).data};r.addTool(c.schema,E),d.debug("Tool registered during initialization",{toolName:c.schema.name});}let l;if(e.cache?.enabled){let c=new ge({maxEntries:e.cache.maxEntries,ttlMs:e.cache.ttlMs});l=new ce(c,new X);}let g=new Ce(t,r,s,u,e.executionContext,l);if(e.plugins)for(let c of e.plugins)g.registerPlugin(c),c.subscribeToModuleEvents&&(await c.subscribeToModuleEvents(a),d.debug("Plugin subscribed to module events",{pluginName:c.name}));return d.debug("Robota initialization completed successfully with independent managers"),g}async function Lt(i,e,t={}){try{i.emitAgentEvent(M.EXECUTION_START,{}),i.logger.debug("Starting Robota execution",{inputLength:e.length,conversationId:i.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let r=i.getHistory(),o={...i.config},s=await i.getExecutionService().execute(e,r,o,{conversationId:i.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}});if(i.logger.debug("Robota execution completed",{success:s.success,duration:s.duration,tokensUsed:s.tokensUsed,toolsExecuted:s.toolsExecuted}),!s.success&&s.error)throw s.error;return i.emitAgentEvent(M.EXECUTION_COMPLETE,{}),s.response}catch(r){throw i.logger.error("Robota execution failed",{error:r instanceof Error?r.message:String(r),conversationId:i.conversationId}),i.emitAgentEvent(M.EXECUTION_ERROR,{error:r instanceof Error?r.message:String(r)}),r}}async function*_t(i,e,t={}){try{i.emitAgentEvent(M.EXECUTION_START,{}),i.logger.debug("Starting Robota streaming execution",{inputLength:e.length,conversationId:i.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let r=i.getHistory(),o={...i.config},s=i.getExecutionService().executeStream(e,r,o,{conversationId:i.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}});for await(let n of s)yield n.chunk;}catch(r){throw i.logger.error("Robota streaming execution failed",{error:r instanceof Error?r.message:String(r),conversationId:i.conversationId}),i.emitAgentEvent(M.EXECUTION_ERROR,{error:r instanceof Error?r.message:String(r)}),r}finally{i.emitAgentEvent(M.EXECUTION_COMPLETE,{});}}function kt(i){let e=i.isFullyInitialized?i.aiProviders.getProviderNames():[],t=i.isFullyInitialized?i.aiProviders.getCurrentProvider():null,r=t?t.provider:null,o=i.isFullyInitialized?i.tools.getTools().map(l=>l.name):[],s=i.getPluginNames(),n=i.getModuleNames(),a=i.getHistory(),u=Date.now()-i.startTime,d={user:0,assistant:0,system:0,tool:0};for(let l of a)l.role in d&&d[l.role]++;return {name:i.name,version:i.version,conversationId:i.conversationId,providers:e,currentProvider:r,tools:o,plugins:s,modules:n,historyLength:a.length,historyStats:{userMessages:d.user,assistantMessages:d.assistant,systemMessages:d.system,toolMessages:d.tool},uptime:u}}async function Vt(i){i.logger.debug("Destroying Robota instance",{name:i.name});try{if(i.isFullyInitialized&&i.moduleRegistry&&(await i.moduleRegistry.disposeAllModules(),i.logger.debug("All modules disposed")),i.executionService){let e=i.executionService.getPlugins();for(let t of e)t.unsubscribeFromModuleEvents&&i.eventEmitter&&await t.unsubscribeFromModuleEvents(i.eventEmitter);i.logger.debug("ExecutionService plugins cleaned up");}i.moduleRegistry&&(i.moduleRegistry.clearAllModules(),i.logger.debug("ModuleRegistry cleared")),i.eventEmitter&&(await i.eventEmitter.destroy(),i.logger.debug("EventEmitter disposed")),i.resetState(),i.logger.info("Robota instance destroyed successfully",{name:i.name});}catch(e){throw i.logger.error("Error during Robota destruction",{error:e instanceof Error?e.message:String(e)}),e}}var Ur=36,Lr=9,it=class extends fe{name;version="1.0.0";aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;isFullyInitialized=false;startTime;configVersion=1;configUpdatedAt=Date.now();moduleManager;pluginManager;configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(Ur).substr(2,Lr)}`,this.logger=P("Robota"),this.startTime=Date.now(),e.logging&&(e.logging.level&&Fe(e.logging.level),e.logging.enabled===false&&Fe("silent")),Dt(e),this.aiProviders=new Ne,this.tools=new De,this.agentFactory=new ue,this.conversationHistory=new de,this.eventEmitter=new se({enabled:true,events:[v.MODULE_INITIALIZE_START,v.MODULE_INITIALIZE_COMPLETE,v.MODULE_INITIALIZE_ERROR,v.MODULE_EXECUTION_START,v.MODULE_EXECUTION_COMPLETE,v.MODULE_EXECUTION_ERROR,v.MODULE_DISPOSE_START,v.MODULE_DISPOSE_COMPLETE,v.MODULE_DISPOSE_ERROR]}),this.moduleRegistry=new Oe(this.eventEmitter),this.eventService=e.eventService||Me,this.agentEventService=V(this.eventService,{ownerType:"agent",ownerId:this.conversationId,ownerPath:this.buildOwnerPath(this.config.executionContext)}),this.initDelegates(),this.emitCreatedEvent();}initDelegates(){this.moduleManager=new _e(this.name,this.moduleRegistry,this.logger,()=>this.isFullyInitialized,()=>this.ensureFullyInitialized()),this.pluginManager=new ke(this.logger,()=>this.isFullyInitialized,()=>this.executionService),this.configManager=new Ve(this.logger,()=>this.aiProviders,()=>this.tools,()=>this.eventService,()=>this.isFullyInitialized,()=>this.ensureFullyInitialized(),()=>this.config,e=>{this.config=e;},()=>this.configVersion,()=>++this.configVersion,()=>this.configUpdatedAt,e=>{this.configUpdatedAt=e;},(e,t)=>{this.emitAgentEvent(e,t);});}emitCreatedEvent(){let e=Array.isArray(this.config.tools)?this.config.tools.map(t=>{let r=t?.schema?.name;if(typeof r=="string"&&r.length>0)return r;let o=t?.name;return typeof o=="string"&&o.length>0?o:""}).filter(t=>typeof t=="string"&&t.length>0):[];this.emitAgentEvent(M.CREATED,{parameters:{tools:e,systemMessage:this.config.defaultModel.systemMessage,provider:this.config.defaultModel.provider,model:this.config.defaultModel.model,temperature:this.config.defaultModel.temperature,maxTokens:this.config.defaultModel.maxTokens}});}async run(e,t={}){return await this.ensureFullyInitialized(),Lt(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*_t(this.executionDeps(),e,t);}executionDeps(){return {conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return this.conversationHistory.getConversationSession(this.conversationId).getMessages().map(t=>({role:t.role,content:t.content,timestamp:t.timestamp,metadata:t.metadata,...t.role==="assistant"&&"toolCalls"in t?{toolCalls:t.toolCalls}:{},...t.role==="tool"&&"toolCallId"in t?{toolCallId:t.toolCallId}:{}}))}clearHistory(){this.conversationHistory.getConversationSession(this.conversationId).clear();}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e);}getModel(){return this.configManager.getModel()}registerTool(e){this.configManager.registerTool(e,this.tools);}unregisterTool(e){this.tools.removeTool(e);}getConfig(){return {...this.config}}addPlugin(e){this.pluginManager.addPlugin(e);}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}getStats(){return kt({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){await Vt({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=false,this.initializationPromise=void 0;}});}async initialize(){await this.ensureFullyInitialized();}async ensureFullyInitialized(){this.isFullyInitialized||(this.initializationPromise||(this.initializationPromise=this.doAsyncInit()),await this.initializationPromise);}async doAsyncInit(){try{this.executionService=await Ut({config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger}),this.isFullyInitialized=!0;}catch(e){throw this.logger.error("Robota initialization failed",{error:e instanceof Error?e.message:String(e)}),e}}emitAgentEvent(e,t){W(this.agentEventService)||this.agentEventService.emit(e,{timestamp:new Date,...t},{ownerType:z,ownerId:this.conversationId,ownerPath:this.buildOwnerPath(this.config.executionContext)});}buildOwnerPath(e){return [...e?.ownerPath?.length?e.ownerPath.map(r=>({...r})):[],{type:"agent",id:this.conversationId}]}};var st=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(r,o,s)=>{if(!s?.ownerPath?.length)throw new Error(`[HISTORY-MODULE] Missing ownerPath for ${r}`);let n={eventName:r,sequenceId:this.nextSequenceId(),timestamp:o.timestamp,eventData:o,context:s};this.store.append(n);},t.subscribe(this.listener);}append(e){this.store.append(e);}read(e,t){return this.store.read(e,t)}readStream(e,t){return this.store.readStream(e,t)}getSnapshot(){return this.store.getSnapshot?.()}detach(e){e.unsubscribe(this.listener);}nextSequenceId(){return this.sequenceId+=1,this.sequenceId}};var _r=36,kr=9;function O(i){if(!(!i||typeof i!="object"||Array.isArray(i)||i instanceof Date))return i}function Ht(i){return typeof i=="string"?i.length:0}var He=class{config;methodConfigs=new Map;constructor(e){this.config=e;}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType==="agent"&&(this.configureMethod("run",{startEvent:M.EXECUTION_START,completeEvent:M.EXECUTION_COMPLETE,errorEvent:M.EXECUTION_ERROR,extractMetadata:(e,t,r)=>({inputLength:Ht(r[0]),conversationId:e.conversationId,options:O(r[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod("runStream",{startEvent:M.EXECUTION_START,completeEvent:M.EXECUTION_COMPLETE,errorEvent:M.EXECUTION_ERROR,extractMetadata:(e,t,r)=>({inputLength:Ht(r[0]),conversationId:e.conversationId,streaming:true,options:O(r[1])||{}})})),this.config.sourceType==="team"&&(this.configureMethod("assignTask",{startEvent:be.ASSIGNED,completeEvent:be.COMPLETED,errorEvent:y.ERROR,extractMetadata:(e,t,r)=>{let o=O(r[0]);return {taskDescription:o?.jobDescription,agentTemplate:o?.agentTemplate,priority:o?.priority,allowFurtherDelegation:o?.allowFurtherDelegation}},extractResult:e=>({result:O(e)?.result,agentId:O(e)?.agentId,metadata:O(e)?.metadata})}),this.configureMethod("execute",{startEvent:y.START,completeEvent:y.COMPLETE,errorEvent:y.ERROR,extractMetadata:(e,t,r)=>({taskDescription:r[0],teamMode:true}),extractResult:e=>({response:e})})),this.config.sourceType==="tool"&&this.configureMethod("execute",{startEvent:A.CALL_START,completeEvent:A.CALL_COMPLETE,errorEvent:A.CALL_ERROR,extractMetadata:(e,t,r)=>({toolName:O(e.schema)?.name||e.constructor.name,parameters:r[0],parametersCount:O(r[0])?Object.keys(O(r[0])||{}).length:0,context:r[1]}),extractResult:e=>({result:typeof O(e)?.data=="string"?O(e)?.data||"":JSON.stringify(O(e)?.data),success:O(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(t,r,o)=>{let s=Reflect.get(t,r,o);if(typeof r!="string")return s;let n=r;if(typeof s=="function"&&this.methodConfigs.has(n)){let a=this.methodConfigs.get(n);return async(...u)=>{let d=Date.now(),l=this.generateExecutionId(),g=t;try{if(a.startEvent){let f=a.extractMetadata?.(g,n,u)||{};this.emitEvent(a.startEvent,{timestamp:new Date,metadata:{...f,executionId:l,methodName:n,phase:"start"}});}let c=await s.apply(t,u),E=Date.now()-d;if(a.completeEvent){let f=a.extractResult?.(c)||{},p=a.extractMetadata?.(g,n,u)||{};this.emitEvent(a.completeEvent,{timestamp:new Date,...f,metadata:{...p,executionId:l,methodName:n,duration:E,phase:"complete",success:!0}});}return c}catch(c){let E=Date.now()-d;if(a.errorEvent){let f=a.extractMetadata?.(g,n,u)||{};this.emitEvent(a.errorEvent,{timestamp:new Date,error:c instanceof Error?c.message:String(c),metadata:{...f,executionId:l,methodName:n,duration:E,phase:"error",errorName:c instanceof Error?c.name:"UnknownError",success:false}});}throw c}}}return s}})}emitEvent(e,t){let r={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},o={timestamp:new Date,...t.metadata?{metadata:{...r,...t.metadata}}:{metadata:r},...t};this.config.eventService.emit(e,o);}generateExecutionId(){return `${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(_r).substr(2,kr)}`}};function $t(i,e){let t=new He(e);return t.configureStandardMethods(),t.wrap(i)}function Vr(i,e,t){return function(r){return $t(r,{eventService:i,sourceType:e,sourceId:t})}}var zt={safe:"plan",moderate:"default",full:"acceptEdits"};var $e={plan:{Bash:"deny",Read:"auto",Write:"deny",Edit:"deny",Glob:"auto",Grep:"auto"},default:{Bash:"approve",Read:"auto",Write:"approve",Edit:"approve",Glob:"auto",Grep:"auto"},acceptEdits:{Bash:"approve",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"},bypassPermissions:{Bash:"auto",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"}},ze={plan:"deny",default:"approve",acceptEdits:"approve",bypassPermissions:"auto"};function Hr(i){let e=i.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,".+").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function $r(i){let e=i.indexOf("(");if(e===-1)return {toolName:i.trim(),argPattern:void 0};let t=i.slice(0,e).trim(),r=i.slice(e+1,i.lastIndexOf(")")).trim();return {toolName:t,argPattern:r}}function zr(i,e){switch(i){case "Bash":return typeof e.command=="string"?e.command:void 0;case "Read":case "Write":case "Edit":return typeof e.filePath=="string"?e.filePath:void 0;case "Glob":case "Grep":return typeof e.pattern=="string"?e.pattern:void 0;default:return}}function Gt(i,e,t){let r=$r(t);if(r.toolName!==i)return false;if(r.argPattern===void 0)return true;let o=zr(i,e);return o===void 0?false:Hr(r.argPattern).test(o)}function Bt(i,e,t,r={}){let{allow:o=[],deny:s=[]}=r;for(let u of s)if(Gt(i,e,u))return "deny";for(let u of o)if(Gt(i,e,u))return "auto";let a=$e[t][i];return a!==void 0?a:ze[t]}var Br=1e4;function Xr(i,e){return new Promise(t=>{let r=[],o=[],s=false,n=spawn("sh",["-c",i],{cwd:process.cwd(),env:{...process.env}});n.stdout.on("data",u=>r.push(u)),n.stderr.on("data",u=>o.push(u)),n.stdin.write(e),n.stdin.end();let a=setTimeout(()=>{s||(s=true,n.kill("SIGTERM"),t({exitCode:1,stdout:"",stderr:"Hook timed out"}));},Br);n.on("close",u=>{s||(s=true,clearTimeout(a),t({exitCode:u??1,stdout:Buffer.concat(r).toString("utf8"),stderr:Buffer.concat(o).toString("utf8")}));}),n.on("error",u=>{s||(s=true,clearTimeout(a),t({exitCode:1,stdout:"",stderr:u.message}));});})}function Fr(i,e){if(!i.matcher)return true;if(!e)return false;try{return new RegExp(i.matcher).test(e)}catch{return i.matcher===e}}async function Xt(i,e,t){if(!i)return {blocked:false};let r=i[e];if(!r||r.length===0)return {blocked:false};let o=JSON.stringify(t);for(let s of r)if(Fr(s,t.tool_name))for(let n of s.hooks){if(n.type!=="command")continue;let a=await Xr(n.command,o);if(a.exitCode===2)return {blocked:true,reason:a.stderr||"Blocked by hook"}}return {blocked:false}}export{M as AGENT_EVENTS,z as AGENT_EVENT_PREFIX,qe as AbstractAIProvider,fe as AbstractAgent,oe as AbstractExecutor,j as AbstractManager,Se as AbstractPlugin,we as AbstractTool,ue as AgentFactory,le as AgentTemplates,dt as AuthenticationError,he as CacheIntegrityError,pt as CircuitBreakerOpenError,m as ConfigurationError,Xe as ConsoleLogger,de as ConversationHistory,J as ConversationSession,v as EVENT_EMITTER_EVENTS,y as EXECUTION_EVENTS,U as EXECUTION_EVENT_PREFIX,vt as ErrorUtils,se as EventEmitterPlugin,st as EventHistoryModule,He as ExecutionProxy,ie as InMemoryEventEmitterMetrics,Ke as LocalExecutor,$e as MODE_POLICY,xt as MessageConverter,mt as ModelNotAvailableError,ct as NetworkError,Ye as PluginCategory,B as PluginError,re as PluginPriority,je as ProviderError,gt as RateLimitError,it as Robota,R as RobotaError,L as SilentLogger,ft as StorageError,A as TOOL_EVENTS,G as TOOL_EVENT_PREFIX,zt as TRUST_TO_MODE,D as ToolExecutionError,Z as TypeUtils,ze as UNKNOWN_TOOL_FALLBACK,I as ValidationError,$ as Validator,$t as createExecutionProxy,P as createLogger,Bt as evaluatePermission,ro as getGlobalLogLevel,Wt as getToolEstimatedDuration,Yt as getToolExecutionSteps,ve as isAssistantMessage,lt as isImageGenerationProvider,pe as isProgressReportingTool,Zt as isSystemMessage,Qt as isToolMessage,Kt as isUserMessage,ut as isVideoGenerationProvider,T as logger,Xt as runHooks,Fe as setGlobalLogLevel,Jt as setToolProgressCallback,Pi as startPeriodicTask,Ci as stopPeriodicTask,Je as validateAgentConfig,Mi as validateApiKey,xi as validateModelName,yi as validateProviderName,Ti as validateUserInput,Vr as withEventEmission};
|
|
1
|
+
import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as ee,v as C,w as te,x as w,y as T}from"./bounded-output-BdWv9SX3.js";import{n as ne,r as re,t as ie}from"./verdict-decoder-Dz_rjoIZ.js";import ae from"jssha";const oe={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>oe.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>oe.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||oe.isPrimitive(e)||oe.isArray(e)||oe.isObject(e)};function se(e){return{functionCalling:{supported:e},nativeWebTools:{webSearch:{supported:!1,enabled:!1,reason:`Provider does not declare native web search support.`},webFetch:{supported:!1,enabled:!1,reason:`Provider does not declare native web fetch support.`}}}}function ce(e,t,n){n?.webSearch===!0&&le(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&le(e,`web fetch`,t.nativeWebTools.webFetch)}function le(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${ue(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${ue(n.reason)}`)}function ue(e){return e?` ${e}`:``}const de=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function fe(e){return typeof e==`string`&&de.includes(e)}function pe(e,t){return{resolution:e,...t}}const me=new Map(de.map((e,t)=>[e,t]));function he(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function ge(e,t,n){let r=e?.models[t];if(!r)return he(n,t);let i=(i,a)=>`${t}|${n}|${i}|${a}|${r.nativeControlId}|${e.verifiedAt}`;if(n===`auto`)return r.supportedEfforts.includes(r.defaultEffort)?{selection:n,effective:r.defaultEffort,disposition:`model-default`,fingerprint:i(r.defaultEffort,`model-default`)}:he(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=me.get(n),o=r.supportedEfforts.filter(e=>(me.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:he(n,t)}function _e(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??se(t)}function ve(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ye(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function be(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function xe(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function Se(e,t,n){let r=xe(e,t);if(!(!r||r.length===0))return r.includes(n)}function Ce(e,t,n,r){return Se(e,t,n)??r}function we(e){return`generateImage`in e&&typeof e.generateImage==`function`}function Te(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Ee(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.type==`string`&&t.type.length>0&&(typeof t.createImageProvider==`function`||typeof t.createVideoProvider==`function`)}function De(e,t){return e.find(e=>e.type===t)}const Oe=`ToolSearch`,ke=`yes`,Ae=`no`,je=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function Me(e,t,n){return{id:e,title:t,description:n?.description,options:je,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Ne(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function Pe(e,t,n,r){return{id:e,title:t,options:n,minSelect:r?.minSelect??1,maxSelect:r?.maxSelect??n.length,description:r?.description,maxVisible:r?.maxVisible,default:r?.default}}function Fe(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function Ie(e){return e.type===`answer`&&e.values.includes(`yes`)}function Le(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Re(e,t){if(Le(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function ze(e,t){if(Le(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function Be(e,t){return Le(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function Ve(e){if(e)return Object.freeze({sourceId:e.sourceId,component:e.component,origin:e.origin,...e.version===void 0?{}:{version:e.version},...e.protocolVersion===void 0?{}:{protocolVersion:e.protocolVersion},...e.generation===void 0?{}:{generation:e.generation}})}function He(e,t){let{toolProvenance:n,...r}=e.metadata??{};if(!t)return n===void 0?e:{...e,metadata:r};let i=JSON.stringify(t),a=`Tool source (attribution only, not authority): ${i}`,o=e.parts??[];return{...e,metadata:{...r,toolProvenance:i},parts:o[0]?.type===`text`&&o[0].text===a?o:[{type:`text`,text:a},...o]}}var Ue=class{history=[];isInitialized=!1;config;async configure(e){this.config=e,await this.ensureInitialized()}getHistory(){return[...this.history]}clearHistory(){this.history=[]}addMessage(e){this.history.push(e)}validateInput(e){if(!e||typeof e!=`string`)throw Error(`Input must be a non-empty string`)}async ensureInitialized(){this.isInitialized||=(await this.initialize(),!0)}async dispose(){this.clearHistory(),this.isInitialized=!1}},We=class{initialized=!1;disposed=!1;initializationPromise;disposalPromise;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){for(;this.disposalPromise;)await this.disposalPromise;this.initialized||(this.initializationPromise??=Promise.resolve().then(()=>this.doInitialize()).then(()=>{this.disposalPromise||(this.initialized=!0,this.disposed=!1)}).finally(()=>{this.initializationPromise=void 0}),await this.initializationPromise)}async dispose(){if(this.disposalPromise)return this.disposalPromise;this.initialized=!1,this.disposed=!0;let e=()=>this.doDispose();this.disposalPromise=(this.initializationPromise??Promise.resolve()).then(e,e).finally(()=>{this.initialized=!1,this.disposed=!0,this.disposalPromise=void 0}),await this.disposalPromise}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Ge(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}function Ke(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function qe(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*Je(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*Ye(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*Je(t,n,r,i)}function Xe(e){return e.category===`chat`}function Ze(e){let t=e.data;if(!t)throw Error(`Chat entry ${e.id} has no data`);return{...t,id:e.id,timestamp:e.timestamp}}function Qe(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function $e(e){return e.filter(Xe).map(Ze)}function et(e){return e.role===`user`}function tt(e){return e.role===`assistant`}function nt(e){return e.role===`system`}function rt(e){return e.role===`tool`}function it(e,t,n,r){let i=e.effort!==void 0||e.effortResolution!==void 0,a=e.onModelEffortOutcome,o=i?e=>{if(r(e),a!==void 0)try{a(e)}catch(e){n.warn(`Model-effort outcome observer failed`,{error:e instanceof Error?e.message:String(e)})}}:a,s={...e.model!==void 0&&{model:e.model},...e.effort!==void 0&&{effort:e.effort},...e.effortResolution!==void 0&&{effortResolution:e.effortResolution},...o!==void 0&&{onModelEffortOutcome:o},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}};return s.effort===void 0||s.effortResolution!==void 0||s.model===void 0?s:{...s,effortResolution:ge(t?.(),s.model,s.effort)}}function at(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=pe(r,{nativeControl:{state:`omitted`,reason:`model-effort-not-applied`},providerDispatch:{state:`sent`}});try{i(a)}catch(e){n.warn(`Model-effort outcome observer failed`,{error:e instanceof Error?e.message:String(e)})}return a}function ot(e,t,n){if(t.effort!==void 0&&n===void 0)throw Error(`Provider "${e}" did not emit a model-effort terminal outcome for a selected generic request.`)}async function st(e,t,n){let r,i=it(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=at(i,e.effortTable!==void 0,t),ot(e.name,i,r),{content:a.content??null,toolCalls:tt(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*ct(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=it(n,e.effortTable?.bind(e),t,e=>{r=e});for await(let t of e.chatStream(n.messages,i))yield{content:t.content??null,toolCalls:tt(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=at(i,e.effortTable!==void 0,t),ot(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const lt={type:`null`};function ut(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function dt(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return ut(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,lt]}:{anyOf:[t,lt]}}function ft(e,t={}){return pt(e,t,``)}function pt(e,t,n){if(Array.isArray(e))return e.map((e,r)=>pt(e,t,`${n}/${r}`));if(typeof e!=`object`||!e)return e;let r=e,i={...r},a=r.type===`object`,o=r.properties&&typeof r.properties==`object`?r.properties:void 0;if(o){let e=new Set(Array.isArray(r.required)?r.required.map(String):[]);i.properties=Object.fromEntries(Object.entries(o).map(([r,i])=>{let a=`${n}/properties/${r}`,o=pt(i,t,a),s=e.has(r);if(t.requireAllProperties===!0&&!s&&t.onChange?.({path:a,kind:`required-added`}),!(t.requireAllProperties===!0&&t.optionalAsNullable===!0&&!s))return[r,o];let c=typeof o==`object`&&o&&!Array.isArray(o)?ut(o):!1,l=dt(o);return c||t.onChange?.({path:a,kind:`nullable-added`}),[r,l]})),t.requireAllProperties===!0&&(i.required=Object.keys(o))}return r.items&&typeof r.items==`object`&&(i.items=pt(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>pt(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=pt(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const mt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),ht=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function E(e,t){return e>>>t|e<<32-t}function gt(e){let t=new TextEncoder().encode(e),n=Math.ceil((t.length+9)/64)*64,r=new Uint8Array(n);r.set(t),r[t.length]=128;let i=new DataView(r.buffer),a=BigInt(t.length)*8n;i.setUint32(n-8,Number(a>>32n&4294967295n)),i.setUint32(n-4,Number(a&4294967295n));let o=new Uint32Array(ht),s=new Uint32Array(64);for(let e=0;e<n;e+=64){for(let t=0;t<16;t+=1)s[t]=i.getUint32(e+t*4);for(let e=16;e<64;e+=1){let t=s[e-15]??0,n=s[e-2]??0,r=E(t,7)^E(t,18)^t>>>3,i=E(n,17)^E(n,19)^n>>>10;s[e]=(s[e-16]??0)+r+(s[e-7]??0)+i>>>0}let t=o[0]??0,n=o[1]??0,r=o[2]??0,a=o[3]??0,c=o[4]??0,l=o[5]??0,u=o[6]??0,d=o[7]??0;for(let e=0;e<64;e+=1){let i=E(c,6)^E(c,11)^E(c,25),o=c&l^~c&u,f=d+i+o+(mt[e]??0)+(s[e]??0)>>>0,p=(E(t,2)^E(t,13)^E(t,22))+(t&n^t&r^n&r)>>>0;d=u,u=l,l=c,c=a+f>>>0,a=r,r=n,n=t,t=f+p>>>0}o[0]=(o[0]??0)+t>>>0,o[1]=(o[1]??0)+n>>>0,o[2]=(o[2]??0)+r>>>0,o[3]=(o[3]??0)+a>>>0,o[4]=(o[4]??0)+c>>>0,o[5]=(o[5]??0)+l>>>0,o[6]=(o[6]??0)+u>>>0,o[7]=(o[7]??0)+d>>>0}return[...o].map(e=>e.toString(16).padStart(8,`0`)).join(``)}const _t=32,vt=2e3,yt=Object.keys({type:!0,description:!0,enum:!0,items:!0,properties:!0,required:!0,anyOf:!0,additionalProperties:!0,minimum:!0,maximum:!0,pattern:!0,format:!0,default:!0}),bt=new Set(yt),xt=new Set([`__proto__`,`constructor`,`prototype`]),St=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function Ct(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const wt={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:vt},Tt={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:vt};function D(e,t){return`${e}/${t}`}function O(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Et(e,t,n,r,i,a){if(!O(e))return;if(r.has(e))return{path:t,keyword:`cycle`,reason:`object graph revisits a node on its own ancestor chain (cycle)`};if(r.add(e),n>a.maxDepth)return{path:t,keyword:`maxDepth`,reason:`nesting depth exceeds maxDepth (${a.maxDepth})`};if(i.count+=1,i.count>a.maxNodes)return{path:t,keyword:`maxNodes`,reason:`node count exceeds maxNodes (${a.maxNodes})`};if(a.unknownKeywords===`reject`){for(let n of Object.keys(e))if(!bt.has(n))return{path:t,keyword:n,reason:`unknown keyword '${n}' is outside the IParameterSchema member set`}}let o=typeof e.type==`string`,s=Array.isArray(e.anyOf);if(o&&s)return{path:t,keyword:`anyOf`,reason:`a node must declare exactly one of 'type' or 'anyOf', not both`};if(!o&&!s&&!Object.keys(e).some(e=>!bt.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(O(c)){for(let e of Object.keys(c))if(xt.has(e))return{path:D(D(t,`properties`),e),keyword:e,reason:`property name '${e}' is a prototype key`};for(let e of Object.keys(c)){let o=Et(c[e],D(D(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(O(e.items)){let o=Et(e.items,D(t,`items`),n+1,r,i,a);if(o)return o}if(Array.isArray(e.anyOf))for(let o=0;o<e.anyOf.length;o+=1){let s=Et(e.anyOf[o],D(D(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function Dt(e,t,n,r){let i={...e};for(let e of n.unsupportedMembers){let n=e;n in i&&(delete i[n],r.push({path:t,kind:`member-stripped`,keyword:n}))}if(n.unknownKeywords===`strip`){let e=Object.keys(i).filter(e=>!bt.has(e));for(let t of e)delete i[t];let n=typeof i.type==`string`,a=Array.isArray(i.anyOf);if(e.length>0&&!n&&!a){for(let n of e)r.push({path:t,kind:`keyword-replaced`,keyword:n});let n=Ct();for(let e of Object.keys(i))e===`description`?n.description=i.description:r.push({path:t,kind:`member-stripped`,keyword:e});return n}for(let n of e)r.push({path:t,kind:`keyword-stripped`,keyword:n})}let a=i.properties;return O(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,O(i)?Dt(i,D(D(t,`properties`),e),n,r):i]}))),O(i.items)&&(i.items=Dt(i.items,D(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>O(e)?Dt(e,D(D(t,`anyOf`),String(i)),n,r):e)),i}function Ot(e){if(Array.isArray(e))return e.map(Ot);if(O(e)){let t={};for(let n of Object.keys(e).sort())t[n]=Ot(e[n]);return t}return e}function kt(e){return gt(JSON.stringify(Ot(e)))}function At(e,t){let n=e.parameters;if(!O(n)||n.type!==`object`)return{outcome:`rejected`,tool:e,changes:[],rejection:{path:``,keyword:`type`,reason:`the parameters root must declare type: 'object' — no documented provider accepts another root`}};let r=Et(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=Dt(n,``,t,i),o=t.closedObjects?ft(a,{requireAllProperties:t.requireAllProperties,optionalAsNullable:t.optionalAsNullable,onChange:e=>i.push(e)}):a;if(i.length===0)return{outcome:`adopted`,tool:e,changes:[]};let s=i.filter(e=>(e.kind===`keyword-stripped`||e.kind===`keyword-replaced`||e.kind===`member-stripped`)&&!St.has(e.keyword??``)),c=s.length===0?e.description:`${e.description}\n\nSchema note: ${s.length} constraint(s) not shown to ${t.providerName}: ${s.map(e=>`${e.kind}@${e.path}`).join(`, `)}`;return{outcome:`adapted`,tool:{...e,parameters:o,description:c},changes:i}}const jt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Mt=class e{static instance;globalLevel;globalSink;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}getGlobalSink(){return this.globalSink}setGlobalSink(e){this.globalSink=e}},Nt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Mt.getInstance().getGlobalSink()??jt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Pt(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Pt(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Pt(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Pt(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Mt.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t===`silent`)return!1;let n=[`debug`,`info`,`warn`,`error`,`silent`];return n.indexOf(e)>=n.indexOf(t)}forward(e,t,n){let r={timestamp:new Date().toISOString(),level:e,message:t,...n&&{context:n},packageName:this.packageName},i=`[${r.timestamp}] [${r.level.toUpperCase()}] [${r.packageName}] ${r.message}`;switch(e){case`debug`:this.sinkLogger.debug(i,n??{});return;case`info`:this.sinkLogger.info(i,n??{});return;case`warn`:this.sinkLogger.warn(i,n??{});return;case`error`:this.sinkLogger.error(i,n??{});return;case`silent`:return}}};function Pt(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function k(e,t={}){return new Nt(e,t)}function Ft(e){Mt.getInstance().setGlobalLevel(e)}function It(){return Mt.getInstance().getGlobalLevel()}function Lt(e){Mt.getInstance().setGlobalSink(e)}function Rt(){return Mt.getInstance().getGlobalSink()}const A=k(`agents`),zt=k(`ToolSchemaProjection`);var Bt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=jt){this.logger=e}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor)}hasExecutor(e){return typeof e==`object`&&!!e&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Vt(n,t);if(e.done||(await Ht(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return st(this,this.logger,e)}async*generateStreamingResponse(e){yield*ct(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return se(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ge(e)}validateTools(e){Ke(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=At(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${kt(i.parameters)}`;if(this.quarantinedToolSchemas.has(a))continue;this.quarantinedToolSchemas.set(a,!0);let{path:o,keyword:s,reason:c}=e.rejection??{path:``,keyword:``,reason:`rejected`};zt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){ce(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return qe(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Ye(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Vt(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function Ht(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Ut=function(e){return e.MONITORING=`monitoring`,e.LOGGING=`logging`,e.STORAGE=`storage`,e.NOTIFICATION=`notification`,e.SECURITY=`security`,e.PERFORMANCE=`performance`,e.ERROR_HANDLING=`error_handling`,e.LIMITS=`limits`,e.EVENT_PROCESSING=`event_processing`,e.CUSTOM=`custom`,e}({}),Wt=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const j={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Gt=`agent`,M={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},Kt=`execution`,N={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},qt=`tool`,Jt=`unknown_tool`,Yt=`argument_decode_error`,Xt=`tool_call_skipped`,P=(e,t)=>`${e}.${t}`,Zt={START:P(Kt,M.START),COMPLETE:P(Kt,M.COMPLETE),ERROR:P(Kt,M.ERROR)},Qt={CALL_START:P(qt,N.CALL_START),CALL_COMPLETE:P(qt,N.CALL_COMPLETE),CALL_ERROR:P(qt,N.CALL_ERROR)},$t={EXECUTION_START:P(Gt,j.EXECUTION_START),EXECUTION_COMPLETE:P(Gt,j.EXECUTION_COMPLETE),EXECUTION_ERROR:P(Gt,j.EXECUTION_ERROR),CREATED:P(Gt,j.CREATED)},F={EXECUTION_START:Zt.START,EXECUTION_COMPLETE:Zt.COMPLETE,EXECUTION_ERROR:Zt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Qt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:$t.EXECUTION_START,AGENT_EXECUTION_COMPLETE:$t.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:$t.EXECUTION_ERROR,AGENT_CREATED:$t.CREATED,AGENT_DESTROYED:`agent.destroyed`,PLUGIN_LOADED:`plugin.loaded`,PLUGIN_UNLOADED:`plugin.unloaded`,PLUGIN_ERROR:`plugin.error`,ERROR_OCCURRED:`error.occurred`,WARNING_OCCURRED:`warning.occurred`,MODULE_INITIALIZE_START:`module.initialize.start`,MODULE_INITIALIZE_COMPLETE:`module.initialize.complete`,MODULE_INITIALIZE_ERROR:`module.initialize.error`,MODULE_EXECUTION_START:`module.execution.start`,MODULE_EXECUTION_COMPLETE:`module.execution.complete`,MODULE_EXECUTION_ERROR:`module.execution.error`,MODULE_DISPOSE_START:`module.dispose.start`,MODULE_DISPOSE_COMPLETE:`module.dispose.complete`,MODULE_DISPOSE_ERROR:`module.dispose.error`,MODULE_REGISTERED:`module.registered`,MODULE_UNREGISTERED:`module.unregistered`,EXECUTION_HIERARCHY:`execution.hierarchy`,EXECUTION_REALTIME:`execution.realtime`,TOOL_REALTIME:`tool.realtime`,CUSTOM:`custom`};var en=class{enabled=!0;category=`custom`;priority=Wt.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=k(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(F.MODULE_INITIALIZE_START,F.MODULE_INITIALIZE_COMPLETE,F.MODULE_INITIALIZE_ERROR,F.MODULE_EXECUTION_START,F.MODULE_EXECUTION_COMPLETE,F.MODULE_EXECUTION_ERROR,F.MODULE_DISPOSE_START,F.MODULE_DISPOSE_COMPLETE,F.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}getConfig(){return{}}updateConfig(e){}getData(){return{name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return{name:this.name,version:this.version,enabled:this.enabled,initialized:!0,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return{enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date}},tn=class{logger;constructor(e=jt){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(Error(`Operation timed out after ${t}ms`)),t)})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t)}logError(e,t,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw Error(`Response must have a role`);let t=e.role===`assistant`&&`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw Error(`Response must have content or tool calls`)}},nn=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??jt}setEventService(e){this.eventService=e}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t)}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return(this.schema.parameters.required||[]).every(t=>t in e)}validateParameters(e){let t=this.schema.parameters.required||[],n=[],r=e;for(let e of t)e in r||n.push(`Missing required parameter: ${e}`);return{isValid:n.length===0,errors:n}}getDescription(){return this.schema.description}getName(){return this.schema.name}};function rn(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function an(e,t){if(t?.aborted===!0)return!0;if(!rn(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return rn(n)&&n.name===`AbortError`}function on(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var sn=class{static toProviderFormat(e,t,n={}){if(typeof t==`function`)return t(e);if(typeof t==`string`){let r=n[t];if(r!==void 0)return r(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(e=>e.role===`system`)?.content}static filterNonSystemMessages(e){return e.filter(e=>e.role!==`system`)}},cn=class{static validateAgentConfig(e){let t=[],n=[];return e.name||t.push(`name is required`),(!e.aiProviders||e.aiProviders.length===0)&&t.push(`aiProviders array is required and must have at least one provider`),e.defaultModel?(e.defaultModel.provider||t.push(`defaultModel.provider is required`),e.defaultModel.model||t.push(`defaultModel.model is required`)):t.push(`defaultModel is required`),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(e=>e.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!=`number`||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push(`defaultModel.temperature must be a number between 0 and 2`),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!=`number`||e.defaultModel.maxTokens<=0)&&t.push(`defaultModel.maxTokens must be a positive number`),e.systemMessage&&e.systemMessage.length>1e3&&n.push(`systemMessage is quite long, consider keeping it concise for better performance`),e.tools&&e.tools.length>20&&n.push(`Large number of tools may impact performance, consider grouping related tools`),{isValid:t.length===0,errors:t,warnings:n}}static validateUserInput(e){let t=[],n=[];return!e||typeof e!=`string`?t.push(`Input must be a non-empty string`):(e.trim().length===0&&t.push(`Input cannot be only whitespace`),e.length>1e4&&n.push(`Very long input may be truncated by AI providers`)),{isValid:t.length===0,errors:t,warnings:n}}static validateProviderName(e){let t=[];return!e||typeof e!=`string`?t.push(`Provider name must be a non-empty string`):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push(`Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens`),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return!e||typeof e!=`string`?t.push(`Model name must be a non-empty string`):e.trim().length===0&&t.push(`Model name cannot be only whitespace`),{isValid:t.length===0,errors:t}}static validateApiKey(e){let t=[];return!e||typeof e!=`string`?(t.push(`API key must be a non-empty string`),{isValid:!1,errors:t}):(e.length<10&&t.push(`API key appears to be too short`),/\s/.test(e)&&t.push(`API key should not contain whitespace`),{isValid:t.length===0,errors:t,warnings:[]})}};const ln=cn.validateAgentConfig,un=cn.validateUserInput,dn=cn.validateProviderName,fn=cn.validateModelName,pn=cn.validateApiKey;var mn=class{static isRecoverable(e){return e instanceof y&&e.recoverable}static getErrorCode(e){return e instanceof y?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof y?e:e instanceof Error?new o(e.message||t):new o(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new i(`Failed to ${n}`,t,r,{operation:n})}},I=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},L=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},R=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function z(e){return e instanceof I||e instanceof R||e instanceof L}function hn(e,t){return e instanceof I?e:t instanceof I?t:e instanceof R?e:t instanceof R?t:e instanceof L&&t instanceof L?new L([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof L?e:t}const gn=new Set([`rate_limit_error`]),_n=new Set([`overloaded_error`]),vn=new Set([`authentication_error`,`permission_error`]),yn=new Set([`model_not_found`]),bn=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),xn=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),Sn=[/\bmodel:\s*\S/i,/\bmodels?\b[^.\n]{0,80}\b(?:not found|does not exist|doesn't exist|is not available|not available|unavailable|unrecognized|not recognized|unknown)\b/i,/\b(?:no such model|unknown model|invalid model|unrecognized model|model not found)\b/i];function Cn(e){return Sn.some(t=>t.test(e))}const wn=`[^\\s,;)"]+`;function Tn(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${wn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${wn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${wn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${wn}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function B(e){return typeof e==`object`&&e?e:void 0}function En(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function Dn(e){let t=B(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,r=B(t.error),i=B(r?.error),a=En(r,`type`),o=En(t,`type`)??En(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof y)?En(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function On(e){let t=B(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function kn(e){return an(e)||On(e)===`APIUserAbortError`}function An(e){let t=B(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):B(t)?.[`retry-after`]??B(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function jn(e){if(e.status!==void 0||e.type!==void 0)return{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}}function Mn(t,n,r){if(t instanceof y||kn(t))return t;let a=t instanceof Error?t:Error(typeof t==`string`?t:``),o=Dn(t),s=Tn(a.message||`request failed`),l=jn(o);if(o.status===429||o.type!==void 0&&gn.has(o.type))return new e(s||`${n} rate limit exceeded.`,An(t),n,l);if(o.status===401||o.status===403||o.type!==void 0&&vn.has(o.type))return new g(s,n,l);let u=o.status===void 0||o.status===400||o.status===404,d=In(t)||o.type!==void 0&&yn.has(o.type)||Cn(s);return u&&d?new T(void 0,n,void 0,{...l,originalMessage:s}):Nn(t)?new c(s,a,l,n):new i(`${r}: ${s}`,n,a,void 0,o)}function Nn(e){if(e instanceof c)return!0;let t=B(e);if(t===void 0)return!1;let n=En(t,`code`);if(n!==void 0&&bn.has(n))return!0;let r=On(e);if(r!==void 0&&xn.has(r))return!0;let i=En(t,`name`);return i!==void 0&&xn.has(i)?!0:i===`TypeError`&&En(t,`message`)===`fetch failed`}function Pn(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=B(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const V=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function Fn(e){return e instanceof i?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:Dn(e)}function In(e){if(e instanceof y)return!1;let t=En(B(e),`code`);return t!==void 0&&yn.has(t)}function Ln(t){if(t instanceof e)return V(!1,`rate-limit`);if(t instanceof g)return V(!1,`authentication`);if(t instanceof T)return V(!0,`model-unavailable`);let{status:n,type:r}=Fn(t);return n===429||r!==void 0&&gn.has(r)?V(!1,`rate-limit`):n===401||n===403||r!==void 0&&vn.has(r)?V(!1,`authentication`):n===402?V(!1,`billing`):(n===void 0||n===400||n===404)&&(In(t)||r!==void 0&&yn.has(r))?V(!0,`model-unavailable`):Nn(t)?V(!1,`network`):n===529||r!==void 0&&_n.has(r)?V(!0,`overloaded`):n===503?V(!0,`service-unavailable`):n===500||n===502||n===504?V(!0,`server-error`):n===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:n===400||n===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function Rn(e,t){let n=Pn(e);if(t?.aborted===!0||n.some(e=>kn(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=Ln(e);if(t.kind!==`none`){if(r===void 0&&t.kind===`definitive`)return t.classification;if(r===void 0){r=t.classification;continue}if(t.kind===`definitive`)return t.classification.reason===`model-unavailable`?t.classification:r}}return r??{switchable:!1,reason:`unknown`}}function zn(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function Bn(e){e&&clearInterval(e)}async function H(e,t){try{await e.append(structuredClone(t))}catch(e){throw new I(t,e)}}function Vn(e){return{...e.model!==void 0&&{model:e.model},...e.tools!==void 0&&{tools:e.tools},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.temperature!==void 0&&{temperature:e.temperature},...e.effort!==void 0&&{effort:e.effort},...e.toolChoice!==void 0&&{toolChoice:e.toolChoice},...e.nativeWebTools!==void 0&&{nativeWebTools:e.nativeWebTools},...e.responseFormat!==void 0&&{responseFormat:e.responseFormat}}}async function Hn(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await H(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Vn(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await H(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await H(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Un(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Wn(e){let t=Gn(e);return t.typeName===`ZodObject`?t:void 0}function Gn(e){let t=e;for(let e=0;e<=64;e+=1){let e=t.typeName===`ZodEffects`?t.schema:t.typeName===`ZodOptional`||t.typeName===`ZodNullable`||t.typeName===`ZodDefault`?t.innerType:void 0;if(!e)return t;t=Kn(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function Kn(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function qn(e){if(typeof e==`string`)return`string`;if(typeof e==`number`)return`number`;if(typeof e==`boolean`)return`boolean`;if(e===null)return`null`}function Jn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);let n=t;for(let e=0;n.typeName===`ZodEffects`&&e<=64&&n.schema;e+=1)n=Kn(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Yn(e){let t=Kn(e,`Zod schema`);if(!t.values||!Array.isArray(t.values))throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return t.values}function Xn(e){let t=Kn(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Zn(e){let t=Kn(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Qn(e,t={}){let n=Kn(e,`Zod schema`),r=Wn(n);if(!r)throw Error(`Zod schema root must be an object; got ${String(n.typeName)}. Wrap the fields in z.object({ … }) before converting.`);return $n(r,t.allowAdditionalProperties)}function $n(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=er(a,t),Jn(a)&&r.push(e);let a=Un(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function er(e,t){let n=Kn(e,`Zod type`),r={};switch(n.description&&(r.description=n.description),n.typeName){case`ZodString`:return{type:`string`,...r};case`ZodNumber`:return{type:`number`,...r};case`ZodBoolean`:return{type:`boolean`,...r};case`ZodArray`:if(!n.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:er(n.type,t),...r};case`ZodObject`:return{...$n(n,t),...r};case`ZodEnum`:{let e=n.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...r}}case`ZodNativeEnum`:return{...nr(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...tr(n.value),...r};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(n.typeName)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>er(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...er(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[er(n.innerType,t),{type:`null`}],...r};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(n.typeName)} is missing innerType; cannot convert to JSON schema.`);return{...er(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:er(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(ir(String(n.typeName)))}}function tr(e){let t=qn(e);if(!t)throw Error(`ZodLiteral value ${String(e)} is not a JSON primitive; cannot convert to JSON schema.`);return t===`null`?{type:`null`}:{type:t,enum:[e]}}function nr(e){if(!e||typeof e!=`object`)throw Error(`ZodNativeEnum is missing enum values; cannot convert to JSON schema.`);let t=Array.isArray(e)?e:Object.values(e),n=t.filter(e=>typeof e==`number`),r=n.length>0?n:t;if(r.length===0)throw Error(`ZodNativeEnum declares no members; cannot convert to JSON schema.`);return{type:n.length>0?`number`:`string`,enum:r}}const rr={ZodTuple:"a tuple needs positional `items`, and the subset models `items` as ONE schema — use `z.object({...})` for a fixed-shape record, or `z.array(z.union([...]))` if order genuinely does not matter",ZodIntersection:"an intersection needs `allOf` — merge the two object schemas yourself with `.merge()`, which produces a single object node the subset can carry",ZodLazy:"a recursive schema needs `$ref` — flatten the recursion to a fixed depth, or model the nested level as `z.record(...)`",ZodDate:"use `z.string()` (optionally with `.datetime()`), which is what a provider receives"};function ir(e){return`${e} cannot be carried by the universal JSON-schema subset: ${rr[e]??`it has no representation in the subset`}. The subset is the one language every provider mapper forwards intact; a construct outside it would be advertised to the model and enforced by nothing.`}function ar(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function or(e){if(e&&typeof e==`object`&&`issues`in e){let t=e.issues;if(Array.isArray(t))return t.map(e=>{if(e&&typeof e==`object`&&`message`in e){let t=Array.isArray(e.path)?e.path.join(`.`):``,n=String(e.message);return t?`${t}: ${n}`:n}return String(e)})}return[String(e)]}function sr(e){if(ar(e))return{name:`structured_output`,jsonSchema:Qn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:or(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=cr(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function cr(e,t,n){let r=[],i=e.type;if(e.anyOf)return ur(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${dr(t)}`];let i=t,a=e.required??[];for(let e of a)e in i||r.push(`${n}.${e}: required property missing`);let o=e.properties??{};for(let[e,t]of Object.entries(o))e in i&&r.push(...cr(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(lr(e))for(let e of Object.keys(i))e in o||r.push(`${n}.${e}: unexpected additional property`);else if(typeof s==`object`)for(let[e,t]of Object.entries(i))e in o||r.push(...cr(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${dr(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...cr(i,e,`${n}[${t}]`))}),r}case`string`:return typeof t==`string`?(e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${JSON.stringify(t)} is not one of the allowed enum values`),e.pattern&&!new RegExp(e.pattern).test(t)&&r.push(`${n}: value does not match pattern ${e.pattern}`),r):[`${n}: expected string, got ${dr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${dr(t)}`]:(i===`integer`&&!Number.isInteger(t)&&r.push(`${n}: expected integer, got non-integer number`),e.minimum!==void 0&&t<e.minimum&&r.push(`${n}: value ${t} is below minimum ${e.minimum}`),e.maximum!==void 0&&t>e.maximum&&r.push(`${n}: value ${t} is above maximum ${e.maximum}`),e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${t} is not one of the allowed enum values`),r);case`boolean`:return typeof t==`boolean`?r:[`${n}: expected boolean, got ${dr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${dr(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function lr(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function ur(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>cr(e,t,`${n}|anyOf[${r}]`));return r.some(e=>e.length===0)?[]:[`${n}: value matches none of the ${e.length} allowed shapes`,...r.flat()]}function dr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function fr(e){let t=e.trim(),n=/^```(?:json)?[^\S\n]*\n([\s\S]*?)\n?```$/.exec(t),r=n?n[1]:t;try{return{success:!0,value:JSON.parse(r)}}catch(e){return{success:!1,issue:`response is not valid JSON: ${e instanceof Error?e.message:String(e)}`}}}function pr(e,t){return Se(e,t,`json_schema`)===!0?`response_schema`:Se(e,t,`json_object`)===!0?`json_object`:`none`}function mr(e){let{table:t,model:n,endpointIsVendorDefault:r}=e;if(!t)return r===!1?{mechanism:`response_schema`,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured and the provider declares no capability table, so nothing here can claim the endpoint enforces the schema`}:{mechanism:`response_schema`,provenance:`undeclared`,reason:`the provider declares no capability table, so the request is sent as asked — silence is not a denial`};let i=pr(t,n),a=t.deviations?.[n]!==void 0;return r===!1?{mechanism:i,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured, so the vendor capability table describes the protocol but not necessarily the endpoint serving it`}:{mechanism:i,provenance:a?`catalog`:`vendor-default`,...i===`none`&&{reason:`${n} declares no schema transport, so the schema travels in the prompt and is enforced by validation`},...i===`json_object`&&{reason:`${n} guarantees JSON but not its shape, so the schema travels in the prompt and is enforced by validation`}}}const hr=e=>process.env[e];function gr(e){return t=>e[t]}function _r(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function vr(e,t={},n=hr){let r=e.credentialRequirement,i=t.baseUrl??_r(r?.baseUrlEnvVars,n)??e.defaults?.baseUrl;if(r===void 0)return{ok:!0,config:{...i===void 0?{}:{baseUrl:i},...t.imageCapableModels===void 0?{}:{imageCapableModels:t.imageCapableModels}}};let a=_r(r.credentialEnvVars,n),o=[];return a===void 0&&o.push(...r.credentialEnvVars),r.requiresBaseUrl===!0&&i===void 0&&o.push(...r.baseUrlEnvVars??[]),o.length>0?{ok:!1,missing:o}:{ok:!0,config:{...a===void 0?{}:{credential:a},...i===void 0?{}:{baseUrl:i},...t.imageCapableModels===void 0?{}:{imageCapableModels:t.imageCapableModels}}}}function yr(e,t={},n=hr){if(e.createImageProvider===void 0)return;let r=vr(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return we(t)?t:void 0}catch{return}}function br(e,t={},n=hr){if(e.createVideoProvider===void 0)return;let r=vr(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return Te(t)?t:void 0}catch{return}}const xr=`$ENV:`;function Sr(e){return e.startsWith(xr)}function Cr(e){return`${xr}${e}`}function wr(e,t=hr){if(!Sr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Tr(e,t=hr){return e===void 0||e.length===0?!1:wr(e,t)!==void 0}function Er(e,t,n=hr){let r=ve(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);if(e.apiKeyRef!==void 0&&e.apiKey!==void 0)throw Error(`Provider ${e.name} has conflicting credential origins`);if(e.apiKeyRef!==void 0&&(!e.apiKeyRef.service?.trim()||!e.apiKeyRef.account?.trim()))throw Error(`Provider ${e.name} has an invalid host credential reference`);let a=e.apiKeyRef===void 0?e.apiKey??r.apiKey:void 0,o=a!==void 0&&Sr(a)?a.slice(5).trim():void 0;if(o===``)throw Error(`Provider ${e.name} has an invalid API key environment reference; use $ENV:VARIABLE_NAME`);let s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:wr(a,n),...o?{apiKeyEnv:o}:{},...e.apiKeyRef===void 0?{}:{apiKeyRef:e.apiKeyRef},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function Dr(e,t){if(e.apiKeyRef!==void 0&&!e.apiKey)throw Error(`Provider ${e.name} requires host credential resolution before construction`);let n=ve(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${ye(t)}`);let r=be(n);if(r!==void 0&&!Or(e,r))throw Error(`Provider ${e.name} requires ${Ar(r)}`);return n.createProvider(e)}function Or(e,t){return t.anyOf.some(t=>kr(e,t))}function kr(e,t){let n=e[t];return n!==void 0&&n.length>0}function Ar(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function U(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function jr(e,t){let n={id:U(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Mr(e,t){let n={id:U(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Nr(e,t){let n={id:U(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Pr(e,t){let n={id:U(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var Fr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Qe(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(jr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Mr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Nr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>Xe(e)&&nt(Ze(e)),i=this.entries.filter(e=>!r(e)),a=Qe(Nr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Pr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Xe).map(Ze)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Xe).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Xe);if(e.length<=this.maxMessages)return;let t=e.map(Ze),n=t.filter(nt),r=t.filter(e=>!nt(e)),i=Math.max(0,this.maxMessages-n.length),a=[...n,...r.slice(-i)],o=new Set(a.map(e=>e.id));this.entries=this.entries.filter(e=>!Xe(e)||o.has(e.id))}},Ir=class{history;pendingAssistant=null;constructor(e=0){this.history=new Fr({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:U(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return tt(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
2
|
+
|
|
3
|
+
[This response was interrupted by the user]`),tt(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),rt(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Lr=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=k(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new Ir(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug(`Removed conversation`,{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug(`Cleared all conversations`,{removedCount:e})}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((e,t)=>e+t.getMessageCount(),0);return{totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e)}};function Rr(){let e,t=0;return{observe(n){t+=1,t===1&&(e=n)},terminal(n){if(t>1)throw Error(`Provider "${n}" emitted ${t} model-effort outcomes`);return e}}}function zr(e,t,n){if(n!==void 0&&t?.onModelEffortOutcome!==void 0)try{t.onModelEffortOutcome(n)}catch(t){e.warn(`Model-effort outcome observer failed`,{error:t instanceof Error?t.message:String(t)})}}var Br=class extends tn{name=`local`;version=`1.0.0`;providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:!1,...e}}registerProvider(e,t){this.providers.set(e,t)}unregisterProvider(e){this.providers.delete(e)}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.requireChatProvider(e);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let n=Rr(),r=await this.withRetry(async()=>(n=Rr(),await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}}),this.config.timeout)),this.config.maxRetries,this.config.retryDelay);if(r.role!==`assistant`)throw Error(`Expected assistant message, got ${r.role}`);let i=n.terminal(e.provider);return this.validateResponse(r),zr(this.logger,e.options,i),{message:r,...i!==void 0&&{modelEffortOutcome:i}}}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Chat execution failed`,n,{provider:e.provider,model:e.model}),n}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let n=Rr(),r=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}});for await(let e of r)this.validateResponse(e),yield{kind:`message`,message:e};let i=n.terminal(e.provider);zr(this.logger,e.options,i),yield{kind:`terminal`,...i!==void 0&&{modelEffortOutcome:i}}}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Streaming chat execution failed`,n,{provider:e.provider,model:e.model}),n}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return!0;return!1}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return!1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return!1;return!0}catch{return!1}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear()}requireChatProvider(e){let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw Error(`Provider "${e.provider}" does not implement chat method`);return t}};const Vr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Hr(e){return Vr.test(e)?e:void 0}var Ur=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Wr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new w(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new w(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new w(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Gr(e,t,n,r,i){try{await e.listener(t)}catch(a){if(n.incrementErrors(),!r)throw a instanceof Error?a:Error(String(a));i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)})}}async function Kr(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function qr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Jr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=qr(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function Yr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new w(`Maximum listeners (${a}) exceeded for event type: ${t}`,o,{eventType:t,currentListeners:s.length});s.push({id:n,listener:r,once:i?.once??!1,...i?.filter&&{filter:i.filter}})}function Xr(e,t,n){let r=e.get(t);if(!r)return!1;let i=typeof n==`string`?r.findIndex(e=>e.id===n):r.findIndex(e=>e.listener===n);return i===-1?!1:(r.splice(i,1),!0)}function Zr(e,t,n){let r=t.result!==null&&t.result!==void 0;return{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.name||``,toolId:t.id||``,toolResult:r?String(t.result):void 0,duration:n,success:r}}}var Qr=class extends en{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=k(`EventEmitterPlugin`),this.metrics=e.metrics??new Ur,Wr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[F.AGENT_EXECUTION_START,F.AGENT_EXECUTION_COMPLETE,F.AGENT_EXECUTION_ERROR,F.TOOL_BEFORE_EXECUTE,F.TOOL_AFTER_EXECUTE,F.TOOL_SUCCESS,F.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??Wt.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer().catch(e=>{this.logger.error(`Buffered flush failed`,{error:e instanceof Error?e.message:String(e)})})},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(F.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(F.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(F.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(F.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(F.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?F.TOOL_ERROR:F.TOOL_SUCCESS,i=Zr(e,n,t.duration);await this.emit(r,i),await this.emit(F.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(F.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Yr(this.handlers,e,r,t,n,this.pluginOptions.maxListeners,this.name),r}once(e,t,n){return this.on(e,t,{once:!0,...n&&{filter:n}})}off(e,t){return Xr(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let n={type:e,timestamp:new Date,...t},r=this.pluginOptions.filters[e];if(!(r&&!r(n))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(n),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&await this.flushBuffer();return}await this.processEvent(n)}}async processEvent(e){await Kr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Gr(e,t,this.metrics,this.pluginOptions.catchErrors,this.logger))}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t)}getStats(){return Jr(super.getStats(),this.handlers,this.eventBuffer.length,this.metrics)}clearAllListeners(){this.handlers.clear()}async dispose(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners(),await super.dispose()}};const $r=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var ei=class{tools=new Map;register(e){if(!e.schema?.name)throw new r(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&A.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),A.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){A.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),A.debug(`Tool "${e}" unregistered successfully`)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return A.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),A.debug(`Cleared ${e} tools from registry`)}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e==`string`?new RegExp(e):e;return this.getAll().filter(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new r(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new r(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new r(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new r(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))ti(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new r(`Required parameter "${n}" is not defined in properties`)}}};function ti(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new r(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>ti(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new r(`Parameter "${e}" must declare a type or anyOf`);if(!$r.includes(t.type))throw new r(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))ti(`${e}.${n}`,r);t.items&&ti(`${e}[]`,t.items)}function ni(e,n,r){let i=cr(r,n,`$`);if(i.length>0)throw new t(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function ri(e,t,n){let r=ii(e,t,n);return r?[r]:cr(n,t,`Parameter "${e}"`)}function ii(e,t,n){if(n.anyOf)return;let r=n.type;switch(r){case`string`:return typeof t==`string`?void 0:`Parameter "${e}" must be a string, got ${ai(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${ai(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${ai(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${ai(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${ai(t)}`;case`null`:return;case void 0:return`Parameter "${e}" declares neither a type nor anyOf`;default:return`Parameter "${e}" has unsupported schema type "${String(r)}"`}}function ai(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function oi(e,t,n,r){let i=[];for(let n of t)n in e||i.push(`Missing required parameter: ${n}`);for(let[t,a]of Object.entries(e)){let e=n[t];if(!e){if(r===!0)continue;if(r&&typeof r==`object`){i.push(...ri(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...ri(t,a,e))}return i}function si(e,t,n,r){let i=oi(e,t,n,r);return{isValid:i.length===0,errors:i}}var ci=class{listeners=new Set;subscribe(e){this.listeners.add(e)}unsubscribe(e){this.listeners.delete(e)}notifyListeners(e,t,n){for(let r of this.listeners)r(e,t,n)}},li=class extends ci{emit(e,t,n){}};const ui=new li;function di(e){return e===ui||e instanceof li}function fi(e,t){if(!e||e.trim().length===0)throw Error(`[EVENTS] ownerType is required to compose event names.`);if(e.includes(`.`))throw Error(`[EVENTS] ownerType must not contain '.': "${e}"`);if(!t||t.trim().length===0)throw Error(`[EVENTS] local event name is required.`);if(t.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${t}"`);return`${e}.${t}`}function pi(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var mi=class extends ci{base;binding;constructor(e,t){super(),this.base=e,this.binding=t}emit(e,t,n){if(e.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let r={...n,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:n?.spanId??pi()},i=fi(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function W(e,t){return new mi(e,t)}function hi(e,t){return W(e,t)}var gi=class extends ci{emit(e,t,n){this.notifyListeners(e,t,n)}};const _i={COMPLETED:`span_completed`},vi={COMPLETED:`provider_call_completed`},yi={SWITCHED:`provider_fallback`};function bi(e){let{fromProvider:t,fromModel:n,toProvider:r,toModel:i,reason:a}=e;if(typeof t==`string`&&typeof n==`string`&&typeof r==`string`&&typeof i==`string`&&typeof a==`string`)return{from:{provider:t,model:n},to:{provider:r,model:i},reason:a}}const xi={COMPLETED:`tool_body_completed`},Si={COMPLETED:`tool_queue_completed`},Ci={DECIDED:`tool_permission_decided`},wi=`span`;var Ti=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(n,r){return new e(n,async(e,i)=>{let a=await r(e,i);if(!a.success)throw new t(a.error??`Tool execution failed`,n.name);if(a.data===void 0)throw new t(`Tool execution succeeded but returned no data`,n.name);return a.data},r)}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,n){let i=this.schema.name;if(!this.validate(e))throw new r(`Invalid parameters for tool "${i}": ${oi(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o,s;try{this.resultExecutor?(s=await this.resultExecutor(e,n),o=s.data):o=await this.fn(e,n)}catch(a){throw z(a)||a instanceof t||a instanceof r?a:new t(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,i,a instanceof Error?a:Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!n})}let c=Date.now()-a;this.schema.outputSchema&&(!s||s.success)&&ni(i,o,this.schema.outputSchema);let l=n?.instanceEventService??this.eventService;if(l){let e={timestamp:new Date,spanId:pi(),durationMs:c,op:i};l.emit(_i.COMPLETED,e)}return s||{success:!0,data:o,metadata:{executionTime:c,toolName:i,parameters:e}}}validate(e){return oi(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return si(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new r(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new r(`Tool function is required and must be a function`);if(!this.schema.name)throw new r(`Tool schema must have a name`)}};const Ei=`at least one tool must stay resident; all tools cannot be deferred`,Di=`a tool schema was withheld but no ${Oe} tool is offered; register the loader or turn tool search off`;function Oi(e){return e.deferLoading===!0}function ki(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!Oi(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Ei);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Di);return r}function Ai(e){if(e.length>0&&e.every(Oi))throw Error(Ei)}var ji=class extends Ue{moduleManager;pluginManager;get name(){return this.config.name}addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};async function Mi(e,t,n){let{beforeToolEffect:r,...i}=n;return r?e.executeWithAdmission?e.executeWithAdmission(t,i,r):(await r(t),i.signal?.throwIfAborted(),e.execute(t,i)):e.execute(t,n)}function Ni(e){if(!e.name)throw new o(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new o(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new o(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new o(`Default model must specify both provider and model`,{component:`ConversationAgent`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new o(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`ConversationAgent`,duplicates:n});if(e.providerOwnership!==void 0){if(!e.providerOwnership||typeof e.providerOwnership!=`object`||Object.getPrototypeOf(e.providerOwnership)!==Object.prototype&&Object.getPrototypeOf(e.providerOwnership)!==null)throw new o(`Provider ownership must be a registration-name record`);for(let[n,r]of Object.entries(e.providerOwnership))if(!t.includes(n)||r!==`owned`&&r!==`borrowed`)throw new o(`Invalid provider ownership for registration '${n}'`)}if(!t.includes(e.defaultModel.provider))throw new o(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Pi=class{logger;getAIProviders;getTools;getEventService;ensureReady;getConfig;setConfig;getConfigVersion;bumpConfigVersion;getConfigUpdatedAt;setConfigUpdatedAt;emitAgentEvent;constructor(e,t,n,r,i,a,o,s,c,l,u,d){this.logger=e,this.getAIProviders=t,this.getTools=n,this.getEventService=r,this.ensureReady=i,this.getConfig=a,this.setConfig=o,this.getConfigVersion=s,this.bumpConfigVersion=c,this.getConfigUpdatedAt=l,this.setConfigUpdatedAt=u,this.emitAgentEvent=d}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new o(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addResultTool(r.schema,async(e,t)=>{if(!t)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Mi(r,e,t)},r.provenance);let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(j.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new o("updateConfiguration: only `tools` and `name` are supported")}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new o(`Both provider and model are required`,{component:`ConversationAgent`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new o(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`ConversationAgent`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new o(`No provider is currently set`,{component:`ConversationAgent`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Mi(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Fi=class extends We{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new ei,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){A.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,A.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new Ti(e,t);this.registry.register(n),A.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=Ti.fromResult(e,t);Object.defineProperty(r,"provenance",{value:Ve(n),enumerable:!0}),this.registry.register(r)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return ki(this.getTools(),this.loadedDeferredTools,this.resolveToolSearchMode())}isToolOffered(e){return this.getOfferedTools().some(t=>t.name===e)}getLoadedDeferredTools(){return[...this.loadedDeferredTools].sort()}listDeferredTools(){return this.resolveToolSearchMode()===`off`?[]:this.getTools().filter(e=>Oi(e)&&!this.loadedDeferredTools.has(e.name))}loadDeferredTools(e){this.ensureInitialized();let n=e.map(e=>{let n=this.isToolVisible(e)?this.registry.get(e)?.schema:void 0;if(!n)throw new t(`Tool "${e}" is not registered, so it cannot be loaded`,e);return n});for(let e of n)Oi(e)&&this.loadedDeferredTools.add(e.name);return n}async executeTool(e,n,r){let i=await this.executeToolResult(e,n,r);if(!i.success)throw new t(i.error||`Tool execution failed`,e);if(i.data===void 0)throw new t(`Tool execution succeeded but returned no data`,e);return i.data}async executeToolResult(e,n,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new t(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new t(`Tool "${e}" is not registered`,e);let a=Ve(i.provenance),o;try{o=await i.execute(n,r)}catch(n){throw z(n)?n:n instanceof Error?new t(n.message,e,n):new t(String(n),e)}return He(o,a)}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],A.debug(`Set allowed tools: ${e.join(`, `)}`)}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};function Ii(e){let t=Li(e.metadata),n=zi(e.usage);return t??n}function Li(e){if(!e)return;let t=zi({inputTokens:Bi(e,`inputTokens`),outputTokens:Bi(e,`outputTokens`),promptTokens:Bi(e,`promptTokens`),completionTokens:Bi(e,`completionTokens`),totalTokens:Bi(e,`totalTokens`),cacheReadTokens:Bi(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Ri(n);if(Hi(n))return zi(n)}function Ri(e){try{return zi(JSON.parse(e))}catch{return}}function zi(e){if(!e)return;let t=Vi(e.inputTokens,e.promptTokens),n=Vi(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Vi(e.totalTokens),i=Vi(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Bi(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Vi(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Hi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const Ui=4;function Wi(e){return Math.ceil(JSON.stringify(e).length/4)}function Gi(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Ki(e,t={}){let n=Wi(e),r=qi(e),i=r?.tokens,a=Ji(t.usageFloorTokens),o=r?.index===e.length-1,s=r?r.tokens+(o?0:Wi(e.slice(r.index+1))):0;return{usedTokens:o?Math.max(i??0,a??0):Math.max(n,s,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function qi(e){for(let t=e.length-1;t>=0;t--){let n=Ii(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Ji(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Yi=k(`agent-core:models`),Xi=new Set;function Zi(e,t,n){let r=`${e}:${t}`;Xi.has(r)||(Xi.add(r),Yi.warn(`No metadata registered for model "${e}"; using the default ${t} of ${n}. This number belongs to a different vendor's models — register the model through registerModelMetadata() from the package that owns it. (NEUT-010)`))}const Qi=2e5,$i=new Map;function ea(...e){for(let t of e){let e=$i.get(t.id);e&&!ta(e,t)&&Yi.warn(`Model "${t.id}" was already registered with different metadata (context window ${e.contextWindow} -> ${t.contextWindow}, max output ${e.maxOutput} -> ${t.maxOutput}). The later registration wins; one of the two owners is wrong. (NEUT-010)`),$i.set(t.id,t)}}function ta(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function na(e){return $i.get(e)}function ra(e){let t=na(e)?.contextWindow;return t===void 0?(Zi(e,`context window`,Qi),Qi):t}const ia=16384;function aa(e){let t=na(e)?.maxOutput;return t===void 0?(Zi(e,`max output`,ia),ia):t}function oa(e){return na(e)?.name??e}function sa(e){if(e>=1e6){let t=e/1e6;return Number.isInteger(t)?`${t}M`:`${parseFloat(t.toFixed(1))}M`}if(e<=0)return`0K`;if(e<1e3)return`<1K`;let t=e/1e3;return Number.isInteger(t)?`${t}K`:`${parseFloat(t.toFixed(1))}K`}function ca(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(Oi);return i.length===0?`off`:i.length>15||Gi(i)/ra(t)>=.1?`on`:`off`}function la(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function ua(e){let t=new Fi({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:ca(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var da=class{agentName;moduleRegistry;logger;isReady;ensureReady;constructor(e,t,n,r,i){this.agentName=e,this.moduleRegistry=t,this.logger=n,this.isReady=r,this.ensureReady=i}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??!0,validateDependencies:t?.validateDependencies??!0}),this.logger.info(`Module registered`,{moduleName:e.name,moduleType:e.getModuleType().type})}async unregisterModule(e){if(!this.isReady())return!1;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info(`Module unregistered`,{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):!1}async executeModule(e,t){await this.ensureReady();let n={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,n)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}},fa=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new o(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function pa(e){return{moduleManager:new da(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new fa(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Pi(e.getLogger(),e.getAiProviders,e.getTools,e.getEventService,e.ensureFullyInitialized,e.getConfig,t=>e.setConfig(t),e.getConfigVersion,e.incrementConfigVersion,e.getConfigUpdatedAt,t=>e.setConfigUpdatedAt(t),(t,n)=>e.emitAgentEvent(t,n))}}const ma={ASSIGNED:`assigned`,COMPLETED:`completed`},ha=`task`,ga={MESSAGE:`message`,INPUT:`input`},_a=`user`;function va(e,t){let n=Array.isArray(e.tools)?e.tools.map(e=>{let t=e?.schema?.name;if(typeof t==`string`&&t.length>0)return t;let n=e?.name;return typeof n==`string`&&n.length>0?n:``}).filter(e=>typeof e==`string`&&e.length>0):[];t(j.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function ya(e,t,n,r,i){di(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Gt,ownerId:t,ownerPath:xa(t,n)})}function ba(){return new Qr({enabled:!0,events:[F.MODULE_INITIALIZE_START,F.MODULE_INITIALIZE_COMPLETE,F.MODULE_INITIALIZE_ERROR,F.MODULE_EXECUTION_START,F.MODULE_EXECUTION_COMPLETE,F.MODULE_EXECUTION_ERROR,F.MODULE_DISPOSE_START,F.MODULE_DISPOSE_COMPLETE,F.MODULE_DISPOSE_ERROR]})}function xa(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Sa(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onThinkingDelta&&{onThinkingDelta:t.onThinkingDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function Ca(e,t,n={},r){try{e.emitAgentEvent(j.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,Sa(e,n));if(e.logger.debug(`ConversationAgent execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(j.EXECUTION_COMPLETE,{}),o.response;if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return e.emitAgentEvent(j.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof L?t:(e.logger.error(`ConversationAgent execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*wa(e,t,n={},r){let i=!1;try{e.emitAgentEvent(j.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,Sa(e,n));if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return o.response}catch(t){throw t instanceof L?(i=!0,t):(e.logger.error(`ConversationAgent streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(j.EXECUTION_COMPLETE,{})}}function Ta(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Ea(e,t){return[`Your previous response did not match the required JSON schema.`,`Validation issues:`,...t.map(e=>`- ${e}`),``,`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e.jsonSchema)].join(`
|
|
4
|
+
`)}async function Da(e,t,r,i){let a=(r.outputRetries??2)+1,o=Ta(i),s=t,c=[];for(let t=1;t<=a;t++){let n=ka(i,await Ca(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=Ea(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*Oa(e,t,r,i){let a=(r.outputRetries??2)+1,o=Ta(i),s=t,c=[];for(let t=1;t<=a;t++){let n=ka(i,yield*wa(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=Ea(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}function ka(e,t){let n=fr(t);if(!n.success)return{success:!1,issues:[n.issue]};let r=e.validate(n.value);return r.success?{success:!0,value:r.value}:{success:!1,issues:r.issues}}function Aa(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.parts===void 0?{}:{parts:structuredClone(e.parts)},...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function ja(e,t){return e.getConversationStore(t).getHistory()}function Ma(e,t,n){e.getConversationStore(t).addEntry(n)}function Na(e,t){e.getConversationStore(t).clear()}function Pa(e,t,n,r,i){let a=e.getConversationStore(t);n===`tool`&&i?.toolCallId?a.addToolMessageWithId(r,i.toolCallId,i.name??`unknown`):n===`assistant`?a.addAssistantMessage(r,[]):n===`system`?a.addSystemMessage(r):a.addUserMessage(r)}function Fa(e,t,n){e.getConversationStore(t).addMessage(n)}var Ia=class extends We{providers=new Map;retirements=new Set;closing=new WeakMap;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){A.debug(`AIProviders initialized`)}async doDispose(){let e=[...this.providers.entries()];this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0;for(let[t,n]of e)n.ownership===`owned`&&this.retire(t,n.provider);await Promise.all(this.retirements),A.debug(`AIProviders disposed`)}retire(e,t){if(this.closing.has(t))return;let n=Promise.resolve().then(()=>t.close?.()).catch(t=>{A.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}).finally(()=>{this.retirements.delete(n),this.closing.delete(t)});this.closing.set(t,n),this.retirements.add(n)}addProvider(e,t,n={}){this.ensureInitialized();let i=cn.validateProviderName(e);if(!i.isValid)throw new r(`Invalid provider name: ${i.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new r(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new r(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new r(`Provider must have a chat method`);let a=n.ownership===void 0?`owned`:n.ownership;if(a!==`owned`&&a!==`borrowed`)throw new r(`Provider ownership must be owned or borrowed`);this.providers.has(e)&&A.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.provider.name});let o=this.providers.get(e);this.providers.set(e,{provider:t,ownership:a}),o?.ownership===`owned`&&o.provider!==t&&this.retire(e,o.provider),A.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream==`function`})}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){A.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);this.providers.delete(e),t?.ownership===`owned`&&this.retire(e,t.provider),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,A.debug(`Cleared current provider selection after removing "${e}"`)),A.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)?.provider}getProviders(){return this.ensureInitialized(),Object.fromEntries([...this.providers].map(([e,t])=>[e,t.provider]))}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new o(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,A.debug(`Current AI provider set to "${e}" with model "${t}"`)}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return{provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)?.provider}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r.provider);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t)?.provider;return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},La=class{build(e,t,n,r){let i=e.map(e=>({role:e.role,content:e.content})),a=JSON.stringify({messages:i,model:t,provider:n,temperature:r?.temperature,maxTokens:r?.maxTokens,effortCacheIdentity:r?.effortCacheIdentity??null});return{hash:this.sha256(a),model:t,provider:n}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new ae(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Ra=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new La;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let n=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==n)throw this.cache.delete(e),this.removeFromAccessOrder(e),new p(`Integrity check failed for cache entry ${e}`,{hash:e,expected:n,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t)}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),!0):!1}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0}getStats(){let e=this.hits+this.misses;return{hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e)}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1)}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e)}},za=class{storage;keyBuilder;constructor(e,t){this.storage=e,this.keyBuilder=t}lookup(e,t,n,r){let i=this.keyBuilder.build(e,t,n,r),a=this.storage.get(i.hash);return a?a.response:void 0}store(e,t,n,r,i){let a=this.keyBuilder.build(e,t,n,i);this.storage.set({key:a,response:r,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(r)})}getStats(){return this.storage.getStats()}};function Ba(e){return`executionId`in e||`toolName`in e}function Va(e){let t=0,n=!1;for(let r=0;r<e.length;r++){let i=e[r]===` `||e[r]===` `||e[r]===`
|
|
5
|
+
`||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}function Ha(e,t,n,r,i,a,o){e.emitExecution(M.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Ua(e,t,n,r){e.emitExecution(M.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:Va(t),characterCount:t.length},metadata:{messageRole:`user`,inputLength:t.length,messageType:`user_message`,hasQuestions:t.includes(`?`),containsUrgency:/urgent|asap|critical|emergency/i.test(t),estimatedComplexity:t.length>200?`high`:t.length>50?`medium`:`low`}},n,r)}function Wa(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(M.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:Va(c),responseTime:u,contentPreview:c.length>200?c.substring(0,200)+`...`:c},result:{success:!0,data:c.substring(0,100)+`...`,fullResponse:c,responseMetrics:{length:c.length,estimatedReadTime:Math.ceil(Va(c)/200),hasCodeBlocks:/```/.test(c),hasLinks:/https?:\/\//.test(c),complexity:c.length>1e3?`high`:c.length>300?`medium`:`low`}},metadata:{executionId:r,round:i,completed:!0,reason:`no_tool_calls`,responseCharacteristics:{hasQuestions:c.includes(`?`),isError:/error|fail|wrong/i.test(c),isComplete:/complete|done|finish/i.test(c),containsNumbers:/\d/.test(c)}}},()=>e.buildResponseOwnerContext(a,r,o,s),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for response event`);return W(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Ga(e,t,n,r,i,a,o,s,c,l){let u=n.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for tool results ready payload`);return e.id});if(u.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds`);let d=()=>e.buildThinkingOwnerContext(a,o,c,l),f=e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for tool results event`);return W(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(M.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(M.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var Ka=class{queuedAt=new Date().toISOString();pending;constructor(e,t){this.pending=new Set(e.filter((e,n)=>!t?.has(n)))}end(e,t){if(this.pending.delete(e))try{let n=new Date,r=n.toISOString();Promise.resolve(e.eventService?.emit(Si.COMPLETED,{executionId:e.executionId,queuedAt:this.queuedAt,timestamp:n,endedAt:r,disposition:t})).catch(()=>void 0)}catch{}}finish(){for(let e of this.pending)this.end(e,`not-dispatched`)}};function qa(e){e.wake?.(),e.changed=new Promise(t=>{e.wake=t})}function Ja(e){let t=new Set;for(let n of e.requests){let{executionId:e}=$a(n);if(t.has(e))throw new r(`Scheduling requires unique call IDs`);t.add(e)}let n=new Map;for(let[i,a]of e.scheduling){if(!t.has(i))throw new r(`Scheduling names an unknown call: ${i}`);let e=[...a.dependsOn??[]];for(let n of e)if(!t.has(n))throw new r(`Scheduling dependency is unknown: ${n}`);let o=a.resources?.map(e=>{if(typeof e.key!=`string`||!e.key.trim()||e.access!==`read`&&e.access!==`write`)throw new r(`Scheduling requires nonempty resource identities and read/write access`);return{key:e.key,access:e.access}});n.set(i,{dependsOn:e,...o===void 0?{}:{resources:o}})}let i=new Set;for(;i.size<t.size;){let e=i.size;for(let e of t)(n.get(e)?.dependsOn??[]).every(e=>i.has(e))&&i.add(e);if(i.size===e)throw new r(`Scheduling dependencies contain a cycle`)}return n}function Ya(e,t){return e?.resources===void 0||t?.resources===void 0||e.resources.some(e=>t.resources.some(t=>e.key===t.key&&(e.access===`write`||t.access===`write`)))}function Xa(e,t){let n=e.metadata?.toolProvenance;return typeof n!=`string`||typeof t.metadata?.toolProvenance==`string`?t:{...t,metadata:{...t.metadata,toolProvenance:n}}}async function Za(e,t,n){let r=e.requests[t];e.queue.end(r,`not-dispatched`),$a(r);let i=Xa(r,{executionId:r.executionId,toolName:r.toolName,success:!1,result:null,error:n,metadata:{errorCode:Xt,dispatchStatus:`not-dispatched`}});return r.eventService?.emit(N.CALL_ERROR,{timestamp:new Date,toolName:r.toolName,error:n}),await e.journal?.onResult(t,i),i}async function Qa(e,t,n){let r=new Map(e.requests.map((e,t)=>[e.executionId,t]));for(;!n.fatalError&&n.pending.size>0;){let i=n.changed,a,o;for(let t of n.pending){let i=e.requests[t],s=e.scheduling.get(i.executionId),c=(s?.dependsOn??[]).map(e=>n.resultsByIndex[r.get(e)]);if(n.errorsByIndex.some(oo)&&!e.continueOnError){a=t,o=`Skipped after an earlier call failed; this call was not dispatched`;break}if(c.some(e=>e!==void 0&&!e.success)){a=t,o=`Skipped because a required predecessor failed; this call was not dispatched`;break}if(!c.some(e=>e===void 0)&&![...n.active].some(t=>Ya(s,e.scheduling.get(e.requests[t].executionId)))){a=t;break}}if(a===void 0){await i;continue}n.pending.delete(a),n.active.add(a);try{if(o){let t=await Za(e,a,o);n.resultsByIndex[a]=t,n.errorsByIndex[a]=io(t)}else await co(e,t,n,a)}catch(e){if(!z(e))throw e;let t=hn(n.fatalError,e);z(t)&&(n.fatalError=t),e instanceof L||n.abort.abort(e)}finally{n.active.delete(a),qa(n)}}}function $a(e){if(!e.executionId)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function eo(e,t){let n=$a(e),r=U(),i=e.traceContext?l(e.traceContext,r):void 0,a=h(`shell`,e.traceContext,v(r)),o=e.traceContext?h(`hooks`,e.traceContext,e.traceContext.parentSpanId):void 0;return{toolName:e.toolName,parameters:e.parameters,...t?{signal:t}:{},executionId:n.executionId,ownerType:n.ownerType,ownerId:n.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService,...e.ask?{ask:e.ask}:{},...e.deferredTools?{deferredTools:e.deferredTools}:{},toolBodyId:r,...i?{outboundTraceContext:i}:{},...a?{shellTraceEnv:a}:{},...o?{hookTraceEnv:o}:{}}}function to(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null,metadata:{dispatchStatus:`not-dispatched`}}}function no(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function ro(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(N.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Yt,requestedTool:e.toolName,dispatchStatus:`not-dispatched`}}}function io(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function ao(e){return e!==void 0}function oo(e){return e!==void 0}function so(e,t){if(e===0)return 0;if(t===void 0||!Number.isFinite(t))return e;let n=Math.floor(t);return n<1?1:Math.min(n,e)}async function co(e,t,n,r){let i=e.requests[r];if(i)try{let a=await po(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=io(a))}catch(e){if(z(e)){let t=hn(n.fatalError,e);z(t)&&(n.fatalError=t),e instanceof L||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=no(i,t)}}async function lo(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await co(e,t,n,r)}}async function uo(e,t){let n=e;if(n.scheduling)try{n={...n,scheduling:Ja(n)}}catch(e){let t=e instanceof Error?e.message:String(e),r=[];for(let[e]of n.requests.entries()){let i=n.recoveredResults?.get(e);r.push(i?structuredClone(i):await Za(n,e,`Invalid scheduling policy: ${t}; this call was not dispatched`))}return{results:r,errors:r.filter(e=>!e.success).map(io)}}let r=new AbortController,i=n.journal||n.scheduling?{...n,signal:n.signal?AbortSignal.any([n.signal,r.signal]):r.signal}:n,a={resultsByIndex:Array(n.requests.length),errorsByIndex:Array(n.requests.length),nextRequestIndex:0,abort:r};if(n.scheduling){a.pending=new Set(n.requests.map((e,t)=>t)),a.active=new Set,qa(a);for(let[e,t]of n.recoveredResults??[])a.pending.delete(e)&&(a.resultsByIndex[e]=structuredClone(t),t.success||(a.errorsByIndex[e]=io(t)))}let o=so(n.requests.length,n.maxConcurrency),s=Array.from({length:o},()=>n.scheduling?Qa(i,t,a):lo(i,t,a));if(await Promise.all(s),a.fatalError)throw a.fatalError;let c=a.resultsByIndex.filter(ao),l=a.errorsByIndex.filter(oo);if(!n.scheduling&&l.length>0&&!n.continueOnError)throw l[0];return{results:c,errors:l}}async function fo(e,t){let n=[],r=[],i=!1;for(let[a,o]of e.requests.entries()){if(i&&!e.recoveredResults?.has(a)){try{$a(o)}catch(e){r.push(e instanceof Error?e:Error(String(e)));continue}let t=await Za(e,a,`Skipped after an earlier call failed; this call was not dispatched`);n.push(t);continue}try{let s=await po(e,t,o,a);n.push(s),s.success||r.push(io(s)),!s.success&&!e.continueOnError&&(i=!0)}catch(t){if(z(t))throw t;let n=t instanceof Error?t:Error(String(t));r.push(n),e.continueOnError||(i=!0)}}return{results:n,errors:r}}async function po(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);e.queue.end(n,e.signal?.aborted||n.argumentDecodeError!==void 0?`not-dispatched`:`admission-started`);let a,o=e.journal;if(e.signal?.aborted)a=to(n);else if(n.argumentDecodeError!==void 0)a=ro(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=to(n);else{let i={...eo(n,e.signal),...o?.continuation?{continuation:o.continuation(r)}:{},...o?.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}};e.lifecycle&&await e.lifecycle.beforeDispatch(r,i);try{a=await mo(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(z(e))throw e;a=no(n,e instanceof Error?e:Error(String(e)))}if(a.metadata?.dispatchStatus!==void 0){let{dispatchStatus:e,...t}=a.metadata;a={...a,metadata:t}}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return a=Xa(n,a),await e.journal?.onResult(r,a),a}async function mo(e,t,n){let r;try{r={result:await n()}}catch(e){r={error:e}}try{await e.journal?.settle?.(t)}catch(e){r={error:`error`in r?hn(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function ho(e,t,n){n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let r=new Ka(e.requests,e.recoveredResults),i={...e,queue:r};try{return e.scheduling||e.mode===`parallel`?await uo(e.mode===`sequential`?{...i,maxConcurrency:1}:i,t):await fo(i,t)}finally{r.finish()}}var go=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=jt){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}getLoadedDeferredTools(){return this.tools.getLoadedDeferredTools?.()}restoreLoadedDeferredTools(e){for(let t of e)if(!this.tools.hasTool(t))throw new R(`EXECUTION_RECOVERY_INVALID`,`Recovery tool is no longer registered: ${t}`);let t=new Set(this.tools.getTools().map(e=>e.name));this.tools.loadDeferredTools(e.filter(e=>t.has(e)))}setAskHandler(e){this.askHandler=e}async executeTool(e,t,n,i=`offered`){this.logger.debug(`Executing tool: ${e}`);let a;try{if(!n?.executionId)throw new r(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);a=Ve(this.tools.getTool?.(e)?.provenance),n.signal?.throwIfAborted();let o=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||o){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),r=vo(e,t,o),a=n.eventService;if(a){let t={timestamp:new Date,toolName:e,error:r};a.emit(N.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:r,toolName:e,executionId:n.executionId,metadata:{errorCode:Jt,requestedTool:e,availableTools:t}}}let s=n.eventService;if(s){let n={timestamp:new Date,toolName:e,parameters:t};s.emit(N.CALL_START,n)}let{toolName:c,parameters:l,...u}=n,d={...u,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},f=He(this.tools.executeToolResult?await this.tools.executeToolResult(e,t,d):{success:!0,data:await this.tools.executeTool(e,t,d)},a);if(!f.success){let t=f.error||`Tool execution failed`;return s?.emit(N.CALL_ERROR,{timestamp:new Date,toolName:e,error:t}),{success:!1,error:t,result:f.data,parts:f.parts,metadata:f.metadata,toolName:e,executionId:d.executionId}}if(f.data===void 0)throw Error(`Tool execution succeeded but returned no data`);let p=f.data;if(this.logger.debug(`Tool execution completed: ${e}`),s){let t={timestamp:new Date,toolName:e,result:p};s.emit(N.CALL_COMPLETE,t),s.emit(N.CALL_RESPONSE_READY,t)}return{success:!0,result:p,...f.parts?{parts:f.parts}:{},...f.metadata?{metadata:f.metadata}:{},toolName:e,executionId:d.executionId}}catch(t){if(z(t))throw t;this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(N.CALL_ERROR,t)}let o=He({success:!1,error:r.message},a);return{success:!1,error:r.message,...o.parts?{parts:o.parts}:{},...o.metadata?{metadata:o.metadata}:{},toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=_o(e.id,e.function.name,e.function.arguments);return{toolName:e.function.name,parameters:n.ok?n.parameters:{},executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:He({success:!0,metadata:t.metadataFactory?.(e)},Ve(this.tools.getTool?.(e.function.name)?.provenance)).metadata,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return ho(e,this,this.logger)}};function _o(e,t,n){let r;try{r=JSON.parse(n)}catch{return{ok:!1,error:`Failed to parse arguments for tool "${t}" (call ${e}): invalid JSON`}}return typeof r!=`object`||!r||Array.isArray(r)?{ok:!1,error:`Failed to parse arguments for tool "${t}" (call ${e}): expected a JSON object at the root, got ${r===null?`null`:Array.isArray(r)?`an array`:`a ${typeof r}`}`}:{ok:!0,parameters:r}}function vo(e,t,n){let r=t.length>0?t.join(`, `):`no registered tools are available`;return n?`Tool "${e}" is registered but deferred and not yet loaded, so the tool call was not executed. Call ${Oe} with names: ["${e}"] to load it, then call it again. Available tools: ${r}.`:`Tool "${e}" is not registered, so the tool call was not executed. Available tools: ${r}.`}function yo(e,t){try{e()}catch(e){if(t===void 0)throw e}}function bo(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function xo(e,t,n,r){if(!n||n.length===0)throw Error(`[EXECUTION] Missing rootId for execution owner context`);if(!r||r.length===0)throw Error(`[EXECUTION] Missing executionId for execution owner context`);let i=[...e.length?e:t];return n&&!i.some(e=>e.type===`agent`&&e.id===n)&&i.push({type:`agent`,id:n}),i.push({type:`execution`,id:r}),{ownerType:Kt,ownerId:r,ownerPath:i}}function So(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...xo(e,t,n,r).ownerPath];return a&&(o.push({type:`thinking`,id:a}),o.push({type:`tool_result`,id:`tool_result_${a}`})),o.push({type:`thinking`,id:i}),{ownerType:Kt,ownerId:r,ownerPath:o}}function Co(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:qt,ownerId:i,ownerPath:[...xo(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function wo(e,t,n,r,i,a){let o=So(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:Kt,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function To(e,t,n,r,i={}){if(t.onExecutionEvent===void 0)return;let a=e.getMessages(),o=a.at(-1);o!==void 0&&t.onExecutionEvent(`history_mutation`,{executionId:n,conversationId:r,...i,mutation:`append_message`,index:a.length-1,message:o})}var Eo=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=bo(n),this.toolEventServices=new Map,this.agentOwnerPathBase=[]}prepareOwnerPathBases(e){this.toolEventServices.clear();let t=[...this.ownerPathBase,{type:`agent`,id:e}];this.agentOwnerPathBase=t}resetOwnerPathBases(){this.toolEventServices.clear(),this.agentOwnerPathBase=[]}ensureToolEventService(e,t){if(di(this.baseEventService))return this.baseEventService;if(!e)throw Error(`[EVENT-SERVICE] Missing ownerId for tool event context`);if(!t||t.length===0)throw Error(`[EVENT-SERVICE] Missing ownerPath for tool event context`);if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let n=W(this.baseEventService,{ownerType:qt,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return xo(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return So(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return Co(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return wo(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}emitExecution(e,t,n,r){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(n,r),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for execution event`);return W(this.baseEventService,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}emitTool(e,t,n,r,i){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(n,r,i),e=>this.ensureToolEventService(e.ownerId,e.ownerPath))}emitWithContext(e,t,n,r){if(di(this.baseEventService))return;let i=n(),a=r(i),o={timestamp:new Date,...t};a.emit(e,o,i)}emitExecutionStartEvent(e,t,n,r,i,a){Ha(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Ua(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Wa(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Ga(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Do(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function Oo(e,t){if(t===void 0)return[];for(let n=e.length-1;n>=0;n--)if(e[n]?.id===t)return e.slice(n);return[]}function ko(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function Ao(e,t,n,r,i,a){let o=e.getMessages(),s=Oo(o,i.turnMessageId),c=s.filter(ko).pop(),l=c?.metadata?.providerError===!0,u=s[s.length-1]?.role===`tool`,d=i.allowToolOnlyCompletion===!0&&u&&!c,f=c?c.content:d||i.interrupted===!0?``:`No response received. The context window may be full.`,p=i.interrupted!==!0&&(l||!c&&!d),m=Date.now()-n.getTime();return{response:f,messages:o.map(e=>{if(typeof e.content!=`string`&&(e.role!==`assistant`||e.content!==null))throw Error(`[EXECUTION] Message content is required`);return{role:e.role,content:e.content,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{}}}),executionId:t,duration:m,tokensUsed:s.filter(e=>e.metadata?.usage).reduce((e,t)=>{let n=t.metadata?.usage;if(n&&typeof n==`object`&&`totalTokens`in n){let t=Number(n.totalTokens);if(Number.isNaN(t))throw Error(`[EXECUTION] totalTokens must be a number`);return e+t}return e},0),toolsExecuted:r,success:!p,...p&&l?{error:Do(a,f)}:{}}}function jo(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:ra(r.defaultModel.model),cumulativeInputTokens:t.cumulativeInputTokens,sameToolInputCounts:[...t.sameToolInputCounts],maxSameToolInputs:n.maxSameToolInputs??r.maxSameToolInputs,continuation:{version:1,kind:o,startedAt:n.startTime.toISOString(),turnMessageId:e.find(e=>e.role===`user`&&e.metadata?.executionId===n.executionId)?.id??``,model:r.defaultModel,timeout:r.timeout,toolSearch:r.toolSearch,structuredOutput:r.responseFormat!==void 0&&r.responseFormat.type!==`text`,options:{maxExecutionRounds:i,maxSameToolInputs:n.maxSameToolInputs??r.maxSameToolInputs,allowToolOnlyCompletion:n.allowToolOnlyCompletion??!1,maxTokens:n.maxTokens,temperature:n.temperature,toolChoice:n.toolChoice??r.defaultModel.toolChoice,withholdHostedTools:n.withholdHostedTools??!1,ephemeralSystemContext:n.ephemeralSystemContext,sessionId:n.sessionId,userId:n.userId,metadata:n.metadata},toolsExecuted:t.toolsExecuted,consecutiveUnknownToolFailureRounds:t.consecutiveUnknownToolFailureRounds,forcedSummaryInstruction:t.forcedSummaryInstruction,loadedDeferredTools:a}})}function Mo(e,t,n){e.tools!==void 0&&(Ce(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function No(e,t,n,r,i=!1){let a=Po(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw on();let s=new AbortController,c,l=!1,u,d,f=()=>{c!==void 0&&(clearTimeout(c),c=void 0)},p=e=>{l||(l=!0,d?.(e),s.abort(e))},m=()=>{a===void 0||l||(f(),c=setTimeout(()=>{p(Error(`Provider call idle timeout after ${a}ms`))},a))},h=()=>{p(on())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_=n.onThinkingDelta,v={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}},onThinkingDelta:e=>{m(),_?.(e)}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,v))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof I)throw e})}}function Po(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Fo(e){let t={};for(let n of[`executionId`,`sessionId`,`userId`]){let r=e.executionContext?.[n];typeof r==`string`&&r.length>0&&(t[n]=r)}return e.messages&&(t.messages=e.messages),t}const Io={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Fo(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Fo(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Fo(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Fo(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeToolCall:async(e,t)=>{e.beforeToolCall&&t.toolData&&await e.beforeToolCall(t.toolData.toolName,t.toolData.parameters,t.toolData)},beforeToolExecution:async(e,t)=>{e.beforeToolExecution&&t.toolData&&await e.beforeToolExecution(Fo(t),t.toolData)},afterToolCall:async(e,t)=>{e.afterToolCall&&t.toolData&&t.toolResult&&await e.afterToolCall(t.toolData.toolName,t.toolData.parameters,t.toolResult)},beforeConversation:async(e,t)=>{e.beforeConversation&&await e.beforeConversation(Fo(t))},onStreamingChunk:async(e,t)=>{e.onStreamingChunk&&t.message&&await e.onStreamingChunk(t.message)},beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${Kt}.${M.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function G(e,t,n,r){let i=Io[t];if(i)for(let a of e)try{await i(a,n)}catch(e){r.warn(`Plugin hook failed`,{pluginName:a.name,hookName:t,error:e instanceof Error?e.message:String(e)})}}function Lo(e){if(e?.type){if(e.type===`json_schema`){if(!e.schema)throw Error(`responseFormat.schema is required when type is 'json_schema'.`);return{type:`json_schema`,schema:e.schema,...e.name&&{name:e.name}}}return{type:e.type}}}function Ro(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function zo(e,t){if(e===void 0||e===`auto`||e===`none`)return;let n=(t??[]).map(e=>e.name);if(e===`required`){if(n.length===0)throw Error(`toolChoice 'required' needs at least one tool, but the run has none.`);return}if(!n.includes(e.tool))throw Error(`toolChoice requests tool "${e.tool}" which is not available for this run. Available tools: ${n.length>0?n.join(`, `):`(none)`}`)}function Bo(e,t,n){let r=e.getCurrentProvider(),i=r?e.getProvider(r.provider):null;if(!r||!r.provider||!i)throw Error(`[EXECUTION] Provider is required`);let a=t.getTools();return{provider:i,currentInfo:r,aiProviderInfo:{providerName:r.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},toolsInfo:a.map(e=>{if(!e.description||e.description.length===0)throw Error(`[EXECUTION] Tool "${e.name}" is missing description`);return{name:e.name,description:e.description,parameters:Object.keys(e.parameters.properties??{})}}),readAvailableTools:()=>t.getOfferedTools(),deferredTools:t}}function Vo(e){if(!e.currentInfo)throw Error(`No AI provider configured`);if(!e.provider)throw Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!=`function`)throw Error(`Provider must have chat method to support execution`)}function Ho(e,t,n,r,i){let a=e.getConversationStore(t);if(!a.getMessages().some(e=>e.role!==`system`)&&n.length>0){for(let e of n)if(e.role===`user`)a.addUserMessage(e.content,e.metadata,e.parts);else if(e.role===`assistant`)a.addAssistantMessage(e.content,e.toolCalls,e.metadata,e.parts);else if(e.role===`tool`){let t=e.metadata?.toolName;if(typeof t!=`string`||t.length===0)throw Error(`[EXECUTION] Tool message missing toolName metadata`);a.addToolMessageWithId(e.content,e.toolCallId,t,e.metadata,e.parts)}}let o=a.getMessages().some(e=>e.role===`system`);return r.systemMessage&&!o&&a.setSystemPrompt(r.systemMessage,{executionId:i}),a}async function Uo(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await G(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:qo(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(M.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Wo(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Go(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Ko(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onThinkingDelta&&{onThinkingDelta:a.onThinkingDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function qo(e){let t={conversationId:Go(e,`plugin-context`),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(t.sessionId=e.sessionId),e.userId&&(t.userId=e.userId),t}function Jo(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
+
`)}function Yo(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=mr({table:r.provider.capabilityTable?.(),model:n,endpointIsVendorDefault:r.provider.endpointIsVendorDefault?.()});if(a.mechanism===`response_schema`)return{messages:t,outcome:{capability:a,sent:`json_schema`,schemaInPrompt:!1}};let o={role:`system`,content:Jo(i.schema),id:U(),timestamp:new Date,state:`complete`},s=[...t,o];return a.mechanism===`json_object`?(e.responseFormat={type:`json_object`},{messages:s,outcome:{capability:a,sent:`json_object`,schemaInPrompt:!0}}):(delete e.responseFormat,{messages:s,outcome:{capability:a,sent:`omitted`,schemaInPrompt:!0}})}function Xo(e,t,n){let r=e.provider.resolveModelRoute?.(t,n);return r===void 0||r.provider===e.currentInfo.provider&&r.model===t?{}:{current:r}}function K(e,t){return e.current?.provider??t.currentInfo.provider}function q(e,t){return e.current?.model??t}function Zo(e,t){e.current={provider:t.to.provider,model:t.to.model}}function Qo(e,t,n,r){if(e===void 0||e.allowedOrigins.length===0)return;let i=!1;try{i=t.canPropagateTraceContext?.()===!0}catch{i=!1}if(!i){try{e.onPropagationUnavailable?.(n)}catch{}return}return m(e,r)}function $o(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function es(e,t){let n=Array.isArray(t.lastTrackedAssistantMessage?.toolCalls)&&t.lastTrackedAssistantMessage.toolCalls.length>0;return{thinkingNodeId:`thinking_${e}_round${t.runningAssistantCount+1}`,previousThinkingNodeId:n?`thinking_${e}_round${t.runningAssistantCount}`:void 0}}function ts(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function ns(e,t,n,r){let i=Lo(t.responseFormat),a=(r?.toolChoice??t.defaultModel?.toolChoice)===`none`?[]:n.readAvailableTools();return{model:e,effort:t.defaultModel?.effort??`auto`,...t.defaultModel?.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel?.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel?.toolChoice!==void 0&&{toolChoice:t.defaultModel.toolChoice},...a.length>0&&{tools:a},...i?{responseFormat:i}:{},...r}}async function rs(e,t,n,r,i,a,o,s,c,l={},u){if(!t.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof t.defaultModel.model!=`string`||t.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let d=t.defaultModel.model;ts(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=ns(d,t,n,i);zo(f.toolChoice,f.tools),Mo(f,d,n);let{messages:p,outcome:m}=Yo(f,e,d,n);a?.({messages:p,options:f,...m!==void 0&&{structuredOutput:m}});let h=n.provider.chat.bind(n.provider),g=(e,t)=>Hn((e,t)=>(s?.(`invoked`,t.model??d),h(e,$o(t,c?.()))),e,t,u),_=f.effort??`auto`;if(r){let e=r.lookup(p,q(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_});if(e){s?.(`cache-hit`,f.model??d);let t={role:`assistant`,content:e,timestamp:new Date,id:U(),state:`complete`};return u&&await H(u.journal,{kind:`model-cache-hit`,checkpoint:u.checkpoint,recordId:`${u.callId}:cache`,executionId:u.executionId,callId:u.callId,...u.route(),response:t}),t}let n=await No(g,p,f,t.timeout,o||!!u);return typeof n.content==`string`&&r.store(p,q(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,n.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_}),n}return No(g,p,f,t.timeout,o||!!u)}function is(e,t,n,r,i){let a=e.role===`assistant`?e.toolCalls:void 0,o=Array.isArray(a)&&a.length>0;if(typeof e.content!=`string`&&!o)throw Error(`[EXECUTION] Provider response must have content or tool calls`);if(a&&!Array.isArray(a))throw Error(`[EXECUTION] assistant toolCalls must be an array`);let s=e.content??``;if(i.debug(`[ROUND-${r}] Provider response completed`,{executionId:t,conversationId:n,round:r,responseLength:s.length,hasToolCalls:Array.isArray(a)&&a.length>0,toolCallsCount:Array.isArray(a)?a.length:0}),e.role!==`assistant`)throw Error(`Unexpected response role: ${e.role}`);let c=e,l=c.toolCalls??[];if(!Array.isArray(l))throw Error(`[EXECUTION] assistantResponse.toolCalls must be an array`);return{assistantResponse:c,assistantToolCalls:l}}function as(e){let t=e?.metadata?.usageProvenance;if(t===`partial`)return{provenance:`partial`};if(t!==`complete`)return{provenance:`absent`};let n=e.usage,r=e?.metadata,i=n?.promptTokens??r?.promptTokens??r?.inputTokens,a=n?.completionTokens??r?.completionTokens??r?.outputTokens,o=n?.totalTokens??r?.totalTokens,s=n?.cacheReadTokens??r?.cacheReadTokens;return typeof i!=`number`||!Number.isSafeInteger(i)||i<0||typeof a!=`number`||!Number.isSafeInteger(a)||a<0||!Number.isSafeInteger(i+a)||o!==void 0&&o!==i+a?{provenance:`absent`}:{provenance:`complete`,promptTokens:i,completionTokens:a,totalTokens:i+a,...typeof s==`number`&&Number.isSafeInteger(s)&&s>=0&&s<=i&&{cacheReadTokens:s}}}function os(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=ls(a);e&&(i=!0,t+=e.inputTokens,n+=e.outputTokens,e.cacheReadTokens!==void 0&&(r=(r??0)+e.cacheReadTokens))}if(i)return{promptTokens:t,completionTokens:n,totalTokens:t+n,...r!==void 0&&{cacheReadTokens:r}}}function ss(e){let t=os(e.filter(e=>Xe(e)&&e.data!==void 0).map(Ze));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function cs(){return U()}function ls(e){let t=Ii(e);if(!t)return;let n=t.totalTokens??t.inputTokens+t.outputTokens,r=t.cacheReadTokens===void 0?{}:{cacheReadTokens:t.cacheReadTokens};return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,...r,usage:{totalTokens:n,inputTokens:t.inputTokens,outputTokens:t.outputTokens,...r}}}function us(e){let t=as(e).provenance,n=ls(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const ds=/^peer:[A-Za-z0-9._:-]{1,128}$/,fs=/<(\/?)(peer_message)/gi;function ps(e){return e.replace(fs,`<$1$2`)}function ms(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function hs(e){return ds.test(e)?e:`peer:unverified`}function gs(e){return e.map(e=>{if(e.type!==`text`)return e;let t=ps(e.text);return t===e.text?e:{...e,text:t}})}function _s(e){if(e.role===`tool`){let t=ps(e.content),n=e.parts?gs(e.parts):void 0,r=n?.some((t,n)=>t!==e.parts?.[n])??!1;return t===e.content&&!r?e:{...e,content:t,...n?{parts:n}:{}}}if(e.role!==`user`)return e;let t=ms(e),n=ps(e.content),r=e.parts?gs(e.parts):void 0;if(!t){let t=r?.some((t,n)=>t!==e.parts?.[n])??!1;return n===e.content&&!t?e:{...e,content:n,...r?{parts:r}:{}}}let i=`<peer_message from="${hs(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function vs(e){return e.map(_s)}async function ys(e,t,n,r,i,a,o,s,c=10,l){s.warn(`No final text response — forcing summary call`,{maxRounds:c===0?`unlimited`:c,currentRound:i.currentRound,conversationId:a});let u={},d=!1;try{let s=i.forcedSummaryInstruction??`Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains — the user can request additional analysis in a follow-up message.`,f=[...vs(e.getMessages()),{id:U(),role:`user`,content:s,state:`complete`,timestamp:new Date}],p=n.systemMessage??``,m=f.some(e=>e.role===`system`&&e.content===p),h=p&&!m?[{id:U(),role:`system`,content:p,state:`complete`,timestamp:new Date},...f]:f;u=Xo(t,t.aiProviderInfo.model,r);let g={model:t.aiProviderInfo.model,effort:n.defaultModel?.effort??`auto`,toolChoice:`none`,...n.defaultModel?.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel?.temperature!==void 0&&{temperature:n.defaultModel.temperature},...o.signal&&{signal:o.signal},...o.onTextDelta&&{onTextDelta:o.onTextDelta},...o.onThinkingDelta&&{onThinkingDelta:o.onThinkingDelta},executionId:r,onModelFallback:e=>{Zo(u,e),o.onExecutionEvent?.(yi.SWITCHED,{executionId:r,conversationId:a,round:i.currentRound,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),_()}},_=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:K(u,t),model:q(u,t.aiProviderInfo.model),messages:h,forcedSummary:!0})};_();let v=Date.now(),y=U(),b={invoked:!1},x=`failure`,S,ee;try{S=await No((a,s)=>Hn((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=Qo(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,$o(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:jo(e.getMessages(),i,o,n,c,l,`summary`),route:()=>({providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model)})}:void 0),h,g,n.timeout,o.awaitProviderSettlement||!!o.executionJournal),x=`success`}catch(e){throw e instanceof I?ee=e:an(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?as(S):{provenance:`absent`};yo(()=>{o.onExecutionEvent?.(vi.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(b.startedAtMs??v).toISOString(),endedAt:new Date(Math.max(Date.now(),b.startedAtMs??v)).toISOString(),outcome:x,callId:y,disposition:b.invoked?`invoked`:`preflight-refused`,...b.invoked&&{providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...typeof S?.metadata?.providerRequestId==`string`&&{providerRequestId:S.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})},ee)}if(!S)throw Error(`Forced summary provider returned no response.`);let C=(typeof S.content==`string`?S.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,te={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...us(S)};e.addAssistantMessage(C,[],te),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:C}),To(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof I)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(an(n,o.signal))throw n;i.providerFailure=n;let c=n instanceof Error?n.message:String(n);s.error(`Forced summary call failed`,{error:c,round:i.currentRound});let l={round:i.currentRound,executionId:r,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),providerError:!0};e.addAssistantMessage(`Request failed: ${c}`,[],{...l,forcedSummary:!0}),To(e,o,r,a,l)}}function bs(e,t,n){if(e.contextOverflowed&&n.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:e.addedCount,skipped:e.skippedCount,round:t.currentRound}),e.unknownToolFailureCount>0?t.consecutiveUnknownToolFailureRounds+=1:t.consecutiveUnknownToolFailureRounds=0,t.consecutiveUnknownToolFailureRounds>=2){let r=[...new Set(e.unknownToolNames)].sort();return t.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${r.join(`, `)}.`,`Those tool calls were not executed because they are not registered tools.`,`Respond to the user now with that reason and use the available tool results already in the conversation history.`].join(` `),n.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:r,consecutiveRounds:t.consecutiveUnknownToolFailureRounds,round:t.currentRound}),!0}return!1}const xs=.95;function Ss(e,t,n){let r=Ki(e,{usageFloorTokens:n}),i=ra(t),a=i*xs,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:xs*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Cs(e,t,n,r,i,a){let o=n.currentRound,s=Ss(e,t.defaultModel.model,n.cumulativeInputTokens);if(!s.shouldBlock)return!1;i.warn(`[ROUND] Context hard-capacity prevention before provider call`,{estimatedTokens:s.estimatedTokens,contextLimit:s.contextLimit,thresholdTokens:s.thresholdTokens,thresholdPercentage:s.thresholdPercentage,serializedTokens:s.serializedTokens,providerTokens:s.providerTokens??0,usageFloorTokens:s.usageFloorTokens??0,round:o});let c=t.contextCapacityHint??`Reduce the conversation history (for example, compact or summarize it) and retry.`;return r.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${s.estimatedTokens.toLocaleString()} / ${s.contextLimit.toLocaleString()} tokens (${Math.round(s.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(s.thresholdPercentage)}%. ${c}`,[],{round:o,contextOverflow:!0,estimatedTokens:s.estimatedTokens,contextLimit:s.contextLimit,thresholdTokens:s.thresholdTokens,thresholdPercentage:s.thresholdPercentage,serializedTokens:s.serializedTokens,providerTokens:s.providerTokens??0,usageFloorTokens:s.usageFloorTokens??0,usedPercentage:s.usedPercentage}),To(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function ws(e,t,n,r,i=[],a){let o=0,s=0,c=Promise.resolve();return{wrappedOnTextDelta:s=>{if(e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:o,delta:s}),o++,t.appendStreaming(s),e.onTextDelta?.(s),i.length>0&&a!==void 0){let e=Mr(s);c=c.then(()=>G(i,`onStreamingChunk`,{message:e},a))}},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??s;s=Math.max(s,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})},settleStreamingChunkHooks:()=>c}}async function Ts(e,t,n,r,i,a,o,s,c,l,u,d,f,p=Xo(n,t.defaultModel.model,s),m=U(),h){let g=Date.now(),_={disposition:`preflight-refused`},v,y,b=`failure`,x,S=e=>{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:K(p,n),model:q(p,t.defaultModel.model),effort:e.options.effort,messages:e.messages,tools:e.options.tools})};try{let c=await rs(e,t,n,r,{signal:i.signal,onTextDelta:u,...i.onThinkingDelta&&{onThinkingDelta:i.onThinkingDelta},onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{Zo(p,e),_.model=e.to.model,i.onExecutionEvent?.(yi.SWITCHED,{executionId:s,conversationId:i.conversationId,round:o,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),x!==void 0&&S(x)},...(()=>{let e=Ro(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()},e=>{x=e,S(e);let r=e.structuredOutput;r!==void 0&&i.onExecutionEvent?.(`structured_output_transport`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,mechanism:r.capability.mechanism,provenance:r.capability.provenance,sent:r.sent,schemaInPrompt:r.schemaInPrompt,...r.capability.reason!==void 0&&{reason:r.capability.reason}})},i.awaitProviderSettlement,(e,t)=>{_.disposition=e,_.model=q(p,t),e===`invoked`&&(_.startedAtMs=Date.now())},()=>Qo(i.traceContext,n.provider,n.currentInfo.provider,m),p,i.executionJournal?{journal:i.executionJournal,executionId:s,callId:m,checkpoint:h,route:()=>({providerId:K(p,n),modelId:q(p,t.defaultModel.model)})}:void 0);if(v=c,typeof c.content==`string`&&c.content.length>0){let e=a.getPendingContent();if(c.content.startsWith(e)){let t=c.content.slice(e.length);t.length>0&&u(t)}else l.warn(`Provider deltas are not a prefix of its assembled message — committing the streamed text`,{conversationId:i.conversationId,round:o,streamedLength:e.length,assembledLength:c.content.length})}return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,effort:t.defaultModel?.effort??`high`,response:c,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:c,toolCallsCount:c.role===`assistant`&&Array.isArray(c.toolCalls)?c.toolCalls.length:0}),b=`success`,c}catch(e){if(e instanceof I)throw y=e,a.discardPending(),e;if(an(e,i.signal))throw b=`interrupted`,a.commitAssistant(`interrupted`,{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(p,n.aiProviderInfo.model)}),e;a.discardPending(),f?.(e);let t=e instanceof Error?e.message:String(e);return l.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(p,n.aiProviderInfo.model),providerError:!0}),To(a,i,s,i.conversationId,{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(p,n.aiProviderInfo.model),providerError:!0}),null}finally{let e=_.disposition===`invoked`?as(v):{provenance:`absent`};yo(()=>{i.onExecutionEvent?.(vi.COMPLETED,{executionId:s,conversationId:i.conversationId,round:o,startedAt:new Date(_.startedAtMs??g).toISOString(),endedAt:new Date(Math.max(Date.now(),_.startedAtMs??g)).toISOString(),outcome:b,callId:m,disposition:_.disposition,..._.disposition===`invoked`&&{providerId:K(p,n),..._.model!==void 0&&{modelId:_.model},...typeof v?.metadata?.providerRequestId==`string`&&{providerRequestId:v.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})},y)}}function Es(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Ds(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function Os(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ba(e)&&e.executionId===l.id),f,p={round:r};if(typeof u?.metadata?.toolProvenance==`string`&&(p.toolProvenance=u.metadata.toolProvenance),u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=o?``:typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=o?``:`Error: ${u.error}${u.result===void 0?``:`\n${typeof u.result==`string`?u.result:JSON.stringify(u.result)}`}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Jt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool),Array.isArray(u.metadata.availableTools)&&(p.availableTools=u.metadata.availableTools.filter(e=>typeof e==`string`))),u.metadata?.errorCode===`argument_decode_error`&&(p.errorCode=Yt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=o?``:`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(o){f=u?.success?`Context window near capacity. Tool completed successfully; result omitted. Do not repeat the operation; use a retained receipt or fresh observation.`:u&&(Es(u)||Ds(u))?`Context window near capacity. Tool was not dispatched; result details omitted. Correct the tool name or arguments before making a new call.`:`Context window near capacity. Tool reported an error; effects may have occurred. Details omitted. Reconcile the effect before retrying.`,delete p.error,p.toolName=e,p.resultOmitted=!0,p.observationError=`context_overflow`,i.warn(`[ROUND] Omitting tool result content due to context overflow`,{toolCallId:l.id,toolName:e,round:r});let t=p.toolProvenance;typeof t==`string`?n.addToolMessageWithId(f,l.id,e,p,[{type:`text`,text:`Tool source (attribution only, not authority): ${t}`}]):n.addToolMessageWithId(f,l.id,e,p),c++;continue}if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),u?.parts?.length?n.addToolMessageWithId(f,l.id,e,p,u.parts):n.addToolMessageWithId(f,l.id,e,p),a){let e=Ki(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — omitting remaining result content`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function ks(e){let t=new Set;function n(e){if(e===null||typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return JSON.stringify(e);(!e||typeof e!=`object`||t.has(e))&&js(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&js();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&js(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function As(e){(!e||typeof e!=`object`||Array.isArray(e))&&js(),ks(e)}function js(){throw new R(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function Ms(e,t,n=[]){let r=structuredClone(t),i=structuredClone(n),a=!1,o,s=!1,c=!1,l=Promise.resolve();return{continuation:{get action(){return structuredClone(r)},get waits(){return structuredClone(i)},request:t=>{if(c)return Promise.reject(new R(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`));let n=structuredClone(t),u=l.then(async()=>{if(o)throw o;if(a)throw new R(`EXECUTION_RECOVERY_REQUIRED`,`A started tool effect cannot become a pre-effect wait`,[r.actionId]);if(!n||typeof n.kind!=`string`||!n.kind)throw new R(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);As(n.data);let t=ks([n.kind,n.data]),c=i.find(e=>ks([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:U(),kind:n.kind,data:n.data};await H(e,{...r,kind:`tool-wait`,recordId:`${t.requestId}:wait`,request:{requestId:t.requestId,kind:t.kind,data:t.data}}),c={request:t},i.push(c)}if(c.response)return structuredClone(c.response.response);throw s=!0,new L(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof L||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new L(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new R(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`);if(await l,o)throw o;let t=i.filter(e=>!e.response);if(t.length)throw new L(t.map(e=>e.request));if(a)throw new R(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function Ns(e,t){let n=[],r=[...e];for(let e of t.toolResponses??[]){let i=structuredClone(e);if(!i||typeof i.requestId!=`string`||!i.requestId||typeof i.responseId!=`string`||!i.responseId)throw new R(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);As(i.response);let a=r.find(e=>e.kind===`tool-response`&&(e.response.requestId===i.requestId||e.response.responseId===i.responseId));if(a?.kind===`tool-response`){if(ks(a.response)!==ks(i))throw new R(`EXECUTION_RECOVERY_CONFLICT`,`Tool response identity was already used`);continue}let o=r.find(e=>e.kind===`tool-wait`&&e.request.requestId===i.requestId);if(!o||o.kind!==`tool-wait`||o.parentCallId!==t.callId||r.some(e=>`actionId`in e&&e.actionId===o.actionId&&(e.kind===`tool-effect-start`||e.kind===`tool-result`)))throw new R(`EXECUTION_RECOVERY_CONFLICT`,`Tool request is absent, stale or already settled`);let s={kind:`tool-response`,recordId:`${i.requestId}:response`,executionId:o.executionId,actionId:o.actionId,parentCallId:o.parentCallId,toolCallId:o.toolCallId,toolName:o.toolName,response:i};n.push(s),r.push(s)}for(let e of n)t.signal?.throwIfAborted(),await H(t.journal,e);return r}function Ps(e,t,n,r){e.getMessages().slice(t).forEach((e,i)=>{r?.(`tool_message_committed`,{...n,index:i,message:e}),r?.(`history_mutation`,{...n,mutation:`append_message`,index:t+i,message:e})})}function Fs(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw new te(e,a,n)}}async function Is(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let{toolExecutionService:h,logger:g,eventEmitter:_}=c,v=f??l?.maxSameToolInputs;if(v!==void 0)try{Fs(e,s,v)}catch(o){if(!(o instanceof te)||m)throw o;let s=t.getMessages().length,c=`Tool batch was not dispatched because the repeated-input limit was reached.`,l=h.createExecutionRequestsWithContext(e,{ownerPathBase:[]});for(let[n,r]of e.entries()){let e=l[n].metadata?.toolProvenance;t.addToolMessageWithId(`Error: ${c}`,r.id,r.function.name,{round:i,success:!1,notDispatched:!0,errorCode:o.code,error:c,toolName:r.function.name,...typeof e==`string`?{toolProvenance:e}:{}},typeof e==`string`?[{type:`text`,text:`Tool source (attribution only, not authority): ${e}`}]:void 0)}try{Ps(t,s,{executionId:r,conversationId:n,round:i,batchId:a},d)}catch(e){g.warn(`Loop-guard history observer failed after the batch was settled`,{error:e instanceof Error?e.message:String(e)})}throw o}g.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let y=_.buildThinkingOwnerContext(n,r,a,o).ownerPath,b=e.length,x=`${a}`,S=h.createExecutionRequestsWithContext(e,{ownerPathBase:y,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:x,expectedCount:b,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:_.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:_.getBaseEventService(),...p?{traceContext:p}:{}}}),ee=l?.toolExecutionPolicy?.(structuredClone(e)),C={requests:S,mode:ee?.mode??`parallel`,maxConcurrency:ee?.maxConcurrency??5,continueOnError:ee?.continueOnError??!0,scheduling:ee?.scheduling??new Map,signal:u};if(C.lifecycle={beforeDispatch:async(e,t)=>{let i=S[e];if(m?.recovery?.actions.get(i.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:r,sessionId:n}};await G(c.plugins,`beforeToolCall`,a,g),await G(c.plugins,`beforeToolExecution`,a,g)},onResult:async(e,t,i)=>{await G(c.plugins,`afterToolCall`,{toolData:t,toolResult:i,executionContext:{executionId:r,sessionId:n}},g)}},m){let{journal:e,parentCallId:t}=m,n=S.map(e=>m.recovery?.actions.get(e.executionId??``)),i=S.map(e=>({actionId:m.recovery?.actions.get(e.executionId??``)?.actionId??U(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>Ms(e,t,n[r]?.waits));for(let t=0;t<S.length;t++){let r=S[t];r.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await H(e,{kind:`tool-intent`,recordId:`${i[t].actionId}:intent`,...i[t],parameters:r.parameters})}C.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():H(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>H(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>H(e,{kind:`tool-effect-start`,recordId:`${i[t].actionId}:effect-start`,...i[t],parameters:n}))},C.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:x,mode:C.mode,maxConcurrency:C.maxConcurrency,requestCount:S.length,tools:S.map(e=>e.toolName)}),S.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let w=await h.executeTools(C),T=w.results.filter(Es).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);w.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let ne=w.results.filter(e=>!Es(e)&&!Ds(e));s.toolsExecuted.push(...ne.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),s.toolCallOutcomes.push(...ne.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let re=m?.recovery?.checkpoint.contextLimit??ra(l?.defaultModel?.model??``),ie=t.getMessages().length,ae=Os(e,w,t,i,g,{contextLimit:re,cumulativeInputTokens:s.cumulativeInputTokens});return Ps(t,ie,{executionId:r,conversationId:n,round:i,batchId:x},d),_.emitToolResultsEvents(e,w,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...ae,unknownToolFailureCount:T.length,unknownToolNames:T}}async function Ls(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),h=vs(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Nr(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=es(r,e);if(await G(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e&&!!e.toolCalls?.length,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(M.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:v}},()=>d.buildThinkingOwnerContext(r,i,v,y),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return W(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),Cs(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
7
|
+
|
|
8
|
+
`),n.beginAssistant();let b=cs(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:ee}=ws(a,n,i,p,l,u),C=Xo(s,o.defaultModel.model,i),te=U(),w;try{w=await Ts(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C,te,a.executionJournal?jo(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await ee()}if(w===null)return!0;let{assistantResponse:T,assistantToolCalls:ne}=is(w,i,a.conversationId,p,u);if(ne.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await G(l,`afterProviderCall`,{messages:m,responseMessage:w},u),await G(l,`onMessageAdded`,{message:w},u);let re=typeof T.content==`string`&&T.content.trim().length>0;if(ne.length===0&&!re)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let ie=us(T),ae=ie.inputTokens??0;ae>0&&(e.cumulativeInputTokens=ae);for(let e of ne)n.appendToolCall(e);let oe=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(oe,{round:p,usageObservationId:b,executionId:i,providerId:K(C,s),providerCallId:te,modelId:q(C,s.aiProviderInfo.model),...ie});let se=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:T}),se&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:se}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=T,ne.length===0?(u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(T,i,p,r,v,y),!0):bs(await Is(ne,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext,a.executionJournal?{journal:a.executionJournal,parentCallId:te}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function Rs(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function zs(e,t){return t===0||e<t}async function Bs(e,t,n,r,i,a,o,s,c,l=!1){let u=Rs(i,r);for(;!l&&!o.forcedSummaryInstruction&&zs(o.currentRound,u)&&!(s?.aborted||(o.currentRound++,await Ls(o,u,e,t,n,r,i,a,c))||s?.aborted););let d=e.getMessages(),f=d.length>0?d[d.length-1]:void 0,p=f?.role===`assistant`&&typeof f.content==`string`&&f.content.length>0&&(!(`toolCalls`in f)||f.toolCalls.length===0);if(!s?.aborted){if(r.allowToolOnlyCompletion===!0){let e=f?.role===`tool`;if(!p&&!e)throw new C(o.currentRound,{conversationId:t,executionId:n});return}p||await ys(e,a,i,n,o,t,r,c.logger,u,r.executionJournal?c.toolExecutionService.getLoadedDeferredTools():void 0)}}async function Vs(e,t,n,r,i,a,o,s,c,l,u,d){let f={...Ao(t,n,r,i.toolsExecuted,{turnMessageId:o,interrupted:s,...c?.allowToolOnlyCompletion===!0&&{allowToolOnlyCompletion:!0}},i.providerFailure),interrupted:s};await G(l,`afterRun`,{input:e,response:f.response,metadata:c?.metadata},u);let p={messages:f.messages,executionContext:{executionId:n,conversationId:a},executionResult:{response:f.response,duration:f.duration,...f.tokensUsed===void 0?{}:{tokensUsed:f.tokensUsed},toolsExecuted:f.toolsExecuted.length,success:f.success,toolCalls:i.toolCallOutcomes.map(e=>({...e.id===void 0?{}:{id:e.id},name:e.name,...e.success?{}:{result:null}}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await G(l,e,p,u);return u.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted.length,rounds:i.currentRound}),d.emitExecution(M.COMPLETE,{result:{success:!0,data:f.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted}},a,n),f}function J(e){return JSON.stringify(e,(e,t)=>t&&typeof t==`object`&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort(([e],[t])=>e.localeCompare(t))):t)}function Y(e){throw new R(`EXECUTION_RECOVERY_INVALID`,e)}function X(e){return typeof e==`string`&&e.length>0}function Hs(e,t,n,r=!0){try{return Us(structuredClone(e),t,n,r)}catch(e){if(e instanceof R)throw e;return Y(`Execution journal is not a valid recoverable record prefix`)}}function Us(e,t,n,r){(!X(t)||!X(n)||!Array.isArray(e))&&Y(`Missing recovery identity`);let i=[],a=new Map,o,s=new Map,c=new Map,l=new Set,u=new Set;for(let n of e){(!n||n.executionId!==t||!X(n.recordId))&&Y(`Journal execution identity mismatch`);let e=J(n),r=a.get(n.recordId);if(r!==void 0){e!==r&&Y(`Conflicting journal record identity`);continue}if(a.set(n.recordId,e),i.push(n),`callId`in n)X(n.callId)||Y(`Missing model call identity`),n.kind===`model-request`||n.kind===`model-cache-hit`?o=n.callId:n.callId!==o&&Y(`Model settlement crossed a newer invocation`);else if(`actionId`in n){(!X(n.actionId)||!X(n.parentCallId))&&Y(`Missing action identity`);let e=s.get(n.actionId),t=J([n.parentCallId,n.toolCallId,n.toolName]);if(e&&e!==t&&Y(`Action identity belongs to multiple calls`),s.set(n.actionId,t),n.kind===`tool-wait`&&((!n.request||!X(n.request.requestId)||!X(n.request.kind)||c.has(n.request.requestId))&&Y(`Invalid or duplicate tool wait`),As(n.request.data),c.set(n.request.requestId,n)),n.kind===`tool-response`){let e=n.response,t=e&&c.get(e.requestId);(!t||!X(e.responseId)||l.has(e.requestId)||u.has(e.responseId)||t.actionId!==n.actionId||t.parentCallId!==n.parentCallId||t.toolCallId!==n.toolCallId||t.toolName!==n.toolName)&&Y(`Tool response does not belong to an unanswered request`),As(e.response),l.add(e.requestId),u.add(e.responseId)}}else Y(`Unknown journal record`)}o!==n&&Y(`Only the latest model invocation can be recovered`);let d,f,p,m=new Map;for(let e of i){if(`callId`in e){if(e.callId!==n)continue;e.kind===`model-request`?((d||f)&&Y(`Duplicate or out-of-order model request`),d=e):e.kind===`model-cache-hit`?((d||f||e.response.role!==`assistant`)&&Y(`Invalid cache settlement`),f=e.response,p=e.checkpoint):e.kind===`model-response`?((!d||f||e.response.role!==`assistant`)&&Y(`Invalid model response`),f=e.response):Y(`This model invocation has no recoverable tool response`);continue}if(e.parentCallId!==n)continue;f||Y(`Tool action precedes its model response`);let r=f.toolCalls?.find(t=>t.id===e.toolCallId);(!r||e.toolName!==r.function.name)&&Y(`Action does not belong to the saved model response`);let i=m.get(e.toolCallId);if(i&&i.actionId!==e.actionId&&Y(`Multiple actions claim one tool call`),i||(i={actionId:e.actionId,intent:!1,dispatched:!1,effectStarted:!1,waits:[]},m.set(e.toolCallId,i)),i.result&&Y(`Tool action continued after settlement`),e.kind===`tool-intent`)(i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order action intent`),J(JSON.parse(r.function.arguments))!==J(e.parameters)&&Y(`Action arguments differ from saved intent`),i.intent=!0;else if(e.kind===`tool-dispatch`)(!i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order dispatch`),i.dispatched=!0;else if(e.kind===`tool-effect-start`)(!i.dispatched||i.effectStarted)&&Y(`Out-of-order effect admission`),i.waits.some(e=>!e.response)&&Y(`Tool effect precedes a required response`),i.effectStarted=!0;else if(e.kind===`tool-wait`)(!i.dispatched||i.effectStarted)&&Y(`Tool wait is outside pre-effect dispatch`),i.waits.push({request:{...e.request,executionId:t,actionId:e.actionId,parentCallId:e.parentCallId,toolCallId:e.toolCallId,toolName:e.toolName}});else if(e.kind===`tool-response`){let t=i.waits.find(t=>t.request.requestId===e.response.requestId);(!t||t.response||i.effectStarted)&&Y(`Out-of-order tool response`),t.response=e.response}else if(e.kind===`tool-result`){let t=e.result,n=t.metadata?.errorCode===Xt;n&&(t.success||i.dispatched||i.effectStarted||t.metadata?.dispatchStatus!==`not-dispatched`||t.result!==null)&&Y(`Skipped tool result cannot claim a dispatched or applied effect`),(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`&&!n||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!X(t.error))&&Y(`Invalid tool result linkage or payload`),e.loadedDeferredTools!==void 0&&(!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>!X(e)))&&Y(`Invalid tool residency settlement`),i.result=t,i.loadedDeferredTools=e.loadedDeferredTools}else Y(`Unknown action record`)}let h=d?.checkpoint??p;(!f||!h||h.version!==1||h.effectAdmission!==`required`)&&Y(`A supported effect-admission checkpoint is required`),(!Number.isSafeInteger(h.round)||h.round<1||!Number.isFinite(h.contextLimit)||h.contextLimit<=0||!Number.isFinite(h.cumulativeInputTokens)||h.cumulativeInputTokens<0||!Array.isArray(h.messages)||!Array.isArray(h.sameToolInputCounts))&&Y(`Invalid round checkpoint`);let g=new Set;for(let e of h.messages)g.has(e.id)&&Y(`Duplicate checkpoint message identity`),g.add(e.id);for(let e of[...h.messages,f])(!X(e.id)||!(e.timestamp instanceof Date)||!Number.isFinite(e.timestamp.getTime())||(e.role===`assistant`?e.content!==null&&typeof e.content!=`string`:typeof e.content!=`string`)||e.role===`tool`&&!X(e.toolCallId)||![`user`,`assistant`,`system`,`tool`].includes(e.role)||![`complete`,`interrupted`].includes(e.state))&&Y(`Invalid checkpoint message`);let _=new Set;for(let[e,t]of h.sameToolInputCounts)(!X(e)||_.has(e)||!Number.isSafeInteger(t)||t<0)&&Y(`Invalid repeated-input checkpoint`),_.add(e);h.maxSameToolInputs!==void 0&&(!Number.isSafeInteger(h.maxSameToolInputs)||h.maxSameToolInputs<1)&&Y(`Invalid repeated-input limit`),r&&(!Array.isArray(f.toolCalls)||f.toolCalls.length===0)&&Y(`Saved response has no tool calls`),g.clear();for(let e of f.toolCalls??[])(!X(e.id)||g.has(e.id)||e.type!==`function`||!X(e.function?.name)||typeof e.function.arguments!=`string`)&&Y(`Invalid or duplicate saved tool call`),g.add(e.id);d?.options.toolChoice===`none`&&(f.toolCalls?.length??0)>0&&Y(`Saved invocation prohibited tool execution`);let v=[...m.values()].filter(e=>e.effectStarted&&!e.result);if(v.length)throw new R(`EXECUTION_RECOVERY_REQUIRED`,`Tool effects have no durable result; reconcile them before resuming`,v.map(e=>e.actionId));return{checkpoint:h,response:f,actions:m,offeredDeferredTools:d?.options.tools?.filter(e=>e.deferLoading).map(e=>e.name)??[]}}function Ws(e){throw new R(`EXECUTION_RECOVERY_CONFLICT`,e)}function Gs(e,t){return{...structuredClone(e.response),id:`recovery:${t.executionId}:${t.callId}:assistant`,...e.checkpoint.continuation?.kind===`summary`&&{content:e.response.content||`Maximum rounds reached. Partial results available in conversation history.`,toolCalls:[]},metadata:{...e.response.metadata,...us(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function Ks(e,t,n,r){return e.role===`assistant`&&t.role===`assistant`&&(e.content??``)===(t.content??``)&&J(e.toolCalls??[])===J(t.toolCalls??[])&&e.metadata?.providerCallId===n&&e.metadata.executionId===r}function qs(e,t,n,r){if(!e.length)return;let i=t.checkpoint.messages;(e.length<i.length||J(e.slice(0,i.length))!==J(i))&&Ws(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;Ks(a[0],Gs(t,n),n.callId,n.executionId)||Ws(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&Ws(`History has advanced beyond the recovered tool batch`);let s=o.slice(0,a.length-1),c=s.map(e=>{let n=t.actions.get(e.id)?.result;return n||Ws(`History contains a tool result without durable settlement`),n}),l=new Ir;for(let e of i)l.addMessage(e);l.addMessage(a[0]),Os(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:Js(t)});for(let e=1;e<a.length;e++){let t=l.getMessages()[i.length+e],n=a[e];(n.role!==`tool`||t.role!==`tool`||n.toolCallId!==t.toolCallId||n.name!==t.name||n.content!==t.content)&&Ws(`Existing tool result conflicts with the durable result`)}}function Js(e){let t=us(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function Ys(e,t,n,r,i){let a=J(e.getMessages()),o=()=>{(a!==J(e.getMessages())||e.hasPendingAssistant())&&Ws(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??Hs(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());qs(l,c,n,r);let u=await Ns(s,n);u.length!==s.length&&(c=Hs(u,n.executionId,n.callId,!1)),n.signal?.throwIfAborted(),o();let d=new Set([...c.checkpoint.continuation?.loadedDeferredTools??[],...c.offeredDeferredTools]);for(let e of c.actions.values())for(let t of e.loadedDeferredTools??[])d.add(t);r.toolExecutionService.restoreLoadedDeferredTools([...d]);let f=new Ir;for(let e of c.checkpoint.messages)f.addMessage(structuredClone(e));let p=c.checkpoint.continuation?.kind===`summary`,m=c.response.toolCalls??[];(p||m.length>0||(c.response.content?.trim().length??0)>0)&&f.addMessage(Gs(c,n));let h={toolsExecuted:[...c.checkpoint.continuation?.toolsExecuted??[]],toolCallOutcomes:[],currentRound:c.checkpoint.round,runningAssistantCount:f.getMessages().filter(e=>e.role===`assistant`).length,lastTrackedAssistantMessage:c.response,cumulativeInputTokens:Js(c),consecutiveUnknownToolFailureRounds:c.checkpoint.continuation?.consecutiveUnknownToolFailureRounds??0,forcedSummaryInstruction:c.checkpoint.continuation?.forcedSummaryInstruction,sameToolInputCounts:new Map(c.checkpoint.sameToolInputCounts)};r.eventEmitter.prepareOwnerPathBases(t);try{let i=m.length===0;m.length>0&&(i=bs(await Is(m,f,t,n.executionId,c.checkpoint.round,n.callId,void 0,h,r,void 0,n.signal,void 0,c.checkpoint.maxSameToolInputs,void 0,{journal:n.journal,parentCallId:n.callId,recovery:c}),h,r.logger)),o();for(let t of f.getMessages().slice(l.length))e.addMessage(t);let a=structuredClone(e.getMessages()),s=J(a);for(let r=l.length;r<a.length;r++)n.onExecutionEvent?.(`history_mutation`,{executionId:n.executionId,conversationId:t,round:c.checkpoint.round,mutation:`append_message`,index:r,message:a[r]}),(s!==J(e.getMessages())||e.hasPendingAssistant())&&Ws(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw on(`Execution recovery interrupted`,n.signal.reason);return{executionId:n.executionId,callId:n.callId,messages:structuredClone(e.getMessages()),batch:c,state:h,stop:i}}finally{r.eventEmitter.clearToolEventServices(),r.eventEmitter.resetOwnerPathBases()}}async function Xs(e,t,n,r){let{executionId:i,callId:a,messages:o}=await Ys(e,t,n,r);return{executionId:i,callId:a,messages:o}}function Z(e){throw new R(`EXECUTION_RECOVERY_INVALID`,e)}function Zs(e){return(!e||e.version!==1||![`round`,`summary`].includes(e.kind)||typeof e.startedAt!=`string`||!Number.isFinite(Date.parse(e.startedAt))||typeof e.turnMessageId!=`string`||e.turnMessageId.length===0||!e.model||typeof e.model.provider!=`string`||typeof e.model.model!=`string`||!e.model.provider||!e.model.model||!e.options||!Number.isSafeInteger(e.options.maxExecutionRounds)||e.options.maxExecutionRounds<0||!Array.isArray(e.toolsExecuted)||e.toolsExecuted.some(e=>typeof e!=`string`)||!Number.isSafeInteger(e.consecutiveUnknownToolFailureRounds)||e.consecutiveUnknownToolFailureRounds<0||!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>typeof e!=`string`||!e)||typeof e.structuredOutput!=`boolean`||typeof e.options.allowToolOnlyCompletion!=`boolean`||typeof e.options.withholdHostedTools!=`boolean`)&&Z(`Unsupported runtime continuation checkpoint`),e.structuredOutput&&Z(`Structured-output validators do not yet support execution continuation`),e}async function Qs(e,t,n,r,i,a){let o=J(e.getMessages()),s=await n.journal.read(n.executionId);n.signal?.throwIfAborted();let c=s.findLast(e=>e.kind===`model-request`||e.kind===`model-cache-hit`);if((!c||!(`callId`in c))&&Z(`No recoverable model invocation exists`),c.kind===`model-request`&&!s.some(e=>e.kind===`model-response`&&e.callId===c.callId))throw new R(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=Hs(s,n.executionId,c.callId,!1),u=Zs(l.checkpoint.continuation);(u.model.provider!==r.defaultModel.provider||u.model.model!==r.defaultModel.model)&&Z(`Active provider and model must match the saved runtime before continuation`);let d=l.checkpoint.messages.find(e=>e.id===u.turnMessageId);(!d||d.role!==`user`||d.metadata?.executionId!==n.executionId)&&Z(`Continuation has no matching original input`),(u.toolSearch??`auto`)!==(r.toolSearch??`auto`)&&Z(`Tool residency policy differs from the saved runtime`),r.responseFormat&&r.responseFormat.type!==`text`&&Z(`Current runtime requires an unsupported structured-output validator`),u.options.maxSameToolInputs!==l.checkpoint.maxSameToolInputs&&Z(`Conflicting repeated-input limits`),u.kind===`summary`&&(l.response.toolCalls?.length??0)>0&&Z(`Terminal summary cannot dispatch tools`);for(let e of l.actions.values())e.result&&e.loadedDeferredTools===void 0&&Z(`Settled action lacks runtime residency state`);let f={...r,defaultModel:structuredClone(u.model),timeout:u.timeout,maxExecutionRounds:u.options.maxExecutionRounds,maxSameToolInputs:u.options.maxSameToolInputs},p=i(f);if(p.currentInfo.provider!==u.model.provider&&Z(`Active provider manager differs from the saved runtime`),o!==J(e.getMessages()))throw new R(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await Ys(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=Ko(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onThinkingDelta:n.onThinkingDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Bs(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw on(`Execution continuation interrupted`,n.signal.reason);return Ao(e,n.executionId,h.startTime,m.state.toolsExecuted,{turnMessageId:u.turnMessageId,allowToolOnlyCompletion:u.options.allowToolOnlyCompletion},m.state.providerFailure)}finally{a.eventEmitter.clearToolEventServices(),a.eventEmitter.resetOwnerPathBases()}}async function*$s(e,t,n,r,i){let a=[],o=null,s=!1,c=null,l={result:null},u=new AbortController,d=r?.signal,f=d?AbortSignal.any([d,u.signal]):u.signal,p=r?.onTextDelta,m=e=>{a.push(e),p?.(e),o?.()},h=i(e,t,n,{...r,signal:f,onTextDelta:m}).then(e=>{l.result=e},e=>{c=e}).finally(()=>{s=!0,o?.()});try{for(;;){for(;a.length>0;)yield a.shift();if(s)break;await new Promise(e=>{o=()=>{o=null,e()}})}if(c!==null)throw c;if(l.result===null)throw Error(`[EXECUTION] streaming turn settled without a result`);return l.result}finally{u.abort(),await h}}function ec(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var tc=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new go(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=k(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new Eo(r,this.logger,i),this.cacheService=a}setAskHandler(e){this.toolExecutionService.setAskHandler(e)}invokeRuntimeTool(e,t,n){return this.toolExecutionService.executeTool(e,t,n,`registered`)}resume(e,t,n){return Qs(this.conversationHistory.getConversationStore(e),e,t,n,e=>Bo(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Xs(this.conversationHistory.getConversationStore(e),e,t,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter})}registerPlugin(e){let t=e.priority??0,n=this.plugins.findIndex(e=>(e.priority??0)<t);n===-1?this.plugins.push(e):this.plugins.splice(n,0,e),this.logger.debug(`Plugin registered`,{pluginName:e.name,priority:t})}removePlugin(e){let t=this.plugins.findIndex(t=>t.name===e);return t===-1?!1:(this.plugins.splice(t,1),this.logger.debug(`Plugin removed`,{pluginName:e}),!0)}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return[...this.plugins]}async execute(e,t,n,r){let i=Wo(),a=new Date,o=Go(r,`execute`),s=Ko(t,n,a,i,o,r);this.eventEmitter.prepareOwnerPathBases(o),this.logger.debug(`Starting execution pipeline`,{executionId:i,conversationId:o,messageCount:t.length,hasContext:!!r});let c=Bo(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Ho(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],toolCallOutcomes:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,ec(i,r?.driverId,r?.turnSource));let f=l.getMessages().at(-1);u=f?.id,f&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:f}),this.eventEmitter.emitUserMessageEvent(e,o,i),await G(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let p={executionId:i,conversationId:o};f&&await G(this.plugins,`onMessageAdded`,{message:f,executionContext:p},this.logger);for(let e of[`beforeExecution`,`beforeConversation`])await G(this.plugins,e,{messages:l.getMessages(),executionContext:p},this.logger);Vo(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Bs(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Vs(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(z(e))throw e;return an(e,r?.signal)?{...Ao(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await Uo(e,s,a,o,i,this.plugins,this.logger,this.eventEmitter),{response:``,messages:[],tokensUsed:0,toolsExecuted:[],duration:Date.now()-a.getTime(),executionId:i,success:!1,error:e instanceof Error?e:Error(String(e))})}finally{this.eventEmitter.resetOwnerPathBases()}}async*executeStream(e,t,n,r){return yield*$s(e,t,n,r,this.execute.bind(this))}async getStats(){return{pluginCount:this.plugins.length,pluginNames:this.plugins.map(e=>e.name),historyStats:this.conversationHistory.getStats()}}clearPlugins(){this.plugins=[],this.logger.debug(`All plugins cleared`)}};function nc(e){let t=new Ia;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n,{ownership:e.providerOwnership&&Object.hasOwn(e.providerOwnership,n.name)?e.providerOwnership[n.name]:`owned`});return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function rc(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting ConversationAgent initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof nn&&c&&e.setEventService(c),r.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Mi(e,t,n)},e.provenance),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new za(new Ra({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new La));let d=new tc(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`ConversationAgent initialization completed successfully with independent managers`),d}async function ic(e){try{let t=await rc(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`ConversationAgent initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function ac(e){let t=e.isFullyInitialized?e.aiProviders.getProviderNames():[],n=e.isFullyInitialized?e.aiProviders.getCurrentProvider():null,r=n?n.provider:null,i=e.isFullyInitialized?e.tools.getTools().map(e=>e.name):[],a=e.getPluginNames(),o=e.getModuleNames(),s=e.getHistory(),c=Date.now()-e.startTime,l={user:0,assistant:0,system:0,tool:0};for(let e of s)e.role in l&&l[e.role]++;return{name:e.name,version:e.version,conversationId:e.conversationId,providers:t,currentProvider:r,tools:i,plugins:a,modules:o,historyLength:s.length,historyStats:{userMessages:l.user,assistantMessages:l.assistant,systemMessages:l.system,toolMessages:l.tool},uptime:c}}async function oc(e){e.logger.debug(`Destroying ConversationAgent instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during ConversationAgent destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.dispose()),e.resetState(),t.length===0?e.logger.info(`ConversationAgent instance destroyed successfully`,{name:e.name}):e.logger.warn(`ConversationAgent instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var sc=class{tail=Promise.resolve();claimed=0;async acquire(e){let t=this.claimed>0;this.claimed+=1;let n=this.tail,r=()=>{};this.tail=new Promise(e=>{r=e});let i=!1,a=()=>{i||(i=!0,--this.claimed,r())};if(await n,e?.aborted)throw a(),cc(e,t);return a}async run(e,t){let n=await this.acquire(e);try{return await t()}finally{n()}}get drained(){return this.tail}};function cc(e,t){let n=e.reason;return an(n)&&n.name===`AbortError`?n:on(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function lc(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??dc,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function uc(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new o(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new o(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let i=n?.provider??e.aiProviders[0]?.name??t.defaultProvider;if(!i)throw new o(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||dc(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:i,model:r,temperature:n?.temperature??.7,...n?.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n?.topP!==void 0&&{topP:n.topP}},systemMessage:e.systemMessage??t.defaultSystemMessage,tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function dc(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function fc(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var pc=class{templates=new Map;logger;constructor(){this.logger=k(`AgentTemplates`),this.logger.info(`AgentTemplates initialized`)}registerTemplate(e){if(!e.id)throw Error(`Template must have an ID`);this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags})}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(e=>t.tags?.includes(e))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let n=[],r=!1,i={...e.config},a={...i,...t},o=e=>{e in t&&i[e]!==t[e]&&(r=!0,i[e]!==void 0&&n.push(`Override: ${e} changed from "${String(i[e])}" to "${String(t[e])}"`))};t.name!==void 0&&o(`name`),t.systemMessage!==void 0&&o(`systemMessage`);let s=a;return this.logger.debug(`Template applied`,{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:n.length,modified:r}),{config:s,template:e,warnings:n,modified:r}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info(`All templates cleared`)}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(e=>e.category).filter(e=>typeof e==`string`&&e.length>0))],n=[...new Set(e.flatMap(e=>e.tags||[]))],r=[...new Set(e.map(e=>e.config.defaultModel?.provider).filter(e=>typeof e==`string`&&e.length>0))],i=[...new Set(e.map(e=>e.config.defaultModel?.model).filter(e=>typeof e==`string`&&e.length>0))];return{totalTemplates:e.length,categories:t,tags:n,providers:r,models:i}}};function mc(e){let t=e,n=typeof t.initialize==`function`?t.initialize:void 0,r=typeof t.cleanup==`function`?t.cleanup:void 0;if(n!==void 0||r!==void 0)return{...n?{initialize:()=>n.call(e)}:{},...r?{cleanup:()=>r.call(e)}:{}}}function hc(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function gc(e){let t=[];for(let n of e){try{await n.run()}catch(e){let r=[];for(let e of t.reverse())if(e.undo!==void 0)try{await e.undo()}catch(t){r.push({step:e.name,error:t})}throw _c(e,n.name,r)}t.push(n)}}function _c(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var vc=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new pc,this.logger=k(`AgentFactory`),this.options=lc(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug(`AgentFactory initialized`,{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null})}async initialize(){this.initialized||(this.logger.debug(`Initializing AgentFactory`),this.initialized=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,n=!1){let i,a=this.admit();try{i=uc(t,this.options);let s=i;if(this.options.strictValidation){let e=ln(i);if(!e.isValid)throw new r(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let c;if(await gc([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(s)},{name:`construct`,run:()=>{c=new e(s)}},{name:`initialize`,run:()=>c?mc(c)?.initialize?.():void 0,undo:()=>c?mc(c)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!c)throw new o(`Agent was not constructed`);this.activeAgents.set(a,c),fc(this.creationStats,n)},undo:()=>{this.activeAgents.delete(a),this.creationStats.activeCount--,this.creationStats.totalCreated--,n?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>c?this.lifecycleEvents.afterCreate?.(c,s):void 0}]),this.pendingAgents.delete(a),!c)throw new o(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:a,model:i.defaultModel.model,provider:i.defaultModel.provider}),c}catch(e){this.pendingAgents.delete(a);let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(n,i),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new o(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);let e=this.options.idFactory(),t=0;for(;this.activeAgents.has(e)||this.pendingAgents.has(e);){if(t+=1,t>16)throw new o(`Agent id factory keeps returning ids that are already in use`);e=this.options.idFactory()}return this.pendingAgents.add(e),e}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new o(`Template not found: ${t}`);let i=this.applyTemplate(r,n);i.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:i.warnings});let a=await this.createAgent(e,i.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:i.modified,warnings:i.warnings.length}),a}registerTemplate(e){this.agentTemplates.registerTemplate(e)}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return!1;try{return await mc(t)?.cleanup?.(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info(`Agent destroyed`,{agentId:e}),!0}catch(t){throw this.logger.error(`Error destroying agent`,{agentId:e,error:t instanceof Error?t.message:String(t)}),t}}getCreationStats(){return{...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return ln(e)}};function yc(e,t,n){if(!e.name||e.name.trim()===``)throw new o(`Module name is required`);if(!e.version||e.version.trim()===``)throw new o(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new o(`Invalid module type: ${i.errors.join(`, `)}`,{moduleName:e.name,errors:i.errors});i.warnings.length>0&&n.warn(`Module type validation warnings`,{moduleName:e.name,warnings:i.warnings})}async function bc(e,t,n,r){let i=e.getModuleType();if(!i.dependencies||i.dependencies.length===0)return;for(let n of i.dependencies)if(!t.hasType(n))throw new o(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let s=[];for(let e of i.dependencies)a.has(e)||s.push(e);s.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:s})}function xc(e,t){let n=t.get(e);if(!n)return[];let r=n.getModuleType().type,i=[];for(let[n,a]of t.entries())n!==e&&a.getModuleType().dependencies?.includes(r)&&i.push(n);return i}function Sc(e,t){let n={},r=0,i=0,a=0,o=0,s=0,c=0;for(let t of e.values()){let e=t.getModuleType().type;n[e]=(n[e]||0)+1,t.isInitialized()&&r++,t.isEnabled()&&i++}for(let e of t.values())a+=e.totalExecutions,o+=e.successfulExecutions,s+=e.failedExecutions,c+=e.totalExecutionTime;return{totalModules:e.size,initializedModules:r,enabledModules:i,modulesByType:n,totalExecutions:a,totalSuccessfulExecutions:o,totalFailedExecutions:s,averageExecutionTime:a>0?c/a:0}}function Cc(){return[{type:`storage`,category:`storage`,layer:`infrastructure`,capabilities:[`data-persistence`,`data-retrieval`]},{type:`memory-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`in-memory-storage`,`fast-access`]},{type:`file-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`persistent-storage`,`file-system-access`]},{type:`text-processing`,category:`processing`,layer:`application`,capabilities:[`text-analysis`,`content-transformation`]},{type:`file-processing`,category:`processing`,layer:`application`,dependencies:[`storage`],capabilities:[`file-parsing`,`content-extraction`]},{type:`api-integration`,category:`integration`,layer:`application`,capabilities:[`external-api-access`,`data-synchronization`]},{type:`database-integration`,category:`integration`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`database-access`,`query-execution`]},{type:`rag`,category:`capability`,layer:`domain`,dependencies:[`storage`,`text-processing`],capabilities:[`document-search`,`context-retrieval`,`semantic-search`]},{type:`speech-processing`,category:`capability`,layer:`domain`,capabilities:[`speech-to-text`,`text-to-speech`,`audio-processing`]},{type:`image-analysis`,category:`capability`,layer:`domain`,capabilities:[`image-recognition`,`visual-analysis`,`content-extraction`]}]}function wc(e,t){let n=[],r=[];if((!e.type||e.type.trim()===``)&&n.push(`Module type is required and cannot be empty`),e.category||n.push(`Module category is required`),e.layer||n.push(`Module layer is required`),e.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(e.type)&&n.push(`Module type must start with a letter and contain only letters, numbers, hyphens, and underscores`),e.dependencies){for(let t of e.dependencies)(!t||t.trim()===``)&&n.push(`Dependencies cannot be empty`);e.dependencies.includes(e.type)&&n.push(`Module cannot depend on itself`)}if(e.capabilities)for(let t of e.capabilities)(!t||t.trim()===``)&&n.push(`Capabilities cannot be empty`);if(e.dependencies){let n=[`infrastructure`,`core`,`application`,`domain`,`presentation`],i=n.indexOf(e.layer);for(let a of e.dependencies){let o=t(a);o&&n.indexOf(o.layer)>i&&r.push(`Module '${e.type}' (${e.layer}) depends on '${a}' (${o.layer}) which is in a higher layer`)}}return{valid:n.length===0,errors:n,warnings:r}}function Tc(e,t,n){let r=new Set,i=new Set,a=[],o=[],s=[];for(let r of e){let e=t(r);if(!e){s.push(r);continue}if(e.dependencies)for(let t of e.dependencies)!n(t)&&!s.includes(t)&&s.push(t)}let c=(s,l=[])=>{if(i.has(s)){let e=l.indexOf(s);o.push(l.slice(e).concat([s]));return}if(r.has(s))return;let u=t(s);if(!u)return;i.add(s);let d=[...l,s];if(u.dependencies)for(let t of u.dependencies)(e.includes(t)||n(t))&&c(t,d);i.delete(s),r.add(s),a.push(s)};for(let t of e)r.has(t)||c(t);return{resolved:s.length===0&&o.length===0,order:a,circularDependencies:o,missingDependencies:s}}function Ec(e,t){let n=[],r=[],i=new Map;for(let n of e){let e=t(n);e&&(i.has(e.layer)||i.set(e.layer,[]),i.get(e.layer).push(n))}let a=new Map;for(let n of e){let e=t(n);if(e?.capabilities)for(let t of e.capabilities)a.has(t)||a.set(t,[]),a.get(t).push(n)}for(let[e,t]of Array.from(a.entries()))if(t.length>1)for(let r=0;r<t.length;r++)for(let i=r+1;i<t.length;i++){let a=t[r],o=t[i];a&&o&&n.push({module1:a,module2:o,reason:`Both modules provide capability '${e}'`})}return n.length>0&&(r.push(`Consider using only one module per capability`),r.push(`Check if modules can be configured to avoid conflicts`)),!i.has(`infrastructure`)&&e.length>1&&r.push(`Consider adding infrastructure modules for better foundation`),{compatible:n.length===0,conflicts:n,suggestions:r}}function Dc(e){let t={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},n={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,i=0;for(let a of e.values())t[a.category]++,n[a.layer]++,a.dependencies&&a.dependencies.length>0&&r++,a.capabilities&&a.capabilities.length>0&&i++;return{totalTypes:e.size,typesByCategory:t,typesByLayer:n,typesWithDependencies:r,typesWithCapabilities:i}}var Oc=class{registeredTypes=new Map;logger;constructor(){this.logger=k(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new o(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new o(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return wc(e,e=>this.getType(e))}resolveDependencies(e){return Tc(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return Ec(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of Cc())this.registerType(e);this.logger.info(`Built-in module types registered`,{totalTypes:this.registeredTypes.size})}clearAllTypes(){this.registeredTypes.clear(),this.logger.info(`All module types cleared`)}getStats(){return Dc(this.registeredTypes)}};const kc={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var Ac=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=!1;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new Oc,this.logger=k(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new o(`Cannot register modules during disposal`);if(yc(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new o(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await bc(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let n=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:n.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:n.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(kc.REGISTERED,{data:{moduleName:e.name,moduleType:n.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let n=xc(e,this.modules);if(n.length>0)throw new o(`Cannot unregister module '${e}' - it is required by: ${n.join(`, `)}`,{moduleName:e,dependents:n});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let r=this.registrationOrder.indexOf(e);r!==-1&&this.registrationOrder.splice(r,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(kc.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new o(`Module '${e}' not found`);if(n.isInitialized())return;let r=this.moduleOptions.get(e),i=n.initialize(r,this.eventEmitter);if(t&&t>0){let n,r=new Promise((r,i)=>{n=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${t}ms`))},t)});await Promise.race([i.then(e=>(clearTimeout(n),e)),r])}else await i;let a=this.moduleStatuses.get(e);a&&(a.initialized=!0,a.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e)}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let n=t.map(e=>this.modules.get(e).getModuleType().type),r=this.typeRegistry.resolveDependencies(n);if(!r.resolved){let e=[];throw r.missingDependencies.length>0&&e.push(`Missing dependencies: ${r.missingDependencies.join(`, `)}`),r.circularDependencies.length>0&&e.push(`Circular dependencies: ${r.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new o(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:r.missingDependencies,circularDependencies:r.circularDependencies.map(e=>e.join(` -> `))})}for(let n of r.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let n=this.modules.get(e);if(!n)throw new o(`Module '${e}' not found`);if(!n.isInitialized())throw new o(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new o(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new o(`Module '${e}' does not support execute()`);let a=await n.execute(t),s=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=s,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let c=this.moduleStatuses.get(e);return c&&(c.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return Sc(this.modules,this.moduleStats)}},jc=class extends ji{version=`1.0.0`;aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;conversationId;logger;initializationPromise;destroyed=!1;isFullyInitialized=!1;startTime;configVersion=1;configUpdatedAt=Date.now();configManager;constructor(e){super(),this.config=e,this.conversationId=la(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=k(`ConversationAgent`,t?{level:t}:{}),this.startTime=Date.now(),Ni(e),this.config={...e,aiProviders:[...e.aiProviders],...e.providerOwnership?{providerOwnership:{...e.providerOwnership}}:{}},this.aiProviders=nc(e),this.tools=ua(()=>this.config),this.agentFactory=new vc,this.conversationHistory=new Lr,this.eventEmitter=ba(),this.moduleRegistry=new Ac(this.eventEmitter),this.eventService=e.eventService||ui,this.agentEventService=W(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:xa(this.conversationId,this.config.executionContext)});let n=pa({getName:()=>this.name,getModuleRegistry:()=>this.moduleRegistry,getLogger:()=>this.logger,getIsFullyInitialized:()=>this.isFullyInitialized,ensureFullyInitialized:()=>this.ensureFullyInitialized(),getExecutionService:()=>this.executionService,getAiProviders:()=>this.aiProviders,getTools:()=>this.tools,getEventService:()=>this.eventService,getConfig:()=>this.config,setConfig:e=>{this.config=e},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:e=>{this.configUpdatedAt=e},emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)});this.moduleManager=n.moduleManager,this.pluginManager=n.pluginManager,this.configManager=n.configManager,va(this.config,(e,t)=>this.emitAgentEvent(e,t))}async ensureReady(){await this.ensureFullyInitialized()}async listRuntimeTools(){return await this.ensureReady(),this.tools.getTools()}async invokeRuntimeTool(e,t,n){await this.ensureReady();let r=[...xa(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:W(this.eventService,{ownerPath:r,ownerType:`tool`,ownerId:n.executionId??e}),ownerPath:r,ownerType:`tool`,ownerId:n.executionId})}async resume(e){let t={...e,toolResponses:structuredClone(e.toolResponses)};return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();let e=await this.executionService.resume(this.conversationId,t,this.config);if(!e.success)throw e.error??Error(`Execution continuation failed`);return e.response})}async resumeToolCalls(e){let t={...e,toolResponses:structuredClone(e.toolResponses)};return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>(await this.ensureFullyInitialized(),this.executionService.resumeToolCalls(this.conversationId,t)))}async run(e,t={}){return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();try{if(t.output){let n=sr(t.output);return await Da(this.executionDeps(),e,t,n)}return await Ca(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory()}})}async*runStream(e,t={}){this.assertNotDestroyed();let n=await this.runQueue.acquire(t.signal);try{if(await this.ensureFullyInitialized(),t.output){let n=sr(t.output);return yield*Oa(this.executionDeps(),e,t,n)}return yield*wa(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new sc;executionDeps(){return{conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return Aa(this.conversationHistory,this.conversationId)}getFullHistory(){return ja(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Ma(this.conversationHistory,this.conversationId,e)}clearHistory(){Na(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Pa(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Fa(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config,aiProviders:[...this.config.aiProviders],...this.config.providerOwnership?{providerOwnership:{...this.config.providerOwnership}}:{}}}swapDefaultProvider(e,t,n={}){this.aiProviders.addProvider(e.name,e,n),this.config={...this.config,aiProviders:Object.values(this.aiProviders.getProviders()),providerOwnership:{...this.config.providerOwnership,[e.name]:n.ownership??`owned`}},this.configManager.setModel({provider:e.name,model:t})}getStats(){return ac({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){return this.destroyed?{errors:[]}:(this.destroyed=!0,await this.runQueue.drained,oc({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,tools:this.tools,aiProviders:this.aiProviders,logger:this.logger,resetState:()=>{this.isFullyInitialized=!1,this.initializationPromise=void 0}}))}assertNotDestroyed(){if(this.destroyed)throw Error(`[LIFECYCLE] Agent "${this.name}" has been destroyed — create a new instance`)}async initialize(){await this.ensureFullyInitialized()}async ensureFullyInitialized(){this.assertNotDestroyed(),!this.isFullyInitialized&&(this.initializationPromise||=this.doAsyncInit().catch(e=>{throw this.initializationPromise=void 0,e}),await this.initializationPromise)}doAsyncInit(){return ic({ctx:{config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger},setExecutionService:e=>{this.executionService=e},setFullyInitialized:e=>{this.isFullyInitialized=e}})}emitAgentEvent(e,t){ya(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const Mc=1e4,Nc=25e3,Pc=5e5,Fc=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,Ic=Symbol.for(`@robota-sdk/tool-result-admitted`);var Lc=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Rc(e){return Object.getOwnPropertyDescriptor(e,Ic)?.value===!0}function zc(e){return Object.defineProperty({...e},Ic,{value:!0})}function Bc(e){if(e.parts?.length&&e.parts.every(e=>e.type===`text`)){let t=e.parts.map(e=>e.type===`text`?e.text:``).join(`
|
|
9
|
+
`);if(e.success&&e.data===t||!e.success&&e.data===void 0&&e.error===t)return t}if(e.parts?.length)return JSON.stringify({success:e.success,data:e.data,error:e.error,parts:e.parts});if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function Vc(e){return Number.isSafeInteger(e)&&e>0}function Hc(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Vc(n)||!Vc(r)||!Vc(i)||n>=r||r>i||i>5e5)throw new Lc(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Vc(t))throw new Lc(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Uc(e,t,n={},r){let{warningChars:i,hardChars:a}=Hc(n,r),o=Bc(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Lc(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Lc(`spill-write-failed`)}if(!Fc.test(e)||e.length>a)throw new Lc(`invalid-reference`);let r=t.view?{view:t.view}:{};return zc(t.success?{success:!0,data:e,...r}:{success:!1,error:`Tool failure details: ${e}`,...r})}return zc(t)}var Wc=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(e,t,n)=>{if(!n?.ownerPath?.length)throw Error(`[HISTORY-MODULE] Missing ownerPath for ${e}`);let r={eventName:e,sequenceId:this.nextSequenceId(),timestamp:t.timestamp,eventData:t,context:n};this.store.append(r)},t.subscribe(this.listener)}append(e){this.store.append(e)}read(e,t){return this.store.read(e,t)}readStream(e,t){return this.store.readStream(e,t)}getSnapshot(){return this.store.getSnapshot?.()}detach(e){e.unsubscribe(this.listener)}nextSequenceId(){return this.sequenceId+=1,this.sequenceId}};const Gc={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},Kc=`orchestration`;function qc(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Jc(e){return typeof e==`string`?e.length:0}var Yc=class{config;methodConfigs=new Map;constructor(e){this.config=e}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType===`agent`&&(this.configureMethod(`run`,{startEvent:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Jc(n[0]),conversationId:e.conversationId,options:qc(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Jc(n[0]),conversationId:e.conversationId,streaming:!0,options:qc(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:N.CALL_START,completeEvent:N.CALL_COMPLETE,errorEvent:N.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:qc(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:qc(n[0])?Object.keys(qc(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof qc(e)?.data==`string`?qc(e)?.data||``:JSON.stringify(qc(e)?.data),success:qc(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(e,t,n)=>{let r=Reflect.get(e,t,n);if(typeof t!=`string`)return r;let i=t;if(typeof r==`function`&&this.methodConfigs.has(i)){let t=this.methodConfigs.get(i);return async(...n)=>{let a=Date.now(),o=this.generateExecutionId(),s=e;try{if(t.startEvent){let e=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.startEvent,{timestamp:new Date,metadata:{...e,executionId:o,methodName:i,phase:`start`}})}let c=await r.apply(e,n),l=Date.now()-a;if(t.completeEvent){let e=t.extractResult?.(c)||{},r=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.completeEvent,{timestamp:new Date,...e,metadata:{...r,executionId:o,methodName:i,duration:l,phase:`complete`,success:!0}})}return c}catch(e){let r=Date.now()-a;if(t.errorEvent){let a=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.errorEvent,{timestamp:new Date,error:e instanceof Error?e.message:String(e),metadata:{...a,executionId:o,methodName:i,duration:r,phase:`error`,errorName:e instanceof Error?e.name:`UnknownError`,success:!1}})}throw e}}}return r}})}emitEvent(e,t){let n={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},r={timestamp:new Date,...t.metadata?{metadata:{...n,...t.metadata}}:{metadata:n},...t};this.config.eventService.emit(e,r)}generateExecutionId(){return`${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}};function Xc(e,t){let n=new Yc(t);return n.configureStandardMethods(),n.wrap(e)}function Zc(e,t,n){return function(r){return Xc(r,{eventService:e,sourceType:t,sourceId:n})}}const Qc={safe:`plan`,moderate:`default`,full:`acceptEdits`},$c=`inherit-allowlist`;function el(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
|
|
10
|
+
`||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function tl(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=rl(t,e,n);if(r!==void 0){n=r;continue}let i=il(t,e,n);if(i!==void 0){n=i;continue}if(al(t,e[n]))continue;let a=ol(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return nl(t),t.segments}function nl(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function rl(e,t,n){let r=t[n];if(e.quote===`'`)return e.current+=r,r===`'`&&(e.quote=void 0),n;if(r===`\\`){let i=t[n+1];return e.current+=i===void 0?r:r+i,n+1}}function il(e,t,n){let r=t[n];if(r==="`")return nl(e),n;if(r===`$`&&t[n+1]===`(`)return nl(e),e.substitutionDepth+=1,n+1}function al(e,t){return e.quote===`"`?(e.current+=t,t===`"`&&(e.quote=void 0),!0):t===`'`||t===`"`?(e.quote=t,e.current+=t,!0):!1}function ol(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return nl(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return nl(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
|
|
11
|
+
`||r===`&`&&sl(t,n))return nl(e),n}function sl(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const cl=/[.+^${}()|[\]\\]/g;function ll(e){let t=e.replace(cl,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function ul(e,t,n){let r=ll(e);return n===`deny`?r.test(t)||tl(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&el(t)?`no-match`:`match`:`no-match`}function dl(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(cl,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function fl(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function pl(e){let t=e.replace(/\\/g,`/`),n=t.startsWith(`/`),r=[];for(let e of t.split(`/`))if(e!==``&&e!==`.`){if(e===`..`){r.length>0&&r[r.length-1]!==`..`?r.pop():n||r.push(`..`);continue}r.push(e)}let i=(n?`/`:``)+r.join(`/`);return(i===``?`.`:i).replace(/^[A-Za-z]:(?=\/|$)/,e=>e.toLowerCase())}function ml(e,t){let n=pl(e),r=pl(t);return fl(n)&&!fl(r)?`unevaluable`:dl(n).test(r)?`match`:`no-match`}const hl=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,gl=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),_l={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function vl(e){return e.replace(/\.$/,``).toLowerCase()}function yl(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function bl(e,t=!1){let n=vl(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),r=[],i=`[^.]+(?:\\.[^.]+)*`;for(let[e,a]of n.entries()){let o=e===0,s=e===n.length-1;if(a===`**`){o&&s?r.push(i):s?r.push(`(?:\\.${i})?`):r.push(`${o?``:`\\.`}(?:${i}\\.)?`);continue}let c=!o&&n[e-1]===`**`,l=o||c?``:`\\.`;if(a===`*`)r.push(`${l}${t&&!o?`[^.]*`:i}`);else if(a.includes(`**`))return null;else if(a.includes(`*`))r.push(`${l}${a.replace(cl,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=yl(a);if(e===null)return null;r.push(`${l}${e.replace(cl,`\\$&`)}`)}}return RegExp(`^${r.join(``)}$`)}function xl(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function Sl(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!gl.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function Cl(e,t,n=!1){if(e.includes(`*`)){let r=bl(e,n);return r===null?`unevaluable`:r.test(t)?`match`:`no-match`}let r;try{r=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return vl(r)===t?`match`:`no-match`}function wl(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?_l[n]:t.port)}function Tl(e,t){let n=xl(t),r=xl(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:dl(r).test(n)?`match`:`no-match`}function El(e,t){let n=hl.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=Sl(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=Cl(i,vl(s.hostname));return l===`match`?wl(a,s,c)?o===void 0?`match`:Tl(o,s.pathname):`no-match`:l}function Dl(e,t){if(!e.startsWith(`domain:`))return El(e,t);let n=/^domain:([^/\\:?#@[\]\s]+)$/.exec(e);if(n===null)return`unevaluable`;let r=vl(n[1]);if(r.includes(`**`)||r.split(`.`).some(e=>e===``))return`unevaluable`;let i=Sl(t);return i===null||i.protocol!==`http:`&&i.protocol!==`https:`?`unevaluable`:Cl(r,vl(i.hostname),!0)}const Ol={plan:{inspect:`auto`,modify:`deny`,execute:`deny`},default:{inspect:`auto`,modify:`approve`,execute:`approve`},acceptEdits:{inspect:`auto`,modify:`auto`,execute:`approve`},bypassPermissions:{inspect:`auto`,modify:`auto`,execute:`auto`},auto:{inspect:`auto`,modify:`auto`,execute:`approve`}},kl={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},Al=[`.git`,`.claude`,`.agents`],jl=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function Ml(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function Nl(e){let t=[];for(let n of Ml(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function Pl(e,t={}){let n=t.pathProtection,r=Ll.exec(e),i=r!==null&&t.homeDirectory!==void 0?`${t.homeDirectory}/${r[1]??``}`:e,a=i.startsWith(`/`)?Fl(i):t.cwd===void 0?void 0:Fl(`${t.cwd}/${i}`);if(a!==void 0&&n?.protectedPaths.some(e=>{let t=Fl(e);return a===t||a.startsWith(`${t}/`)}))return!0;let o=Nl(i),s=o[o.length-1];if(s!==void 0&&jl.includes(s))return!0;let c=[...Al,...n?.protectedDirectoryNames??[]],l=[`.claude/worktrees`,...n?.writableWorktreeContainers??[]].map(Nl);for(let e=0;e<o.length;e+=1){if(!c.includes(o[e]))continue;let t=l.find(t=>t.length>0&&t.every((t,n)=>o[e+n]===t)&&o[e+t.length]!==void 0);if(t!==void 0){e+=t.length;continue}return!0}return!1}function Fl(e){let t=[];for(let n of Ml(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Il(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const Ll=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Rl(e,t){let n=Il(e),r=Ll.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Fl(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Fl(n);else{if(t.cwd===void 0)return!1;i=Fl(`${t.cwd}/${n}`)}if(Ml(i).length<=1||t.homeDirectory!==void 0&&i===Fl(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Fl(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const zl=new Set([`rm`,`rmdir`]),Bl=new Map([[`sudo`,new Set([`-u`,`-g`,`-h`,`-p`,`-C`,`-D`,`-r`,`-t`,`-U`,`-T`])],[`nice`,new Set([`-n`])],[`env`,new Set([`-u`,`-C`,`-S`])],[`command`,new Set],[`builtin`,new Set],[`nohup`,new Set],[`time`,new Set]]);function Vl(e){let t=0,n;for(;t<e.length;){let r=e[t];if(/^[A-Za-z_]\w*=/.test(r)){t+=1;continue}let i=Bl.get(r);if(i!==void 0){n=i,t+=1;continue}if(n!==void 0&&r.startsWith(`-`)){t+=n.has(r)?2:1;continue}return t}return t}function Hl(e,t){return tl(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Vl(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!zl.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Rl(e,t))})}const Ul=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Wl=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Gl={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Kl=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,ql=[`--dereference`,`--dereference-recursive`,`--dereference-args`,`--dereference-command-line`,`--file`,`--files0-from`,`--exclude-from`,`--from-file`,`--to-file`,`--contents`,`--ignore-revs-file`,`--output`,`--output-directory`,`--ext-diff`,`--no-index`,`--open-files-in-pager`];function Jl(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return ql.some(e=>e.startsWith(t))}function Yl(e,t){if(su(t).some(e=>Kl.test(e.text)||Jl(e.text)))return!0;if(e===`find`)return su(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Gl[e];return n!==void 0&&su(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Xl=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Zl=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Ql=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),$l=new Set([`/dev/null`]),eu=/[A-Za-z0-9_./:=@+,*?[\]~-]/,tu=new Set([`$`,"`",`\\`,`!`]),nu=new Set([`*`,`?`,`[`]);function ru(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||iu(e)}function iu(e){let t=e.split(`/`),n=e=>/[*?[]/.test(e);if(t.slice(0,-1).some(n))return!0;let r=t[t.length-1];return n(r)&&/^[.?[]/.test(r)}function au(e){let t;for(let n of e){if(t===`'`){n===`'`&&(t=void 0);continue}if(n===`$`||n==="`"||n===`\\`)return!0;if(t===`"`){n===`"`&&(t=void 0);continue}if(n===`'`||n===`"`)t=n;else if(n===`(`||n===`)`||n===`{`||n===`}`)return!0}return!1}function ou(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!$l.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||ru(n))&&(s=!0):t.push({text:n,expands:r}),o=void 0,n=``,r=!1,!1)};for(let t=0;t<e.length&&!s;t+=1){let l=e[t];if(a===`'`){l===`'`?a=void 0:n+=l;continue}if(a===`"`){l===`"`?a=void 0:tu.has(l)?s=!0:n+=l;continue}if(l===`'`||l===`"`){a=l,i=!0;continue}if(l===` `||l===` `){c();continue}if(l===`>`||l===`<`||l===`&`&&e[t+1]===`>`){i&&!/^\d+$/.test(n)&&c(),n=``,r=!1,i=!1,l===`&`&&(t+=1);let a=l===`&`?`>`:l,u=e[t+1];if(a===`<`&&(u===`<`||u===`>`)){s=!0;break}if((u===a||u===`|`)&&(t+=1,u=e[t+1]),u===`&`&&l!==`&`){t+=1,o=`duplicate`;continue}o=a===`>`?`output`:`input`;continue}if(!eu.test(l)){s=!0;break}nu.has(l)&&(r=!0),n+=l,i=!0}return a!==void 0&&(s=!0),c(),o!==void 0&&(s=!0),{words:t,refused:s}}function su(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function cu(e){return e.every(e=>!e.expands&&!Wl.has(e.text))}function lu(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Zl.has(e.text));return t.every(e=>Zl.has(e.text)||Ql.has(e.text))&&(n||t.length===e.length)}function uu(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Xl.has(t.text)||n.some(e=>e.expands)||n.some(e=>/^-[XO]/.test(e.text))||n.some(e=>/^--(output|ext-diff|open-files-in-pager|no-index)/.test(e.text))?!1:t.text===`branch`?lu(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function du(e){let[t,...n]=e;return t===void 0||t.expands||t.text.includes(`=`)||t.text.includes(`/`)||n.some(e=>/^[@=]/.test(e.text))||n.some(e=>e.expands)?!1:t.text===`echo`?!0:n.some(e=>ru(e.text))||Yl(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Ul.has(t.text)?!0:t.text===`find`?cu(n):t.text===`git`&&uu(n)}const fu=new Set([`echo`,`which`,`git`]);function pu(e,t){let n;for(let[r,...i]of e)if(!fu.has(r.text))for(let e of i){if(e.text===`--`)continue;if(t===void 0)return!1;let i=t(n,e.text);if(i===void 0)return!1;r.text===`cd`&&(n=i)}return!0}function mu(e,t={}){if(t.otherDirectory===!0||e.length>1e4||au(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=tl(e);if(n.length===0)return!1;let r=n.map(ou);if(r.some(e=>e.refused||!du(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:pu(r.map(e=>e.words),t.resolveInWorkspace)}function hu(e){let t=e.indexOf(`(`);return t===-1?{toolName:e.trim(),argPattern:void 0}:{toolName:e.slice(0,t).trim(),argPattern:e.slice(t+1,e.lastIndexOf(`)`)).trim()}}const Q=new Map;function gu(e,t){Q.set(e,{...Q.get(e),...t})}function _u(){Q.clear()}function vu(e){return Q.get(e)??{}}function yu(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=ll(e);return n.some(e=>r.test(e))}function bu(e,t){let n=/^([A-Za-z_]\w*):([\s\S]*)$/.exec(t);if(n===null)return;let r=n[1],i=Q.get(e);if(i?.argument?.key===r)return`primary`;if(i?.parameters?.includes(r)===!0)return{name:r,value:n[2]}}function xu(e,t){if(!Object.prototype.hasOwnProperty.call(t,e.name))return`no-match`;let n=t[e.name];return n===void 0?`no-match`:typeof n!=`string`&&typeof n!=`number`&&typeof n!=`boolean`?`unevaluable`:ll(e.value).test(String(n))?`match`:`no-match`}function Su(e,t){return t.some(t=>{let n=hu(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&yu(n.toolName,e)})}function Cu(e){return Q.get(e)?.argument?.key}function wu(e,t){let n=Cu(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function Tu(e,t,n,r=`allow`){return n.some(n=>Du(e,t,n,r)===`match`)}function Eu(e,t,n){return n.some(n=>Du(e,t,n,`deny`)===`unevaluable`)}function Du(e,t,n,r){let i=hu(n);if(!yu(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=bu(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?xu(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=wu(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return e===`WebFetch`?Dl(i.argPattern,s):El(i.argPattern,s);case`path`:return ml(i.argPattern,s);case`command`:return ul(i.argPattern,s,r);case`text`:return ll(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function Ou(e,t,n){let r=Q.get(e),i=r?.argument;if(i===void 0)return!1;let a=t[i.key];return typeof a==`string`?i.kind===`command`?Hl(a,n):i.kind===`path`&&r?.riskClass===`modify`&&Pl(a,n):!1}function ku(e,t,n,r){return Tu(e,t,n,`deny`)||Eu(e,t,n)||Ou(e,t,r)}function Au(e,t,n={},r={}){return Eu(e,t,n.deny??[])||ku(e,t,n.ask??[],r)}const ju=[`workingDirectory`,`cwd`];function Mu(e,t,n){let r=Q.get(e);if(r?.riskClass!==`execute`||r.argument?.kind!==`command`)return r?.riskClass;let i=t[r.argument.key];return typeof i==`string`&&mu(i,{otherDirectory:ju.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function Nu(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=Mu(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return Tu(e,t,o,`deny`)||i.ceiling!==void 0&&!Tu(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:Eu(e,t,o)?n===`plan`?`deny`:`approve`:ku(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||Tu(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?kl[n]:Ol[n][c]}function Pu(e,t={}){let n=t.taskDeny??[];switch(e){case`deny`:return{ceiling:[],askAll:!1,allow:[],deny:n};case`prompt`:return{askAll:!0,allow:[],deny:n};case`preapproved`:{let e=t.taskAllow??[];return{ceiling:e,askAll:!1,allow:e,deny:n}}case`inherit-allowlist`:return{ceiling:t.parentAllow??[],askAll:!1,allow:[],deny:n};default:throw Error(`unknown permission policy: ${String(e)}`)}}const Fu=/^[A-Za-z_]\w*:(?!\/\/)/;function Iu(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function Lu(e,t=`deny`){let n=e.trim();if(n===``)return`is empty`;if(n.includes(`(`)&&!n.endsWith(`)`))return`opens "(" without closing it`;let{toolName:r,argPattern:i}=hu(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Iu(r))return`globs the tool name without a literal "<server>__" prefix, which an allow rule may not do`;if(i===void 0||i===`*`||i===`**`)return;if(i===``)return`has an empty argument pattern; write Tool or Tool(*) instead`;if(r.includes(`*`))return t===`allow`&&Fu.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=bu(r,i);if(a!==void 0&&a!==`primary`)return t===`allow`?`matches a named parameter, which only deny and ask rules may do`:void 0;let o=vu(r);if(!(o.parameters===void 0&&Fu.test(i)&&bu(r,i)===void 0)){if(o.argument===void 0)return o.riskClass===void 0?void 0:`tool "${r}" declares no argument key, so an argument-scoped pattern can never be evaluated`;if(o.argument.kind===`url`&&(r===`WebFetch`?Dl:El)(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path]${r===`WebFetch`?` or domain:hostname`:``} that "${r}" is matched by`}}function Ru(e,t=`deny`){let n=[];for(let r of e){let e=Lu(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function zu(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=hu(n.trim());if(r===void 0||e.includes(`*`))continue;let i=vu(e),a=bu(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&Fu.test(r)){t.push({pattern:n,reason:`names no parameter of "${e}" (${i.parameters.join(`, `)}), so it is read as an ordinary argument pattern`});continue}if(a!==`primary`)continue;let o=vu(e).argument?.key??``;t.push({pattern:n,reason:`names "${e}"'s primary field "${o}", so it asks on every call; write ${e}(${r.slice(o.length+1)}) instead`})}return t}function Bu(e){return(e??[]).map(e=>`${e}(*)`)}function Vu(e,t){let n=Bu(t.allowedTools),r=Ru(n,`allow`);if(r.length>0){let e=r.map(({pattern:e,reason:t})=>`"${e}" ${t}`).join(`; `);throw Error(`Invalid preset allowedTools: ${e}.`)}return{allow:[...e.allow,...n],deny:[...new Set([...e.deny,...Bu(t.deniedTools)])]}}const Hu=[`Bash`,`Shell`,`BackgroundProcess`],Uu=[`Agent`],Wu=[...Hu,...Uu,`ExecuteCommand`,`Computer`],Gu=`python.node.deno.bun.ruby.perl.php.bash.sh.zsh.fish.pwsh.powershell.cmd.env.xargs.eval.exec.sudo.timeout.nohup.nice.time.command.setsid.stdbuf.watch.ssh.docker.podman.find`.split(`.`),Ku=[`npm run`,`npm run-script`,`npm exec`,`npm x`,`npx`,`pnpm`,`pnpx`,`yarn`,`bunx`,`uv run`,`uvx`,`pipx run`,`cargo run`,`go run`,`make`,`just`].map(e=>e.split(` `)),qu=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Ju(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Yu(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Ju(e[0]);if(Gu.some(t=>n(t,r,e.length===1)))return!0;for(let i of Ku){let a=Math.min(i.length,e.length);if(!i.slice(0,a).every((t,i)=>n(t,i===0?r:e[i],i===e.length-1)))continue;if(e.length<=i.length)return!0;let o=e.slice(i.length);for(;o.length>0&&(o[0].startsWith(`-`)||qu.has(o[0]));)o=o.slice(1);return o.length===0||Yu(o,t)}return!1}function Xu(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Yu(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Zu(e){let{toolName:t,argPattern:n}=hu(e),r=e=>e.some(e=>yu(t,e));return r(Uu)?!0:t.includes(`*`)?r(Wu):Wu.includes(t)||vu(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Hu.includes(t)&&Xu(n):!1}function Qu(e){return e.filter(e=>!Zu(e))}const $u=1e6,ed={"claude-opus-4-7":{inputPerMillion:15,outputPerMillion:75},"claude-opus-4-5":{inputPerMillion:15,outputPerMillion:75},"claude-sonnet-4-6":{inputPerMillion:3,outputPerMillion:15},"claude-sonnet-4-5":{inputPerMillion:3,outputPerMillion:15},"claude-haiku-4-5":{inputPerMillion:.8,outputPerMillion:4},"claude-3-5-sonnet-20241022":{inputPerMillion:3,outputPerMillion:15},"claude-3-5-haiku-20241022":{inputPerMillion:.8,outputPerMillion:4},"claude-3-opus-20240229":{inputPerMillion:15,outputPerMillion:75},"gpt-4o":{inputPerMillion:2.5,outputPerMillion:10},"gpt-4o-mini":{inputPerMillion:.15,outputPerMillion:.6},o1:{inputPerMillion:15,outputPerMillion:60},"o1-mini":{inputPerMillion:3,outputPerMillion:12},o3:{inputPerMillion:10,outputPerMillion:40},"o3-mini":{inputPerMillion:1.1,outputPerMillion:4.4},"deepseek-chat":{inputPerMillion:.14,outputPerMillion:.28},"deepseek-reasoner":{inputPerMillion:.55,outputPerMillion:2.19},"gemini-2.0-flash":{inputPerMillion:.1,outputPerMillion:.4},"gemini-2.0-flash-thinking":{inputPerMillion:.35,outputPerMillion:3.5},"gemini-1.5-pro":{inputPerMillion:1.25,outputPerMillion:5},"gemini-1.5-flash":{inputPerMillion:.075,outputPerMillion:.3}},td=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function nd(e){let t=Object.hasOwn(ed,e)?ed[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of td)if(t.test(e))return n}function rd(e,t,n){let r=nd(e);if(r)return t/$u*r.inputPerMillion+n/$u*r.outputPerMillion}function id(e){let t=nd(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function ad(e,t){if(!e.matcher)return!0;if(!t)return!1;try{return new RegExp(e.matcher).test(t)}catch{return e.matcher===t}}function od(e){if(e.tool_name)return e.tool_name;if(e.hook_event_name===`SubagentStart`||e.hook_event_name===`SubagentStop`)return e.agent_type??e.agent_id;if(e.hook_event_name===`SessionEnd`)return e.reason}async function sd(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-DIXaSMrr.js`),import(`./http-executor-B4YgCJg7.js`)]);return[new e,new t]}async function cd(e,t,n,r,i){if(!e)return{blocked:!1,stdout:``};let a=new Set,o=[],s=()=>({...a.size>0&&{unknownHookTypes:[...a].sort()},...o.length>0&&{errors:[...o]}}),c=e[t];if(!c||c.length===0)return{blocked:!1,stdout:``};let l=r??await sd(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=od(n),p=-1,m,h;for(let e of c){if(!ad(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
|
|
12
|
+
`),...s()};if(c.outcome===`error`){o.push(c);continue}let l=re(c.stdout,t);if(d.push(...l.context),l.blockReason!==void 0)return{blocked:!0,reason:l.blockReason,stdout:d.join(`
|
|
13
|
+
`),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0&&c.source===`command`){let e=ne[l.permissionDecision];e>p?(p=e,m=l.permissionDecision,h=l.updatedInput):e===p&&l.updatedInput!==void 0&&(h=l.updatedInput)}}}let g={blocked:!1,stdout:d.join(`
|
|
14
|
+
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var ld=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},ud=class{type=`guardrail`;guardrails;constructor(e){this.guardrails=e instanceof Map?new Map(e):new Map(Object.entries(e))}async execute(e,t){if(e.type!==`guardrail`)return{outcome:`error`,source:`guardrail`,kind:`malformed-response`,reason:`GuardrailExecutor received a '${e.type}' definition`};if(e.guardrails){let t=e.guardrails.filter(e=>!this.guardrails.has(e));if(t.length>0)return{outcome:`deny`,source:`guardrail`,reason:`Unknown guardrail(s) referenced but not registered: ${t.join(`, `)}`}}let n=this.selectGuardrails(e.guardrails);if(n.length===0)return{outcome:`allow`,source:`guardrail`,stdout:``};try{await Promise.all(n.map(async([e,n])=>{let r;try{r=await n(t)}catch(t){throw new ld(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new ld(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof ld)return{outcome:`deny`,source:`guardrail`,reason:e.guardrailReason};throw e}return{outcome:`allow`,source:`guardrail`,stdout:``}}selectGuardrails(e){if(!e)return[...this.guardrails.entries()];let t=[];for(let n of e){let e=this.guardrails.get(n);e&&t.push([n,e])}return t}};function $(e){return{posture:`advisory`,enforcementReachable:!1,rationale:`Fire-and-forget at ${e}: the result is never awaited, so no posture can be honoured here.`}}function dd(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function fd(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const pd=fd({PreToolUse:{posture:`enforcing`,enforcementReachable:!0,rationale:"The tool-execution gate. `runPreToolGate` awaits the result and turns `blocked` into a denial, so a hook that reached no verdict must not read as approval (tracker issue #2075)."},SessionEnd:dd(`session-lifecycle.ts`,`nothing`),PreCompact:dd(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:dd(`session-run.ts`,"`stdout`"),PostToolUse:$(`tool-hook-helpers.ts`),SessionStart:$(`session-lifecycle.ts`),PostCompact:$(`session-history-ops.ts`),Stop:$(`session-run.ts`),StopFailure:$(`session-run.ts`),SubagentStart:$(`background-task-hooks.ts`),SubagentStop:$(`background-task-hooks.ts`),WorktreeCreate:$(`worktree-subagent-runner.ts`),WorktreeRemove:$(`worktree-subagent-runner.ts`),PreModelCall:$(`session-run.ts`),PostModelCall:$(`session-run.ts`),PermissionDecision:$(`permission-enforcer.ts`)});function md(e){return pd[e].posture===`enforcing`}function hd(e){if(e.type===`resource_link`)return`Resource reference (not fetched): ${JSON.stringify(e)}`;if(e.type===`resource_embedded`){let t=`${JSON.stringify(e.uri)}${e.mimeType?` (${e.mimeType})`:``}`;return e.text===void 0?`Embedded binary resource ${t}; binary content retained but not transmitted by this adapter.`:`Embedded resource ${t}:\n${e.text}`}if(e.type===`audio_inline`)return`Audio observation (${e.mimeType}); this adapter does not transmit audio payloads.`}export{j as AGENT_EVENTS,Gt as AGENT_EVENT_PREFIX,Bt as AbstractAIProvider,Ue as AbstractAgent,ci as AbstractEventService,tn as AbstractExecutor,We as AbstractManager,en as AbstractPlugin,nn as AbstractTool,vc as AgentFactory,y as AgentRuntimeError,pc as AgentTemplates,g as AuthenticationError,Ae as CONFIRM_NO,ke as CONFIRM_YES,Ui as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,p as CacheIntegrityError,f as CircuitBreakerOpenError,o as ConfigurationError,Nt as ConsoleLogger,jc as ConversationAgent,jc as Robota,Lr as ConversationHistory,Ir as ConversationStore,ui as DEFAULT_ABSTRACT_EVENT_SERVICE,$c as DEFAULT_BACKGROUND_PERMISSION_POLICY,Qi as DEFAULT_CONTEXT_WINDOW,ia as DEFAULT_MAX_OUTPUT,Nc as DEFAULT_TOOL_RESULT_HARD_CHARS,Mc as DEFAULT_TOOL_RESULT_WARNING_CHARS,Di as DEFERRED_WITHOUT_LOADER_MESSAGE,li as DefaultEventService,xr as ENV_REFERENCE_PREFIX,F as EVENT_EMITTER_EVENTS,M as EXECUTION_EVENTS,Kt as EXECUTION_EVENT_PREFIX,C as EmptyCompletionError,mn as ErrorUtils,Qr as EventEmitterPlugin,Wc as EventHistoryModule,I as ExecutionJournalError,Yc as ExecutionProxy,R as ExecutionRecoveryError,L as ExecutionSuspendedError,Ti as FunctionTool,ud as GuardrailExecutor,Ur as InMemoryEventEmitterMetrics,Br as LocalExecutor,Pc as MAX_TOOL_RESULT_CHARS,de as MODEL_EFFORT_VALUES,ed as MODEL_PRICES,sn as MessageConverter,T as ModelNotAvailableError,c as NetworkError,Gc as ORCHESTRATION_EVENTS,Kc as ORCHESTRATION_EVENT_PREFIX,gi as ObservableEventService,yt as PARAMETER_SCHEMA_KEYWORDS,wt as PERMISSIVE_TOOL_SCHEMA_PROFILE,Al as PROTECTED_DIRECTORY_NAMES,jl as PROTECTED_FILE_NAMES,vi as PROVIDER_CALL_EVENTS,yi as PROVIDER_FALLBACK_EVENTS,Ut as PluginCategory,w as PluginError,Wt as PluginPriority,i as ProviderError,Ol as RISK_CLASS_POLICY,e as RateLimitError,_i as SPAN_EVENTS,wi as SPAN_EVENT_PREFIX,Tt as STRICT_TOOL_SCHEMA_PROFILE,te as SameToolInputLoopError,jt as SilentLogger,a as StorageError,mi as StructuredEventService,n as StructuredOutputError,ma as TASK_EVENTS,ha as TASK_EVENT_PREFIX,xi as TOOL_BODY_EVENTS,N as TOOL_EVENTS,qt as TOOL_EVENT_PREFIX,Ci as TOOL_PERMISSION_EVENTS,Si as TOOL_QUEUE_EVENTS,_t as TOOL_SCHEMA_PROJECTION_MAX_DEPTH,vt as TOOL_SCHEMA_PROJECTION_MAX_NODES,Oe as TOOL_SEARCH_TOOL_NAME,Qc as TRUST_TO_MODE,t as ToolExecutionError,ei as ToolRegistry,Lc as ToolResultAdmissionError,oe as TypeUtils,kl as UNCLASSIFIED_TOOL_FALLBACK,ga as USER_EVENTS,_a as USER_EVENT_PREFIX,u as UnsupportedShellError,r as ValidationError,cn as Validator,Uc as admitToolResult,Qu as allowRulesForAutoMode,Vu as applyPresetToolLists,ce as assertProviderNativeWebToolsAvailable,Ai as assertResidentToolRemains,hi as bindEventServiceOwner,W as bindWithOwnerPath,_ as buildTraceparent,rd as calculateModelCost,Hn as callJournaledProvider,Ze as chatEntryToMessage,Rn as classifyProviderFailure,_u as clearRegisteredToolProfiles,ft as closeObjectSchemas,ls as collectAssistantUsageMetadata,fi as composeEventName,Me as confirmAction,on as createAbortError,Mr as createAssistantMessage,S as createBoundedOutput,se as createDefaultProviderCapabilities,Xc as createExecutionProxy,yr as createImageProviderFromDefinition,k as createLogger,pe as createModelEffortOutcome,Dr as createProviderFromConfig,gr as createRecordEnvResolver,Nr as createSystemMessage,Pr as createToolMessage,jr as createUserMessage,br as createVideoProviderFromDefinition,ie as decodeHookVerdict,id as estimateBlendedCostPer1000,Ki as estimateContextTokensFromMessages,Wi as estimateSerializedContextTokens,Gi as estimateToolSchemaTokens,Nu as evaluatePermission,Yn as extractEnumValues,Ru as findInvalidPermissionPatterns,De as findMediaProviderDefinition,na as findModelDefinition,zu as findPermissionPatternWarnings,ve as findProviderDefinition,Cr as formatEnvReference,ye as formatSupportedProviderTypes,sa as formatTokenCount,pi as generateSpanId,It as getGlobalLogLevel,Rt as getGlobalLoggerSink,$e as getMessagesForAPI,ra as getModelContextWindow,aa as getModelMaxOutput,oa as getModelName,_e as getProviderCapabilities,be as getProviderCredentialRequirement,Zn as getSchemaTypeName,Re as getToolEstimatedDuration,ze as getToolExecutionSteps,vu as getToolPermissionProfile,Tr as hasUsableSecretReference,Xn as hasValidationConstraints,kt as hashToolSchema,an as isAbortFailure,tt as isAssistantMessage,Zu as isBroadExecutionAllowRule,Xe as isChatEntry,Ie as isConfirmed,di as isDefaultEventService,md as isEnforcing,Sr as isEnvReference,z as isExecutionControlError,we as isImageGenerationProvider,Ee as isMediaProviderDefinition,b as isMintedSpanId,fe as isModelEffort,Le as isProgressReportingTool,Pl as isProtectedPath,mu as isReadOnlyCommandLine,hc as isRegistryTransactionError,nt as isSystemMessage,Su as isToolDeniedOutright,rt as isToolMessage,et as isUserMessage,Te as isVideoGenerationProvider,mc as lifecycleOf,A as logger,nd as lookupModelPrice,Tu as matchesAnyPattern,Qe as messageToHistoryEntry,Se as modelDeclaresCapability,Pe as multiSelectAction,hd as nonVisualObservationText,Er as normalizeProviderConfig,sr as normalizeStructuredOutput,m as outboundTraceContextFor,bu as parseParameterRule,fr as parseStructuredResponseText,ms as peerDriverOf,hs as printablePeerDriver,hr as processEnvResolver,Pu as projectPermissionPolicy,At as projectToolSchema,s as providerCallSpanId,bi as readModelFallbackNotice,Dn as readProviderFailureDetails,Ii as readTokenUsageFromMessage,Li as readTokenUsageFromMetadata,ea as registerModelMetadata,gu as registerToolPermissionProfile,Hl as removesCriticalPath,Au as requiresFreshApproval,wr as resolveEnvReference,vr as resolveMediaProviderConfig,xe as resolveModelCapabilities,Ce as resolveModelCapability,ge as resolveModelEffort,d as resolvePlatformShell,mr as resolveStructuredOutputCapability,cd as runHooks,gc as runRegistryTransaction,Tn as scrubSecrets,Ne as selectAction,Ft as setGlobalLogLevel,Lt as setGlobalLoggerSink,Be as setToolProgressCallback,Hr as shellArgumentForDisplay,Ve as snapshotToolProvenance,v as spanIdFromMintedId,tl as splitCommandSegments,zn as startPeriodicTask,Bn as stopPeriodicTask,x as subprocessTraceEnvironment,ss as sumHistoryUsage,os as sumMessagesUsage,Fe as textAction,Mn as toProviderError,yu as toolNameMatches,Bu as toolNamesToPatterns,l as toolTraceContextFor,h as traceEnvFor,ee as traceHeadersFor,cr as validateAgainstJsonSchema,ln as validateAgentConfig,pn as validateApiKey,fn as validateModelName,Lu as validatePermissionPattern,dn as validateProviderName,un as validateUserInput,as as verifiedProviderCallUsage,Rc as wasToolResultAdmitted,Zc as withEventEmission,He as withToolProvenance,Qn as zodToJsonSchema};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|