hammoc 1.5.0 → 1.7.0
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/README.md +12 -4
- package/package.json +2 -2
- package/packages/client/dist/assets/{agentExampleHighlight-BgwTm15v.js → agentExampleHighlight-7Olvqdpf.js} +1 -1
- package/packages/client/dist/assets/{commandTokenHighlight-BljHwnrK.js → commandTokenHighlight-DtKwh4lx.js} +1 -1
- package/packages/client/dist/assets/index-B09doO8H.js +139 -0
- package/packages/client/dist/assets/index-Bee52CKG.js +1569 -0
- package/packages/client/dist/assets/index-CVy582lU.css +32 -0
- package/packages/client/dist/assets/{index-D3LxqW3f.js → index-DLHBUw8c.js} +1 -1
- package/packages/client/dist/assets/{snippetTokenHighlight-DWsaQXX0.js → snippetTokenHighlight-C8O688f4.js} +1 -1
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +2 -2
- package/packages/server/dist/_dbg_agent_rows.d.ts +2 -0
- package/packages/server/dist/_dbg_agent_rows.d.ts.map +1 -0
- package/packages/server/dist/_dbg_agent_rows.js +60 -0
- package/packages/server/dist/_dbg_agent_rows.js.map +1 -0
- package/packages/server/dist/_dbg_flicker.d.ts +2 -0
- package/packages/server/dist/_dbg_flicker.d.ts.map +1 -0
- package/packages/server/dist/_dbg_flicker.js +38 -0
- package/packages/server/dist/_dbg_flicker.js.map +1 -0
- package/packages/server/dist/_harness_cli.d.ts +2 -0
- package/packages/server/dist/_harness_cli.d.ts.map +1 -0
- package/packages/server/dist/_harness_cli.js +81 -0
- package/packages/server/dist/_harness_cli.js.map +1 -0
- package/packages/server/dist/_harness_provcard.d.ts +2 -0
- package/packages/server/dist/_harness_provcard.d.ts.map +1 -0
- package/packages/server/dist/_harness_provcard.js +67 -0
- package/packages/server/dist/_harness_provcard.js.map +1 -0
- package/packages/server/dist/_replay_dump.d.ts +2 -0
- package/packages/server/dist/_replay_dump.d.ts.map +1 -0
- package/packages/server/dist/_replay_dump.js +62 -0
- package/packages/server/dist/_replay_dump.js.map +1 -0
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +6 -0
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/config/index.d.ts.map +1 -1
- package/packages/server/dist/config/index.js.map +1 -1
- package/packages/server/dist/controllers/bmadCoreConfigController.d.ts +41 -0
- package/packages/server/dist/controllers/bmadCoreConfigController.d.ts.map +1 -0
- package/packages/server/dist/controllers/bmadCoreConfigController.js +172 -0
- package/packages/server/dist/controllers/bmadCoreConfigController.js.map +1 -0
- package/packages/server/dist/controllers/contextBuilderController.d.ts +43 -0
- package/packages/server/dist/controllers/contextBuilderController.d.ts.map +1 -0
- package/packages/server/dist/controllers/contextBuilderController.js +159 -0
- package/packages/server/dist/controllers/contextBuilderController.js.map +1 -0
- package/packages/server/dist/controllers/harnessAgentController.d.ts +7 -0
- package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -1
- package/packages/server/dist/controllers/harnessAgentController.js +33 -0
- package/packages/server/dist/controllers/harnessAgentController.js.map +1 -1
- package/packages/server/dist/controllers/harnessBundleController.d.ts +37 -0
- package/packages/server/dist/controllers/harnessBundleController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessBundleController.js +312 -0
- package/packages/server/dist/controllers/harnessBundleController.js.map +1 -0
- package/packages/server/dist/controllers/harnessCommandController.d.ts +7 -0
- package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -1
- package/packages/server/dist/controllers/harnessCommandController.js +33 -0
- package/packages/server/dist/controllers/harnessCommandController.js.map +1 -1
- package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -1
- package/packages/server/dist/controllers/harnessHookController.js +44 -1
- package/packages/server/dist/controllers/harnessHookController.js.map +1 -1
- package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -1
- package/packages/server/dist/controllers/harnessMcpController.js +62 -1
- package/packages/server/dist/controllers/harnessMcpController.js.map +1 -1
- package/packages/server/dist/controllers/harnessShareScopeController.d.ts +9 -0
- package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -1
- package/packages/server/dist/controllers/harnessShareScopeController.js +48 -1
- package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -1
- package/packages/server/dist/controllers/marketplaceController.d.ts +19 -0
- package/packages/server/dist/controllers/marketplaceController.d.ts.map +1 -0
- package/packages/server/dist/controllers/marketplaceController.js +74 -0
- package/packages/server/dist/controllers/marketplaceController.js.map +1 -0
- package/packages/server/dist/controllers/observabilityController.d.ts +32 -0
- package/packages/server/dist/controllers/observabilityController.d.ts.map +1 -0
- package/packages/server/dist/controllers/observabilityController.js +148 -0
- package/packages/server/dist/controllers/observabilityController.js.map +1 -0
- package/packages/server/dist/controllers/projectController.d.ts.map +1 -1
- package/packages/server/dist/controllers/projectController.js +7 -1
- package/packages/server/dist/controllers/projectController.js.map +1 -1
- package/packages/server/dist/controllers/sessionController.d.ts.map +1 -1
- package/packages/server/dist/controllers/sessionController.js +16 -4
- package/packages/server/dist/controllers/sessionController.js.map +1 -1
- package/packages/server/dist/controllers/systemBrowseController.d.ts +33 -0
- package/packages/server/dist/controllers/systemBrowseController.d.ts.map +1 -0
- package/packages/server/dist/controllers/systemBrowseController.js +105 -0
- package/packages/server/dist/controllers/systemBrowseController.js.map +1 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts +10 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.js +25 -4
- package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +43 -3
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +385 -93
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +2 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +17 -0
- package/packages/server/dist/locales/es/server.json +17 -0
- package/packages/server/dist/locales/ja/server.json +17 -0
- package/packages/server/dist/locales/ko/server.json +17 -0
- package/packages/server/dist/locales/pt/server.json +17 -0
- package/packages/server/dist/locales/zh-CN/server.json +17 -0
- package/packages/server/dist/routes/harness.d.ts.map +1 -1
- package/packages/server/dist/routes/harness.js +58 -0
- package/packages/server/dist/routes/harness.js.map +1 -1
- package/packages/server/dist/routes/preferences.d.ts.map +1 -1
- package/packages/server/dist/routes/preferences.js +12 -2
- package/packages/server/dist/routes/preferences.js.map +1 -1
- package/packages/server/dist/routes/systemBrowse.d.ts +17 -0
- package/packages/server/dist/routes/systemBrowse.d.ts.map +1 -0
- package/packages/server/dist/routes/systemBrowse.js +22 -0
- package/packages/server/dist/routes/systemBrowse.js.map +1 -0
- package/packages/server/dist/services/bmadCoreConfigService.d.ts +86 -0
- package/packages/server/dist/services/bmadCoreConfigService.d.ts.map +1 -0
- package/packages/server/dist/services/bmadCoreConfigService.js +175 -0
- package/packages/server/dist/services/bmadCoreConfigService.js.map +1 -0
- package/packages/server/dist/services/bmadStatusService.d.ts +9 -0
- package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
- package/packages/server/dist/services/bmadStatusService.js +77 -13
- package/packages/server/dist/services/bmadStatusService.js.map +1 -1
- package/packages/server/dist/services/chatEngine.d.ts +81 -0
- package/packages/server/dist/services/chatEngine.d.ts.map +1 -0
- package/packages/server/dist/services/chatEngine.js +2 -0
- package/packages/server/dist/services/chatEngine.js.map +1 -0
- package/packages/server/dist/services/chatEngineFactory.d.ts +15 -0
- package/packages/server/dist/services/chatEngineFactory.d.ts.map +1 -0
- package/packages/server/dist/services/chatEngineFactory.js +28 -0
- package/packages/server/dist/services/chatEngineFactory.js.map +1 -0
- package/packages/server/dist/services/chatService.d.ts +34 -26
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +44 -104
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/cliChatEngine.d.ts +198 -0
- package/packages/server/dist/services/cliChatEngine.d.ts.map +1 -0
- package/packages/server/dist/services/cliChatEngine.js +2977 -0
- package/packages/server/dist/services/cliChatEngine.js.map +1 -0
- package/packages/server/dist/services/cliGridCards.d.ts +87 -0
- package/packages/server/dist/services/cliGridCards.d.ts.map +1 -0
- package/packages/server/dist/services/cliGridCards.js +298 -0
- package/packages/server/dist/services/cliGridCards.js.map +1 -0
- package/packages/server/dist/services/cliGridRegion.d.ts +44 -0
- package/packages/server/dist/services/cliGridRegion.d.ts.map +1 -0
- package/packages/server/dist/services/cliGridRegion.js +94 -0
- package/packages/server/dist/services/cliGridRegion.js.map +1 -0
- package/packages/server/dist/services/cliModalDetect.d.ts +299 -0
- package/packages/server/dist/services/cliModalDetect.d.ts.map +1 -0
- package/packages/server/dist/services/cliModalDetect.js +583 -0
- package/packages/server/dist/services/cliModalDetect.js.map +1 -0
- package/packages/server/dist/services/cliScreenCache.d.ts +33 -0
- package/packages/server/dist/services/cliScreenCache.d.ts.map +1 -0
- package/packages/server/dist/services/cliScreenCache.js +48 -0
- package/packages/server/dist/services/cliScreenCache.js.map +1 -0
- package/packages/server/dist/services/cliScreenModel.d.ts +141 -0
- package/packages/server/dist/services/cliScreenModel.d.ts.map +1 -0
- package/packages/server/dist/services/cliScreenModel.js +196 -0
- package/packages/server/dist/services/cliScreenModel.js.map +1 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.d.ts +41 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.d.ts.map +1 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.js +45 -0
- package/packages/server/dist/services/cliScreenStallWatchdog.js.map +1 -0
- package/packages/server/dist/services/cliSessionPool.d.ts +97 -0
- package/packages/server/dist/services/cliSessionPool.d.ts.map +1 -0
- package/packages/server/dist/services/cliSessionPool.js +278 -0
- package/packages/server/dist/services/cliSessionPool.js.map +1 -0
- package/packages/server/dist/services/cliSpinnerProgress.d.ts +41 -0
- package/packages/server/dist/services/cliSpinnerProgress.d.ts.map +1 -0
- package/packages/server/dist/services/cliSpinnerProgress.js +131 -0
- package/packages/server/dist/services/cliSpinnerProgress.js.map +1 -0
- package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts +24 -0
- package/packages/server/dist/services/contextBuilderScriptTemplate.d.ts.map +1 -0
- package/packages/server/dist/services/contextBuilderScriptTemplate.js +181 -0
- package/packages/server/dist/services/contextBuilderScriptTemplate.js.map +1 -0
- package/packages/server/dist/services/contextBuilderService.d.ts +68 -0
- package/packages/server/dist/services/contextBuilderService.d.ts.map +1 -0
- package/packages/server/dist/services/contextBuilderService.js +345 -0
- package/packages/server/dist/services/contextBuilderService.js.map +1 -0
- package/packages/server/dist/services/fileRewind.d.ts +46 -0
- package/packages/server/dist/services/fileRewind.d.ts.map +1 -0
- package/packages/server/dist/services/fileRewind.js +77 -0
- package/packages/server/dist/services/fileRewind.js.map +1 -0
- package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
- package/packages/server/dist/services/fileWatcherService.js +40 -0
- package/packages/server/dist/services/fileWatcherService.js.map +1 -1
- package/packages/server/dist/services/harnessAgentService.d.ts +18 -0
- package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -1
- package/packages/server/dist/services/harnessAgentService.js +55 -0
- package/packages/server/dist/services/harnessAgentService.js.map +1 -1
- package/packages/server/dist/services/harnessBundleService.d.ts +145 -0
- package/packages/server/dist/services/harnessBundleService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessBundleService.js +1318 -0
- package/packages/server/dist/services/harnessBundleService.js.map +1 -0
- package/packages/server/dist/services/harnessCommandService.d.ts +21 -0
- package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -1
- package/packages/server/dist/services/harnessCommandService.js +64 -0
- package/packages/server/dist/services/harnessCommandService.js.map +1 -1
- package/packages/server/dist/services/harnessHookService.d.ts +27 -0
- package/packages/server/dist/services/harnessHookService.d.ts.map +1 -1
- package/packages/server/dist/services/harnessHookService.js +52 -0
- package/packages/server/dist/services/harnessHookService.js.map +1 -1
- package/packages/server/dist/services/harnessMcpService.d.ts +24 -1
- package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -1
- package/packages/server/dist/services/harnessMcpService.js +70 -0
- package/packages/server/dist/services/harnessMcpService.js.map +1 -1
- package/packages/server/dist/services/harnessShareScopeService.d.ts +19 -0
- package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -1
- package/packages/server/dist/services/harnessShareScopeService.js +65 -0
- package/packages/server/dist/services/harnessShareScopeService.js.map +1 -1
- package/packages/server/dist/services/historyParser.d.ts +11 -0
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +10 -8
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/imageStorageService.d.ts +12 -0
- package/packages/server/dist/services/imageStorageService.d.ts.map +1 -1
- package/packages/server/dist/services/imageStorageService.js +22 -0
- package/packages/server/dist/services/imageStorageService.js.map +1 -1
- package/packages/server/dist/services/issueService.d.ts.map +1 -1
- package/packages/server/dist/services/issueService.js +1 -0
- package/packages/server/dist/services/issueService.js.map +1 -1
- package/packages/server/dist/services/marketplaceService.d.ts +50 -0
- package/packages/server/dist/services/marketplaceService.d.ts.map +1 -0
- package/packages/server/dist/services/marketplaceService.js +326 -0
- package/packages/server/dist/services/marketplaceService.js.map +1 -0
- package/packages/server/dist/services/observabilityService.d.ts +87 -0
- package/packages/server/dist/services/observabilityService.d.ts.map +1 -0
- package/packages/server/dist/services/observabilityService.js +0 -0
- package/packages/server/dist/services/observabilityService.js.map +1 -0
- package/packages/server/dist/services/projectService.d.ts +13 -1
- package/packages/server/dist/services/projectService.d.ts.map +1 -1
- package/packages/server/dist/services/projectService.js +32 -0
- package/packages/server/dist/services/projectService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +12 -3
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.d.ts +15 -0
- package/packages/server/dist/services/rateLimitProbeService.d.ts.map +1 -1
- package/packages/server/dist/services/rateLimitProbeService.js +48 -19
- package/packages/server/dist/services/rateLimitProbeService.js.map +1 -1
- package/packages/server/dist/services/sessionService.d.ts +16 -0
- package/packages/server/dist/services/sessionService.d.ts.map +1 -1
- package/packages/server/dist/services/sessionService.js +125 -0
- package/packages/server/dist/services/sessionService.js.map +1 -1
- package/packages/server/dist/services/streamHandler.d.ts +8 -1
- package/packages/server/dist/services/streamHandler.d.ts.map +1 -1
- package/packages/server/dist/services/streamHandler.js +12 -5
- package/packages/server/dist/services/streamHandler.js.map +1 -1
- package/packages/server/dist/services/systemBrowseService.d.ts +91 -0
- package/packages/server/dist/services/systemBrowseService.d.ts.map +1 -0
- package/packages/server/dist/services/systemBrowseService.js +372 -0
- package/packages/server/dist/services/systemBrowseService.js.map +1 -0
- package/packages/server/dist/services/tokenCountService.d.ts +71 -0
- package/packages/server/dist/services/tokenCountService.d.ts.map +1 -0
- package/packages/server/dist/services/tokenCountService.js +313 -0
- package/packages/server/dist/services/tokenCountService.js.map +1 -0
- package/packages/server/dist/services/workspaceContext.d.ts +24 -0
- package/packages/server/dist/services/workspaceContext.d.ts.map +1 -0
- package/packages/server/dist/services/workspaceContext.js +109 -0
- package/packages/server/dist/services/workspaceContext.js.map +1 -0
- package/packages/server/dist/snippets/apply-qa-fixes +7 -5
- package/packages/server/dist/snippets/qa-review +7 -1
- package/packages/server/dist/utils/assertSafeBundlePath.d.ts +29 -0
- package/packages/server/dist/utils/assertSafeBundlePath.d.ts.map +1 -0
- package/packages/server/dist/utils/assertSafeBundlePath.js +53 -0
- package/packages/server/dist/utils/assertSafeBundlePath.js.map +1 -0
- package/packages/server/dist/utils/backgroundBlock.d.ts +29 -0
- package/packages/server/dist/utils/backgroundBlock.d.ts.map +1 -0
- package/packages/server/dist/utils/backgroundBlock.js +33 -0
- package/packages/server/dist/utils/backgroundBlock.js.map +1 -0
- package/packages/server/dist/utils/backgroundTaskTracker.d.ts +20 -0
- package/packages/server/dist/utils/backgroundTaskTracker.d.ts.map +1 -0
- package/packages/server/dist/utils/backgroundTaskTracker.js +40 -0
- package/packages/server/dist/utils/backgroundTaskTracker.js.map +1 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts +14 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts.map +1 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.js +112 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.js.map +1 -0
- package/packages/server/dist/utils/cliDebugLog.d.ts +38 -0
- package/packages/server/dist/utils/cliDebugLog.d.ts.map +1 -0
- package/packages/server/dist/utils/cliDebugLog.js +65 -0
- package/packages/server/dist/utils/cliDebugLog.js.map +1 -0
- package/packages/server/dist/utils/cliEngineUtils.d.ts +35 -0
- package/packages/server/dist/utils/cliEngineUtils.d.ts.map +1 -0
- package/packages/server/dist/utils/cliEngineUtils.js +38 -0
- package/packages/server/dist/utils/cliEngineUtils.js.map +1 -0
- package/packages/server/dist/utils/effortUtils.d.ts +2 -2
- package/packages/server/dist/utils/effortUtils.d.ts.map +1 -1
- package/packages/server/dist/utils/effortUtils.js +7 -5
- package/packages/server/dist/utils/effortUtils.js.map +1 -1
- package/packages/server/dist/utils/errors.d.ts +1 -0
- package/packages/server/dist/utils/errors.d.ts.map +1 -1
- package/packages/server/dist/utils/errors.js +17 -0
- package/packages/server/dist/utils/errors.js.map +1 -1
- package/packages/server/dist/utils/harnessBundleSchema.d.ts +14 -12
- package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -1
- package/packages/server/dist/utils/harnessBundleSchema.js +11 -1
- package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -1
- package/packages/server/dist/utils/harnessPaths.d.ts +40 -0
- package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -1
- package/packages/server/dist/utils/harnessPaths.js +123 -0
- package/packages/server/dist/utils/harnessPaths.js.map +1 -1
- package/packages/server/dist/utils/trailingThrottle.d.ts +21 -0
- package/packages/server/dist/utils/trailingThrottle.d.ts.map +1 -0
- package/packages/server/dist/utils/trailingThrottle.js +36 -0
- package/packages/server/dist/utils/trailingThrottle.js.map +1 -0
- package/packages/server/package.json +61 -58
- package/packages/server/resources/internals/INDEX.md +3 -1
- package/packages/server/resources/internals/bmad-qa-fix-marker.md +32 -0
- package/packages/server/resources/internals/harness-files.md +22 -0
- package/packages/server/resources/internals/image-storage.md +9 -0
- package/packages/server/resources/internals/observability-storage.md +23 -0
- package/packages/server/resources/manual/02-chat.md +23 -4
- package/packages/server/resources/manual/03-sessions.md +1 -0
- package/packages/server/resources/manual/05-projects.md +15 -2
- package/packages/server/resources/manual/10-project-board.md +4 -3
- package/packages/server/resources/manual/11-bmad-method-integration.md +12 -8
- package/packages/server/resources/manual/12-harness-workbench.md +82 -1
- package/packages/server/resources/manual/13-settings.md +61 -9
- package/packages/shared/dist/index.d.ts +7 -0
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js +14 -0
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/types/bmadCoreConfig.d.ts +71 -0
- package/packages/shared/dist/types/bmadCoreConfig.d.ts.map +1 -0
- package/packages/shared/dist/types/bmadCoreConfig.js +30 -0
- package/packages/shared/dist/types/bmadCoreConfig.js.map +1 -0
- package/packages/shared/dist/types/bmadStatus.d.ts +26 -0
- package/packages/shared/dist/types/bmadStatus.d.ts.map +1 -1
- package/packages/shared/dist/types/bmadStatus.js.map +1 -1
- package/packages/shared/dist/types/board.d.ts +6 -0
- package/packages/shared/dist/types/board.d.ts.map +1 -1
- package/packages/shared/dist/types/contextBuilder.d.ts +102 -0
- package/packages/shared/dist/types/contextBuilder.d.ts.map +1 -0
- package/packages/shared/dist/types/contextBuilder.js +55 -0
- package/packages/shared/dist/types/contextBuilder.js.map +1 -0
- package/packages/shared/dist/types/harnessBundle.d.ts +35 -0
- package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -1
- package/packages/shared/dist/types/marketplace.d.ts +83 -0
- package/packages/shared/dist/types/marketplace.d.ts.map +1 -0
- package/packages/shared/dist/types/marketplace.js +18 -0
- package/packages/shared/dist/types/marketplace.js.map +1 -0
- package/packages/shared/dist/types/observability.d.ts +148 -0
- package/packages/shared/dist/types/observability.d.ts.map +1 -0
- package/packages/shared/dist/types/observability.js +24 -0
- package/packages/shared/dist/types/observability.js.map +1 -0
- package/packages/shared/dist/types/preferences.d.ts +16 -2
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js +1 -0
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/project.d.ts +7 -1
- package/packages/shared/dist/types/project.d.ts.map +1 -1
- package/packages/shared/dist/types/project.js.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +124 -12
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js +64 -19
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/streaming.d.ts +2 -2
- package/packages/shared/dist/types/streaming.d.ts.map +1 -1
- package/packages/shared/dist/types/streaming.js.map +1 -1
- package/packages/shared/dist/types/systemBrowse.d.ts +120 -0
- package/packages/shared/dist/types/systemBrowse.d.ts.map +1 -0
- package/packages/shared/dist/types/systemBrowse.js +57 -0
- package/packages/shared/dist/types/systemBrowse.js.map +1 -0
- package/packages/shared/dist/types/websocket.d.ts +38 -0
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/packages/shared/dist/utils/interruptFiller.d.ts +30 -0
- package/packages/shared/dist/utils/interruptFiller.d.ts.map +1 -0
- package/packages/shared/dist/utils/interruptFiller.js +38 -0
- package/packages/shared/dist/utils/interruptFiller.js.map +1 -0
- package/packages/shared/dist/utils/toolResultContent.d.ts +22 -0
- package/packages/shared/dist/utils/toolResultContent.d.ts.map +1 -0
- package/packages/shared/dist/utils/toolResultContent.js +29 -0
- package/packages/shared/dist/utils/toolResultContent.js.map +1 -0
- package/scripts/run-integration-test.mjs +362 -362
- package/packages/client/dist/assets/index-CjyjnXB8.css +0 -32
- package/packages/client/dist/assets/index-NqJdhlek.js +0 -1498
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background-execution block policy shared by both chat engines (Story 36.1).
|
|
3
|
+
*
|
|
4
|
+
* Hammoc runs one CLI/SDK process per turn (turn-per-process) and kills it when
|
|
5
|
+
* the turn ends, so a backgrounded tool call (`run_in_background: true`) would be
|
|
6
|
+
* orphaned/killed and only leaves side effects (e.g. task-notification files).
|
|
7
|
+
* A PreToolUse hook denies such calls before they reach the shell — and unlike
|
|
8
|
+
* canUseTool, a PreToolUse deny also covers auto-approved tools (bypass/auto modes).
|
|
9
|
+
*
|
|
10
|
+
* SDK mode wires the check as an inline hook callback (see chatService); CLI mode
|
|
11
|
+
* runs it as an external command hook (resources/hooks/block-background.cjs). The
|
|
12
|
+
* two runtimes differ, so only the predicate + reason are shared here.
|
|
13
|
+
*
|
|
14
|
+
* ⚠️ The .cjs script duplicates BACKGROUND_BLOCK_REASON as a literal (it cannot
|
|
15
|
+
* import a TS module); keep the two strings in sync.
|
|
16
|
+
*/
|
|
17
|
+
export const BACKGROUND_BLOCK_REASON = 'Background execution is disabled in Hammoc: it runs one process per turn, so a backgrounded task is killed when the turn ends. Re-run without run_in_background (foreground).';
|
|
18
|
+
/**
|
|
19
|
+
* True when a tool call requests background execution (`run_in_background: true`) — which
|
|
20
|
+
* must be blocked regardless of WHICH tool it is. Hammoc is turn-per-process, so ANY
|
|
21
|
+
* backgrounded call is orphaned at turn end. We key off the INPUT FLAG, not the tool name:
|
|
22
|
+
* a tool-name allow-list silently misses tools (that was the earlier Windows PowerShell gap),
|
|
23
|
+
* whereas the flag is the actual thing that makes the call doomed.
|
|
24
|
+
*
|
|
25
|
+
* Crucially this does NOT touch foreground execution: several foreground tools launched in
|
|
26
|
+
* parallel within one turn and awaited carry no `run_in_background` flag, so they pass through.
|
|
27
|
+
*/
|
|
28
|
+
export function isBlockedBackgroundCall(toolInput) {
|
|
29
|
+
return (typeof toolInput === 'object' &&
|
|
30
|
+
toolInput !== null &&
|
|
31
|
+
toolInput.run_in_background === true);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=backgroundBlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundBlock.js","sourceRoot":"","sources":["../../src/utils/backgroundBlock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAClC,+KAA+K,CAAC;AAElL;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAkB;IACxD,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ;QAC7B,SAAS,KAAK,IAAI;QACjB,SAA6C,CAAC,iBAAiB,KAAK,IAAI,CAC1E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface BackgroundTaskState {
|
|
2
|
+
pending: number;
|
|
3
|
+
waiting: boolean;
|
|
4
|
+
}
|
|
5
|
+
export type BackgroundTaskChangeCallback = (state: BackgroundTaskState) => void;
|
|
6
|
+
export declare class BackgroundTaskTracker {
|
|
7
|
+
private pendingCount;
|
|
8
|
+
private _mainResponseEnded;
|
|
9
|
+
private onChange?;
|
|
10
|
+
constructor(onChange?: BackgroundTaskChangeCallback);
|
|
11
|
+
trackToolUse(input: unknown): void;
|
|
12
|
+
trackTaskDone(): void;
|
|
13
|
+
markMainEnded(): void;
|
|
14
|
+
get mainResponseEnded(): boolean;
|
|
15
|
+
get isWaiting(): boolean;
|
|
16
|
+
get isFullyDone(): boolean;
|
|
17
|
+
get pending(): number;
|
|
18
|
+
private notify;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=backgroundTaskTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundTaskTracker.d.ts","sourceRoot":"","sources":["../../src/utils/backgroundTaskTracker.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,4BAA4B,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAEhF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,CAA+B;gBAEpC,QAAQ,CAAC,EAAE,4BAA4B;IAInD,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAWlC,aAAa,IAAI,IAAI;IAKrB,aAAa,IAAI,IAAI;IAKrB,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,OAAO,CAAC,MAAM;CAGf"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export class BackgroundTaskTracker {
|
|
2
|
+
pendingCount = 0;
|
|
3
|
+
_mainResponseEnded = false;
|
|
4
|
+
onChange;
|
|
5
|
+
constructor(onChange) {
|
|
6
|
+
this.onChange = onChange;
|
|
7
|
+
}
|
|
8
|
+
trackToolUse(input) {
|
|
9
|
+
if (typeof input === 'object' &&
|
|
10
|
+
input !== null &&
|
|
11
|
+
input.run_in_background === true) {
|
|
12
|
+
this.pendingCount++;
|
|
13
|
+
this.notify();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
trackTaskDone() {
|
|
17
|
+
this.pendingCount = Math.max(0, this.pendingCount - 1);
|
|
18
|
+
this.notify();
|
|
19
|
+
}
|
|
20
|
+
markMainEnded() {
|
|
21
|
+
this._mainResponseEnded = true;
|
|
22
|
+
this.notify();
|
|
23
|
+
}
|
|
24
|
+
get mainResponseEnded() {
|
|
25
|
+
return this._mainResponseEnded;
|
|
26
|
+
}
|
|
27
|
+
get isWaiting() {
|
|
28
|
+
return this._mainResponseEnded && this.pendingCount > 0;
|
|
29
|
+
}
|
|
30
|
+
get isFullyDone() {
|
|
31
|
+
return this._mainResponseEnded && this.pendingCount === 0;
|
|
32
|
+
}
|
|
33
|
+
get pending() {
|
|
34
|
+
return this.pendingCount;
|
|
35
|
+
}
|
|
36
|
+
notify() {
|
|
37
|
+
this.onChange?.({ pending: this.pendingCount, waiting: this.isWaiting });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=backgroundTaskTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backgroundTaskTracker.js","sourceRoot":"","sources":["../../src/utils/backgroundTaskTracker.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,qBAAqB;IACxB,YAAY,GAAG,CAAC,CAAC;IACjB,kBAAkB,GAAG,KAAK,CAAC;IAC3B,QAAQ,CAAgC;IAEhD,YAAY,QAAuC;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACb,KAAyC,CAAC,iBAAiB,KAAK,IAAI,EACrE,CAAC;YACD,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,aAAa;QACX,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACjC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEO,MAAM;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the platform binary path (claude.exe on Windows, claude elsewhere) bundled inside
|
|
3
|
+
* @anthropic-ai/claude-agent-sdk, or null if not installed. Exported so CLI mode
|
|
4
|
+
* (cliSessionPool) can prefer this version-pinned engine over a system install — it is the
|
|
5
|
+
* same Claude Code CLI binary, so SDK and CLI modes run the identical engine.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveBundledBinaryPath(): string | null;
|
|
8
|
+
/**
|
|
9
|
+
* True when `model` is a known native-1M model but the bundled binary does NOT
|
|
10
|
+
* recognize it — so its 1M context silently falls back to ~200K. Conservative:
|
|
11
|
+
* returns false (no warning) for bare aliases, unreadable binaries, or uncertainty.
|
|
12
|
+
*/
|
|
13
|
+
export declare function modelMissingNative1MSupport(model?: string): Promise<boolean>;
|
|
14
|
+
//# sourceMappingURL=bundledBinaryModelSupport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundledBinaryModelSupport.d.ts","sourceRoot":"","sources":["../../src/utils/bundledBinaryModelSupport.ts"],"names":[],"mappings":"AA2BA;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAUxD;AAwCD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBlF"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detects whether the bundled Claude Code engine (the platform binary shipped
|
|
3
|
+
* inside @anthropic-ai/claude-agent-sdk-<platform>-<arch>) actually recognizes a
|
|
4
|
+
* given model id.
|
|
5
|
+
*
|
|
6
|
+
* Native 1M context is opted into via the `[1m]` model suffix, but the binary
|
|
7
|
+
* only honors it for models baked into its own model table. If the selected model
|
|
8
|
+
* is newer than the bundled binary, the suffix is silently ignored and the model
|
|
9
|
+
* falls back to ~200K — which makes long sessions auto-compact far below their
|
|
10
|
+
* real limit and can break resume (thinking-block signature rejection). This util
|
|
11
|
+
* lets the server surface that silent fallback instead of failing mysteriously.
|
|
12
|
+
*/
|
|
13
|
+
import fs from 'fs';
|
|
14
|
+
import path from 'path';
|
|
15
|
+
import os from 'os';
|
|
16
|
+
import { createRequire } from 'module';
|
|
17
|
+
import { isNative1MModel } from '@hammoc/shared';
|
|
18
|
+
import { createLogger } from './logger.js';
|
|
19
|
+
const log = createLogger('bundledBinaryModelSupport');
|
|
20
|
+
/** Claude model ids embedded in the binary, e.g. claude-opus-4-8, claude-sonnet-4-6, claude-opus-4-20250514. */
|
|
21
|
+
const MODEL_ID_RE = /claude-(?:opus|sonnet|haiku|fable|mythos)-[0-9]+(?:-[0-9]+)*/g;
|
|
22
|
+
let cache = null;
|
|
23
|
+
let scanPromise = null;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve the platform binary path (claude.exe on Windows, claude elsewhere) bundled inside
|
|
26
|
+
* @anthropic-ai/claude-agent-sdk, or null if not installed. Exported so CLI mode
|
|
27
|
+
* (cliSessionPool) can prefer this version-pinned engine over a system install — it is the
|
|
28
|
+
* same Claude Code CLI binary, so SDK and CLI modes run the identical engine.
|
|
29
|
+
*/
|
|
30
|
+
export function resolveBundledBinaryPath() {
|
|
31
|
+
const pkg = `@anthropic-ai/claude-agent-sdk-${os.platform()}-${os.arch()}`;
|
|
32
|
+
const exe = os.platform() === 'win32' ? 'claude.exe' : 'claude';
|
|
33
|
+
try {
|
|
34
|
+
const require = createRequire(import.meta.url);
|
|
35
|
+
const pkgJsonPath = require.resolve(`${pkg}/package.json`);
|
|
36
|
+
return path.join(path.dirname(pkgJsonPath), exe);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** Stream the (large) binary in chunks and collect every Claude model id it contains. */
|
|
43
|
+
function scanBinaryForModels(binPath) {
|
|
44
|
+
return new Promise((resolve) => {
|
|
45
|
+
const models = new Set();
|
|
46
|
+
let tail = '';
|
|
47
|
+
const stream = fs.createReadStream(binPath, { encoding: 'latin1', highWaterMark: 1 << 22 });
|
|
48
|
+
stream.on('data', (chunk) => {
|
|
49
|
+
const text = tail + chunk;
|
|
50
|
+
const matches = text.match(MODEL_ID_RE);
|
|
51
|
+
if (matches)
|
|
52
|
+
for (const m of matches)
|
|
53
|
+
models.add(m);
|
|
54
|
+
// keep a small overlap so ids straddling a chunk boundary still match
|
|
55
|
+
tail = text.slice(-64);
|
|
56
|
+
});
|
|
57
|
+
stream.on('end', () => resolve(models));
|
|
58
|
+
stream.on('error', (err) => {
|
|
59
|
+
log.warn(`binary model scan failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
60
|
+
resolve(new Set());
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/** Model ids the bundled binary recognizes (memoized by path+mtime). Empty set if unreadable. */
|
|
65
|
+
async function getRecognizedModels() {
|
|
66
|
+
const binPath = resolveBundledBinaryPath();
|
|
67
|
+
if (!binPath)
|
|
68
|
+
return new Set();
|
|
69
|
+
let mtimeMs = 0;
|
|
70
|
+
try {
|
|
71
|
+
mtimeMs = fs.statSync(binPath).mtimeMs;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return new Set();
|
|
75
|
+
}
|
|
76
|
+
if (cache && cache.path === binPath && cache.mtimeMs === mtimeMs)
|
|
77
|
+
return cache.models;
|
|
78
|
+
if (!scanPromise) {
|
|
79
|
+
scanPromise = scanBinaryForModels(binPath).then((models) => {
|
|
80
|
+
cache = { path: binPath, mtimeMs, models };
|
|
81
|
+
scanPromise = null;
|
|
82
|
+
return models;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return scanPromise;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* True when `model` is a known native-1M model but the bundled binary does NOT
|
|
89
|
+
* recognize it — so its 1M context silently falls back to ~200K. Conservative:
|
|
90
|
+
* returns false (no warning) for bare aliases, unreadable binaries, or uncertainty.
|
|
91
|
+
*/
|
|
92
|
+
export async function modelMissingNative1MSupport(model) {
|
|
93
|
+
if (!model)
|
|
94
|
+
return false;
|
|
95
|
+
const base = model.replace(/\[1m\]$/i, '');
|
|
96
|
+
// Only fully-versioned ids are checkable against the binary; bare aliases like
|
|
97
|
+
// 'opus'/'sonnet' resolve to a concrete model server-side, so skip them.
|
|
98
|
+
if (!/^claude-(?:opus|sonnet|haiku|fable|mythos)-[0-9]/.test(base))
|
|
99
|
+
return false;
|
|
100
|
+
if (!isNative1MModel(base))
|
|
101
|
+
return false;
|
|
102
|
+
const recognized = await getRecognizedModels();
|
|
103
|
+
if (recognized.size === 0)
|
|
104
|
+
return false; // couldn't read the binary → don't false-warn
|
|
105
|
+
for (const r of recognized) {
|
|
106
|
+
// exact, or either is the date-suffixed snapshot of the other (suffix always starts with '-')
|
|
107
|
+
if (r === base || r.startsWith(`${base}-`) || base.startsWith(`${r}-`))
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=bundledBinaryModelSupport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundledBinaryModelSupport.js","sourceRoot":"","sources":["../../src/utils/bundledBinaryModelSupport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Debug Log — unified per-session decision trace for CLI-mode debugging.
|
|
3
|
+
*
|
|
4
|
+
* Records every classification/emit decision the server makes (screen parse → block
|
|
5
|
+
* type → client emit, file parse → block type → client emit) and every decision the
|
|
6
|
+
* client reports back (event received → segment classified → rendered). Both sides
|
|
7
|
+
* land in ONE chronological file so a post-mortem can diff server-emitted vs
|
|
8
|
+
* client-received at each timestamp.
|
|
9
|
+
*
|
|
10
|
+
* Activation: always-on when CLI engine runs (lightweight — one WriteStream per turn,
|
|
11
|
+
* best-effort writes). No env-var gate; the file is gitignored under `logs/`.
|
|
12
|
+
*
|
|
13
|
+
* Format (one JSON line per entry):
|
|
14
|
+
* {"ts":"2026-06-20T10:15:32.123Z","src":"S","ev":"grid-card-emit","d":{...}}
|
|
15
|
+
* {"ts":"2026-06-20T10:15:32.200Z","src":"C","ev":"recv-thinking","d":{...}}
|
|
16
|
+
*
|
|
17
|
+
* `src`: "S" = [CLILog-Server], "C" = [CLILog-Client]
|
|
18
|
+
*/
|
|
19
|
+
export interface CliDebugLogEntry {
|
|
20
|
+
ts: string;
|
|
21
|
+
src: 'S' | 'C';
|
|
22
|
+
ev: string;
|
|
23
|
+
d?: Record<string, unknown>;
|
|
24
|
+
}
|
|
25
|
+
export declare class CliDebugLog {
|
|
26
|
+
private stream;
|
|
27
|
+
readonly filePath: string;
|
|
28
|
+
constructor(sessionId: string);
|
|
29
|
+
/** Server-side decision log. */
|
|
30
|
+
server(event: string, data?: Record<string, unknown>): void;
|
|
31
|
+
/** Client-side decision log (relayed from browser via socket). */
|
|
32
|
+
client(event: string, data?: Record<string, unknown>): void;
|
|
33
|
+
/** Client-side decision log with original client timestamp preserved. */
|
|
34
|
+
clientWithTs(ts: string, event: string, data?: Record<string, unknown>): void;
|
|
35
|
+
close(): void;
|
|
36
|
+
private write;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=cliDebugLog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliDebugLog.d.ts","sourceRoot":"","sources":["../../src/utils/cliDebugLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAID,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA4B;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,SAAS,EAAE,MAAM;IAY7B,gCAAgC;IAChC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,kEAAkE;IAClE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,yEAAyE;IACzE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI7E,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,KAAK;CAMd"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Debug Log — unified per-session decision trace for CLI-mode debugging.
|
|
3
|
+
*
|
|
4
|
+
* Records every classification/emit decision the server makes (screen parse → block
|
|
5
|
+
* type → client emit, file parse → block type → client emit) and every decision the
|
|
6
|
+
* client reports back (event received → segment classified → rendered). Both sides
|
|
7
|
+
* land in ONE chronological file so a post-mortem can diff server-emitted vs
|
|
8
|
+
* client-received at each timestamp.
|
|
9
|
+
*
|
|
10
|
+
* Activation: always-on when CLI engine runs (lightweight — one WriteStream per turn,
|
|
11
|
+
* best-effort writes). No env-var gate; the file is gitignored under `logs/`.
|
|
12
|
+
*
|
|
13
|
+
* Format (one JSON line per entry):
|
|
14
|
+
* {"ts":"2026-06-20T10:15:32.123Z","src":"S","ev":"grid-card-emit","d":{...}}
|
|
15
|
+
* {"ts":"2026-06-20T10:15:32.200Z","src":"C","ev":"recv-thinking","d":{...}}
|
|
16
|
+
*
|
|
17
|
+
* `src`: "S" = [CLILog-Server], "C" = [CLILog-Client]
|
|
18
|
+
*/
|
|
19
|
+
import { mkdirSync, createWriteStream } from 'fs';
|
|
20
|
+
import path from 'path';
|
|
21
|
+
const LOG_DIR = path.join(process.cwd(), 'logs', 'cli-debug');
|
|
22
|
+
export class CliDebugLog {
|
|
23
|
+
stream = null;
|
|
24
|
+
filePath;
|
|
25
|
+
constructor(sessionId) {
|
|
26
|
+
const sid = sessionId || 'unknown';
|
|
27
|
+
const fname = `${sid}-${Date.now()}.jsonl`;
|
|
28
|
+
this.filePath = path.join(LOG_DIR, fname);
|
|
29
|
+
try {
|
|
30
|
+
mkdirSync(LOG_DIR, { recursive: true });
|
|
31
|
+
this.stream = createWriteStream(this.filePath, { encoding: 'utf8' });
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// best-effort — never break the engine
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Server-side decision log. */
|
|
38
|
+
server(event, data) {
|
|
39
|
+
this.write({ ts: new Date().toISOString(), src: 'S', ev: event, ...(data ? { d: data } : {}) });
|
|
40
|
+
}
|
|
41
|
+
/** Client-side decision log (relayed from browser via socket). */
|
|
42
|
+
client(event, data) {
|
|
43
|
+
this.write({ ts: new Date().toISOString(), src: 'C', ev: event, ...(data ? { d: data } : {}) });
|
|
44
|
+
}
|
|
45
|
+
/** Client-side decision log with original client timestamp preserved. */
|
|
46
|
+
clientWithTs(ts, event, data) {
|
|
47
|
+
this.write({ ts, src: 'C', ev: event, ...(data ? { d: data } : {}) });
|
|
48
|
+
}
|
|
49
|
+
close() {
|
|
50
|
+
try {
|
|
51
|
+
this.stream?.end();
|
|
52
|
+
}
|
|
53
|
+
catch { /* ignore */ }
|
|
54
|
+
this.stream = null;
|
|
55
|
+
}
|
|
56
|
+
write(entry) {
|
|
57
|
+
if (!this.stream)
|
|
58
|
+
return;
|
|
59
|
+
try {
|
|
60
|
+
this.stream.write(JSON.stringify(entry) + '\n');
|
|
61
|
+
}
|
|
62
|
+
catch { /* best-effort */ }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=cliDebugLog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliDebugLog.js","sourceRoot":"","sources":["../../src/utils/cliDebugLog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAoB,MAAM,IAAI,CAAC;AACpE,OAAO,IAAI,MAAM,MAAM,CAAC;AASxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAE9D,MAAM,OAAO,WAAW;IACd,MAAM,GAAuB,IAAI,CAAC;IACjC,QAAQ,CAAS;IAE1B,YAAY,SAAiB;QAC3B,MAAM,GAAG,GAAG,SAAS,IAAI,SAAS,CAAC;QACnC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,KAAa,EAAE,IAA8B;QAClD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,KAAa,EAAE,IAA8B;QAClD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,yEAAyE;IACzE,YAAY,CAAC,EAAU,EAAE,KAAa,EAAE,IAA8B;QACpE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,KAAK;QACH,IAAI,CAAC;YAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,KAAuB;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Engine Utilities (Epic 33)
|
|
3
|
+
* Small pure helpers for the CLI conversation engine's call-site gating logic.
|
|
4
|
+
*/
|
|
5
|
+
import type { EngineMode } from '@hammoc/shared';
|
|
6
|
+
/**
|
|
7
|
+
* Decide whether to forward the CLI engine's generation-progress callback
|
|
8
|
+
* (the "↓ N tokens · Ns" spinner counter, Story 32.7) to the browser.
|
|
9
|
+
*
|
|
10
|
+
* Gated on two conditions (Story 33.3):
|
|
11
|
+
* 1. the effective engine is the CLI engine (the SDK engine ignores the callback
|
|
12
|
+
* anyway — real token streaming makes a counter unnecessary), and
|
|
13
|
+
* 2. the user's `cliShowGenerationProgress` preference is enabled (default ON when
|
|
14
|
+
* unset — Story 33.2).
|
|
15
|
+
*
|
|
16
|
+
* When this returns false the call site passes `undefined`, so the engine's
|
|
17
|
+
* `emitProgress` early-returns and no `generation:progress` event is emitted.
|
|
18
|
+
*/
|
|
19
|
+
export declare function shouldForwardCliProgress(engineMode: EngineMode, showProgressPref: boolean | undefined): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Decide whether to forward the CLI engine's raw-screen passthrough (the read-only PTY
|
|
22
|
+
* mirror) to the browser.
|
|
23
|
+
*
|
|
24
|
+
* Gated on two conditions:
|
|
25
|
+
* 1. the effective engine is the CLI engine (the SDK engine has no PTY and never
|
|
26
|
+
* calls the callback anyway), and
|
|
27
|
+
* 2. the user's `cliPtyMirror` preference is enabled (default ON when unset — Story
|
|
28
|
+
* 37.7 promoted the mirror from a diagnostic opt-in to a default feature; the
|
|
29
|
+
* `false` opt-out is still honored so a user can turn it off).
|
|
30
|
+
*
|
|
31
|
+
* When this returns false the call site passes `undefined`, so the engine's onData never
|
|
32
|
+
* invokes onScreenFrame and no `cli:screen-frame` event is emitted.
|
|
33
|
+
*/
|
|
34
|
+
export declare function shouldForwardCliPtyMirror(engineMode: EngineMode, mirrorPref: boolean | undefined): boolean;
|
|
35
|
+
//# sourceMappingURL=cliEngineUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliEngineUtils.d.ts","sourceRoot":"","sources":["../../src/utils/cliEngineUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,UAAU,EACtB,gBAAgB,EAAE,OAAO,GAAG,SAAS,GACpC,OAAO,CAET;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,OAAO,GAAG,SAAS,GAC9B,OAAO,CAET"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Engine Utilities (Epic 33)
|
|
3
|
+
* Small pure helpers for the CLI conversation engine's call-site gating logic.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Decide whether to forward the CLI engine's generation-progress callback
|
|
7
|
+
* (the "↓ N tokens · Ns" spinner counter, Story 32.7) to the browser.
|
|
8
|
+
*
|
|
9
|
+
* Gated on two conditions (Story 33.3):
|
|
10
|
+
* 1. the effective engine is the CLI engine (the SDK engine ignores the callback
|
|
11
|
+
* anyway — real token streaming makes a counter unnecessary), and
|
|
12
|
+
* 2. the user's `cliShowGenerationProgress` preference is enabled (default ON when
|
|
13
|
+
* unset — Story 33.2).
|
|
14
|
+
*
|
|
15
|
+
* When this returns false the call site passes `undefined`, so the engine's
|
|
16
|
+
* `emitProgress` early-returns and no `generation:progress` event is emitted.
|
|
17
|
+
*/
|
|
18
|
+
export function shouldForwardCliProgress(engineMode, showProgressPref) {
|
|
19
|
+
return engineMode === 'cli' && (showProgressPref ?? true);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Decide whether to forward the CLI engine's raw-screen passthrough (the read-only PTY
|
|
23
|
+
* mirror) to the browser.
|
|
24
|
+
*
|
|
25
|
+
* Gated on two conditions:
|
|
26
|
+
* 1. the effective engine is the CLI engine (the SDK engine has no PTY and never
|
|
27
|
+
* calls the callback anyway), and
|
|
28
|
+
* 2. the user's `cliPtyMirror` preference is enabled (default ON when unset — Story
|
|
29
|
+
* 37.7 promoted the mirror from a diagnostic opt-in to a default feature; the
|
|
30
|
+
* `false` opt-out is still honored so a user can turn it off).
|
|
31
|
+
*
|
|
32
|
+
* When this returns false the call site passes `undefined`, so the engine's onData never
|
|
33
|
+
* invokes onScreenFrame and no `cli:screen-frame` event is emitted.
|
|
34
|
+
*/
|
|
35
|
+
export function shouldForwardCliPtyMirror(engineMode, mirrorPref) {
|
|
36
|
+
return engineMode === 'cli' && (mirrorPref ?? true);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=cliEngineUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliEngineUtils.js","sourceRoot":"","sources":["../../src/utils/cliEngineUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAsB,EACtB,gBAAqC;IAErC,OAAO,UAAU,KAAK,KAAK,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAsB,EACtB,UAA+B;IAE/B,OAAO,UAAU,KAAK,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;AACtD,CAAC"}
|
|
@@ -6,13 +6,13 @@ import type { ThinkingEffort } from '@hammoc/shared';
|
|
|
6
6
|
/**
|
|
7
7
|
* Clamp unsupported effort levels:
|
|
8
8
|
* · 'max' → 'high' unless model supports it (Opus 4.6+, Sonnet 4.6)
|
|
9
|
-
* · 'xhigh' → 'high' unless model supports it (Opus 4.7
|
|
9
|
+
* · 'xhigh' → 'high' unless model supports it (Opus 4.7+)
|
|
10
10
|
* Other levels pass through unchanged.
|
|
11
11
|
*/
|
|
12
12
|
export declare function clampEffortForModel(effort: ThinkingEffort | undefined, model: string | undefined): ThinkingEffort | undefined;
|
|
13
13
|
/**
|
|
14
14
|
* Whether the model supports Anthropic's adaptive thinking mode
|
|
15
|
-
* (`thinking: { type: 'adaptive' }`). Opus 4.7 requires adaptive;
|
|
15
|
+
* (`thinking: { type: 'adaptive' }`). Opus 4.7+ requires adaptive;
|
|
16
16
|
* Opus 4.6 and Sonnet 4.6 accept adaptive as the recommended mode.
|
|
17
17
|
* Older models (Sonnet 4.5, Opus 4.5, Haiku, Sonnet 4, etc.) do NOT
|
|
18
18
|
* support adaptive and must stay on the legacy `maxThinkingTokens` path.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effortUtils.d.ts","sourceRoot":"","sources":["../../src/utils/effortUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"effortUtils.d.ts","sourceRoot":"","sources":["../../src/utils/effortUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAW7H;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAO3E"}
|
|
@@ -5,15 +5,16 @@
|
|
|
5
5
|
/**
|
|
6
6
|
* Clamp unsupported effort levels:
|
|
7
7
|
* · 'max' → 'high' unless model supports it (Opus 4.6+, Sonnet 4.6)
|
|
8
|
-
* · 'xhigh' → 'high' unless model supports it (Opus 4.7
|
|
8
|
+
* · 'xhigh' → 'high' unless model supports it (Opus 4.7+)
|
|
9
9
|
* Other levels pass through unchanged.
|
|
10
10
|
*/
|
|
11
11
|
export function clampEffortForModel(effort, model) {
|
|
12
12
|
if (!effort)
|
|
13
13
|
return effort;
|
|
14
14
|
const supportsMax = !!model && (model === 'opus' || model === 'sonnet' ||
|
|
15
|
-
model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('sonnet-4-6')
|
|
16
|
-
|
|
15
|
+
model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('opus-4-8') || model.includes('sonnet-4-6') ||
|
|
16
|
+
model.includes('fable'));
|
|
17
|
+
const supportsXHigh = !!model && (model === 'opus' || model.includes('opus-4-7') || model.includes('opus-4-8') || model.includes('fable'));
|
|
17
18
|
if (effort === 'max' && !supportsMax)
|
|
18
19
|
return 'high';
|
|
19
20
|
if (effort === 'xhigh' && !supportsXHigh)
|
|
@@ -22,7 +23,7 @@ export function clampEffortForModel(effort, model) {
|
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* Whether the model supports Anthropic's adaptive thinking mode
|
|
25
|
-
* (`thinking: { type: 'adaptive' }`). Opus 4.7 requires adaptive;
|
|
26
|
+
* (`thinking: { type: 'adaptive' }`). Opus 4.7+ requires adaptive;
|
|
26
27
|
* Opus 4.6 and Sonnet 4.6 accept adaptive as the recommended mode.
|
|
27
28
|
* Older models (Sonnet 4.5, Opus 4.5, Haiku, Sonnet 4, etc.) do NOT
|
|
28
29
|
* support adaptive and must stay on the legacy `maxThinkingTokens` path.
|
|
@@ -31,6 +32,7 @@ export function supportsAdaptiveThinking(model) {
|
|
|
31
32
|
if (!model)
|
|
32
33
|
return false;
|
|
33
34
|
return (model === 'opus' || model === 'sonnet' ||
|
|
34
|
-
model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('sonnet-4-6')
|
|
35
|
+
model.includes('opus-4-6') || model.includes('opus-4-7') || model.includes('opus-4-8') || model.includes('sonnet-4-6') ||
|
|
36
|
+
model.includes('fable'));
|
|
35
37
|
}
|
|
36
38
|
//# sourceMappingURL=effortUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effortUtils.js","sourceRoot":"","sources":["../../src/utils/effortUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAkC,EAAE,KAAyB;IAC/F,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,CAC7B,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QACtC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"effortUtils.js","sourceRoot":"","sources":["../../src/utils/effortUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAkC,EAAE,KAAyB;IAC/F,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAC3B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,IAAI,CAC7B,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QACtC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QACtH,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CACxB,CAAC;IACF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3I,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC;IACpD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,aAAa;QAAE,OAAO,MAAM,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAyB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,CACL,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;QACtC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;QACtH,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CACxB,CAAC;AACJ,CAAC"}
|
|
@@ -12,6 +12,7 @@ export declare enum SDKErrorCode {
|
|
|
12
12
|
NETWORK_ERROR = "NETWORK_ERROR",
|
|
13
13
|
INVALID_REQUEST = "INVALID_REQUEST",
|
|
14
14
|
CONTEXT_OVERFLOW = "CONTEXT_OVERFLOW",
|
|
15
|
+
RESUME_THINKING_INVALID = "RESUME_THINKING_INVALID",
|
|
15
16
|
SERVICE_UNAVAILABLE = "SERVICE_UNAVAILABLE",
|
|
16
17
|
PERMISSION_DENIED = "PERMISSION_DENIED",
|
|
17
18
|
INVALID_PATH = "INVALID_PATH",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;IAC7C,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,gBAAgB,qBAAqB;IAIrC,uBAAuB,4BAA4B;IACnD,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,YAAY,iBAAiB;IAC7B,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAYzD,CAAC;AAEF;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;gBAG7B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,YAAmC,EACzC,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,KAAK,CAAC;KACvB;IAeH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CASlC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,QAAQ;gBAC9B,UAAU,GAAE,MAAW,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQ7E;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CASlE;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,QAAQ;gBACvC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,QAAQ;gBAC5B,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM;CAQpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAqFrE"}
|
|
@@ -14,6 +14,10 @@ export var SDKErrorCode;
|
|
|
14
14
|
SDKErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
15
15
|
SDKErrorCode["INVALID_REQUEST"] = "INVALID_REQUEST";
|
|
16
16
|
SDKErrorCode["CONTEXT_OVERFLOW"] = "CONTEXT_OVERFLOW";
|
|
17
|
+
// Resume rejected because thinking blocks in the latest assistant turn no
|
|
18
|
+
// longer match their original signatures (typically after the CLI restructures
|
|
19
|
+
// a long conversation on resume). Recoverable by stripping thinking blocks.
|
|
20
|
+
SDKErrorCode["RESUME_THINKING_INVALID"] = "RESUME_THINKING_INVALID";
|
|
17
21
|
SDKErrorCode["SERVICE_UNAVAILABLE"] = "SERVICE_UNAVAILABLE";
|
|
18
22
|
SDKErrorCode["PERMISSION_DENIED"] = "PERMISSION_DENIED";
|
|
19
23
|
SDKErrorCode["INVALID_PATH"] = "INVALID_PATH";
|
|
@@ -29,6 +33,7 @@ export const SDK_ERROR_STATUS = {
|
|
|
29
33
|
[SDKErrorCode.NETWORK_ERROR]: 503,
|
|
30
34
|
[SDKErrorCode.INVALID_REQUEST]: 400,
|
|
31
35
|
[SDKErrorCode.CONTEXT_OVERFLOW]: 400,
|
|
36
|
+
[SDKErrorCode.RESUME_THINKING_INVALID]: 400,
|
|
32
37
|
[SDKErrorCode.SERVICE_UNAVAILABLE]: 503,
|
|
33
38
|
[SDKErrorCode.PERMISSION_DENIED]: 403,
|
|
34
39
|
[SDKErrorCode.INVALID_PATH]: 400,
|
|
@@ -154,6 +159,18 @@ export function parseSDKError(error, lang) {
|
|
|
154
159
|
if (message.includes('abort') || error.name === 'AbortError') {
|
|
155
160
|
return new AbortedError(error, t?.('error.aborted'));
|
|
156
161
|
}
|
|
162
|
+
// Check for resume-time thinking-block signature rejection.
|
|
163
|
+
// The API rejects a resumed conversation whose latest assistant turn carries
|
|
164
|
+
// thinking blocks that no longer match their original signatures, e.g. after
|
|
165
|
+
// the CLI compacts/restructures a long conversation on resume. The message is:
|
|
166
|
+
// "`thinking` or `redacted_thinking` blocks in the latest assistant message
|
|
167
|
+
// cannot be modified. These blocks must remain as they were..."
|
|
168
|
+
if (message.includes('thinking') &&
|
|
169
|
+
(message.includes('cannot be modified') || message.includes('must remain as they were'))) {
|
|
170
|
+
return new SDKError(error.message, SDKErrorCode.RESUME_THINKING_INVALID, {
|
|
171
|
+
originalError: error,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
157
174
|
// Check for context overflow / token limit errors
|
|
158
175
|
if (message.includes('context window') ||
|
|
159
176
|
message.includes('context length') ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,OAAO,MAAM,YAAY,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|