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,372 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* System Browse Service
|
|
3
|
+
* Directory-only browsing across the whole host filesystem (Epic 34, Story 34.1).
|
|
4
|
+
*
|
|
5
|
+
* KEY DIFFERENCE from fileSystemService: there is NO project boundary. This API
|
|
6
|
+
* runs *before* a project is registered, so it accepts arbitrary ABSOLUTE paths
|
|
7
|
+
* (drive roots through any directory). It therefore does NOT use
|
|
8
|
+
* validateProjectPath / validateReadPath. Instead it carries its own guard
|
|
9
|
+
* (assertSafeAbsolutePath) that blocks null bytes / UNC-device paths and enforces
|
|
10
|
+
* absoluteness. The write surface is folder create/rename ONLY — there is no
|
|
11
|
+
* delete method (destructive actions removed from the surface entirely).
|
|
12
|
+
*
|
|
13
|
+
* The guard / realpath / EACCES-skip / errno-mapping idioms are borrowed 1:1
|
|
14
|
+
* from fileSystemService and pathGuard; only the boundary model differs.
|
|
15
|
+
* [Source: docs/prd/epic-34-directory-browser.md#Story 34.1;
|
|
16
|
+
* packages/server/src/services/fileSystemService.ts:162-176, 266-335, 765;
|
|
17
|
+
* packages/server/src/middleware/pathGuard.ts:34-58]
|
|
18
|
+
*/
|
|
19
|
+
import fs from 'fs/promises';
|
|
20
|
+
import path from 'path';
|
|
21
|
+
import os from 'os';
|
|
22
|
+
/**
|
|
23
|
+
* Windows reserved device names (case-insensitive) — cannot be used as a folder
|
|
24
|
+
* name on Windows even with an extension (e.g. CON.txt). Rejected everywhere for
|
|
25
|
+
* cross-platform consistency.
|
|
26
|
+
*/
|
|
27
|
+
const WINDOWS_RESERVED_NAMES = new Set([
|
|
28
|
+
'CON', 'PRN', 'AUX', 'NUL',
|
|
29
|
+
'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9',
|
|
30
|
+
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9',
|
|
31
|
+
]);
|
|
32
|
+
/** Printable characters not allowed in a folder name (Windows-strict, safe for POSIX). */
|
|
33
|
+
const RESERVED_PRINTABLE_CHARS = new Set(['<', '>', ':', '"', '/', '\\', '|', '?', '*']);
|
|
34
|
+
/**
|
|
35
|
+
* True if a name contains a reserved printable char OR any control character
|
|
36
|
+
* (0x00–0x1F). Char-code scan avoids a control-char regex literal entirely.
|
|
37
|
+
*/
|
|
38
|
+
function hasReservedChar(name) {
|
|
39
|
+
for (let i = 0; i < name.length; i++) {
|
|
40
|
+
const ch = name[i];
|
|
41
|
+
if (RESERVED_PRINTABLE_CHARS.has(ch))
|
|
42
|
+
return true;
|
|
43
|
+
if (name.charCodeAt(i) < 0x20)
|
|
44
|
+
return true; // control characters
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
/** OS errno codes that mean "write refused" → mapped to PERMISSION_DENIED (AC9). */
|
|
49
|
+
function isWriteDeniedErrno(error) {
|
|
50
|
+
const code = error.code;
|
|
51
|
+
return code === 'EACCES' || code === 'EPERM' || code === 'EROFS';
|
|
52
|
+
}
|
|
53
|
+
class SystemBrowseService {
|
|
54
|
+
/**
|
|
55
|
+
* Build a domain error whose `code` the controller maps to an HTTP status +
|
|
56
|
+
* i18n message (same idiom as fileSystemService: `(err).code = 'CODE'`).
|
|
57
|
+
*/
|
|
58
|
+
makeError(code, message) {
|
|
59
|
+
const err = new Error(message);
|
|
60
|
+
err.code = code;
|
|
61
|
+
return err;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Guard an incoming absolute path. Blocks null bytes and UNC/device paths,
|
|
65
|
+
* enforces absoluteness, and normalizes via path.resolve. Throws INVALID_PATH.
|
|
66
|
+
* Mirrors the null-byte / UNC checks from pathGuard, minus the project-root
|
|
67
|
+
* containment (this API has no project boundary).
|
|
68
|
+
*/
|
|
69
|
+
assertSafeAbsolutePath(input) {
|
|
70
|
+
if (typeof input !== 'string' || input.length === 0) {
|
|
71
|
+
throw this.makeError('INVALID_PATH', 'Path is required');
|
|
72
|
+
}
|
|
73
|
+
// Null byte
|
|
74
|
+
if (input.includes('\0')) {
|
|
75
|
+
throw this.makeError('INVALID_PATH', 'Invalid path: null byte detected');
|
|
76
|
+
}
|
|
77
|
+
// UNC / device paths (\\server\share, //server, \\?\...) — block network/device access
|
|
78
|
+
if (input.startsWith('\\\\') || input.startsWith('//')) {
|
|
79
|
+
throw this.makeError('INVALID_PATH', 'Invalid path: UNC paths are not allowed');
|
|
80
|
+
}
|
|
81
|
+
// Must be absolute (relative paths are meaningless without a project root)
|
|
82
|
+
if (!path.isAbsolute(input)) {
|
|
83
|
+
throw this.makeError('INVALID_PATH', 'Invalid path: must be absolute');
|
|
84
|
+
}
|
|
85
|
+
const resolved = path.resolve(input);
|
|
86
|
+
// Double-check the resolved form isn't UNC (e.g. mixed-separator input)
|
|
87
|
+
const normalizedForUNC = resolved.replace(/\//g, '\\');
|
|
88
|
+
if (normalizedForUNC.startsWith('\\\\')) {
|
|
89
|
+
throw this.makeError('INVALID_PATH', 'Invalid path: UNC paths are not allowed');
|
|
90
|
+
}
|
|
91
|
+
return resolved;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Validate and normalize a single folder name (for mkdir/rename).
|
|
95
|
+
* Strips directory components via basename (traversal guard), then rejects
|
|
96
|
+
* empty / dot names, reserved characters, and Windows reserved device names.
|
|
97
|
+
* If basename(name) !== name the input contained a path separator → traversal
|
|
98
|
+
* attempt → INVALID_NAME. (fileSystemService:765 basename idiom.)
|
|
99
|
+
*/
|
|
100
|
+
sanitizeEntryName(name) {
|
|
101
|
+
if (typeof name !== 'string') {
|
|
102
|
+
throw this.makeError('INVALID_NAME', 'Name is required');
|
|
103
|
+
}
|
|
104
|
+
const base = path.basename(name);
|
|
105
|
+
// Any directory component (a/b, ../x) makes basename differ from the input.
|
|
106
|
+
if (base !== name) {
|
|
107
|
+
throw this.makeError('INVALID_NAME', 'Name must not contain path separators');
|
|
108
|
+
}
|
|
109
|
+
if (base === '' || base === '.' || base === '..') {
|
|
110
|
+
throw this.makeError('INVALID_NAME', 'Invalid name');
|
|
111
|
+
}
|
|
112
|
+
if (hasReservedChar(base)) {
|
|
113
|
+
throw this.makeError('INVALID_NAME', 'Name contains reserved characters');
|
|
114
|
+
}
|
|
115
|
+
// Reserved device name check uses the stem before the first dot (CON, CON.txt).
|
|
116
|
+
const stem = base.split('.')[0].toUpperCase();
|
|
117
|
+
if (WINDOWS_RESERVED_NAMES.has(stem)) {
|
|
118
|
+
throw this.makeError('INVALID_NAME', 'Name is a reserved device name');
|
|
119
|
+
}
|
|
120
|
+
return base;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Parent path for breadcrumb / up navigation. At a filesystem root (C:\, /)
|
|
124
|
+
* path.dirname returns the same path → return null so the client maps it to
|
|
125
|
+
* the "My PC" drive-roots view.
|
|
126
|
+
*/
|
|
127
|
+
parentOf(abs) {
|
|
128
|
+
const parent = path.dirname(abs);
|
|
129
|
+
return parent === abs ? null : parent;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Whether a directory has at least one child directory (tree-chevron signal).
|
|
133
|
+
* depth-1 guarded readdir, short-circuits on the first directory found. There
|
|
134
|
+
* is NO recursion anywhere in this service, so symlink cycles can never blow
|
|
135
|
+
* the stack — a stronger guarantee than searchFiles' visited-set, achieved
|
|
136
|
+
* structurally. EACCES/EPERM (or any read failure) → false.
|
|
137
|
+
*/
|
|
138
|
+
async hasChildDirectory(absDir) {
|
|
139
|
+
let dirents;
|
|
140
|
+
try {
|
|
141
|
+
dirents = await fs.readdir(absDir, { withFileTypes: true });
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// EACCES/EPERM/ENOENT/etc. — treat as "no expandable children"
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
for (const dirent of dirents) {
|
|
148
|
+
try {
|
|
149
|
+
if (dirent.isDirectory())
|
|
150
|
+
return true;
|
|
151
|
+
if (dirent.isSymbolicLink()) {
|
|
152
|
+
// readdir() reports the link itself; resolve to see if it targets a dir.
|
|
153
|
+
const target = await fs.realpath(path.join(absDir, dirent.name));
|
|
154
|
+
const st = await fs.stat(target);
|
|
155
|
+
if (st.isDirectory())
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// broken symlink / unreadable entry — skip
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* List the child DIRECTORIES of an absolute path (files excluded, AC1).
|
|
168
|
+
* - ENOENT → NOT_FOUND, non-directory → NOT_A_DIRECTORY
|
|
169
|
+
* - per-entry try/catch: EACCES/EPERM and broken symlinks are skipped so the
|
|
170
|
+
* listing returns a partial result instead of failing (AC4)
|
|
171
|
+
* - symlinks are resolved via realpath and evaluated as directory-or-not (AC3);
|
|
172
|
+
* no recursion means cycles cannot cause infinite descent
|
|
173
|
+
*/
|
|
174
|
+
async listDirectory(absolutePath) {
|
|
175
|
+
const abs = this.assertSafeAbsolutePath(absolutePath);
|
|
176
|
+
let stat;
|
|
177
|
+
try {
|
|
178
|
+
stat = await fs.stat(abs);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
const code = error.code;
|
|
182
|
+
if (code === 'ENOENT')
|
|
183
|
+
throw this.makeError('NOT_FOUND', 'Path not found');
|
|
184
|
+
if (isWriteDeniedErrno(error))
|
|
185
|
+
throw this.makeError('PERMISSION_DENIED', 'Permission denied');
|
|
186
|
+
throw this.makeError('BROWSE_ERROR', 'Browse error');
|
|
187
|
+
}
|
|
188
|
+
if (!stat.isDirectory()) {
|
|
189
|
+
throw this.makeError('NOT_A_DIRECTORY', 'Path is not a directory');
|
|
190
|
+
}
|
|
191
|
+
let dirents;
|
|
192
|
+
try {
|
|
193
|
+
dirents = await fs.readdir(abs, { withFileTypes: true });
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
// The whole listing failed (not a per-entry skip) → surface as a coherent code.
|
|
197
|
+
if (isWriteDeniedErrno(error))
|
|
198
|
+
throw this.makeError('PERMISSION_DENIED', 'Permission denied');
|
|
199
|
+
throw this.makeError('BROWSE_ERROR', 'Browse error');
|
|
200
|
+
}
|
|
201
|
+
const entries = [];
|
|
202
|
+
for (const dirent of dirents) {
|
|
203
|
+
try {
|
|
204
|
+
const entryPath = path.join(abs, dirent.name);
|
|
205
|
+
let isDir = dirent.isDirectory();
|
|
206
|
+
if (!isDir && dirent.isSymbolicLink()) {
|
|
207
|
+
// Broken symlink → realpath throws → caught below → skipped.
|
|
208
|
+
const target = await fs.realpath(entryPath);
|
|
209
|
+
const st = await fs.stat(target);
|
|
210
|
+
isDir = st.isDirectory();
|
|
211
|
+
}
|
|
212
|
+
if (!isDir)
|
|
213
|
+
continue; // files excluded (AC1)
|
|
214
|
+
const hasChildren = await this.hasChildDirectory(entryPath);
|
|
215
|
+
entries.push({ name: dirent.name, path: entryPath, hasChildren });
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// EACCES/EPERM/broken symlink → skip (partial result, AC4/AC3)
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
entries.sort((a, b) => a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }));
|
|
223
|
+
return {
|
|
224
|
+
path: abs,
|
|
225
|
+
parent: this.parentOf(abs),
|
|
226
|
+
home: os.homedir(),
|
|
227
|
+
isDriveRoots: false,
|
|
228
|
+
entries,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* List drive roots ("My PC" view, AC2).
|
|
233
|
+
* Windows: probe drive letters A–Z with fs.access — NO child_process (wmic is
|
|
234
|
+
* deprecated on newer Windows; PowerShell spawns are slow / shell-dependent /
|
|
235
|
+
* test-fragile). Drives that exist but are inaccessible (empty optical drive,
|
|
236
|
+
* locked BitLocker volume) make access() throw and are naturally omitted —
|
|
237
|
+
* this is the INTENDED meaning of AC2's "available drives", not a defect.
|
|
238
|
+
* POSIX: root "/" is always present; standard mount-point parents
|
|
239
|
+
* (/Volumes, /mnt, /media) are added best-effort only when they exist.
|
|
240
|
+
*/
|
|
241
|
+
async listDriveRoots() {
|
|
242
|
+
const entries = [];
|
|
243
|
+
if (process.platform === 'win32') {
|
|
244
|
+
for (let i = 65; i <= 90; i++) { // 'A'..'Z'
|
|
245
|
+
const letter = String.fromCharCode(i);
|
|
246
|
+
const root = `${letter}:\\`;
|
|
247
|
+
try {
|
|
248
|
+
await fs.access(root);
|
|
249
|
+
// Drives are assumed expandable (avoids a probe of every drive's contents).
|
|
250
|
+
entries.push({ name: `${letter}:`, path: root, hasChildren: true });
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Non-existent OR inaccessible drive — intentionally omitted (see doc above).
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
entries.push({ name: '/', path: '/', hasChildren: true });
|
|
260
|
+
for (const mount of ['/Volumes', '/mnt', '/media']) {
|
|
261
|
+
try {
|
|
262
|
+
const st = await fs.stat(mount);
|
|
263
|
+
if (st.isDirectory()) {
|
|
264
|
+
entries.push({ name: mount, path: mount, hasChildren: true });
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
continue; // best-effort: absent mount parents are skipped
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
path: null,
|
|
274
|
+
parent: null,
|
|
275
|
+
home: os.homedir(),
|
|
276
|
+
isDriveRoots: true,
|
|
277
|
+
entries,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Create a new folder under an absolute parent directory (AC5).
|
|
282
|
+
* EEXIST → ALREADY_EXISTS (409); EACCES/EPERM/EROFS → PERMISSION_DENIED (403,
|
|
283
|
+
* AC9 — OS-protected areas are refused safely, never a crash/500).
|
|
284
|
+
*/
|
|
285
|
+
async makeDirectory(parentAbsolute, name) {
|
|
286
|
+
const parent = this.assertSafeAbsolutePath(parentAbsolute);
|
|
287
|
+
const safe = this.sanitizeEntryName(name);
|
|
288
|
+
let parentStat;
|
|
289
|
+
try {
|
|
290
|
+
parentStat = await fs.stat(parent);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
if (error.code === 'ENOENT') {
|
|
294
|
+
throw this.makeError('NOT_FOUND', 'Parent directory not found');
|
|
295
|
+
}
|
|
296
|
+
if (isWriteDeniedErrno(error))
|
|
297
|
+
throw this.makeError('PERMISSION_DENIED', 'Permission denied');
|
|
298
|
+
throw this.makeError('BROWSE_ERROR', 'Browse error');
|
|
299
|
+
}
|
|
300
|
+
if (!parentStat.isDirectory()) {
|
|
301
|
+
throw this.makeError('NOT_A_DIRECTORY', 'Parent path is not a directory');
|
|
302
|
+
}
|
|
303
|
+
const target = path.join(parent, safe);
|
|
304
|
+
try {
|
|
305
|
+
await fs.mkdir(target);
|
|
306
|
+
return { success: true, path: target };
|
|
307
|
+
}
|
|
308
|
+
catch (error) {
|
|
309
|
+
const code = error.code;
|
|
310
|
+
if (code === 'EEXIST')
|
|
311
|
+
throw this.makeError('ALREADY_EXISTS', 'Directory already exists');
|
|
312
|
+
if (code === 'ENOENT')
|
|
313
|
+
throw this.makeError('NOT_FOUND', 'Parent directory not found');
|
|
314
|
+
if (isWriteDeniedErrno(error))
|
|
315
|
+
throw this.makeError('PERMISSION_DENIED', 'Permission denied');
|
|
316
|
+
throw this.makeError('BROWSE_ERROR', 'Browse error');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Rename an entry within its SAME parent directory (AC6).
|
|
321
|
+
* Target-exists → ALREADY_EXISTS (409); EACCES/EPERM/EROFS → PERMISSION_DENIED
|
|
322
|
+
* (AC9). The new name is sanitized and joined to dirname(source), so a rename
|
|
323
|
+
* can never move an entry into another directory.
|
|
324
|
+
*/
|
|
325
|
+
async rename(absolute, newName) {
|
|
326
|
+
const src = this.assertSafeAbsolutePath(absolute);
|
|
327
|
+
const safe = this.sanitizeEntryName(newName);
|
|
328
|
+
try {
|
|
329
|
+
await fs.stat(src);
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
if (error.code === 'ENOENT') {
|
|
333
|
+
throw this.makeError('NOT_FOUND', 'Source not found');
|
|
334
|
+
}
|
|
335
|
+
if (isWriteDeniedErrno(error))
|
|
336
|
+
throw this.makeError('PERMISSION_DENIED', 'Permission denied');
|
|
337
|
+
throw this.makeError('BROWSE_ERROR', 'Browse error');
|
|
338
|
+
}
|
|
339
|
+
const target = path.join(path.dirname(src), safe);
|
|
340
|
+
// Target must not already exist (same-parent rename, AC6).
|
|
341
|
+
try {
|
|
342
|
+
await fs.stat(target);
|
|
343
|
+
throw this.makeError('ALREADY_EXISTS', 'Target already exists');
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
const code = error.code;
|
|
347
|
+
if (code === 'ALREADY_EXISTS')
|
|
348
|
+
throw error;
|
|
349
|
+
if (code !== 'ENOENT') {
|
|
350
|
+
if (isWriteDeniedErrno(error))
|
|
351
|
+
throw this.makeError('PERMISSION_DENIED', 'Permission denied');
|
|
352
|
+
throw this.makeError('BROWSE_ERROR', 'Browse error');
|
|
353
|
+
}
|
|
354
|
+
// ENOENT — target is free, proceed.
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
await fs.rename(src, target);
|
|
358
|
+
return { success: true, oldPath: src, newPath: target };
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
const code = error.code;
|
|
362
|
+
if (code === 'EEXIST' || code === 'ENOTEMPTY') {
|
|
363
|
+
throw this.makeError('ALREADY_EXISTS', 'Target already exists');
|
|
364
|
+
}
|
|
365
|
+
if (isWriteDeniedErrno(error))
|
|
366
|
+
throw this.makeError('PERMISSION_DENIED', 'Permission denied');
|
|
367
|
+
throw this.makeError('BROWSE_ERROR', 'Browse error');
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
export const systemBrowseService = new SystemBrowseService();
|
|
372
|
+
//# sourceMappingURL=systemBrowseService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"systemBrowseService.js","sourceRoot":"","sources":["../../src/services/systemBrowseService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 31.3 (Task A.3 / A.5): token attribution + exact count_tokens proxy.
|
|
3
|
+
*
|
|
4
|
+
* Two responsibilities, sharing one text-resolution path so the "exact count"
|
|
5
|
+
* input and the "approximation" input are always the same bytes (N-1):
|
|
6
|
+
*
|
|
7
|
+
* 1. listTokenAttribution(projectSlug) — enumerate the measured harness
|
|
8
|
+
* elements (project/global CLAUDE.md · each skill's SKILL.md · the
|
|
9
|
+
* Hammoc-managed context-builder injection) and report UTF-8 byte size +
|
|
10
|
+
* `approxTokens = ceil(bytes/4)` + a sha256 content hash (AC-B1 / AC-B2).
|
|
11
|
+
*
|
|
12
|
+
* 2. exactCount(projectSlug, req) — proxy the official `count_tokens` via the
|
|
13
|
+
* already-installed `@anthropic-ai/sdk` `messages.countTokens` (spike #2,
|
|
14
|
+
* §15 — no new dependency), keyed by a server-recomputed content hash
|
|
15
|
+
* (N-B: the request hash is only an optimistic hint). Failures are
|
|
16
|
+
* non-blocking (`failed: true`) so the client keeps the approximation
|
|
17
|
+
* (AC-B3.c).
|
|
18
|
+
*
|
|
19
|
+
* Enumeration REUSES existing controllers/services (claudeMdService,
|
|
20
|
+
* harnessSkillService, contextBuilderService) — no new file scanner (S-2). The
|
|
21
|
+
* context-builder injection is estimated from the Story 31.2 manifest WITHOUT
|
|
22
|
+
* executing the hook (dynamic variable / command values are placeholders).
|
|
23
|
+
*
|
|
24
|
+
* Per spike #1 (§14) the SERVER approximation tier is byte `size/4` only — the
|
|
25
|
+
* `@anthropic-ai/tokenizer` tier was NOT adopted (Task A.4 skipped).
|
|
26
|
+
*/
|
|
27
|
+
import { type TokenAttributionItem, type ExactTokenCountRequest, type ExactTokenCountResponse } from '@hammoc/shared';
|
|
28
|
+
/** ceil(bytes / 4) — the size-based heuristic (§14). */
|
|
29
|
+
export declare function approxTokensFromBytes(bytes: number): number;
|
|
30
|
+
declare class TokenCountService {
|
|
31
|
+
/** sha256(text) → token count. In-memory; persisted best-effort to disk. */
|
|
32
|
+
private cache;
|
|
33
|
+
private cacheLoaded;
|
|
34
|
+
private cacheFilePath;
|
|
35
|
+
private loadCache;
|
|
36
|
+
private persistCache;
|
|
37
|
+
/**
|
|
38
|
+
* Enumerate measured harness elements (AC-B1.a). Missing CLAUDE.md files and a
|
|
39
|
+
* disabled/empty context builder are omitted (they contribute no tokens).
|
|
40
|
+
*/
|
|
41
|
+
listTokenAttribution(projectSlug: string): Promise<TokenAttributionItem[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Exact count for one element (AC-B3). The text is re-resolved server-side and
|
|
44
|
+
* its sha256 is the AUTHORITATIVE cache key (N-B) — the request `contentHash`
|
|
45
|
+
* is only an optimistic hint. count_tokens failures return `failed: true`.
|
|
46
|
+
*/
|
|
47
|
+
exactCount(projectSlug: string, req: ExactTokenCountRequest): Promise<ExactTokenCountResponse>;
|
|
48
|
+
private makeItem;
|
|
49
|
+
/** Resolve the text used for BOTH attribution and exact-count (N-1). */
|
|
50
|
+
private resolveElementText;
|
|
51
|
+
private readClaudeMd;
|
|
52
|
+
/**
|
|
53
|
+
* Read a skill's SKILL.md, validating `elementPath` against the enumerated
|
|
54
|
+
* skills so an arbitrary client path can never be read (the path must be one
|
|
55
|
+
* the server itself vouched for in listTokenAttribution).
|
|
56
|
+
*/
|
|
57
|
+
private readSkillTextByPath;
|
|
58
|
+
/**
|
|
59
|
+
* Assemble the context-builder `additionalContext` text WITHOUT executing the
|
|
60
|
+
* hook (N-1). Reference files are read (their content dominates the size);
|
|
61
|
+
* dynamic variables / acknowledged commands contribute only their block
|
|
62
|
+
* headers with a `(dynamic)` placeholder. Mirrors the block format of
|
|
63
|
+
* `contextBuilderScriptTemplate` for the statically-knowable parts. Returns ''
|
|
64
|
+
* when the builder is disabled or empty.
|
|
65
|
+
*/
|
|
66
|
+
private assembleContextBuilderText;
|
|
67
|
+
private callCountTokens;
|
|
68
|
+
}
|
|
69
|
+
export declare const tokenCountService: TokenCountService;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=tokenCountService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenCountService.d.ts","sourceRoot":"","sources":["../../src/services/tokenCountService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAQH,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC7B,MAAM,gBAAgB,CAAC;AAwBxB,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AA6BD,cAAM,iBAAiB;IACrB,4EAA4E;IAC5E,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,aAAa;YAIP,SAAS;YAcT,YAAY;IAU1B;;;OAGG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAkChF;;;;OAIG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAqBpG,OAAO,CAAC,QAAQ;IAiBhB,wEAAwE;YAC1D,kBAAkB;YAqBlB,YAAY;IAW1B;;;;OAIG;YACW,mBAAmB;IAkBjC;;;;;;;OAOG;YACW,0BAA0B;YAwC1B,eAAe;CAiB9B;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|