@accomplish_ai/agent-core 0.0.0-pr-353-20260205225158
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/LICENSE +21 -0
- package/dist/browser/detection.d.ts +4 -0
- package/dist/browser/detection.d.ts.map +1 -0
- package/dist/browser/detection.js +43 -0
- package/dist/browser/detection.js.map +1 -0
- package/dist/browser/index.d.ts +3 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +3 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/server.d.ts +19 -0
- package/dist/browser/server.d.ts.map +1 -0
- package/dist/browser/server.js +204 -0
- package/dist/browser/server.js.map +1 -0
- package/dist/common/constants/model-display.d.ts +7 -0
- package/dist/common/constants/model-display.d.ts.map +1 -0
- package/dist/common/constants/model-display.js +105 -0
- package/dist/common/constants/model-display.js.map +1 -0
- package/dist/common/constants.d.ts +12 -0
- package/dist/common/constants.d.ts.map +1 -0
- package/dist/common/constants.js +13 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/index.d.ts +21 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +15 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/schemas/index.d.ts +2 -0
- package/dist/common/schemas/index.d.ts.map +1 -0
- package/dist/common/schemas/index.js +2 -0
- package/dist/common/schemas/index.js.map +1 -0
- package/dist/common/schemas/validation.d.ts +69 -0
- package/dist/common/schemas/validation.d.ts.map +1 -0
- package/dist/common/schemas/validation.js +34 -0
- package/dist/common/schemas/validation.js.map +1 -0
- package/dist/common/types/auth.d.ts +28 -0
- package/dist/common/types/auth.d.ts.map +1 -0
- package/dist/common/types/auth.js +2 -0
- package/dist/common/types/auth.js.map +1 -0
- package/dist/common/types/index.d.ts +11 -0
- package/dist/common/types/index.d.ts.map +1 -0
- package/dist/common/types/index.js +11 -0
- package/dist/common/types/index.js.map +1 -0
- package/dist/common/types/logging.d.ts +15 -0
- package/dist/common/types/logging.d.ts.map +1 -0
- package/dist/common/types/logging.js +5 -0
- package/dist/common/types/logging.js.map +1 -0
- package/dist/common/types/opencode.d.ts +108 -0
- package/dist/common/types/opencode.d.ts.map +1 -0
- package/dist/common/types/opencode.js +2 -0
- package/dist/common/types/opencode.js.map +1 -0
- package/dist/common/types/permission.d.ts +35 -0
- package/dist/common/types/permission.d.ts.map +1 -0
- package/dist/common/types/permission.js +4 -0
- package/dist/common/types/permission.js.map +1 -0
- package/dist/common/types/provider.d.ts +83 -0
- package/dist/common/types/provider.d.ts.map +1 -0
- package/dist/common/types/provider.js +305 -0
- package/dist/common/types/provider.js.map +1 -0
- package/dist/common/types/providerSettings.d.ts +89 -0
- package/dist/common/types/providerSettings.d.ts.map +1 -0
- package/dist/common/types/providerSettings.js +63 -0
- package/dist/common/types/providerSettings.js.map +1 -0
- package/dist/common/types/skills.d.ts +22 -0
- package/dist/common/types/skills.d.ts.map +1 -0
- package/dist/common/types/skills.js +2 -0
- package/dist/common/types/skills.js.map +1 -0
- package/dist/common/types/task.d.ts +70 -0
- package/dist/common/types/task.d.ts.map +1 -0
- package/dist/common/types/task.js +14 -0
- package/dist/common/types/task.js.map +1 -0
- package/dist/common/types/thought-stream.d.ts +21 -0
- package/dist/common/types/thought-stream.d.ts.map +1 -0
- package/dist/common/types/thought-stream.js +6 -0
- package/dist/common/types/thought-stream.js.map +1 -0
- package/dist/common/types/todo.d.ts +7 -0
- package/dist/common/types/todo.d.ts.map +1 -0
- package/dist/common/types/todo.js +2 -0
- package/dist/common/types/todo.js.map +1 -0
- package/dist/common/utils/id.d.ts +7 -0
- package/dist/common/utils/id.d.ts.map +1 -0
- package/dist/common/utils/id.js +20 -0
- package/dist/common/utils/id.js.map +1 -0
- package/dist/common/utils/index.d.ts +4 -0
- package/dist/common/utils/index.d.ts.map +1 -0
- package/dist/common/utils/index.js +4 -0
- package/dist/common/utils/index.js.map +1 -0
- package/dist/common/utils/log-source-detector.d.ts +9 -0
- package/dist/common/utils/log-source-detector.d.ts.map +1 -0
- package/dist/common/utils/log-source-detector.js +22 -0
- package/dist/common/utils/log-source-detector.js.map +1 -0
- package/dist/common/utils/waiting-detection.d.ts +7 -0
- package/dist/common/utils/waiting-detection.d.ts.map +1 -0
- package/dist/common/utils/waiting-detection.js +62 -0
- package/dist/common/utils/waiting-detection.js.map +1 -0
- package/dist/common.d.ts +21 -0
- package/dist/common.d.ts.map +1 -0
- package/dist/common.js +20 -0
- package/dist/common.js.map +1 -0
- package/dist/factories/index.d.ts +8 -0
- package/dist/factories/index.d.ts.map +1 -0
- package/dist/factories/index.js +8 -0
- package/dist/factories/index.js.map +1 -0
- package/dist/factories/log-writer.d.ts +3 -0
- package/dist/factories/log-writer.d.ts.map +1 -0
- package/dist/factories/log-writer.js +45 -0
- package/dist/factories/log-writer.js.map +1 -0
- package/dist/factories/permission-handler.d.ts +3 -0
- package/dist/factories/permission-handler.d.ts.map +1 -0
- package/dist/factories/permission-handler.js +6 -0
- package/dist/factories/permission-handler.js.map +1 -0
- package/dist/factories/skills-manager.d.ts +3 -0
- package/dist/factories/skills-manager.d.ts.map +1 -0
- package/dist/factories/skills-manager.js +10 -0
- package/dist/factories/skills-manager.js.map +1 -0
- package/dist/factories/speech.d.ts +3 -0
- package/dist/factories/speech.d.ts.map +1 -0
- package/dist/factories/speech.js +6 -0
- package/dist/factories/speech.js.map +1 -0
- package/dist/factories/storage.d.ts +4 -0
- package/dist/factories/storage.d.ts.map +1 -0
- package/dist/factories/storage.js +192 -0
- package/dist/factories/storage.js.map +1 -0
- package/dist/factories/task-manager.d.ts +4 -0
- package/dist/factories/task-manager.d.ts.map +1 -0
- package/dist/factories/task-manager.js +61 -0
- package/dist/factories/task-manager.js.map +1 -0
- package/dist/factories/thought-stream.d.ts +3 -0
- package/dist/factories/thought-stream.d.ts.map +1 -0
- package/dist/factories/thought-stream.js +6 -0
- package/dist/factories/thought-stream.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/classes/CompletionEnforcer.d.ts +27 -0
- package/dist/internal/classes/CompletionEnforcer.d.ts.map +1 -0
- package/dist/internal/classes/CompletionEnforcer.js +109 -0
- package/dist/internal/classes/CompletionEnforcer.js.map +1 -0
- package/dist/internal/classes/LogCollector.d.ts +28 -0
- package/dist/internal/classes/LogCollector.d.ts.map +1 -0
- package/dist/internal/classes/LogCollector.js +100 -0
- package/dist/internal/classes/LogCollector.js.map +1 -0
- package/dist/internal/classes/LogFileWriter.d.ts +21 -0
- package/dist/internal/classes/LogFileWriter.d.ts.map +1 -0
- package/dist/internal/classes/LogFileWriter.js +140 -0
- package/dist/internal/classes/LogFileWriter.js.map +1 -0
- package/dist/internal/classes/OpenCodeAdapter.d.ts +94 -0
- package/dist/internal/classes/OpenCodeAdapter.d.ts.map +1 -0
- package/dist/internal/classes/OpenCodeAdapter.js +653 -0
- package/dist/internal/classes/OpenCodeAdapter.js.map +1 -0
- package/dist/internal/classes/OpenCodeLogWatcher.d.ts +36 -0
- package/dist/internal/classes/OpenCodeLogWatcher.d.ts.map +1 -0
- package/dist/internal/classes/OpenCodeLogWatcher.js +257 -0
- package/dist/internal/classes/OpenCodeLogWatcher.js.map +1 -0
- package/dist/internal/classes/PermissionRequestHandler.d.ts +57 -0
- package/dist/internal/classes/PermissionRequestHandler.d.ts.map +1 -0
- package/dist/internal/classes/PermissionRequestHandler.js +132 -0
- package/dist/internal/classes/PermissionRequestHandler.js.map +1 -0
- package/dist/internal/classes/SecureStorage.d.ts +44 -0
- package/dist/internal/classes/SecureStorage.d.ts.map +1 -0
- package/dist/internal/classes/SecureStorage.js +231 -0
- package/dist/internal/classes/SecureStorage.js.map +1 -0
- package/dist/internal/classes/SkillsManager.d.ts +33 -0
- package/dist/internal/classes/SkillsManager.d.ts.map +1 -0
- package/dist/internal/classes/SkillsManager.js +340 -0
- package/dist/internal/classes/SkillsManager.js.map +1 -0
- package/dist/internal/classes/SpeechService.d.ts +30 -0
- package/dist/internal/classes/SpeechService.d.ts.map +1 -0
- package/dist/internal/classes/SpeechService.js +216 -0
- package/dist/internal/classes/SpeechService.js.map +1 -0
- package/dist/internal/classes/StreamParser.d.ts +18 -0
- package/dist/internal/classes/StreamParser.d.ts.map +1 -0
- package/dist/internal/classes/StreamParser.js +117 -0
- package/dist/internal/classes/StreamParser.js.map +1 -0
- package/dist/internal/classes/TaskManager.d.ts +72 -0
- package/dist/internal/classes/TaskManager.d.ts.map +1 -0
- package/dist/internal/classes/TaskManager.js +283 -0
- package/dist/internal/classes/TaskManager.js.map +1 -0
- package/dist/internal/classes/ThoughtStreamHandler.d.ts +15 -0
- package/dist/internal/classes/ThoughtStreamHandler.d.ts.map +1 -0
- package/dist/internal/classes/ThoughtStreamHandler.js +60 -0
- package/dist/internal/classes/ThoughtStreamHandler.js.map +1 -0
- package/dist/opencode/adapter.d.ts +93 -0
- package/dist/opencode/adapter.d.ts.map +1 -0
- package/dist/opencode/adapter.js +650 -0
- package/dist/opencode/adapter.js.map +1 -0
- package/dist/opencode/auth.d.ts +12 -0
- package/dist/opencode/auth.d.ts.map +1 -0
- package/dist/opencode/auth.js +65 -0
- package/dist/opencode/auth.js.map +1 -0
- package/dist/opencode/cli-resolver.d.ts +5 -0
- package/dist/opencode/cli-resolver.d.ts.map +1 -0
- package/dist/opencode/cli-resolver.js +148 -0
- package/dist/opencode/cli-resolver.js.map +1 -0
- package/dist/opencode/completion/completion-enforcer.d.ts +27 -0
- package/dist/opencode/completion/completion-enforcer.d.ts.map +1 -0
- package/dist/opencode/completion/completion-enforcer.js +109 -0
- package/dist/opencode/completion/completion-enforcer.js.map +1 -0
- package/dist/opencode/completion/completion-state.d.ts +36 -0
- package/dist/opencode/completion/completion-state.d.ts.map +1 -0
- package/dist/opencode/completion/completion-state.js +97 -0
- package/dist/opencode/completion/completion-state.js.map +1 -0
- package/dist/opencode/completion/index.d.ts +6 -0
- package/dist/opencode/completion/index.d.ts.map +1 -0
- package/dist/opencode/completion/index.js +4 -0
- package/dist/opencode/completion/index.js.map +1 -0
- package/dist/opencode/completion/prompts.d.ts +4 -0
- package/dist/opencode/completion/prompts.d.ts.map +1 -0
- package/dist/opencode/completion/prompts.js +58 -0
- package/dist/opencode/completion/prompts.js.map +1 -0
- package/dist/opencode/config-builder.d.ts +61 -0
- package/dist/opencode/config-builder.d.ts.map +1 -0
- package/dist/opencode/config-builder.js +395 -0
- package/dist/opencode/config-builder.js.map +1 -0
- package/dist/opencode/config-generator.d.ts +86 -0
- package/dist/opencode/config-generator.d.ts.map +1 -0
- package/dist/opencode/config-generator.js +407 -0
- package/dist/opencode/config-generator.js.map +1 -0
- package/dist/opencode/environment.d.ts +46 -0
- package/dist/opencode/environment.d.ts.map +1 -0
- package/dist/opencode/environment.js +102 -0
- package/dist/opencode/environment.js.map +1 -0
- package/dist/opencode/index.d.ts +23 -0
- package/dist/opencode/index.d.ts.map +1 -0
- package/dist/opencode/index.js +13 -0
- package/dist/opencode/index.js.map +1 -0
- package/dist/opencode/log-watcher.d.ts +36 -0
- package/dist/opencode/log-watcher.d.ts.map +1 -0
- package/dist/opencode/log-watcher.js +257 -0
- package/dist/opencode/log-watcher.js.map +1 -0
- package/dist/opencode/message-processor.d.ts +69 -0
- package/dist/opencode/message-processor.d.ts.map +1 -0
- package/dist/opencode/message-processor.js +193 -0
- package/dist/opencode/message-processor.js.map +1 -0
- package/dist/opencode/proxies/azure-foundry-proxy.d.ts +10 -0
- package/dist/opencode/proxies/azure-foundry-proxy.d.ts.map +1 -0
- package/dist/opencode/proxies/azure-foundry-proxy.js +216 -0
- package/dist/opencode/proxies/azure-foundry-proxy.js.map +1 -0
- package/dist/opencode/proxies/azure-token-manager.d.ts +11 -0
- package/dist/opencode/proxies/azure-token-manager.d.ts.map +1 -0
- package/dist/opencode/proxies/azure-token-manager.js +58 -0
- package/dist/opencode/proxies/azure-token-manager.js.map +1 -0
- package/dist/opencode/proxies/index.d.ts +6 -0
- package/dist/opencode/proxies/index.d.ts.map +1 -0
- package/dist/opencode/proxies/index.js +4 -0
- package/dist/opencode/proxies/index.js.map +1 -0
- package/dist/opencode/proxies/moonshot-proxy.d.ts +10 -0
- package/dist/opencode/proxies/moonshot-proxy.d.ts.map +1 -0
- package/dist/opencode/proxies/moonshot-proxy.js +416 -0
- package/dist/opencode/proxies/moonshot-proxy.js.map +1 -0
- package/dist/opencode/stream-parser.d.ts +18 -0
- package/dist/opencode/stream-parser.d.ts.map +1 -0
- package/dist/opencode/stream-parser.js +117 -0
- package/dist/opencode/stream-parser.js.map +1 -0
- package/dist/opencode/task-manager.d.ts +72 -0
- package/dist/opencode/task-manager.d.ts.map +1 -0
- package/dist/opencode/task-manager.js +283 -0
- package/dist/opencode/task-manager.js.map +1 -0
- package/dist/providers/azure-foundry.d.ts +48 -0
- package/dist/providers/azure-foundry.d.ts.map +1 -0
- package/dist/providers/azure-foundry.js +193 -0
- package/dist/providers/azure-foundry.js.map +1 -0
- package/dist/providers/bedrock.d.ts +34 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +162 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +10 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/litellm.d.ts +28 -0
- package/dist/providers/litellm.d.ts.map +1 -0
- package/dist/providers/litellm.js +110 -0
- package/dist/providers/litellm.js.map +1 -0
- package/dist/providers/lmstudio.d.ts +58 -0
- package/dist/providers/lmstudio.d.ts.map +1 -0
- package/dist/providers/lmstudio.js +153 -0
- package/dist/providers/lmstudio.js.map +1 -0
- package/dist/providers/models.d.ts +10 -0
- package/dist/providers/models.d.ts.map +1 -0
- package/dist/providers/models.js +35 -0
- package/dist/providers/models.js.map +1 -0
- package/dist/providers/ollama.d.ts +31 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +56 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openrouter.d.ts +20 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +49 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/tool-support-testing.d.ts +42 -0
- package/dist/providers/tool-support-testing.d.ts.map +1 -0
- package/dist/providers/tool-support-testing.js +114 -0
- package/dist/providers/tool-support-testing.js.map +1 -0
- package/dist/providers/validation.d.ts +13 -0
- package/dist/providers/validation.d.ts.map +1 -0
- package/dist/providers/validation.js +136 -0
- package/dist/providers/validation.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +5 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/permission-handler.d.ts +145 -0
- package/dist/services/permission-handler.d.ts.map +1 -0
- package/dist/services/permission-handler.js +207 -0
- package/dist/services/permission-handler.js.map +1 -0
- package/dist/services/speech.d.ts +63 -0
- package/dist/services/speech.d.ts.map +1 -0
- package/dist/services/speech.js +253 -0
- package/dist/services/speech.js.map +1 -0
- package/dist/services/summarizer.d.ts +19 -0
- package/dist/services/summarizer.d.ts.map +1 -0
- package/dist/services/summarizer.js +177 -0
- package/dist/services/summarizer.js.map +1 -0
- package/dist/services/thought-stream-handler.d.ts +54 -0
- package/dist/services/thought-stream-handler.d.ts.map +1 -0
- package/dist/services/thought-stream-handler.js +107 -0
- package/dist/services/thought-stream-handler.js.map +1 -0
- package/dist/skills/index.d.ts +2 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +2 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skills-manager.d.ts +33 -0
- package/dist/skills/skills-manager.d.ts.map +1 -0
- package/dist/skills/skills-manager.js +340 -0
- package/dist/skills/skills-manager.js.map +1 -0
- package/dist/storage/database.d.ts +14 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +72 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/migrations/errors.d.ts +17 -0
- package/dist/storage/migrations/errors.d.ts.map +1 -0
- package/dist/storage/migrations/errors.js +27 -0
- package/dist/storage/migrations/errors.js.map +1 -0
- package/dist/storage/migrations/index.d.ts +13 -0
- package/dist/storage/migrations/index.d.ts.map +1 -0
- package/dist/storage/migrations/index.js +69 -0
- package/dist/storage/migrations/index.js.map +1 -0
- package/dist/storage/migrations/v001-initial.d.ts +3 -0
- package/dist/storage/migrations/v001-initial.d.ts.map +1 -0
- package/dist/storage/migrations/v001-initial.js +77 -0
- package/dist/storage/migrations/v001-initial.js.map +1 -0
- package/dist/storage/migrations/v002-azure-foundry.d.ts +3 -0
- package/dist/storage/migrations/v002-azure-foundry.d.ts.map +1 -0
- package/dist/storage/migrations/v002-azure-foundry.js +18 -0
- package/dist/storage/migrations/v002-azure-foundry.js.map +1 -0
- package/dist/storage/migrations/v003-lmstudio.d.ts +3 -0
- package/dist/storage/migrations/v003-lmstudio.d.ts.map +1 -0
- package/dist/storage/migrations/v003-lmstudio.js +18 -0
- package/dist/storage/migrations/v003-lmstudio.js.map +1 -0
- package/dist/storage/migrations/v004-openai-base-url.d.ts +3 -0
- package/dist/storage/migrations/v004-openai-base-url.d.ts.map +1 -0
- package/dist/storage/migrations/v004-openai-base-url.js +9 -0
- package/dist/storage/migrations/v004-openai-base-url.js.map +1 -0
- package/dist/storage/migrations/v005-task-todos.d.ts +3 -0
- package/dist/storage/migrations/v005-task-todos.d.ts.map +1 -0
- package/dist/storage/migrations/v005-task-todos.js +19 -0
- package/dist/storage/migrations/v005-task-todos.js.map +1 -0
- package/dist/storage/migrations/v006-skills.d.ts +3 -0
- package/dist/storage/migrations/v006-skills.d.ts.map +1 -0
- package/dist/storage/migrations/v006-skills.js +23 -0
- package/dist/storage/migrations/v006-skills.js.map +1 -0
- package/dist/storage/repositories/appSettings.d.ts +30 -0
- package/dist/storage/repositories/appSettings.d.ts.map +1 -0
- package/dist/storage/repositories/appSettings.js +130 -0
- package/dist/storage/repositories/appSettings.js.map +1 -0
- package/dist/storage/repositories/index.d.ts +5 -0
- package/dist/storage/repositories/index.d.ts.map +1 -0
- package/dist/storage/repositories/index.js +5 -0
- package/dist/storage/repositories/index.js.map +1 -0
- package/dist/storage/repositories/providerSettings.d.ts +19 -0
- package/dist/storage/repositories/providerSettings.d.ts.map +1 -0
- package/dist/storage/repositories/providerSettings.js +114 -0
- package/dist/storage/repositories/providerSettings.js.map +1 -0
- package/dist/storage/repositories/skills.d.ts +9 -0
- package/dist/storage/repositories/skills.d.ts.map +1 -0
- package/dist/storage/repositories/skills.js +63 -0
- package/dist/storage/repositories/skills.js.map +1 -0
- package/dist/storage/repositories/taskHistory.d.ts +29 -0
- package/dist/storage/repositories/taskHistory.d.ts.map +1 -0
- package/dist/storage/repositories/taskHistory.js +159 -0
- package/dist/storage/repositories/taskHistory.js.map +1 -0
- package/dist/storage/secure-storage.d.ts +44 -0
- package/dist/storage/secure-storage.d.ts.map +1 -0
- package/dist/storage/secure-storage.js +227 -0
- package/dist/storage/secure-storage.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/log-writer.d.ts +26 -0
- package/dist/types/log-writer.d.ts.map +1 -0
- package/dist/types/log-writer.js +2 -0
- package/dist/types/log-writer.js.map +1 -0
- package/dist/types/permission-handler.d.ts +51 -0
- package/dist/types/permission-handler.d.ts.map +1 -0
- package/dist/types/permission-handler.js +2 -0
- package/dist/types/permission-handler.js.map +1 -0
- package/dist/types/skills-manager.d.ts +25 -0
- package/dist/types/skills-manager.d.ts.map +1 -0
- package/dist/types/skills-manager.js +2 -0
- package/dist/types/skills-manager.js.map +1 -0
- package/dist/types/speech.d.ts +32 -0
- package/dist/types/speech.d.ts.map +1 -0
- package/dist/types/speech.js +2 -0
- package/dist/types/speech.js.map +1 -0
- package/dist/types/storage.d.ts +95 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +2 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/types/task-manager.d.ts +69 -0
- package/dist/types/task-manager.d.ts.map +1 -0
- package/dist/types/task-manager.js +2 -0
- package/dist/types/task-manager.js.map +1 -0
- package/dist/types/thought-stream.d.ts +28 -0
- package/dist/types/thought-stream.d.ts.map +1 -0
- package/dist/types/thought-stream.js +2 -0
- package/dist/types/thought-stream.js.map +1 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/bundled-node.d.ts +11 -0
- package/dist/utils/bundled-node.d.ts.map +1 -0
- package/dist/utils/bundled-node.js +73 -0
- package/dist/utils/bundled-node.js.map +1 -0
- package/dist/utils/fetch.d.ts +2 -0
- package/dist/utils/fetch.d.ts.map +1 -0
- package/dist/utils/fetch.js +15 -0
- package/dist/utils/fetch.js.map +1 -0
- package/dist/utils/index.d.ts +14 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +14 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json.d.ts +10 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +17 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/log-collector.d.ts +20 -0
- package/dist/utils/log-collector.d.ts.map +1 -0
- package/dist/utils/log-collector.js +100 -0
- package/dist/utils/log-collector.js.map +1 -0
- package/dist/utils/log-file-writer.d.ts +26 -0
- package/dist/utils/log-file-writer.d.ts.map +1 -0
- package/dist/utils/log-file-writer.js +144 -0
- package/dist/utils/log-file-writer.js.map +1 -0
- package/dist/utils/logging.d.ts +26 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +91 -0
- package/dist/utils/logging.js.map +1 -0
- package/dist/utils/network.d.ts +14 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +38 -0
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/paths.d.ts +9 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +47 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/redact.d.ts +2 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +20 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/sanitize.d.ts +3 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +21 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/shell.d.ts +26 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +60 -0
- package/dist/utils/shell.js.map +1 -0
- package/dist/utils/system-path.d.ts +3 -0
- package/dist/utils/system-path.d.ts.map +1 -0
- package/dist/utils/system-path.js +142 -0
- package/dist/utils/system-path.js.map +1 -0
- package/dist/utils/task-status.d.ts +7 -0
- package/dist/utils/task-status.d.ts.map +1 -0
- package/dist/utils/task-status.js +12 -0
- package/dist/utils/task-status.js.map +1 -0
- package/dist/utils/task-validation.d.ts +10 -0
- package/dist/utils/task-validation.d.ts.map +1 -0
- package/dist/utils/task-validation.js +35 -0
- package/dist/utils/task-validation.js.map +1 -0
- package/dist/utils/url.d.ts +3 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +19 -0
- package/dist/utils/url.js.map +1 -0
- package/mcp-tools/ask-user-question/SKILL.md +133 -0
- package/mcp-tools/ask-user-question/dist/index.mjs +20794 -0
- package/mcp-tools/ask-user-question/package.json +17 -0
- package/mcp-tools/ask-user-question/src/index.ts +183 -0
- package/mcp-tools/ask-user-question/tsconfig.json +12 -0
- package/mcp-tools/complete-task/SKILL.md +17 -0
- package/mcp-tools/complete-task/dist/index.mjs +20722 -0
- package/mcp-tools/complete-task/package.json +12 -0
- package/mcp-tools/complete-task/src/index.ts +92 -0
- package/mcp-tools/dev-browser/SKILL.md +384 -0
- package/mcp-tools/dev-browser/dist/start-relay.mjs +6878 -0
- package/mcp-tools/dev-browser/dist/start-server.mjs +23369 -0
- package/mcp-tools/dev-browser/package.json +31 -0
- package/mcp-tools/dev-browser/src/index.ts +290 -0
- package/mcp-tools/dev-browser/src/relay.ts +652 -0
- package/mcp-tools/dev-browser/src/types.ts +31 -0
- package/mcp-tools/dev-browser/tsconfig.json +36 -0
- package/mcp-tools/dev-browser-mcp/README.md +42 -0
- package/mcp-tools/dev-browser-mcp/dist/index.mjs +24398 -0
- package/mcp-tools/dev-browser-mcp/package.json +17 -0
- package/mcp-tools/dev-browser-mcp/src/index.ts +3940 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/compactor.test.ts +86 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/compactor.ts +31 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/differ.test.ts +178 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/differ.ts +167 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/index.ts +19 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/manager.test.ts +247 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/manager.ts +131 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/parser.test.ts +94 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/parser.ts +81 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/priority.test.ts +104 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/priority.ts +84 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/tokens.test.ts +64 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/tokens.ts +36 -0
- package/mcp-tools/dev-browser-mcp/src/snapshot/types.ts +89 -0
- package/mcp-tools/dev-browser-mcp/tsconfig.json +15 -0
- package/mcp-tools/file-permission/dist/index.mjs +20752 -0
- package/mcp-tools/file-permission/package.json +17 -0
- package/mcp-tools/file-permission/src/index.ts +125 -0
- package/mcp-tools/file-permission/tsconfig.json +17 -0
- package/mcp-tools/package.json +13 -0
- package/mcp-tools/report-checkpoint/src/index.ts +127 -0
- package/mcp-tools/report-checkpoint/tsconfig.json +12 -0
- package/mcp-tools/report-thought/src/index.ts +109 -0
- package/mcp-tools/report-thought/tsconfig.json +12 -0
- package/mcp-tools/safe-file-deletion/SKILL.md +50 -0
- package/mcp-tools/start-task/dist/index.mjs +20719 -0
- package/mcp-tools/start-task/package.json +12 -0
- package/mcp-tools/start-task/src/index.ts +86 -0
- package/package.json +65 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Request Handler
|
|
3
|
+
*
|
|
4
|
+
* Reusable logic for handling permission and question requests.
|
|
5
|
+
* This module manages request state, timeouts, and validation.
|
|
6
|
+
* The Electron-specific parts (IPC, HTTP servers) remain in the desktop app.
|
|
7
|
+
*/
|
|
8
|
+
import type { PermissionRequest } from '../common/types/permission.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generic pending request interface
|
|
11
|
+
*/
|
|
12
|
+
export interface PendingRequest<T> {
|
|
13
|
+
resolve: (result: T) => void;
|
|
14
|
+
reject: (error: Error) => void;
|
|
15
|
+
timeoutId: NodeJS.Timeout;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validation result for permission request data
|
|
19
|
+
*/
|
|
20
|
+
export interface PermissionValidationResult {
|
|
21
|
+
valid: boolean;
|
|
22
|
+
error?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Raw file permission request data (from HTTP request body)
|
|
26
|
+
*/
|
|
27
|
+
export interface FilePermissionRequestData {
|
|
28
|
+
operation?: string;
|
|
29
|
+
filePath?: string;
|
|
30
|
+
filePaths?: string[];
|
|
31
|
+
targetPath?: string;
|
|
32
|
+
contentPreview?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Raw question request data (from HTTP request body)
|
|
36
|
+
*/
|
|
37
|
+
export interface QuestionRequestData {
|
|
38
|
+
question?: string;
|
|
39
|
+
header?: string;
|
|
40
|
+
options?: Array<{
|
|
41
|
+
label: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
}>;
|
|
44
|
+
multiSelect?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Question response data
|
|
48
|
+
*/
|
|
49
|
+
export interface QuestionResponseData {
|
|
50
|
+
selectedOptions?: string[];
|
|
51
|
+
customText?: string;
|
|
52
|
+
denied?: boolean;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Handles permission and question request lifecycle.
|
|
56
|
+
* Manages pending requests, timeouts, and validation.
|
|
57
|
+
*/
|
|
58
|
+
export declare class PermissionRequestHandler {
|
|
59
|
+
private pendingPermissions;
|
|
60
|
+
private pendingQuestions;
|
|
61
|
+
private defaultTimeoutMs;
|
|
62
|
+
constructor(timeoutMs?: number);
|
|
63
|
+
/**
|
|
64
|
+
* Create a new permission request and wait for response
|
|
65
|
+
* @param timeoutMs - Optional timeout override
|
|
66
|
+
* @returns Promise that resolves when user responds
|
|
67
|
+
*/
|
|
68
|
+
createPermissionRequest(timeoutMs?: number): {
|
|
69
|
+
requestId: string;
|
|
70
|
+
promise: Promise<boolean>;
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Create a new question request and wait for response
|
|
74
|
+
* @param timeoutMs - Optional timeout override
|
|
75
|
+
* @returns Promise that resolves when user responds
|
|
76
|
+
*/
|
|
77
|
+
createQuestionRequest(timeoutMs?: number): {
|
|
78
|
+
requestId: string;
|
|
79
|
+
promise: Promise<QuestionResponseData>;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Resolve a pending permission request
|
|
83
|
+
* @param requestId - The request ID to resolve
|
|
84
|
+
* @param allowed - Whether permission was granted
|
|
85
|
+
* @returns true if request was found and resolved, false otherwise
|
|
86
|
+
*/
|
|
87
|
+
resolvePermissionRequest(requestId: string, allowed: boolean): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Resolve a pending question request
|
|
90
|
+
* @param requestId - The request ID to resolve
|
|
91
|
+
* @param response - The user's response
|
|
92
|
+
* @returns true if request was found and resolved, false otherwise
|
|
93
|
+
*/
|
|
94
|
+
resolveQuestionRequest(requestId: string, response: QuestionResponseData): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Validate file permission request data
|
|
97
|
+
* @param data - Raw request data to validate
|
|
98
|
+
* @returns Validation result with error message if invalid
|
|
99
|
+
*/
|
|
100
|
+
validateFilePermissionRequest(data: unknown): PermissionValidationResult;
|
|
101
|
+
/**
|
|
102
|
+
* Validate question request data
|
|
103
|
+
* @param data - Raw request data to validate
|
|
104
|
+
* @returns Validation result with error message if invalid
|
|
105
|
+
*/
|
|
106
|
+
validateQuestionRequest(data: unknown): PermissionValidationResult;
|
|
107
|
+
/**
|
|
108
|
+
* Build a PermissionRequest object for file operations
|
|
109
|
+
* @param requestId - The request ID
|
|
110
|
+
* @param taskId - The associated task ID
|
|
111
|
+
* @param data - The validated request data
|
|
112
|
+
* @returns PermissionRequest object ready to send to the UI
|
|
113
|
+
*/
|
|
114
|
+
buildFilePermissionRequest(requestId: string, taskId: string, data: FilePermissionRequestData): PermissionRequest;
|
|
115
|
+
/**
|
|
116
|
+
* Build a PermissionRequest object for questions
|
|
117
|
+
* @param requestId - The request ID
|
|
118
|
+
* @param taskId - The associated task ID
|
|
119
|
+
* @param data - The validated request data
|
|
120
|
+
* @returns PermissionRequest object ready to send to the UI
|
|
121
|
+
*/
|
|
122
|
+
buildQuestionRequest(requestId: string, taskId: string, data: QuestionRequestData): PermissionRequest;
|
|
123
|
+
/**
|
|
124
|
+
* Check if there are any pending permission requests
|
|
125
|
+
*/
|
|
126
|
+
hasPendingPermissions(): boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Check if there are any pending question requests
|
|
129
|
+
*/
|
|
130
|
+
hasPendingQuestions(): boolean;
|
|
131
|
+
/**
|
|
132
|
+
* Get the count of pending permission requests
|
|
133
|
+
*/
|
|
134
|
+
getPendingPermissionCount(): number;
|
|
135
|
+
/**
|
|
136
|
+
* Get the count of pending question requests
|
|
137
|
+
*/
|
|
138
|
+
getPendingQuestionCount(): number;
|
|
139
|
+
/**
|
|
140
|
+
* Clear all pending requests (e.g., on shutdown)
|
|
141
|
+
* Rejects all pending promises with a cancellation error
|
|
142
|
+
*/
|
|
143
|
+
clearAll(): void;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=permission-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-handler.d.ts","sourceRoot":"","sources":["../../src/services/permission-handler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,OAAO,KAAK,EAAiB,iBAAiB,EAAoB,MAAM,+BAA+B,CAAC;AAExG;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,kBAAkB,CAA8C;IACxE,OAAO,CAAC,gBAAgB,CAA2D;IACnF,OAAO,CAAC,gBAAgB,CAAS;gBAErB,SAAS,GAAE,MAAsC;IAI7D;;;;OAIG;IACH,uBAAuB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE;IAgB7F;;;;OAIG;IACH,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;KAAE;IAgBxG;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO;IAYtE;;;;;OAKG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO;IAYlF;;;;OAIG;IACH,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,0BAA0B;IA2BxE;;;;OAIG;IACH,uBAAuB,CAAC,IAAI,EAAE,OAAO,GAAG,0BAA0B;IAclE;;;;;;OAMG;IACH,0BAA0B,CACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,yBAAyB,GAC9B,iBAAiB;IAcpB;;;;;;OAMG;IACH,oBAAoB,CAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,mBAAmB,GACxB,iBAAiB;IAapB;;OAEG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;OAEG;IACH,mBAAmB,IAAI,OAAO;IAI9B;;OAEG;IACH,yBAAyB,IAAI,MAAM;IAInC;;OAEG;IACH,uBAAuB,IAAI,MAAM;IAIjC;;;OAGG;IACH,QAAQ,IAAI,IAAI;CAajB"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Permission Request Handler
|
|
3
|
+
*
|
|
4
|
+
* Reusable logic for handling permission and question requests.
|
|
5
|
+
* This module manages request state, timeouts, and validation.
|
|
6
|
+
* The Electron-specific parts (IPC, HTTP servers) remain in the desktop app.
|
|
7
|
+
*/
|
|
8
|
+
import { FILE_OPERATIONS, PERMISSION_REQUEST_TIMEOUT_MS, createFilePermissionRequestId, createQuestionRequestId, } from '../common/index.js';
|
|
9
|
+
/**
|
|
10
|
+
* Handles permission and question request lifecycle.
|
|
11
|
+
* Manages pending requests, timeouts, and validation.
|
|
12
|
+
*/
|
|
13
|
+
export class PermissionRequestHandler {
|
|
14
|
+
pendingPermissions = new Map();
|
|
15
|
+
pendingQuestions = new Map();
|
|
16
|
+
defaultTimeoutMs;
|
|
17
|
+
constructor(timeoutMs = PERMISSION_REQUEST_TIMEOUT_MS) {
|
|
18
|
+
this.defaultTimeoutMs = timeoutMs;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Create a new permission request and wait for response
|
|
22
|
+
* @param timeoutMs - Optional timeout override
|
|
23
|
+
* @returns Promise that resolves when user responds
|
|
24
|
+
*/
|
|
25
|
+
createPermissionRequest(timeoutMs) {
|
|
26
|
+
const requestId = createFilePermissionRequestId();
|
|
27
|
+
const timeout = timeoutMs ?? this.defaultTimeoutMs;
|
|
28
|
+
const promise = new Promise((resolve, reject) => {
|
|
29
|
+
const timeoutId = setTimeout(() => {
|
|
30
|
+
this.pendingPermissions.delete(requestId);
|
|
31
|
+
reject(new Error('Permission request timed out'));
|
|
32
|
+
}, timeout);
|
|
33
|
+
this.pendingPermissions.set(requestId, { resolve, reject, timeoutId });
|
|
34
|
+
});
|
|
35
|
+
return { requestId, promise };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a new question request and wait for response
|
|
39
|
+
* @param timeoutMs - Optional timeout override
|
|
40
|
+
* @returns Promise that resolves when user responds
|
|
41
|
+
*/
|
|
42
|
+
createQuestionRequest(timeoutMs) {
|
|
43
|
+
const requestId = createQuestionRequestId();
|
|
44
|
+
const timeout = timeoutMs ?? this.defaultTimeoutMs;
|
|
45
|
+
const promise = new Promise((resolve, reject) => {
|
|
46
|
+
const timeoutId = setTimeout(() => {
|
|
47
|
+
this.pendingQuestions.delete(requestId);
|
|
48
|
+
reject(new Error('Question request timed out'));
|
|
49
|
+
}, timeout);
|
|
50
|
+
this.pendingQuestions.set(requestId, { resolve, reject, timeoutId });
|
|
51
|
+
});
|
|
52
|
+
return { requestId, promise };
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve a pending permission request
|
|
56
|
+
* @param requestId - The request ID to resolve
|
|
57
|
+
* @param allowed - Whether permission was granted
|
|
58
|
+
* @returns true if request was found and resolved, false otherwise
|
|
59
|
+
*/
|
|
60
|
+
resolvePermissionRequest(requestId, allowed) {
|
|
61
|
+
const pending = this.pendingPermissions.get(requestId);
|
|
62
|
+
if (!pending) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
clearTimeout(pending.timeoutId);
|
|
66
|
+
pending.resolve(allowed);
|
|
67
|
+
this.pendingPermissions.delete(requestId);
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Resolve a pending question request
|
|
72
|
+
* @param requestId - The request ID to resolve
|
|
73
|
+
* @param response - The user's response
|
|
74
|
+
* @returns true if request was found and resolved, false otherwise
|
|
75
|
+
*/
|
|
76
|
+
resolveQuestionRequest(requestId, response) {
|
|
77
|
+
const pending = this.pendingQuestions.get(requestId);
|
|
78
|
+
if (!pending) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
clearTimeout(pending.timeoutId);
|
|
82
|
+
pending.resolve(response);
|
|
83
|
+
this.pendingQuestions.delete(requestId);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Validate file permission request data
|
|
88
|
+
* @param data - Raw request data to validate
|
|
89
|
+
* @returns Validation result with error message if invalid
|
|
90
|
+
*/
|
|
91
|
+
validateFilePermissionRequest(data) {
|
|
92
|
+
if (!data || typeof data !== 'object') {
|
|
93
|
+
return { valid: false, error: 'Invalid request data' };
|
|
94
|
+
}
|
|
95
|
+
const requestData = data;
|
|
96
|
+
// Check required fields
|
|
97
|
+
if (!requestData.operation) {
|
|
98
|
+
return { valid: false, error: 'operation is required' };
|
|
99
|
+
}
|
|
100
|
+
if (!requestData.filePath && (!requestData.filePaths || requestData.filePaths.length === 0)) {
|
|
101
|
+
return { valid: false, error: 'operation and either filePath or filePaths are required' };
|
|
102
|
+
}
|
|
103
|
+
// Validate operation type
|
|
104
|
+
if (!FILE_OPERATIONS.includes(requestData.operation)) {
|
|
105
|
+
return {
|
|
106
|
+
valid: false,
|
|
107
|
+
error: `Invalid operation. Must be one of: ${FILE_OPERATIONS.join(', ')}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return { valid: true };
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Validate question request data
|
|
114
|
+
* @param data - Raw request data to validate
|
|
115
|
+
* @returns Validation result with error message if invalid
|
|
116
|
+
*/
|
|
117
|
+
validateQuestionRequest(data) {
|
|
118
|
+
if (!data || typeof data !== 'object') {
|
|
119
|
+
return { valid: false, error: 'Invalid request data' };
|
|
120
|
+
}
|
|
121
|
+
const requestData = data;
|
|
122
|
+
if (!requestData.question) {
|
|
123
|
+
return { valid: false, error: 'question is required' };
|
|
124
|
+
}
|
|
125
|
+
return { valid: true };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Build a PermissionRequest object for file operations
|
|
129
|
+
* @param requestId - The request ID
|
|
130
|
+
* @param taskId - The associated task ID
|
|
131
|
+
* @param data - The validated request data
|
|
132
|
+
* @returns PermissionRequest object ready to send to the UI
|
|
133
|
+
*/
|
|
134
|
+
buildFilePermissionRequest(requestId, taskId, data) {
|
|
135
|
+
return {
|
|
136
|
+
id: requestId,
|
|
137
|
+
taskId,
|
|
138
|
+
type: 'file',
|
|
139
|
+
fileOperation: data.operation,
|
|
140
|
+
filePath: data.filePath,
|
|
141
|
+
filePaths: data.filePaths,
|
|
142
|
+
targetPath: data.targetPath,
|
|
143
|
+
contentPreview: data.contentPreview?.substring(0, 500),
|
|
144
|
+
createdAt: new Date().toISOString(),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Build a PermissionRequest object for questions
|
|
149
|
+
* @param requestId - The request ID
|
|
150
|
+
* @param taskId - The associated task ID
|
|
151
|
+
* @param data - The validated request data
|
|
152
|
+
* @returns PermissionRequest object ready to send to the UI
|
|
153
|
+
*/
|
|
154
|
+
buildQuestionRequest(requestId, taskId, data) {
|
|
155
|
+
return {
|
|
156
|
+
id: requestId,
|
|
157
|
+
taskId,
|
|
158
|
+
type: 'question',
|
|
159
|
+
question: data.question,
|
|
160
|
+
header: data.header,
|
|
161
|
+
options: data.options,
|
|
162
|
+
multiSelect: data.multiSelect,
|
|
163
|
+
createdAt: new Date().toISOString(),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Check if there are any pending permission requests
|
|
168
|
+
*/
|
|
169
|
+
hasPendingPermissions() {
|
|
170
|
+
return this.pendingPermissions.size > 0;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Check if there are any pending question requests
|
|
174
|
+
*/
|
|
175
|
+
hasPendingQuestions() {
|
|
176
|
+
return this.pendingQuestions.size > 0;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get the count of pending permission requests
|
|
180
|
+
*/
|
|
181
|
+
getPendingPermissionCount() {
|
|
182
|
+
return this.pendingPermissions.size;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get the count of pending question requests
|
|
186
|
+
*/
|
|
187
|
+
getPendingQuestionCount() {
|
|
188
|
+
return this.pendingQuestions.size;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Clear all pending requests (e.g., on shutdown)
|
|
192
|
+
* Rejects all pending promises with a cancellation error
|
|
193
|
+
*/
|
|
194
|
+
clearAll() {
|
|
195
|
+
for (const [requestId, pending] of this.pendingPermissions) {
|
|
196
|
+
clearTimeout(pending.timeoutId);
|
|
197
|
+
pending.reject(new Error('Request cancelled'));
|
|
198
|
+
}
|
|
199
|
+
this.pendingPermissions.clear();
|
|
200
|
+
for (const [requestId, pending] of this.pendingQuestions) {
|
|
201
|
+
clearTimeout(pending.timeoutId);
|
|
202
|
+
pending.reject(new Error('Request cancelled'));
|
|
203
|
+
}
|
|
204
|
+
this.pendingQuestions.clear();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=permission-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-handler.js","sourceRoot":"","sources":["../../src/services/permission-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speech-to-Text service using ElevenLabs API
|
|
3
|
+
*
|
|
4
|
+
* This service handles:
|
|
5
|
+
* - API key validation
|
|
6
|
+
* - Audio transcription via ElevenLabs STT API
|
|
7
|
+
*
|
|
8
|
+
* The service requires a SecureStorage instance to be provided,
|
|
9
|
+
* allowing it to be used in different environments (Electron, CLI, etc.)
|
|
10
|
+
*/
|
|
11
|
+
import type { SecureStorage } from '../storage/secure-storage.js';
|
|
12
|
+
export interface TranscriptionResult {
|
|
13
|
+
text: string;
|
|
14
|
+
confidence?: number;
|
|
15
|
+
duration: number;
|
|
16
|
+
timestamp: number;
|
|
17
|
+
}
|
|
18
|
+
export interface TranscriptionError {
|
|
19
|
+
code: string;
|
|
20
|
+
message: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Speech service that uses ElevenLabs API for transcription.
|
|
24
|
+
* Requires a SecureStorage instance for API key management.
|
|
25
|
+
*/
|
|
26
|
+
export declare class SpeechService {
|
|
27
|
+
private storage;
|
|
28
|
+
constructor(storage: SecureStorage);
|
|
29
|
+
/**
|
|
30
|
+
* Get the configured ElevenLabs API key
|
|
31
|
+
*/
|
|
32
|
+
getElevenLabsApiKey(): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* Check if ElevenLabs is configured
|
|
35
|
+
*/
|
|
36
|
+
isElevenLabsConfigured(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Validate ElevenLabs API key by making a test request
|
|
39
|
+
*/
|
|
40
|
+
validateElevenLabsApiKey(apiKey?: string): Promise<{
|
|
41
|
+
valid: boolean;
|
|
42
|
+
error?: string;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Transcribe audio using ElevenLabs Speech-to-Text API
|
|
46
|
+
*
|
|
47
|
+
* @param audioData - Audio data as Buffer (from renderer via IPC)
|
|
48
|
+
* @param mimeType - MIME type of the audio (e.g., 'audio/webm')
|
|
49
|
+
* @returns Transcription result or error
|
|
50
|
+
*/
|
|
51
|
+
transcribeAudio(audioData: Buffer, mimeType?: string): Promise<{
|
|
52
|
+
success: true;
|
|
53
|
+
result: TranscriptionResult;
|
|
54
|
+
} | {
|
|
55
|
+
success: false;
|
|
56
|
+
error: TranscriptionError;
|
|
57
|
+
}>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create a new SpeechService instance
|
|
61
|
+
*/
|
|
62
|
+
export declare function createSpeechService(storage: SecureStorage): SpeechService;
|
|
63
|
+
//# sourceMappingURL=speech.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../src/services/speech.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAKlE,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,aAAa;IAIlC;;OAEG;IACH,mBAAmB,IAAI,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;OAEG;IACG,wBAAwB,CAC5B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA+C9C;;;;;;OAMG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAqB,GAC9B,OAAO,CACN;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAE,GAC9C;QAAE,OAAO,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,kBAAkB,CAAA;KAAE,CAChD;CAyLF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAEzE"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Speech-to-Text service using ElevenLabs API
|
|
3
|
+
*
|
|
4
|
+
* This service handles:
|
|
5
|
+
* - API key validation
|
|
6
|
+
* - Audio transcription via ElevenLabs STT API
|
|
7
|
+
*
|
|
8
|
+
* The service requires a SecureStorage instance to be provided,
|
|
9
|
+
* allowing it to be used in different environments (Electron, CLI, etc.)
|
|
10
|
+
*/
|
|
11
|
+
import { fetchWithTimeout } from '../utils/fetch.js';
|
|
12
|
+
const ELEVENLABS_API_TIMEOUT_MS = 30000;
|
|
13
|
+
const DEFAULT_ELEVENLABS_STT_MODEL_ID = 'scribe_v2';
|
|
14
|
+
/**
|
|
15
|
+
* Speech service that uses ElevenLabs API for transcription.
|
|
16
|
+
* Requires a SecureStorage instance for API key management.
|
|
17
|
+
*/
|
|
18
|
+
export class SpeechService {
|
|
19
|
+
storage;
|
|
20
|
+
constructor(storage) {
|
|
21
|
+
this.storage = storage;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the configured ElevenLabs API key
|
|
25
|
+
*/
|
|
26
|
+
getElevenLabsApiKey() {
|
|
27
|
+
const key = this.storage.getApiKey('elevenlabs');
|
|
28
|
+
return key && key.trim() ? key : null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Check if ElevenLabs is configured
|
|
32
|
+
*/
|
|
33
|
+
isElevenLabsConfigured() {
|
|
34
|
+
return this.getElevenLabsApiKey() !== null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Validate ElevenLabs API key by making a test request
|
|
38
|
+
*/
|
|
39
|
+
async validateElevenLabsApiKey(apiKey) {
|
|
40
|
+
const key = apiKey || this.getElevenLabsApiKey();
|
|
41
|
+
if (!key || !key.trim()) {
|
|
42
|
+
return { valid: false, error: 'API key is required' };
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const response = await fetchWithTimeout('https://api.elevenlabs.io/v1/models', {
|
|
46
|
+
method: 'GET',
|
|
47
|
+
headers: {
|
|
48
|
+
'xi-api-key': key.trim(),
|
|
49
|
+
},
|
|
50
|
+
}, ELEVENLABS_API_TIMEOUT_MS);
|
|
51
|
+
if (response.ok) {
|
|
52
|
+
return { valid: true };
|
|
53
|
+
}
|
|
54
|
+
if (response.status === 401 || response.status === 403) {
|
|
55
|
+
return {
|
|
56
|
+
valid: false,
|
|
57
|
+
error: 'Invalid API key. Please check your ElevenLabs API key.',
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const errorData = await response.json().catch(() => ({}));
|
|
61
|
+
const errorMessage = errorData?.error?.message ||
|
|
62
|
+
`API returned status ${response.status}`;
|
|
63
|
+
return { valid: false, error: `API error: ${errorMessage}` };
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
67
|
+
return {
|
|
68
|
+
valid: false,
|
|
69
|
+
error: 'Request timed out. Please check your internet connection.',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
73
|
+
return { valid: false, error: `Network error: ${message}` };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Transcribe audio using ElevenLabs Speech-to-Text API
|
|
78
|
+
*
|
|
79
|
+
* @param audioData - Audio data as Buffer (from renderer via IPC)
|
|
80
|
+
* @param mimeType - MIME type of the audio (e.g., 'audio/webm')
|
|
81
|
+
* @returns Transcription result or error
|
|
82
|
+
*/
|
|
83
|
+
async transcribeAudio(audioData, mimeType = 'audio/webm') {
|
|
84
|
+
const apiKey = this.getElevenLabsApiKey();
|
|
85
|
+
const modelId = process.env.ELEVENLABS_STT_MODEL_ID?.trim() ||
|
|
86
|
+
DEFAULT_ELEVENLABS_STT_MODEL_ID;
|
|
87
|
+
if (!apiKey) {
|
|
88
|
+
return {
|
|
89
|
+
success: false,
|
|
90
|
+
error: {
|
|
91
|
+
code: 'MISSING_API_KEY',
|
|
92
|
+
message: 'ElevenLabs API key is not configured. Please add it in settings.',
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const startTime = Date.now();
|
|
97
|
+
console.log('[ElevenLabs] Starting transcription:', {
|
|
98
|
+
audioSize: audioData.length,
|
|
99
|
+
mimeType,
|
|
100
|
+
modelId,
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
// Create a Blob from the Buffer for FormData
|
|
104
|
+
// Use Uint8Array to ensure proper typing for Blob constructor
|
|
105
|
+
const uint8Array = new Uint8Array(audioData);
|
|
106
|
+
const blob = new Blob([uint8Array], { type: mimeType });
|
|
107
|
+
console.log('[ElevenLabs] Created blob:', {
|
|
108
|
+
blobSize: blob.size,
|
|
109
|
+
blobType: blob.type,
|
|
110
|
+
});
|
|
111
|
+
// Create FormData for multipart upload
|
|
112
|
+
const formData = new FormData();
|
|
113
|
+
formData.append('file', blob, 'audio.webm');
|
|
114
|
+
formData.append('model_id', modelId);
|
|
115
|
+
const response = await fetchWithTimeout('https://api.elevenlabs.io/v1/speech-to-text', {
|
|
116
|
+
method: 'POST',
|
|
117
|
+
headers: {
|
|
118
|
+
'xi-api-key': apiKey,
|
|
119
|
+
},
|
|
120
|
+
body: formData,
|
|
121
|
+
}, ELEVENLABS_API_TIMEOUT_MS);
|
|
122
|
+
const duration = Date.now() - startTime;
|
|
123
|
+
if (!response.ok) {
|
|
124
|
+
const errorText = await response.text().catch(() => '');
|
|
125
|
+
let errorData = {};
|
|
126
|
+
try {
|
|
127
|
+
errorData = JSON.parse(errorText);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Not JSON, use raw text
|
|
131
|
+
}
|
|
132
|
+
console.error('[ElevenLabs] API error:', {
|
|
133
|
+
status: response.status,
|
|
134
|
+
statusText: response.statusText,
|
|
135
|
+
errorData: JSON.stringify(errorData, null, 2),
|
|
136
|
+
errorText: errorText.substring(0, 500),
|
|
137
|
+
});
|
|
138
|
+
if (response.status === 401 || response.status === 403) {
|
|
139
|
+
return {
|
|
140
|
+
success: false,
|
|
141
|
+
error: {
|
|
142
|
+
code: 'INVALID_API_KEY',
|
|
143
|
+
message: 'Invalid or expired ElevenLabs API key. Please check your settings.',
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (response.status === 429) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
error: {
|
|
151
|
+
code: 'RATE_LIMIT',
|
|
152
|
+
message: 'Rate limit exceeded. Please wait a moment and try again.',
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
// ElevenLabs can return errors in different formats
|
|
157
|
+
// detail can be: string, { message: string }, or other object structures
|
|
158
|
+
const detail = errorData?.detail;
|
|
159
|
+
let errorMessage;
|
|
160
|
+
if (typeof detail === 'string') {
|
|
161
|
+
errorMessage = detail;
|
|
162
|
+
}
|
|
163
|
+
else if (detail && typeof detail === 'object') {
|
|
164
|
+
// detail could be { message: string } or { status: string, message: string } etc.
|
|
165
|
+
const detailObj = detail;
|
|
166
|
+
const detailMessage = detailObj.message ?? detailObj.status;
|
|
167
|
+
if (typeof detailMessage === 'string') {
|
|
168
|
+
errorMessage = detailMessage;
|
|
169
|
+
}
|
|
170
|
+
else if (detailMessage !== undefined) {
|
|
171
|
+
errorMessage = JSON.stringify(detailMessage);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
errorMessage = JSON.stringify(detail);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else if (errorData?.error?.message) {
|
|
178
|
+
const nestedMessage = errorData
|
|
179
|
+
.error.message;
|
|
180
|
+
errorMessage =
|
|
181
|
+
typeof nestedMessage === 'string'
|
|
182
|
+
? nestedMessage
|
|
183
|
+
: JSON.stringify(nestedMessage);
|
|
184
|
+
}
|
|
185
|
+
else if (errorData?.message) {
|
|
186
|
+
const rootMessage = errorData.message;
|
|
187
|
+
errorMessage =
|
|
188
|
+
typeof rootMessage === 'string'
|
|
189
|
+
? rootMessage
|
|
190
|
+
: JSON.stringify(rootMessage);
|
|
191
|
+
}
|
|
192
|
+
else if (errorText) {
|
|
193
|
+
errorMessage = errorText.substring(0, 200);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
errorMessage = response.statusText || 'Unknown API error';
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
success: false,
|
|
200
|
+
error: {
|
|
201
|
+
code: 'TRANSCRIPTION_FAILED',
|
|
202
|
+
message: `Transcription failed: ${errorMessage}`,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
const result = (await response.json());
|
|
207
|
+
if (!result.text) {
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
error: {
|
|
211
|
+
code: 'EMPTY_RESULT',
|
|
212
|
+
message: 'No speech was recognized. Please try again.',
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
return {
|
|
217
|
+
success: true,
|
|
218
|
+
result: {
|
|
219
|
+
text: result.text.trim(),
|
|
220
|
+
confidence: result.confidence,
|
|
221
|
+
duration,
|
|
222
|
+
timestamp: Date.now(),
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
error: {
|
|
231
|
+
code: 'TIMEOUT',
|
|
232
|
+
message: 'Transcription request timed out. Please try again.',
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
237
|
+
return {
|
|
238
|
+
success: false,
|
|
239
|
+
error: {
|
|
240
|
+
code: 'NETWORK_ERROR',
|
|
241
|
+
message: `Network error during transcription: ${message}`,
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Create a new SpeechService instance
|
|
249
|
+
*/
|
|
250
|
+
export function createSpeechService(storage) {
|
|
251
|
+
return new SpeechService(storage);
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=speech.js.map
|