hammoc 1.4.0 → 1.6.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 +428 -405
- package/bin/hammoc.js +0 -6
- package/package.json +100 -94
- package/packages/client/dist/assets/agentExampleHighlight-ltj9ce0U.js +1 -0
- package/packages/client/dist/assets/commandTokenHighlight-ji_ViMb4.js +1 -0
- package/packages/client/dist/assets/index-B-DiRGuz.js +2 -0
- package/packages/client/dist/assets/index-B09doO8H.js +139 -0
- package/packages/client/dist/assets/index-BT4RIi0U.js +1523 -0
- package/packages/client/dist/assets/index-DyNJ5jEW.css +32 -0
- package/packages/client/dist/assets/snippetTokenHighlight-CP3v4o2g.js +1 -0
- package/packages/client/dist/index.html +2 -2
- package/packages/client/dist/sw.js +1 -1
- package/packages/server/dist/app.d.ts.map +1 -1
- package/packages/server/dist/app.js +13 -21
- package/packages/server/dist/app.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/claudeMdController.d.ts +26 -0
- package/packages/server/dist/controllers/claudeMdController.d.ts.map +1 -0
- package/packages/server/dist/controllers/claudeMdController.js +158 -0
- package/packages/server/dist/controllers/claudeMdController.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 +35 -0
- package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessAgentController.js +372 -0
- package/packages/server/dist/controllers/harnessAgentController.js.map +1 -0
- 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 +35 -0
- package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessCommandController.js +415 -0
- package/packages/server/dist/controllers/harnessCommandController.js.map +1 -0
- package/packages/server/dist/controllers/harnessController.d.ts +21 -0
- package/packages/server/dist/controllers/harnessController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessController.js +176 -0
- package/packages/server/dist/controllers/harnessController.js.map +1 -0
- package/packages/server/dist/controllers/harnessHookController.d.ts +32 -0
- package/packages/server/dist/controllers/harnessHookController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessHookController.js +406 -0
- package/packages/server/dist/controllers/harnessHookController.js.map +1 -0
- package/packages/server/dist/controllers/harnessLintController.d.ts +18 -0
- package/packages/server/dist/controllers/harnessLintController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessLintController.js +72 -0
- package/packages/server/dist/controllers/harnessLintController.js.map +1 -0
- package/packages/server/dist/controllers/harnessMcpController.d.ts +28 -0
- package/packages/server/dist/controllers/harnessMcpController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessMcpController.js +371 -0
- package/packages/server/dist/controllers/harnessMcpController.js.map +1 -0
- package/packages/server/dist/controllers/harnessPluginController.d.ts +17 -0
- package/packages/server/dist/controllers/harnessPluginController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessPluginController.js +115 -0
- package/packages/server/dist/controllers/harnessPluginController.js.map +1 -0
- package/packages/server/dist/controllers/harnessShareScopeController.d.ts +24 -0
- package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessShareScopeController.js +120 -0
- package/packages/server/dist/controllers/harnessShareScopeController.js.map +1 -0
- package/packages/server/dist/controllers/harnessSkillController.d.ts +32 -0
- package/packages/server/dist/controllers/harnessSkillController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessSkillController.js +453 -0
- package/packages/server/dist/controllers/harnessSkillController.js.map +1 -0
- 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 +11 -0
- package/packages/server/dist/controllers/projectController.js.map +1 -1
- package/packages/server/dist/controllers/snippetController.d.ts +35 -0
- package/packages/server/dist/controllers/snippetController.d.ts.map +1 -0
- package/packages/server/dist/controllers/snippetController.js +294 -0
- package/packages/server/dist/controllers/snippetController.js.map +1 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts +8 -0
- package/packages/server/dist/handlers/streamCallbacks.d.ts.map +1 -1
- package/packages/server/dist/handlers/streamCallbacks.js +8 -0
- package/packages/server/dist/handlers/streamCallbacks.js.map +1 -1
- package/packages/server/dist/handlers/websocket.d.ts +15 -0
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +103 -2
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +5 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +37 -4
- package/packages/server/dist/locales/es/server.json +0 -4
- package/packages/server/dist/locales/ja/server.json +0 -4
- package/packages/server/dist/locales/ko/server.json +0 -4
- package/packages/server/dist/locales/pt/server.json +0 -4
- package/packages/server/dist/locales/zh-CN/server.json +0 -4
- package/packages/server/dist/routes/harness.d.ts +8 -0
- package/packages/server/dist/routes/harness.d.ts.map +1 -0
- package/packages/server/dist/routes/harness.js +150 -0
- package/packages/server/dist/routes/harness.js.map +1 -0
- package/packages/server/dist/routes/projects.d.ts.map +1 -1
- package/packages/server/dist/routes/projects.js +5 -60
- package/packages/server/dist/routes/projects.js.map +1 -1
- package/packages/server/dist/routes/snippets.d.ts +14 -0
- package/packages/server/dist/routes/snippets.d.ts.map +1 -0
- package/packages/server/dist/routes/snippets.js +27 -0
- package/packages/server/dist/routes/snippets.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 +15 -2
- package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
- package/packages/server/dist/services/bmadStatusService.js +146 -37
- package/packages/server/dist/services/bmadStatusService.js.map +1 -1
- package/packages/server/dist/services/chatService.d.ts +3 -0
- package/packages/server/dist/services/chatService.d.ts.map +1 -1
- package/packages/server/dist/services/chatService.js +28 -7
- package/packages/server/dist/services/chatService.js.map +1 -1
- package/packages/server/dist/services/claudeMdService.d.ts +48 -0
- package/packages/server/dist/services/claudeMdService.d.ts.map +1 -0
- package/packages/server/dist/services/claudeMdService.js +240 -0
- package/packages/server/dist/services/claudeMdService.js.map +1 -0
- package/packages/server/dist/services/commandService.d.ts +10 -0
- package/packages/server/dist/services/commandService.d.ts.map +1 -1
- package/packages/server/dist/services/commandService.js +129 -4
- package/packages/server/dist/services/commandService.js.map +1 -1
- 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/fileWatcherService.d.ts +24 -0
- package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -1
- package/packages/server/dist/services/fileWatcherService.js +232 -1
- package/packages/server/dist/services/fileWatcherService.js.map +1 -1
- package/packages/server/dist/services/harnessAgentService.d.ts +97 -0
- package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessAgentService.js +988 -0
- package/packages/server/dist/services/harnessAgentService.js.map +1 -0
- 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 +81 -0
- package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessCommandService.js +917 -0
- package/packages/server/dist/services/harnessCommandService.js.map +1 -0
- package/packages/server/dist/services/harnessHookService.d.ts +82 -0
- package/packages/server/dist/services/harnessHookService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessHookService.js +1112 -0
- package/packages/server/dist/services/harnessHookService.js.map +1 -0
- package/packages/server/dist/services/harnessLintService.d.ts +49 -0
- package/packages/server/dist/services/harnessLintService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessLintService.js +628 -0
- package/packages/server/dist/services/harnessLintService.js.map +1 -0
- package/packages/server/dist/services/harnessMcpService.d.ts +100 -0
- package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessMcpService.js +884 -0
- package/packages/server/dist/services/harnessMcpService.js.map +1 -0
- package/packages/server/dist/services/harnessPluginService.d.ts +66 -0
- package/packages/server/dist/services/harnessPluginService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessPluginService.js +559 -0
- package/packages/server/dist/services/harnessPluginService.js.map +1 -0
- package/packages/server/dist/services/harnessService.d.ts +40 -0
- package/packages/server/dist/services/harnessService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessService.js +222 -0
- package/packages/server/dist/services/harnessService.js.map +1 -0
- package/packages/server/dist/services/harnessShareScopeService.d.ts +50 -0
- package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessShareScopeService.js +158 -0
- package/packages/server/dist/services/harnessShareScopeService.js.map +1 -0
- package/packages/server/dist/services/harnessSkillService.d.ts +70 -0
- package/packages/server/dist/services/harnessSkillService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessSkillService.js +636 -0
- package/packages/server/dist/services/harnessSkillService.js.map +1 -0
- package/packages/server/dist/services/issueService.d.ts.map +1 -1
- package/packages/server/dist/services/issueService.js +3 -1
- package/packages/server/dist/services/issueService.js.map +1 -1
- package/packages/server/dist/services/manualSyncService.d.ts +19 -0
- package/packages/server/dist/services/manualSyncService.d.ts.map +1 -0
- package/packages/server/dist/services/manualSyncService.js +110 -0
- package/packages/server/dist/services/manualSyncService.js.map +1 -0
- 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/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +48 -2
- package/packages/server/dist/services/queueService.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/snippetService.d.ts +54 -0
- package/packages/server/dist/services/snippetService.d.ts.map +1 -0
- package/packages/server/dist/services/snippetService.js +371 -0
- package/packages/server/dist/services/snippetService.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/utils/applyYamlFrontmatterPatch.d.ts +46 -0
- package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.d.ts.map +1 -0
- package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js +125 -0
- package/packages/server/dist/services/utils/applyYamlFrontmatterPatch.js.map +1 -0
- package/packages/server/dist/snippets/apply-qa-fixes +7 -5
- package/packages/server/dist/snippets/qa-review +5 -1
- package/packages/server/dist/snippets/split-commit +9 -0
- package/packages/server/dist/utils/applySecretsPolicy.d.ts +53 -0
- package/packages/server/dist/utils/applySecretsPolicy.d.ts.map +1 -0
- package/packages/server/dist/utils/applySecretsPolicy.js +204 -0
- package/packages/server/dist/utils/applySecretsPolicy.js.map +1 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.d.ts +40 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.d.ts.map +1 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.js +47 -0
- package/packages/server/dist/utils/assertNoSecretOnShared.js.map +1 -0
- 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/bundledBinaryModelSupport.d.ts +7 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.d.ts.map +1 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.js +107 -0
- package/packages/server/dist/utils/bundledBinaryModelSupport.js.map +1 -0
- package/packages/server/dist/utils/effortUtils.d.ts +2 -2
- package/packages/server/dist/utils/effortUtils.js +5 -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/gitignoreFilter.d.ts +23 -0
- package/packages/server/dist/utils/gitignoreFilter.d.ts.map +1 -0
- package/packages/server/dist/utils/gitignoreFilter.js +42 -0
- package/packages/server/dist/utils/gitignoreFilter.js.map +1 -0
- package/packages/server/dist/utils/harnessBundleSchema.d.ts +107 -0
- package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -0
- package/packages/server/dist/utils/harnessBundleSchema.js +89 -0
- package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -0
- package/packages/server/dist/utils/harnessPaths.d.ts +74 -0
- package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -0
- package/packages/server/dist/utils/harnessPaths.js +247 -0
- package/packages/server/dist/utils/harnessPaths.js.map +1 -0
- package/packages/server/dist/utils/secretHeuristic.d.ts +72 -0
- package/packages/server/dist/utils/secretHeuristic.d.ts.map +1 -0
- package/packages/server/dist/utils/secretHeuristic.js +163 -0
- package/packages/server/dist/utils/secretHeuristic.js.map +1 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.d.ts +41 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.d.ts.map +1 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.js +81 -0
- package/packages/server/dist/utils/secretPlaceholderNamer.js.map +1 -0
- package/packages/server/dist/utils/serverPathResolver.d.ts +29 -0
- package/packages/server/dist/utils/serverPathResolver.d.ts.map +1 -0
- package/packages/server/dist/utils/serverPathResolver.js +59 -0
- package/packages/server/dist/utils/serverPathResolver.js.map +1 -0
- package/packages/server/dist/utils/snippetPaths.d.ts +61 -0
- package/packages/server/dist/utils/snippetPaths.d.ts.map +1 -0
- package/packages/server/dist/utils/snippetPaths.js +123 -0
- package/packages/server/dist/utils/snippetPaths.js.map +1 -0
- package/packages/server/dist/utils/structuredEditor.d.ts +34 -0
- package/packages/server/dist/utils/structuredEditor.d.ts.map +1 -0
- package/packages/server/dist/utils/structuredEditor.js +111 -0
- package/packages/server/dist/utils/structuredEditor.js.map +1 -0
- package/packages/server/package.json +6 -2
- package/packages/server/resources/internals/INDEX.md +25 -0
- package/packages/server/resources/internals/bmad-qa-fix-marker.md +32 -0
- package/packages/server/resources/internals/harness-files.md +85 -0
- package/packages/server/resources/internals/image-storage.md +43 -0
- package/packages/server/resources/internals/observability-storage.md +23 -0
- package/packages/server/resources/manual/01-getting-started.md +104 -0
- package/packages/server/resources/manual/02-chat.md +285 -0
- package/packages/server/resources/manual/03-sessions.md +48 -0
- package/packages/server/resources/manual/04-slash-commands-favorites.md +152 -0
- package/packages/server/resources/manual/05-projects.md +76 -0
- package/packages/server/resources/manual/06-file-explorer-editor.md +90 -0
- package/packages/server/resources/manual/07-git.md +94 -0
- package/packages/server/resources/manual/08-terminal.md +59 -0
- package/packages/server/resources/manual/09-queue-runner.md +262 -0
- package/packages/server/resources/manual/10-project-board.md +194 -0
- package/packages/server/resources/manual/11-bmad-method-integration.md +130 -0
- package/packages/server/resources/manual/12-harness-workbench.md +256 -0
- package/packages/server/resources/manual/13-settings.md +241 -0
- package/packages/server/resources/manual/14-keyboard-shortcuts.md +68 -0
- package/packages/server/resources/manual/15-environment-variables.md +28 -0
- package/packages/server/resources/manual/16-troubleshooting.md +110 -0
- package/packages/server/resources/manual/INDEX.md +60 -0
- 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 +10 -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/command.d.ts +3 -3
- package/packages/shared/dist/types/command.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/harness.d.ts +1211 -0
- package/packages/shared/dist/types/harness.d.ts.map +1 -0
- package/packages/shared/dist/types/harness.js +107 -0
- package/packages/shared/dist/types/harness.js.map +1 -0
- package/packages/shared/dist/types/harnessBundle.d.ts +205 -0
- package/packages/shared/dist/types/harnessBundle.d.ts.map +1 -0
- package/packages/shared/dist/types/harnessBundle.js +18 -0
- package/packages/shared/dist/types/harnessBundle.js.map +1 -0
- 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 +4 -0
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/queue.d.ts +9 -0
- package/packages/shared/dist/types/queue.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +1 -1
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js +1 -1
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +10 -0
- package/packages/shared/dist/types/websocket.d.ts.map +1 -1
- package/packages/shared/dist/utils/markdownSections.d.ts +50 -0
- package/packages/shared/dist/utils/markdownSections.d.ts.map +1 -0
- package/packages/shared/dist/utils/markdownSections.js +111 -0
- package/packages/shared/dist/utils/markdownSections.js.map +1 -0
- package/packages/shared/dist/utils/queueParser.d.ts.map +1 -1
- package/packages/shared/dist/utils/queueParser.js +104 -0
- package/packages/shared/dist/utils/queueParser.js.map +1 -1
- package/scripts/build-manual-shards.mjs +100 -0
- package/packages/client/dist/assets/index-6jREnVYd.js +0 -2
- package/packages/client/dist/assets/index-BFF0iqyW.css +0 -32
- package/packages/client/dist/assets/index-BcI4y-fU.js +0 -1454
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 31.4: Plugin marketplace catalog service (read-only).
|
|
3
|
+
*
|
|
4
|
+
* Surfaces the *full* `plugins[]` catalog from each registered marketplace —
|
|
5
|
+
* the entries Story 28.1 `harnessPluginService.listCards` deliberately discards
|
|
6
|
+
* (it keeps only installed cards). Builds a unified catalog by reading:
|
|
7
|
+
* - `plugins/known_marketplaces.json` → registered market names
|
|
8
|
+
* - `plugins/marketplaces/<name>/.claude-plugin/marketplace.json` → plugins[]
|
|
9
|
+
* - `plugins/installed_plugins.json` → installed flag join (AC1.d)
|
|
10
|
+
*
|
|
11
|
+
* Design constraints (Story 31.4):
|
|
12
|
+
* - 28.1 `harnessPluginService` is NOT modified — this is a separate
|
|
13
|
+
* read-only service so the stable toggle/list path cannot regress.
|
|
14
|
+
* - Per-market parse failures are isolated into `errors[]` instead of
|
|
15
|
+
* aborting the whole catalog (AC5) — unlike 28.1 which re-throws.
|
|
16
|
+
* - Plugin type is decided by the `source` path prefix (AC1.c), not by
|
|
17
|
+
* component counts, because unbuilt catalog entries have no installPath.
|
|
18
|
+
* - Component counts are reimplemented here (not extracted from 28.1) so the
|
|
19
|
+
* stable service is untouched and because the input is a *market repo
|
|
20
|
+
* source dir*, not an installPath. De-dup is an optional later cleanup.
|
|
21
|
+
* - All catalog file reads go through `harnessService.read` (traversal
|
|
22
|
+
* guard). Only the market repo source-dir enumeration uses direct `fs`,
|
|
23
|
+
* and refuses any path outside `~/.claude`.
|
|
24
|
+
*/
|
|
25
|
+
import path from 'path';
|
|
26
|
+
import fs from 'fs/promises';
|
|
27
|
+
import { HARNESS_ERRORS, } from '@hammoc/shared';
|
|
28
|
+
import { harnessService } from './harnessService.js';
|
|
29
|
+
import { projectService } from './projectService.js';
|
|
30
|
+
import { getUserHarnessRoot } from '../utils/harnessPaths.js';
|
|
31
|
+
/** installed_plugins.json `version` values this service understands (AC6). */
|
|
32
|
+
const KNOWN_INSTALLED_VERSIONS = new Set([1, 2]);
|
|
33
|
+
// --- helpers ---------------------------------------------------------------
|
|
34
|
+
function isFileNotFound(err) {
|
|
35
|
+
return err?.code === HARNESS_ERRORS.HARNESS_FILE_NOT_FOUND.code;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* AC1.c: type from `source` path prefix. `./external_plugins/...` → external
|
|
39
|
+
* MCP wrapper; everything else (`./plugins/...`) → standard.
|
|
40
|
+
*/
|
|
41
|
+
function decideTypeFromSource(source) {
|
|
42
|
+
const s = (source ?? '').replace(/^\.\//, '');
|
|
43
|
+
return s.startsWith('external_plugins/') ? 'external-mcp' : 'standard';
|
|
44
|
+
}
|
|
45
|
+
function samePath(a, b) {
|
|
46
|
+
const na = path.resolve(a);
|
|
47
|
+
const nb = path.resolve(b);
|
|
48
|
+
return process.platform === 'win32' ? na.toLowerCase() === nb.toLowerCase() : na === nb;
|
|
49
|
+
}
|
|
50
|
+
function isLikelyMcpServerEntry(value) {
|
|
51
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
52
|
+
return false;
|
|
53
|
+
const rec = value;
|
|
54
|
+
return (typeof rec.command === 'string'
|
|
55
|
+
|| typeof rec.url === 'string'
|
|
56
|
+
|| typeof rec.type === 'string'
|
|
57
|
+
|| typeof rec.transport === 'string');
|
|
58
|
+
}
|
|
59
|
+
// Component counters — reimplemented from 28.1 `countComponents` + 4 helpers.
|
|
60
|
+
// Kept private to this module (not shared util) per Story 31.4 A.1 rationale.
|
|
61
|
+
async function countSkillsDir(dir) {
|
|
62
|
+
try {
|
|
63
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
64
|
+
let n = 0;
|
|
65
|
+
for (const ent of entries) {
|
|
66
|
+
if (!ent.isDirectory())
|
|
67
|
+
continue;
|
|
68
|
+
try {
|
|
69
|
+
await fs.access(path.join(dir, ent.name, 'SKILL.md'));
|
|
70
|
+
n += 1;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// no SKILL.md → skip
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return n;
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function countMarkdownFiles(dir) {
|
|
83
|
+
try {
|
|
84
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
85
|
+
let n = 0;
|
|
86
|
+
for (const ent of entries) {
|
|
87
|
+
if (ent.isFile() && ent.name.toLowerCase().endsWith('.md'))
|
|
88
|
+
n += 1;
|
|
89
|
+
}
|
|
90
|
+
return n;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return 0;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function countHooksJson(file) {
|
|
97
|
+
try {
|
|
98
|
+
const content = await fs.readFile(file, 'utf-8');
|
|
99
|
+
const parsed = JSON.parse(content);
|
|
100
|
+
const hooks = parsed?.hooks;
|
|
101
|
+
if (!hooks || typeof hooks !== 'object')
|
|
102
|
+
return 0;
|
|
103
|
+
return Object.values(hooks)
|
|
104
|
+
.filter(Array.isArray)
|
|
105
|
+
.reduce((sum, arr) => sum + arr.length, 0);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function countMcpServers(file) {
|
|
112
|
+
try {
|
|
113
|
+
const content = await fs.readFile(file, 'utf-8');
|
|
114
|
+
const parsed = JSON.parse(content);
|
|
115
|
+
if (!parsed || typeof parsed !== 'object')
|
|
116
|
+
return 0;
|
|
117
|
+
const wrapper = parsed.mcpServers;
|
|
118
|
+
if (wrapper && typeof wrapper === 'object' && !Array.isArray(wrapper)) {
|
|
119
|
+
return Object.keys(wrapper).length;
|
|
120
|
+
}
|
|
121
|
+
let n = 0;
|
|
122
|
+
for (const value of Object.values(parsed)) {
|
|
123
|
+
if (isLikelyMcpServerEntry(value))
|
|
124
|
+
n += 1;
|
|
125
|
+
}
|
|
126
|
+
return n;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return 0;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
class MarketplaceService {
|
|
133
|
+
/**
|
|
134
|
+
* Build the unified catalog. Never throws on per-market or installed-file
|
|
135
|
+
* problems — they degrade into `errors[]` / `formatWarning` (AC5/AC6).
|
|
136
|
+
*/
|
|
137
|
+
async listCatalog(currentProjectSlug) {
|
|
138
|
+
const currentProjectPath = await this.resolveCurrentProjectPath(currentProjectSlug);
|
|
139
|
+
const userRoot = path.resolve(getUserHarnessRoot());
|
|
140
|
+
// Step 1: known_marketplaces.json (absent or malformed → empty catalog).
|
|
141
|
+
let known = {};
|
|
142
|
+
try {
|
|
143
|
+
const res = await harnessService.read({
|
|
144
|
+
scope: 'user',
|
|
145
|
+
relativePath: 'plugins/known_marketplaces.json',
|
|
146
|
+
});
|
|
147
|
+
known = this.safeParse(res.content ?? '', {});
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
if (!isFileNotFound(err))
|
|
151
|
+
throw err;
|
|
152
|
+
return { marketplaces: [], entries: [], errors: [] };
|
|
153
|
+
}
|
|
154
|
+
const marketplaces = Object.keys(known).filter((k) => k && typeof k === 'string');
|
|
155
|
+
// Step 2+3: per-market marketplace.json → catalog entries; isolate failures.
|
|
156
|
+
const entries = [];
|
|
157
|
+
const errors = [];
|
|
158
|
+
for (const marketName of marketplaces) {
|
|
159
|
+
let raw;
|
|
160
|
+
try {
|
|
161
|
+
const res = await harnessService.read({
|
|
162
|
+
scope: 'user',
|
|
163
|
+
relativePath: `plugins/marketplaces/${marketName}/.claude-plugin/marketplace.json`,
|
|
164
|
+
});
|
|
165
|
+
raw = res.content ?? '';
|
|
166
|
+
}
|
|
167
|
+
catch (err) {
|
|
168
|
+
errors.push({
|
|
169
|
+
marketplace: marketName,
|
|
170
|
+
code: isFileNotFound(err)
|
|
171
|
+
? HARNESS_ERRORS.HARNESS_FILE_NOT_FOUND.code
|
|
172
|
+
: HARNESS_ERRORS.HARNESS_PARSE_ERROR.code,
|
|
173
|
+
});
|
|
174
|
+
continue;
|
|
175
|
+
}
|
|
176
|
+
let meta;
|
|
177
|
+
try {
|
|
178
|
+
meta = JSON.parse(raw);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
errors.push({ marketplace: marketName, code: HARNESS_ERRORS.HARNESS_PARSE_ERROR.code });
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
for (const plugin of meta.plugins ?? []) {
|
|
185
|
+
if (!plugin?.name)
|
|
186
|
+
continue;
|
|
187
|
+
const entry = {
|
|
188
|
+
key: `${plugin.name}@${marketName}`,
|
|
189
|
+
name: plugin.name,
|
|
190
|
+
marketplace: marketName,
|
|
191
|
+
description: plugin.description,
|
|
192
|
+
version: plugin.version,
|
|
193
|
+
author: plugin.author,
|
|
194
|
+
category: plugin.category,
|
|
195
|
+
pluginType: decideTypeFromSource(plugin.source),
|
|
196
|
+
source: plugin.source,
|
|
197
|
+
installed: false, // filled in step 4
|
|
198
|
+
};
|
|
199
|
+
const counts = await this.countComponentsForSource(userRoot, marketName, plugin.source);
|
|
200
|
+
if (counts)
|
|
201
|
+
entry.componentCounts = counts;
|
|
202
|
+
entries.push(entry);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// Step 4: installed_plugins.json join + format warning (AC1.d / AC6).
|
|
206
|
+
const { installedKeys, formatWarning } = await this.readInstalledState(currentProjectPath);
|
|
207
|
+
for (const entry of entries) {
|
|
208
|
+
entry.installed = installedKeys.has(entry.key);
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
marketplaces,
|
|
212
|
+
entries,
|
|
213
|
+
errors,
|
|
214
|
+
...(formatWarning ? { formatWarning } : {}),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Read installed_plugins.json into a set of installed keys + an optional
|
|
219
|
+
* format warning. Absent file → no installs, no warning (normal). Unknown
|
|
220
|
+
* version / wrong shape / parse error → degrade with a warning (AC6).
|
|
221
|
+
*/
|
|
222
|
+
async readInstalledState(currentProjectPath) {
|
|
223
|
+
const installedKeys = new Set();
|
|
224
|
+
let content;
|
|
225
|
+
try {
|
|
226
|
+
const res = await harnessService.read({
|
|
227
|
+
scope: 'user',
|
|
228
|
+
relativePath: 'plugins/installed_plugins.json',
|
|
229
|
+
});
|
|
230
|
+
content = res.content ?? '';
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
if (isFileNotFound(err))
|
|
234
|
+
return { installedKeys };
|
|
235
|
+
throw err;
|
|
236
|
+
}
|
|
237
|
+
let parsed;
|
|
238
|
+
try {
|
|
239
|
+
parsed = JSON.parse(content);
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return { installedKeys, formatWarning: { reason: 'parseError' } };
|
|
243
|
+
}
|
|
244
|
+
let formatWarning;
|
|
245
|
+
if (typeof parsed.version === 'number' && !KNOWN_INSTALLED_VERSIONS.has(parsed.version)) {
|
|
246
|
+
formatWarning = { detectedVersion: parsed.version, reason: 'unrecognizedVersion' };
|
|
247
|
+
}
|
|
248
|
+
const plugins = parsed.plugins;
|
|
249
|
+
if (plugins && typeof plugins === 'object' && !Array.isArray(plugins)) {
|
|
250
|
+
for (const [key, value] of Object.entries(plugins)) {
|
|
251
|
+
const arr = Array.isArray(value) ? value : [value];
|
|
252
|
+
const installed = arr.some((e) => {
|
|
253
|
+
if (!e || typeof e !== 'object')
|
|
254
|
+
return false;
|
|
255
|
+
if (e.scope === 'project') {
|
|
256
|
+
return (!!currentProjectPath
|
|
257
|
+
&& typeof e.projectPath === 'string'
|
|
258
|
+
&& samePath(e.projectPath, currentProjectPath));
|
|
259
|
+
}
|
|
260
|
+
// user scope (or unspecified) → globally installed
|
|
261
|
+
return true;
|
|
262
|
+
});
|
|
263
|
+
if (installed)
|
|
264
|
+
installedKeys.add(key);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else if (plugins !== undefined) {
|
|
268
|
+
formatWarning = formatWarning ?? {
|
|
269
|
+
detectedVersion: typeof parsed.version === 'number' ? parsed.version : undefined,
|
|
270
|
+
reason: 'unexpectedShape',
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
return { installedKeys, formatWarning };
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Best-effort component tally from the cloned market repo source dir
|
|
277
|
+
* (`<userRoot>/plugins/marketplaces/<market>/<source>/`). Returns undefined
|
|
278
|
+
* when the dir is missing or resolves outside `~/.claude` (type badge still
|
|
279
|
+
* renders without counts).
|
|
280
|
+
*/
|
|
281
|
+
async countComponentsForSource(userRoot, marketName, source) {
|
|
282
|
+
if (!source || typeof source !== 'string')
|
|
283
|
+
return undefined;
|
|
284
|
+
const rel = source.replace(/^\.\//, '');
|
|
285
|
+
const abs = path.resolve(userRoot, 'plugins', 'marketplaces', marketName, rel);
|
|
286
|
+
// Refuse anything outside ~/.claude (defends against `..` in source).
|
|
287
|
+
if (abs !== userRoot && !abs.startsWith(userRoot + path.sep))
|
|
288
|
+
return undefined;
|
|
289
|
+
try {
|
|
290
|
+
const stat = await fs.stat(abs);
|
|
291
|
+
if (!stat.isDirectory())
|
|
292
|
+
return undefined;
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
297
|
+
const [skills, commands, agents, hooks, mcpServers] = await Promise.all([
|
|
298
|
+
countSkillsDir(path.join(abs, 'skills')),
|
|
299
|
+
countMarkdownFiles(path.join(abs, 'commands')),
|
|
300
|
+
countMarkdownFiles(path.join(abs, 'agents')),
|
|
301
|
+
countHooksJson(path.join(abs, 'hooks', 'hooks.json')),
|
|
302
|
+
countMcpServers(path.join(abs, '.mcp.json')),
|
|
303
|
+
]);
|
|
304
|
+
return { skills, commands, agents, hooks, mcpServers };
|
|
305
|
+
}
|
|
306
|
+
async resolveCurrentProjectPath(slug) {
|
|
307
|
+
if (!slug)
|
|
308
|
+
return undefined;
|
|
309
|
+
try {
|
|
310
|
+
return await projectService.resolveOriginalPath(slug);
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
return undefined;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
safeParse(content, fallback) {
|
|
317
|
+
try {
|
|
318
|
+
return JSON.parse(content);
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
return fallback;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
export const marketplaceService = new MarketplaceService();
|
|
326
|
+
//# sourceMappingURL=marketplaceService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplaceService.js","sourceRoot":"","sources":["../../src/services/marketplaceService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 31.3 (Task A.1 / A.2): Observability MCP-call persistence + collection.
|
|
3
|
+
*
|
|
4
|
+
* Backend = JSONL rolling log under `~/.hammoc/observability/<projectSlug>.jsonl`
|
|
5
|
+
* (spike #3, §16 — 30k records query in ~34ms; SQLite not needed; consistent
|
|
6
|
+
* with architecture §9 "file-based storage, no external DB" and the existing
|
|
7
|
+
* `~/.hammoc/` plaintext files). `~/.hammoc/` is a SIBLING of `.claude/` and
|
|
8
|
+
* therefore outside the harness whitelist, so we use direct `fs` here — exactly
|
|
9
|
+
* like `preferencesService` does for `~/.hammoc/preferences.json` (the
|
|
10
|
+
* `storageService` named in the epic does not exist; `fileSystemService` /
|
|
11
|
+
* direct fs is the real pattern, S-B).
|
|
12
|
+
*
|
|
13
|
+
* Records are append-only. Argument/result BODIES are never stored — only their
|
|
14
|
+
* UTF-8 byte sizes — so secrets/file contents cannot leak (AC-A1.c).
|
|
15
|
+
*
|
|
16
|
+
* Collection seam: `createMcpCallRecorder` returns a small per-stream stateful
|
|
17
|
+
* object that the shared callback builder (`buildStreamCallbacks`) drives via
|
|
18
|
+
* onToolUse / onToolResult / onTurnEnd. A record is appended EXACTLY ONCE per
|
|
19
|
+
* call at onToolResult; orphans (no result) are flushed once at turn end with
|
|
20
|
+
* null fields (S-A / N-A).
|
|
21
|
+
*/
|
|
22
|
+
import { type McpCallRecord, type McpCallAggregate, type ObservabilityQuery, type ObservabilityMcpCallsResponse, type ToolResult } from '@hammoc/shared';
|
|
23
|
+
/** Parse `mcp__<server>__<tool>` → `<server>`; built-ins → null (AC-A1.d). */
|
|
24
|
+
export declare function parseServerName(toolName: string): string | null;
|
|
25
|
+
/** UTF-8 byte length of an arbitrary value's JSON (args) — body discarded. */
|
|
26
|
+
export declare function argByteSize(input: unknown): number;
|
|
27
|
+
/** UTF-8 byte length of a tool result body (output ?? error ?? ''). */
|
|
28
|
+
export declare function resultByteSize(result: ToolResult): number;
|
|
29
|
+
declare class ObservabilityService {
|
|
30
|
+
/** Serializes appends so concurrent streams never interleave partial lines. */
|
|
31
|
+
private appendChain;
|
|
32
|
+
/** Last prune time per project (epoch ms) — throttles append-time prune. */
|
|
33
|
+
private lastPruneAt;
|
|
34
|
+
private dir;
|
|
35
|
+
private filePath;
|
|
36
|
+
/**
|
|
37
|
+
* Append one record (AC-A1.c). Serialized via an internal promise chain.
|
|
38
|
+
* Triggers a throttled prune so the retention window is enforced without
|
|
39
|
+
* startup wiring (AC-A3.b — "append 시점 또는 서버 기동 시 prune").
|
|
40
|
+
*/
|
|
41
|
+
recordCall(record: McpCallRecord): Promise<void>;
|
|
42
|
+
/** Throttled prune triggered from the append path. Fire-and-forget. */
|
|
43
|
+
private maybePrune;
|
|
44
|
+
/** Read + parse all records for a project (skips malformed lines). */
|
|
45
|
+
private readAll;
|
|
46
|
+
/**
|
|
47
|
+
* Query the log with filters + aggregation (AC-A1.b / AC-A2). Always applies
|
|
48
|
+
* the retention cutoff on read so expired records never surface even before a
|
|
49
|
+
* compaction runs.
|
|
50
|
+
*/
|
|
51
|
+
query(projectSlug: string, filter?: ObservabilityQuery): Promise<ObservabilityMcpCallsResponse>;
|
|
52
|
+
/**
|
|
53
|
+
* Drop records older than `retentionDays` and rewrite the file (AC-A3.b).
|
|
54
|
+
* Returns the number of records removed. Routed through the append chain so a
|
|
55
|
+
* rewrite never races a concurrent append.
|
|
56
|
+
*/
|
|
57
|
+
prune(projectSlug: string, retentionDays?: number): Promise<number>;
|
|
58
|
+
}
|
|
59
|
+
/** Aggregate by (serverName, toolName). Exported for unit tests. */
|
|
60
|
+
export declare function aggregate(records: McpCallRecord[]): McpCallAggregate[];
|
|
61
|
+
export declare const observabilityService: ObservabilityService;
|
|
62
|
+
/**
|
|
63
|
+
* Drives MCP-call collection from the shared callback builder. One instance per
|
|
64
|
+
* stream. Maintains an in-memory `toolUseId → start info` map so the two
|
|
65
|
+
* separately-fired callbacks (`onToolUse` has no result, `onToolResult` has no
|
|
66
|
+
* start time) can be joined into a single complete record with `durationMs`.
|
|
67
|
+
*
|
|
68
|
+
* Lifecycle (S-A / N-A):
|
|
69
|
+
* - onToolUse → buffer start info (no append).
|
|
70
|
+
* - onToolResult → append ONE complete record, delete the map entry.
|
|
71
|
+
* - onTurnEnd → flush remaining (orphan) entries as null-field records, clear.
|
|
72
|
+
* The map is therefore bounded to a single turn's lifetime (no leak).
|
|
73
|
+
*/
|
|
74
|
+
export interface McpCallRecorder {
|
|
75
|
+
onToolUse(toolUseId: string, toolName: string, input: unknown): void;
|
|
76
|
+
onToolResult(toolUseId: string, result: ToolResult, sessionId: string | undefined): void;
|
|
77
|
+
onTurnEnd(sessionId: string | undefined): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create a recorder. `resolveProjectSlug` is a thunk (sync for the queue path
|
|
81
|
+
* where `this.projectSlug` is known; async for the browser path where the slug
|
|
82
|
+
* is resolved from the working directory). The resolved slug is memoized; until
|
|
83
|
+
* it resolves (or if it is null — no project context) appends are skipped.
|
|
84
|
+
*/
|
|
85
|
+
export declare function createMcpCallRecorder(resolveProjectSlug: () => string | null | undefined | Promise<string | null | undefined>): McpCallRecorder;
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=observabilityService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observabilityService.d.ts","sourceRoot":"","sources":["../../src/services/observabilityService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,6BAA6B,EAClC,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AASxB,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK/D;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMlD;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAEzD;AAOD,cAAM,oBAAoB;IACxB,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAAoC;IACvD,4EAA4E;IAC5E,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAIhB;;;;OAIG;IACG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAetD,uEAAuE;YACzD,UAAU;IAYxB,sEAAsE;YACxD,OAAO;IAoBrB;;;;OAIG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,6BAA6B,CAAC;IAsBzG;;;;OAIG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,SAA+B,GAAG,OAAO,CAAC,MAAM,CAAC;CAehG;AAED,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CA4BtE;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC;AAM/D;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACrE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACzF,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAChD;AASD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,kBAAkB,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GACvF,eAAe,CAmEjB"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observabilityService.js","sourceRoot":"","sources":["../../src/services/observabilityService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queueService.d.ts","sourceRoot":"","sources":["../../src/services/queueService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,SAAS,EAET,cAAc,EAEf,MAAM,gBAAgB,CAAC;AAUxB,OAAO,EAAE,cAAc,IAAI,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,IAAI,GAAG,EAA2B,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,kBAAkB,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"queueService.d.ts","sourceRoot":"","sources":["../../src/services/queueService.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ const log = createLogger('queueService');
|
|
|
14
14
|
import { formatAskQuestionPrompt } from './notificationService.js';
|
|
15
15
|
import { createHeadlessStream, isSessionStreaming, rekeyStream, finalizeStream, broadcastStreamChange, } from '../handlers/websocket.js';
|
|
16
16
|
import { buildStreamCallbacks } from '../handlers/streamCallbacks.js';
|
|
17
|
+
import { createMcpCallRecorder } from './observabilityService.js';
|
|
17
18
|
export class QueueService {
|
|
18
19
|
projectService;
|
|
19
20
|
notificationService;
|
|
@@ -265,6 +266,8 @@ export class QueueService {
|
|
|
265
266
|
return false;
|
|
266
267
|
if (item.loop)
|
|
267
268
|
return false; // Block directives cannot be added via addItem
|
|
269
|
+
if (item.label != null || item.jumpIf != null)
|
|
270
|
+
return false; // Jump-related directives must be added via script edit
|
|
268
271
|
this.items.push(item);
|
|
269
272
|
this.emitItemsUpdated();
|
|
270
273
|
this.emitProgress(this.isPaused ? 'paused' : 'running');
|
|
@@ -372,7 +375,15 @@ export class QueueService {
|
|
|
372
375
|
// Process advancement FIRST, then check pause.
|
|
373
376
|
// @pause: shouldAdvance=true (advance past breakpoint), isPaused=true (break after)
|
|
374
377
|
// @pauseword/error/@load failure: shouldAdvance=false (stay for retry), isPaused=true (break)
|
|
375
|
-
|
|
378
|
+
// @jumpif (matched): jumpTo set, advance currentIndex to the label position instead of incrementing
|
|
379
|
+
if (result.jumpTo !== undefined) {
|
|
380
|
+
this.emitItemComplete(this.currentIndex);
|
|
381
|
+
this.currentIndex = result.jumpTo;
|
|
382
|
+
if (!this.isPaused && this._isRunning && this.currentIndex < this.items.length) {
|
|
383
|
+
this.emitProgress('running');
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else if (result.shouldAdvance) {
|
|
376
387
|
this.emitItemComplete(this.currentIndex);
|
|
377
388
|
this.currentIndex++;
|
|
378
389
|
// Emit progress after advancing so clients update currentIndex and sessionId in real-time
|
|
@@ -591,6 +602,30 @@ export class QueueService {
|
|
|
591
602
|
this.emitProgress('paused');
|
|
592
603
|
return { shouldAdvance: true };
|
|
593
604
|
}
|
|
605
|
+
// Step 2.1: Label — pure marker, advance past it without affecting state
|
|
606
|
+
if (item.label) {
|
|
607
|
+
log.debug(`executeItem: LABEL "${item.label}"`);
|
|
608
|
+
return { shouldAdvance: true };
|
|
609
|
+
}
|
|
610
|
+
// Step 2.2: Conditional jump — if the previous prompt response contains the token, jump to the target label
|
|
611
|
+
if (item.jumpIf) {
|
|
612
|
+
const { token, target } = item.jumpIf;
|
|
613
|
+
if (this.lastPromptResponse.includes(token)) {
|
|
614
|
+
const targetIdx = this.items.findIndex((it) => it.label === target);
|
|
615
|
+
if (targetIdx === -1) {
|
|
616
|
+
log.warn(`JUMPIF: target label "${target}" not found in current items — skipping jump`);
|
|
617
|
+
return { shouldAdvance: true };
|
|
618
|
+
}
|
|
619
|
+
if (targetIdx <= this.currentIndex) {
|
|
620
|
+
log.warn(`JUMPIF: target "${target}" at index ${targetIdx} is not forward of current ${this.currentIndex} — skipping jump`);
|
|
621
|
+
return { shouldAdvance: true };
|
|
622
|
+
}
|
|
623
|
+
log.info(`JUMPIF: token "${token}" matched, jumping from ${this.currentIndex} to ${targetIdx} (label "${target}")`);
|
|
624
|
+
return { shouldAdvance: false, jumpTo: targetIdx };
|
|
625
|
+
}
|
|
626
|
+
log.debug(`executeItem: JUMPIF token "${token}" not found in last response — falling through`);
|
|
627
|
+
return { shouldAdvance: true };
|
|
628
|
+
}
|
|
594
629
|
// Step 2.5: Snippet resolution (skip already-expanded items to prevent recursion)
|
|
595
630
|
if (item.prompt && isSnippetRef(item.prompt) && !this.snippetExpandedItems.has(item)) {
|
|
596
631
|
try {
|
|
@@ -603,7 +638,16 @@ export class QueueService {
|
|
|
603
638
|
this.snippetExpandedItems.add(qi);
|
|
604
639
|
return qi;
|
|
605
640
|
});
|
|
606
|
-
|
|
641
|
+
// Splice into the correct items array depending on context:
|
|
642
|
+
// inside a @loop block the inner items live on loopState.items, not this.items.
|
|
643
|
+
// Without this branch, expanded prompts would leak out of the loop and skip
|
|
644
|
+
// execution within the current iteration.
|
|
645
|
+
if (this.loopState) {
|
|
646
|
+
this.loopState.items.splice(this.loopState.innerIndex + 1, 0, ...newItems);
|
|
647
|
+
}
|
|
648
|
+
else {
|
|
649
|
+
this.items.splice(this.currentIndex + 1, 0, ...newItems);
|
|
650
|
+
}
|
|
607
651
|
this.emitItemsUpdated();
|
|
608
652
|
}
|
|
609
653
|
}
|
|
@@ -734,6 +778,8 @@ export class QueueService {
|
|
|
734
778
|
current: this.currentIndex + 1,
|
|
735
779
|
total: this.items.length,
|
|
736
780
|
}),
|
|
781
|
+
// Story 31.3 — projectSlug is known synchronously on the queue path.
|
|
782
|
+
mcpRecorder: createMcpCallRecorder(() => this.projectSlug || undefined),
|
|
737
783
|
}, {
|
|
738
784
|
onSessionIdResolved: (sid) => { this.currentSessionId = sid; },
|
|
739
785
|
onTextChunkReceived: (chunk) => { chunks.push(chunk.content); },
|