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,194 @@
|
|
|
1
|
+
## 10. Project Board
|
|
2
|
+
|
|
3
|
+
Visual task and issue management for your projects. The board displays three card types: Issues, Stories, and Epics.
|
|
4
|
+
|
|
5
|
+
### 10.1 Kanban Board
|
|
6
|
+
|
|
7
|
+
The default view is a scrollable Kanban board:
|
|
8
|
+
|
|
9
|
+
- **Columns** represent statuses — each with a colored top border, label, and item count badge
|
|
10
|
+
- **Cards** display issues, stories, and epics with type badges: **[I]** (amber), **[S]** (blue), **[E]** (purple)
|
|
11
|
+
- **Horizontal scroll** — overflow columns peek from the edge (no drag-and-drop between columns). On desktop, vertical mouse wheel scrolling in empty column areas is automatically converted to horizontal scroll
|
|
12
|
+
- Status changes are made via the card **context menu** (⋮), not by dragging
|
|
13
|
+
- Columns are fully customizable (see §10.11)
|
|
14
|
+
|
|
15
|
+
### 10.2 List View
|
|
16
|
+
|
|
17
|
+
Switch to an accordion-style list view:
|
|
18
|
+
|
|
19
|
+
- Items grouped by status column with chevron toggle
|
|
20
|
+
- **Item count** displayed next to each group header
|
|
21
|
+
- Only **non-empty columns** are shown (empty ones are hidden)
|
|
22
|
+
- On mobile, the last column auto-collapses to save space
|
|
23
|
+
- Compact card layout for browsing many items at once
|
|
24
|
+
|
|
25
|
+
### 10.3 Creating Issues
|
|
26
|
+
|
|
27
|
+
Click **"New Issue"** to create:
|
|
28
|
+
|
|
29
|
+
| Field | Details |
|
|
30
|
+
|-------|---------|
|
|
31
|
+
| **Title** | Required, max 200 characters |
|
|
32
|
+
| **Description** | Optional, supports markdown |
|
|
33
|
+
| **Type** | Bug, Improvement |
|
|
34
|
+
| **Severity** | Low, Medium, High, Critical |
|
|
35
|
+
| **Attachments** | Optional — drag-and-drop, click to browse, or paste from clipboard |
|
|
36
|
+
|
|
37
|
+
Status is automatically set to **Open** (not a user-editable field). Each issue is assigned a sequential ID in the **ISSUE-N** format (e.g., ISSUE-1, ISSUE-2) automatically.
|
|
38
|
+
|
|
39
|
+
### 10.4 Editing Issues
|
|
40
|
+
|
|
41
|
+
Click the context menu (⋮) → **Edit** on any issue card:
|
|
42
|
+
|
|
43
|
+
- Same fields as the create dialog (title, description, type, severity)
|
|
44
|
+
- **Existing attachments** are shown with a delete button to remove each one
|
|
45
|
+
- **Add new attachments** via drag-and-drop, click, or paste
|
|
46
|
+
|
|
47
|
+
### 10.5 Issue Types
|
|
48
|
+
|
|
49
|
+
- **Bug** — Something is broken and needs fixing
|
|
50
|
+
- **Improvement** — Enhancement to existing functionality
|
|
51
|
+
|
|
52
|
+
### 10.6 Severity Levels
|
|
53
|
+
|
|
54
|
+
Severity badges are color-coded on cards:
|
|
55
|
+
|
|
56
|
+
- **Critical** — Red badge, urgent, needs immediate attention
|
|
57
|
+
- **High** — Orange badge, important, prioritize soon
|
|
58
|
+
- **Medium** — Yellow badge, should be addressed in normal workflow
|
|
59
|
+
- **Low** — Gray badge, minor issue, no urgency
|
|
60
|
+
|
|
61
|
+
### 10.7 Status Workflow
|
|
62
|
+
|
|
63
|
+
Items follow this lifecycle. Issues and stories use overlapping but distinct subsets of these statuses:
|
|
64
|
+
|
|
65
|
+
**Issue statuses:**
|
|
66
|
+
```
|
|
67
|
+
Open → In Progress → Ready for Done → Done → Closed
|
|
68
|
+
↓
|
|
69
|
+
Promoted
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**Story statuses (with QA gate):**
|
|
73
|
+
```
|
|
74
|
+
Draft → Approved → In Progress → Ready for Review → Done
|
|
75
|
+
↓
|
|
76
|
+
┌────────┴────────┐
|
|
77
|
+
QA Passed QA Failed
|
|
78
|
+
QA Waived QA Concerns
|
|
79
|
+
↓ ↓
|
|
80
|
+
Ready for Done QA Fixed → (re-review)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**QA gate badges** — When a story reaches "Ready for Review", the QA gate result determines the compound badge:
|
|
84
|
+
- **QA Passed** — Quality review passed
|
|
85
|
+
- **QA Waived** — Quality review waived/skipped
|
|
86
|
+
- **QA Failed** — Quality review failed, fixes needed
|
|
87
|
+
- **QA Concerns** — Quality review raised concerns
|
|
88
|
+
- **QA Fixed** — The developer has recorded a fix for the current gate; ready for re-review
|
|
89
|
+
|
|
90
|
+
Not all statuses are required. Use the context menu to change status directly. **Promoted** indicates an issue that has been escalated to a story or epic.
|
|
91
|
+
|
|
92
|
+
### 10.8 File Attachments
|
|
93
|
+
|
|
94
|
+
Attach image files to issues:
|
|
95
|
+
|
|
96
|
+
- Up to **10 files** per issue
|
|
97
|
+
- Maximum **10MB** per file
|
|
98
|
+
- Supported formats: PNG, JPEG, GIF, WebP
|
|
99
|
+
- Upload methods: **drag-and-drop** onto the attachment zone, **click** to browse, or **paste** from clipboard
|
|
100
|
+
- Attachments are managed in the issue create/edit dialogs — they are not shown inline on board cards
|
|
101
|
+
- Preview thumbnails are shown in a grid with a remove button (×) for each
|
|
102
|
+
|
|
103
|
+
### 10.9 Card Context Menu
|
|
104
|
+
|
|
105
|
+
Click the **⋮** button on any card to open the context menu. Actions vary by card type:
|
|
106
|
+
|
|
107
|
+
**Issue actions (by status):**
|
|
108
|
+
- **Open:**
|
|
109
|
+
- **Quick Fix** — Marks the issue as Done and opens a dev session with the issue context
|
|
110
|
+
- **Promote to Story** — Convert an issue into a development story (disabled if already linked)
|
|
111
|
+
- **Promote to Epic** — Elevate an issue into an epic (disabled if already linked)
|
|
112
|
+
- **Edit** — Open the issue edit dialog
|
|
113
|
+
- **Close** — Close the issue
|
|
114
|
+
- **In Progress:**
|
|
115
|
+
- **Resume Dev** — Resume development session for this issue
|
|
116
|
+
- **Ready for Done:**
|
|
117
|
+
- **Commit and Mark Done** — Commit related changes and mark as Done
|
|
118
|
+
- **Mark Done** — Mark as Done without committing
|
|
119
|
+
- **Closed / Done / Promoted:**
|
|
120
|
+
- **Reopen** — Reopen the issue
|
|
121
|
+
- **Delete** — Permanently remove the issue (available in all states)
|
|
122
|
+
|
|
123
|
+
**Story actions (by status):**
|
|
124
|
+
- **Draft:**
|
|
125
|
+
- **Validate and Fix** — Validate the story draft and fix issues
|
|
126
|
+
- **Validate Only** — Validate the story draft without fix
|
|
127
|
+
- **Approved:**
|
|
128
|
+
- **Start Development** — Begin implementing the story
|
|
129
|
+
- **Validate and Fix** / **Validate Only** — Re-validate if needed
|
|
130
|
+
- **In Progress:**
|
|
131
|
+
- **Resume Development** — Continue implementing the story
|
|
132
|
+
- **QA Passed / QA Waived:**
|
|
133
|
+
- **Commit and Complete Story** — Commit related changes and mark as Done
|
|
134
|
+
- **Complete Story** — Mark as Done without committing
|
|
135
|
+
- **Request QA Review** — Re-request quality review
|
|
136
|
+
- **QA Failed / QA Concerns:**
|
|
137
|
+
- **Apply QA Fix** — Apply fixes for QA issues (always offered)
|
|
138
|
+
- **Review Story** — Re-request QA review; also offered unless Hammoc has confirmed fixes are still pending for the current gate (e.g., legacy stories or external BMad projects)
|
|
139
|
+
- **QA Fixed:**
|
|
140
|
+
- **Apply QA Fix** / **Review Story** — Apply further fixes, or request re-review
|
|
141
|
+
- **Ready for Review / Ready for Done (no QA gate):**
|
|
142
|
+
- **Review Story** — Request quality review
|
|
143
|
+
|
|
144
|
+
**Epic actions:**
|
|
145
|
+
- **View Sub-Stories** — Open a dialog showing all stories under the epic
|
|
146
|
+
- **Create Next Story** — Draft the next story for this epic with the SM agent (hidden when the epic is Done)
|
|
147
|
+
|
|
148
|
+
The menu supports keyboard navigation (Arrow Up/Down, Enter, Escape).
|
|
149
|
+
|
|
150
|
+
### 10.10 Card Behavior
|
|
151
|
+
|
|
152
|
+
Cards display information based on their type:
|
|
153
|
+
|
|
154
|
+
- **Type badge** — [I], [S], or [E] with color coding
|
|
155
|
+
- **Severity badge** — For issues only, color-coded by level
|
|
156
|
+
- **Status badge** — Color-coded status indicator (stories also show QA gate badges such as QA Passed, QA Failed, etc.)
|
|
157
|
+
- **Issue number prefix** — Issues now show a short `#N` prefix (e.g., `#1`, `#42`) in monospace gray immediately before the title, so a board card and a chat mention or filename like `ISSUE-42.md` can be matched at a glance. Legacy issues without an `ISSUE-N` ID do not get a prefix
|
|
158
|
+
- **Epic progress bar** — On epic cards, shows completion percentage with done/total count
|
|
159
|
+
- **Story epic number** — Shows the parent epic reference
|
|
160
|
+
- **Unmapped status warning** — ⚠ triangle icon when a card's status doesn't map to any column
|
|
161
|
+
|
|
162
|
+
**Click behavior:** Clicking a card navigates to its associated file in the development session.
|
|
163
|
+
|
|
164
|
+
### 10.11 Board Configuration
|
|
165
|
+
|
|
166
|
+
Customize the board layout via the gear icon:
|
|
167
|
+
|
|
168
|
+
**Columns:**
|
|
169
|
+
- Add, remove, and **reorder** columns (Arrow Up/Down buttons)
|
|
170
|
+
- Maximum **10 columns** allowed
|
|
171
|
+
- **Required columns** (mapped to essential statuses) cannot be deleted
|
|
172
|
+
- Each column has a name and an optional color
|
|
173
|
+
|
|
174
|
+
**Colors:**
|
|
175
|
+
- Pick from a preset **color palette** (swatches) or leave as default
|
|
176
|
+
- Colors appear as the column's top border
|
|
177
|
+
|
|
178
|
+
**Status Mapping:**
|
|
179
|
+
- Map statuses and QA gate badges (Open, Draft, Approved, In Progress, Blocked, Ready for Review, QA Passed, QA Waived, QA Failed, QA Concerns, QA Fixed, Ready for Done, Done, Closed, Promoted) to columns
|
|
180
|
+
- **Custom status mapping** — Define additional custom status strings and assign them to columns
|
|
181
|
+
|
|
182
|
+
**Reset:**
|
|
183
|
+
- **Reset to defaults** button restores the original column layout (with confirmation dialog)
|
|
184
|
+
|
|
185
|
+
### 10.12 Mobile Kanban
|
|
186
|
+
|
|
187
|
+
On small screens, the board uses a swipe carousel:
|
|
188
|
+
|
|
189
|
+
- **Swipe left/right** to navigate between columns
|
|
190
|
+
- **Rubber-band resistance** at the first and last columns (cannot swipe past edges)
|
|
191
|
+
- **Indicator dots** at the bottom show current position
|
|
192
|
+
- Smooth transition animation between columns
|
|
193
|
+
- Touch-optimized card layout
|
|
194
|
+
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
## 11. BMAD-METHOD Integration
|
|
2
|
+
|
|
3
|
+
Hammoc provides first-class support for the [BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD) (Breakthrough Method for Agile AI-Driven Development).
|
|
4
|
+
|
|
5
|
+
### 11.1 What is BMAD-METHOD?
|
|
6
|
+
|
|
7
|
+
BMAD-METHOD is an open-source framework that structures AI-driven software development. It defines:
|
|
8
|
+
|
|
9
|
+
- **Agents** — Specialized AI roles organized by workflow phase
|
|
10
|
+
- **Documents** — PRD, Architecture spec, Frontend spec, Stories, QA plans, and supplementary docs (brainstorming, market research, competitor analysis, project brief)
|
|
11
|
+
- **Workflows** — Phase-based processes from research through implementation to completion
|
|
12
|
+
|
|
13
|
+
### 11.2 Setting Up BMad in a Project
|
|
14
|
+
|
|
15
|
+
BMad can be set up in two ways:
|
|
16
|
+
|
|
17
|
+
**During project creation:**
|
|
18
|
+
1. In the **New Project** dialog, the **"Setup BMad"** checkbox is enabled by default
|
|
19
|
+
2. Select the BMAD-METHOD version from the dropdown (defaults to latest)
|
|
20
|
+
3. The `.bmad-core` folder is automatically created when the project is registered
|
|
21
|
+
|
|
22
|
+
**For existing projects:**
|
|
23
|
+
1. Open the project card's **kebab menu** (⋮) on the project list page
|
|
24
|
+
2. Click **"Setup BMad"** (only shown for non-BMad projects)
|
|
25
|
+
3. Confirm the version to install
|
|
26
|
+
4. The `.bmad-core` folder is created with the required files
|
|
27
|
+
|
|
28
|
+
The `.bmad-core` folder contains agents, tasks, templates, workflows, and configuration files including `core-config.yaml`.
|
|
29
|
+
|
|
30
|
+
### 11.3 BMad Agents
|
|
31
|
+
|
|
32
|
+
Click the **Agent Button** (Users icon, in the chat bottom bar right of the model selector) to open the agent dropdown:
|
|
33
|
+
|
|
34
|
+
**Planning group:**
|
|
35
|
+
|
|
36
|
+
| Agent | Role |
|
|
37
|
+
|-------|------|
|
|
38
|
+
| **Analyst** | Brainstorming, market research, competitor analysis, project brief |
|
|
39
|
+
| **PM** (Product Manager) | Defines PRD with epics and stories |
|
|
40
|
+
| **UX Expert** | Creates frontend specifications |
|
|
41
|
+
| **Architect** | Designs system architecture (backend, frontend, full-stack) |
|
|
42
|
+
|
|
43
|
+
**Implementation group:**
|
|
44
|
+
|
|
45
|
+
| Agent | Role |
|
|
46
|
+
|-------|------|
|
|
47
|
+
| **SM** (Scrum Master) | Drafts stories, orchestrates development |
|
|
48
|
+
| **PO** (Product Owner) | Validates story drafts against PRD |
|
|
49
|
+
| **Dev** (Developer) | Implements features, applies QA fixes |
|
|
50
|
+
| **QA** | Reviews and validates implementation quality |
|
|
51
|
+
|
|
52
|
+
**Agent dropdown features:**
|
|
53
|
+
- **Categorized groups** — Planning, Implementation, Other (with section labels)
|
|
54
|
+
- **Active agent checkmark** — Blue check icon next to the currently active agent
|
|
55
|
+
- **Agent icon & description** — Emoji icon and hover tooltip with role description
|
|
56
|
+
- **Keyboard navigation** — Arrow Up/Down to move, Enter to select, Escape to close
|
|
57
|
+
- Selecting an agent sends the agent command (e.g., `/BMad:agents:pm`) as the first prompt in the session
|
|
58
|
+
|
|
59
|
+
### 11.4 Project Overview Dashboard
|
|
60
|
+
|
|
61
|
+
For BMad projects, the overview page displays additional sections above the standard project overview (see §5.5):
|
|
62
|
+
|
|
63
|
+
**BMad Summary Card:**
|
|
64
|
+
- Overall **completion percentage** with a progress bar
|
|
65
|
+
- **Done/total epics** and **done/total stories** counts
|
|
66
|
+
- Background refresh indicator
|
|
67
|
+
|
|
68
|
+
**Next Step Recommender:**
|
|
69
|
+
- Detects the current **workflow phase** (Pre-PRD, Pre-Architecture, Implementation, Completed)
|
|
70
|
+
- Shows context-aware **action buttons** (primary/secondary) that navigate to the right agent + task command
|
|
71
|
+
- Quick links: New Session, Queue Runner, File Explorer
|
|
72
|
+
- See §11.5 for phase details
|
|
73
|
+
|
|
74
|
+
**Document Status Card:**
|
|
75
|
+
- Core documents: **PRD** and **Architecture** with exists/missing indicators
|
|
76
|
+
- Supplementary documents: Brainstorming, Market Research, Competitor Analysis, Project Brief, Frontend Spec, UI Architecture
|
|
77
|
+
- **"작성 필요"** (Required) badge for missing core documents; **"작성 권장"** (Recommended) for optional documents
|
|
78
|
+
- **Agent shortcut buttons** (→) to create missing documents with the appropriate agent
|
|
79
|
+
- **Sharded document support** — PRD and Architecture can be split into multiple files; expandable file tree view
|
|
80
|
+
- **Auxiliary documents** section — Stories and QA files with counts and expandable file trees
|
|
81
|
+
|
|
82
|
+
**Epic Progress Card:**
|
|
83
|
+
- Each epic shows a **color-coded progress bar** that reflects completion level
|
|
84
|
+
- **Done/planned** story count per epic
|
|
85
|
+
- Click to **expand** and see individual story statuses with color-coded badges
|
|
86
|
+
- Story file links to navigate directly to the story file
|
|
87
|
+
- Unwritten story count shown when planned > written
|
|
88
|
+
|
|
89
|
+
**Recent Issues Card** (replaces Quick Start for BMad projects):
|
|
90
|
+
- Last 5 issues with severity dot, title, and status badge
|
|
91
|
+
- Click to navigate to the project board
|
|
92
|
+
- Link to "View Board"
|
|
93
|
+
|
|
94
|
+
### 11.5 Workflow Phases & Recommendations
|
|
95
|
+
|
|
96
|
+
The Next Step Recommender analyzes the project state and suggests actions based on four phases:
|
|
97
|
+
|
|
98
|
+
**Phase 1: Pre-PRD** (PRD does not exist)
|
|
99
|
+
- **Primary:** Create PRD → PM agent
|
|
100
|
+
- **Secondary:** Brainstorming, Market Research, Competitor Analysis, Project Brief → Analyst agent
|
|
101
|
+
- Once a Project Brief already exists, the **Brainstorming** suggestion is hidden — the recommender treats the Brief as the brainstorm output and stops nagging
|
|
102
|
+
|
|
103
|
+
**Phase 2: Pre-Architecture** (PRD exists, Architecture does not)
|
|
104
|
+
- **Primary:** Create Backend / Frontend / Full-stack Architecture → Architect agent
|
|
105
|
+
- **Secondary:** Create Frontend Spec → UX Expert agent (if not exists)
|
|
106
|
+
|
|
107
|
+
**Phase 3: Implementation** (both PRD and Architecture exist)
|
|
108
|
+
|
|
109
|
+
Recommendations follow reverse workflow order (finish what's closest to done first):
|
|
110
|
+
|
|
111
|
+
- **Priority 1:** QA Passed/Waived stories → Commit and mark Done, mark Done without committing, or re-request QA review → Dev/QA agent
|
|
112
|
+
- **Priority 2:** QA Failed/Concerns stories → the next step depends on whether the developer has already recorded a fix for the *current* gate:
|
|
113
|
+
- Fix already applied for this gate → Request QA re-review → QA agent
|
|
114
|
+
- Fix still needed → Apply QA fixes → Dev agent
|
|
115
|
+
- State unknown (a story from before this tracking existed, an external BMad project, or a manually-edited gate) → **both** "Apply QA fixes" and "Request QA review" are offered (apply-fixes leading) so you choose
|
|
116
|
+
- **Priority 3:** Ready for Review stories (no QA gate) → Request QA review → QA agent
|
|
117
|
+
- **Priority 4:** In Progress stories → Continue development → Dev agent
|
|
118
|
+
- **Priority 5:** Approved stories → Start development (Dev), or re-validate with Validate and Fix / Validate Only → PO agent
|
|
119
|
+
- **Priority 6:** Draft stories → Validate and Fix / Validate Only → PO agent
|
|
120
|
+
- **Priority 7:** Create next story → SM agent (when no actionable stories)
|
|
121
|
+
|
|
122
|
+
**Phase 4: Completed** (all planned stories are Done)
|
|
123
|
+
- Brainstorm new features → Analyst agent
|
|
124
|
+
- Add new epic → PM agent
|
|
125
|
+
- Add story to existing epic → SM agent
|
|
126
|
+
|
|
127
|
+
### 11.6 Queue Templates from PRD
|
|
128
|
+
|
|
129
|
+
Queue templates automate story development in batch. For details, see §9.9 (Queue Templates).
|
|
130
|
+
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
## 12. Harness Workbench
|
|
2
|
+
|
|
3
|
+
The **Harness Workbench** is the unified surface for managing everything Claude Code reads from the `.claude/` configuration tree — plugins, skills, MCP servers, hooks, slash commands, sub-agents, `CLAUDE.md`, and Hammoc-native `%snippets`. It lives inside each project's **Settings** tab (see §5.3) under the "Harness Workbench" group, so the workbench is always scoped to the project you're working on but can also reach the global (`~/.claude/`) versions of each item.
|
|
4
|
+
|
|
5
|
+
The same Settings tab also hosts four sibling harness-engineering panels next to the Workbench (each a top-level nav item, not one of the Workbench's own sections): **BMad Settings** (§12.16, BMad projects only), **Context Builder** (§12.17), **Observability** (§12.18), and **Plugin Marketplace** (§12.19).
|
|
6
|
+
|
|
7
|
+
### 12.1 Layout
|
|
8
|
+
|
|
9
|
+
The workbench has two stacked headers above an eight-section navigator:
|
|
10
|
+
|
|
11
|
+
- **Mode banner** — Workbench-wide; explains whether the project's `.claude/` is git-tracked or ignored (see §12.2)
|
|
12
|
+
- **Lint preferences button** — Top-right; opens a dialog to toggle the seven static-lint rules (see §12.12)
|
|
13
|
+
|
|
14
|
+
The section navigator is a vertical sidebar on desktop and a horizontally-scrolling pill row on mobile. Sections, in order:
|
|
15
|
+
|
|
16
|
+
1. **Plugins** — Installed Claude Code plugins (see §12.4)
|
|
17
|
+
2. **Skills** — `SKILL.md` skill bundles (see §12.5)
|
|
18
|
+
3. **MCP** — MCP server entries from `.mcp.json` / `~/.claude/.mcp.json` (see §12.6)
|
|
19
|
+
4. **Hooks** — Lifecycle hooks declared in `settings.json` (see §12.7)
|
|
20
|
+
5. **Commands** — Slash command files (see §12.8)
|
|
21
|
+
6. **Agents** — Sub-agent definitions (see §12.9)
|
|
22
|
+
7. **CLAUDE.md** — Project and global instruction documents (see §12.10)
|
|
23
|
+
8. **Snippets** — Hammoc `%snippet` library + Claude Code slash-command favorites (see §12.11)
|
|
24
|
+
|
|
25
|
+
When the workbench loads, every section's data is fetched in parallel and cached, so switching between sections feels instant. Each section's data also stays in sync with disk: any external change (made outside Hammoc) updates the corresponding card without a reload.
|
|
26
|
+
|
|
27
|
+
### 12.2 Share Mode Banner
|
|
28
|
+
|
|
29
|
+
A workbench-wide banner just above the navigator tells you how the project shares its `.claude/` configuration:
|
|
30
|
+
|
|
31
|
+
- **Team-shared** (gray banner) — `.claude/` is **not** ignored by git. Files committed here (skills, hook definitions, the project `CLAUDE.md`, etc.) ship with the repo and reach every teammate.
|
|
32
|
+
- **Private** (amber banner) — `.claude/` (or a parent path) is excluded by `.gitignore`. Files here stay on your machine, so a teammate cloning the repo gets none of them.
|
|
33
|
+
|
|
34
|
+
The banner is derived from the project root's `.gitignore`. Edit the rules and the banner updates the next time the workbench refreshes.
|
|
35
|
+
|
|
36
|
+
> The Private mode banner surfaces an **Export** action on its right edge (in addition to the workbench-wide Bundle menu) so you can ship the current harness state to a teammate as a single `.zip` bundle. See §12.15 for the full export/import flow.
|
|
37
|
+
|
|
38
|
+
### 12.3 Share Badges
|
|
39
|
+
|
|
40
|
+
Every editable card (skill, MCP, hook, command, agent, `CLAUDE.md`, snippet) shows a small **share badge** indicating that specific file's git scope:
|
|
41
|
+
|
|
42
|
+
- **Shared** (blue) — File tracked by git; team will see your edits after a commit
|
|
43
|
+
- **Local** (gray) — File exists but is not tracked
|
|
44
|
+
- **Ignored** (amber) — `.claude/` is fully git-excluded; this file will not be committed
|
|
45
|
+
|
|
46
|
+
The badge is computed per-file so a single project can mix shared and local items.
|
|
47
|
+
|
|
48
|
+
### 12.4 Plugins Panel
|
|
49
|
+
|
|
50
|
+
Lists every Claude Code plugin discovered under the project and global plugin roots:
|
|
51
|
+
|
|
52
|
+
- One card per plugin with name, version, and small component counts (skills, commands, agents, hooks, MCP servers it ships)
|
|
53
|
+
- A toggle switch enables or disables the plugin without uninstalling it
|
|
54
|
+
- Plugin-provided items appear (read-only) in the other workbench sections too, with a **"Plugin: <key>"** scope badge
|
|
55
|
+
|
|
56
|
+
### 12.5 Skills Panel
|
|
57
|
+
|
|
58
|
+
Card grid for skill bundles (a `SKILL.md` plus optional supporting files):
|
|
59
|
+
|
|
60
|
+
- **Scope filter** — All / Project / Global / Plugin
|
|
61
|
+
- **Card front** — Name, description, scope badge, share badge, lint marker (if the skill has lint issues), and a kebab menu for copy actions
|
|
62
|
+
- **Open** — Click the card to open the **Skill Editor**, a modal with two modes:
|
|
63
|
+
- **Form mode** — Separate fields for the YAML frontmatter (Name, Description, Version) and a Markdown body with edit/preview toggle
|
|
64
|
+
- **Raw mode** — Edit the raw `SKILL.md` text directly when the frontmatter cannot be parsed
|
|
65
|
+
- **Bundle resources** — A nested tree of supporting files (references, examples, scripts, assets) with file counts. Binary files are marked read-only; files over 1 MB are truncated
|
|
66
|
+
- **Copy actions** — Copy a skill between Project / Global / Plugin scopes. If the destination already has a skill with the same name, a **conflict dialog** offers Overwrite / Skip / Rename
|
|
67
|
+
- **Auto-save** — Edits debounce-save every ~300 ms; no manual save button
|
|
68
|
+
- **External-change banner** — If another tool overwrites the skill while you are editing, the editor reloads with a banner explaining the change
|
|
69
|
+
|
|
70
|
+
Bundled skills (from a plugin's `skills/`) can only be opened read-only — copy them to Project or Global scope first to customize.
|
|
71
|
+
|
|
72
|
+
### 12.6 MCP Panel
|
|
73
|
+
|
|
74
|
+
Card grid for MCP server entries (from `.mcp.json` or `~/.claude/.mcp.json`):
|
|
75
|
+
|
|
76
|
+
- **Type badges** — `stdio`, `sse`, `http`, `ws`
|
|
77
|
+
- **Toggle** — Enable / Disable a server. Disabling moves the entry to a backup section of the JSON file rather than deleting it, so you can re-enable later
|
|
78
|
+
- **Editor** — Form fields for the server type, command, arguments (one per line), URL, headers (key/value rows), and environment variables (key/value rows). A mask toggle hides secret-looking values
|
|
79
|
+
- **Secret detection** — Values that look like API keys are marked inline. When you copy a server between scopes, a warning dialog lists detected secrets and requires explicit acknowledgement before copying
|
|
80
|
+
- **Fresh-spawn banner** — After enabling/disabling or editing a server, a banner reminds you that MCP changes only take effect on your **next** message in a new chat turn. A **Start new session** button is available
|
|
81
|
+
|
|
82
|
+
### 12.7 Hooks Panel
|
|
83
|
+
|
|
84
|
+
Hooks are grouped by lifecycle event (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification):
|
|
85
|
+
|
|
86
|
+
- **Per-event sections** — Each event shows its hook cards and an inline "+ Add" button
|
|
87
|
+
- **Type badges** — `command` (shell command) and `prompt` (LLM-invoking)
|
|
88
|
+
- **Toggle** — Enable / Disable individual hooks
|
|
89
|
+
- **Matcher field** — Regex pattern that filters which tool calls (or events) the hook applies to; empty matcher means "all"
|
|
90
|
+
- **Parallel-execution badge** — Indicates when the hook runs alongside hooks from other sources for the same event
|
|
91
|
+
- **Cost warning** — `prompt`-type hooks invoke the LLM each time and show a cost/latency warning banner
|
|
92
|
+
- **Copy actions** — Same Project ↔ Global ↔ Plugin copy matrix as skills, with a review dialog that surfaces secret-looking values and command bodies before copying
|
|
93
|
+
|
|
94
|
+
### 12.8 Commands Panel
|
|
95
|
+
|
|
96
|
+
Slash command files (the `.md` files behind `/your-command`):
|
|
97
|
+
|
|
98
|
+
- One card per command with name, description, scope badge, share badge, and lint marker
|
|
99
|
+
- **Editor** — Markdown body with edit/preview toggle and frontmatter fields (description, argument hints)
|
|
100
|
+
- **Copy / Override-clone** — Copy to the other scope, or clone a plugin-provided command into Project / Global so you can customize it without losing the upstream copy
|
|
101
|
+
|
|
102
|
+
### 12.9 Agents Panel
|
|
103
|
+
|
|
104
|
+
Sub-agent definitions (`AGENT.md`-style files used by the `Agent` tool):
|
|
105
|
+
|
|
106
|
+
- One card per agent with name, role description, scope badge, share badge, lint marker
|
|
107
|
+
- **Editor** — Frontmatter fields (Name, Description, Tools), Markdown system prompt body, edit/preview toggle
|
|
108
|
+
- **Non-standard tools warning** — Lint rule flags tools that aren't part of the standard Claude Code toolset
|
|
109
|
+
|
|
110
|
+
### 12.10 CLAUDE.md Editor
|
|
111
|
+
|
|
112
|
+
Two-column editor for the instruction documents Claude Code loads at session start:
|
|
113
|
+
|
|
114
|
+
- **Left column** — Global `~/.claude/CLAUDE.md`
|
|
115
|
+
- **Right column** — Project `<root>/.claude/CLAUDE.md` with its own share badge
|
|
116
|
+
- **Mobile** — Columns collapse to a User / Project toggle above a single editor pane
|
|
117
|
+
|
|
118
|
+
Each column is a CodeMirror Markdown editor with edit/preview toggle and the same 300 ms debounce auto-save as the other panels. Copy buttons (← / →) move content between columns; if both files have content, a confirmation dialog warns before overwriting.
|
|
119
|
+
|
|
120
|
+
Both files load into every Claude Code session in this project; the project version takes precedence when an instruction is defined in both.
|
|
121
|
+
|
|
122
|
+
### 12.11 Snippets & Favorites Panel
|
|
123
|
+
|
|
124
|
+
A single panel manages both Hammoc-native snippets and Claude Code slash-command favorites.
|
|
125
|
+
|
|
126
|
+
**Snippets section** (top):
|
|
127
|
+
|
|
128
|
+
- Manages `%name` snippets from `<project-root>/.hammoc/snippets/`, `~/.hammoc/snippets/`, and the bundled set shipped with Hammoc (see §4.6)
|
|
129
|
+
- **Scope filter** — All / Project / Global / Bundled
|
|
130
|
+
- **+ New snippet** — Choose scope (Project or Global) and a name; an empty file is created and the editor opens
|
|
131
|
+
- **Editor** — CodeMirror with syntax highlighting for `%name%`, `{arg1}`, `{context}` tokens and an inline warning when a snippet references itself or forms a reference cycle (heuristic only — saves are not blocked)
|
|
132
|
+
- **Kebab menu** — Copy to the other scope, delete (with confirmation)
|
|
133
|
+
- **Bundled snippets** are read-only — copy to Project or Global scope first to customize
|
|
134
|
+
|
|
135
|
+
**Command Favorites section** (bottom):
|
|
136
|
+
|
|
137
|
+
- Drag-reorder list of slash command favorites (the same favorites shown in the chat input's favorites bar, see §4.3)
|
|
138
|
+
- Each entry shows the command name, scope, and a star toggle that moves it between regular and star favorites
|
|
139
|
+
- **Invalid chip** marker on favorites whose underlying command no longer exists on disk
|
|
140
|
+
- Up to 20 regular + 10 star favorites per scope
|
|
141
|
+
|
|
142
|
+
### 12.12 Static Lint
|
|
143
|
+
|
|
144
|
+
Every harness panel (skills, MCP, hooks, commands, agents) runs a background static-lint pass against its files. Lint output surfaces in three places:
|
|
145
|
+
|
|
146
|
+
- **Count badges on section nav** — A red dot with the error count and an amber dot with the warning count appear on the section tab when issues exist
|
|
147
|
+
- **Inline marker on cards** — The card header shows a small red or amber pill with the issue count; clicking jumps to the card detail or opens the editor
|
|
148
|
+
- **Issues list at the top of each panel** — Expandable list of every issue with file path, severity, message, and a "Open" link
|
|
149
|
+
|
|
150
|
+
**Rule preferences:** The **Lint preferences** button at the top-right of the workbench opens a dialog listing all seven rules. Each rule has an on/off toggle plus a description, and a **Restore defaults** button reverts the preferences. Preferences are stored globally (not per-project).
|
|
151
|
+
|
|
152
|
+
**Available rules:**
|
|
153
|
+
|
|
154
|
+
| Rule | Default | Catches |
|
|
155
|
+
|------|---------|---------|
|
|
156
|
+
| `naming/duplicate-across-sources` | on | The same name exists in two scopes (project + global, etc.) — surfaces which copy will actually load |
|
|
157
|
+
| `hook/matcher-regex-invalid` | on | Hook `matcher` regex won't compile |
|
|
158
|
+
| `parse/yaml-json-error` | on | Frontmatter or JSON config can't be parsed |
|
|
159
|
+
| `mcp/command-not-on-path` | off | MCP `stdio` command is not on the server's `PATH` |
|
|
160
|
+
| `mcp/url-invalid` | on | MCP `url` field is malformed for the chosen transport |
|
|
161
|
+
| `agent/tools-non-standard` | on | Agent declares a tool name Claude Code does not recognize |
|
|
162
|
+
| `hook/env-var-undefined` | on | Hook body references `${VAR}` that is not set on the server |
|
|
163
|
+
|
|
164
|
+
### 12.13 Secret-on-Shared Guard
|
|
165
|
+
|
|
166
|
+
When you save (or copy) a harness file whose share badge is **Shared**, Hammoc scans the content for plaintext secrets — long base64-looking values, AWS-style keys, bearer tokens — using both pattern and Shannon-entropy checks. If a likely secret is detected, the save is blocked and a dialog appears with three options:
|
|
167
|
+
|
|
168
|
+
- **Move to local file** — Auto-create a sibling file (e.g., `settings.local.json` next to `settings.json`), move the value there, and re-save the original with a reference. This keeps the secret out of git
|
|
169
|
+
- **Mark this value as not a secret** — One-shot opt-out for this save only; the heuristic does not persist the decision
|
|
170
|
+
- **Cancel** — Close the dialog without saving
|
|
171
|
+
|
|
172
|
+
The dialog lists exactly which values were flagged (line numbers for text files, dot-paths for JSON/YAML) so you can verify before deciding. The entropy gate avoids tripping on ordinary base64-looking strings (image tokens, integration test fixtures) that fall below the threshold.
|
|
173
|
+
|
|
174
|
+
### 12.14 Fullscreen Editor
|
|
175
|
+
|
|
176
|
+
Every Markdown body in the workbench — skill body and raw view, skill bundle files, command body and raw view, agent system prompt and raw view, `CLAUDE.md` (both columns), snippet body — shows a small **Expand** button (⤢ icon) above the editor area. Clicking it opens a fullscreen overlay with the same CodeMirror instance, line wrapping, and a Markdown edit / preview toggle, so you can write long content without scrolling inside a narrow modal. Edits in the overlay sync back to the host panel through the same 300 ms debounce auto-save — there is no separate save button. Close the overlay with **X** or `Escape`. Read-only buffers (a plugin-scope file, a bundled snippet) show a small "read-only" chip in the overlay header.
|
|
177
|
+
|
|
178
|
+
### 12.15 Bundle Export / Import (Team Sharing)
|
|
179
|
+
|
|
180
|
+
When your project's `.claude/` tree is **fully git-ignored** (Mode B — typical when you use Hammoc itself to develop on Hammoc, or when your team intentionally keeps the harness out of source control), you can still share the entire workbench configuration with a teammate by exporting it as a single `.zip` bundle and importing on the other side. The workbench shows a **Bundle** menu (top-right of the workbench header, also surfaced as an **Export** button on the Mode B banner), with two actions:
|
|
181
|
+
|
|
182
|
+
- **Export bundle** — Opens a dialog summarizing what will be packed (the five domain cards + `CLAUDE.md` + snippets) and lets you choose how secrets are handled:
|
|
183
|
+
- **Exclude (default)** — Secrets detected by the heuristic are stripped before packing; the recipient sees a *"N secrets removed"* toast after import. Use this when you want your teammate to fill in their own credentials.
|
|
184
|
+
- **Include as `${ENV_REF}` placeholders** — Detected secrets are replaced with named environment-variable references and a hint table lists which keys the recipient needs to set. Good for sharing a config skeleton without leaking real values.
|
|
185
|
+
- **Include explicit (with secrets)** — Plain-text secrets are packed as-is. This is the *"send it over secure DM and delete after use"* mode: you must check a second confirmation box before the dialog enables the download button, the resulting filename contains a visible `WITH-SECRETS` token, and a 5-second warning toast appears after the download starts.
|
|
186
|
+
- **Import bundle** — Drop a `.zip` (or browse for one). Before anything is applied, Hammoc shows a preview of every incoming item alongside what already exists, with three per-item actions (Overwrite / Skip / Add only if missing) and three bulk-action shortcuts. Bundles tagged *"with secrets"* require the recipient to acknowledge a separate *"this bundle contains plaintext secrets"* checkbox before the apply button activates, and bundles produced by a newer Hammoc version (`bundleVersion` greater than what the local server supports) are rejected outright with an upgrade hint.
|
|
187
|
+
|
|
188
|
+
The export/import flow only touches the workbench items themselves — `package.json`, repository code, and tracked files outside `.claude/` are never bundled. Bundles produced and consumed by the same Hammoc version are round-trip identical: re-importing your own export into an empty project reproduces the workbench cards byte-for-byte (handy for backups or for setting up a new dev machine).
|
|
189
|
+
|
|
190
|
+
### 12.16 BMad Settings (core-config Editor)
|
|
191
|
+
|
|
192
|
+
> Shown only for BMad projects (those with a `.bmad-core/` folder). For non-BMad projects this nav item is hidden entirely — no empty placeholder.
|
|
193
|
+
|
|
194
|
+
A form-based editor for BMad's `core-config.yaml`, so you can change BMad's paths and flags without opening a terminal or text editor. It is a top-level item in the project Settings left nav (a sibling of the Harness Workbench, not one of its sections).
|
|
195
|
+
|
|
196
|
+
Keys are organized into collapsible groups — **General**, **QA**, **PRD**, **Architecture**, and **Brownfield Epic** — and each value uses a widget matched to its type:
|
|
197
|
+
|
|
198
|
+
- **Toggle** for boolean flags (e.g., Markdown Exploder, PRD Sharded)
|
|
199
|
+
- **Path picker** for file/folder paths — a **Browse** button opens a file-tree dialog; paths are relative to the project root (e.g., Dev Story Location, QA Location)
|
|
200
|
+
- **Text** for plain strings (e.g., PRD Version, Slash Prefix)
|
|
201
|
+
- **Glob** with a live match preview that counts the files matching the pattern (e.g., Epic File Pattern)
|
|
202
|
+
- **Drag-sortable list** for path arrays (e.g., Dev Load Always Files, Custom Technical Documents)
|
|
203
|
+
|
|
204
|
+
Other behaviors:
|
|
205
|
+
|
|
206
|
+
- **Auto-save** — Text/path/glob edits debounce-save (~300 ms); toggles and list changes save immediately. Saves write `.bmad-core/core-config.yaml` while preserving comments and key order.
|
|
207
|
+
- **Raw YAML toggle** — A **Form / Raw** switch in the top-right lets you edit the file as raw YAML; switching back to Form preserves comments and ordering. A parse error keeps you in Raw mode until it is fixed.
|
|
208
|
+
- **Unknown Keys** — Keys the form doesn't recognize (for example, a newer BMad schema) are preserved and listed read-only in an "Unknown Keys" section at the bottom; edit them in Raw mode.
|
|
209
|
+
- **External-change banner** — If the file changes outside Hammoc while the panel is open, a banner with a **Reload** button appears.
|
|
210
|
+
|
|
211
|
+
After you change a path such as **Dev Story Location**, the BMad agents (e.g., `/dev`) pick up the new value on their next run.
|
|
212
|
+
|
|
213
|
+
### 12.17 Context Builder
|
|
214
|
+
|
|
215
|
+
The **Context Builder** automatically injects a block of context into every new chat session, so you don't have to re-explain "what was I working on" each time. It does this by generating a Claude Code **SessionStart hook** for you. Available on all projects.
|
|
216
|
+
|
|
217
|
+
You declare three kinds of content in the panel:
|
|
218
|
+
|
|
219
|
+
- **Reference files** — Project files that are read fresh and injected at each session start. Each file shows its byte size and an approximate token count. If the combined size nears the SessionStart output cap an amber warning appears; past the hard cap (red), the content spills to a file plus a preview instead of being injected inline, so trim the list when warned.
|
|
220
|
+
- **Dynamic variables** — Built-in values recomputed every session, each with an on/off toggle:
|
|
221
|
+
- **Current branch** — the active git branch
|
|
222
|
+
- **Active BMad story** — title and status of the most recently modified story file
|
|
223
|
+
- **Recent commits** — the most recent commit subjects (count configurable)
|
|
224
|
+
- **Today** — today's date
|
|
225
|
+
- **Uncommitted files** — count of files with uncommitted changes
|
|
226
|
+
- **Custom commands** (advanced) — Arbitrary shell commands whose output is appended. Because these run automatically at every session start, each requires you to tick a confirmation checkbox ("I understand this command runs automatically at every session start"). Hammoc also flags commands that look like they contain a secret.
|
|
227
|
+
|
|
228
|
+
When you save, Hammoc generates a hook script under the project's `.hammoc/` folder and registers a SessionStart entry in `.claude/settings.json`. In the **Hooks** panel (§12.7) that entry is marked **"Hammoc Context Builder"**; editing it by hand there raises a sync-loss warning, since the Context Builder owns it — change it from this panel instead. The token-size hints reuse the same approximation as Observability (§12.18).
|
|
229
|
+
|
|
230
|
+
### 12.18 Observability
|
|
231
|
+
|
|
232
|
+
The **Observability** panel is the feedback loop for harness tuning: it shows which tools get called and how much of the context window each harness element consumes. Available on all projects.
|
|
233
|
+
|
|
234
|
+
**MCP / tool calls:**
|
|
235
|
+
|
|
236
|
+
- A **timeline** of recent tool calls (server, tool, response time, and success / failed / no-response status) and an **aggregate chart** of calls per server and per tool with average response time and error counts.
|
|
237
|
+
- **Filters** by server, tool, and time window (default: last 30 days).
|
|
238
|
+
- Only call **metadata** is recorded — server, tool, timestamp, argument and response **sizes**, and duration. Argument and response **bodies are never stored**, so file contents and secrets don't leak into the log.
|
|
239
|
+
|
|
240
|
+
**Token attribution:**
|
|
241
|
+
|
|
242
|
+
- A bar chart of how many tokens each harness element contributes — project and global `CLAUDE.md`, each skill's `SKILL.md`, and the Context Builder's injected block — with an overlay showing the total against the current model's context window.
|
|
243
|
+
- Inline hints show an **approximate** token count prefixed with `~` (a fast byte-based estimate), expressed two ways at once: as a percentage of the context window and as a share of the total harness prompt.
|
|
244
|
+
- An **Exact count** button calls Anthropic's official token-count API and caches the result by file content; if the call fails, the approximation is kept.
|
|
245
|
+
|
|
246
|
+
### 12.19 Plugin Marketplace
|
|
247
|
+
|
|
248
|
+
The **Marketplace** panel lets you discover Claude Code plugins from the marketplaces registered on your machine, complementing the install/toggle view in the Plugins panel (§12.4). Available on all projects.
|
|
249
|
+
|
|
250
|
+
- **Catalog** — One card per plugin parsed from each registered marketplace, showing name, description, version, author, category, a type badge (**Plugin** or **External MCP**), bundled-component counts, and an **Installed** badge when applicable.
|
|
251
|
+
- **Filter & search** — By name, category, type, and installed state.
|
|
252
|
+
- **Install / Uninstall guide** — Because Claude Code's plugin commands are interactive slash commands (not shell subcommands), the **Install** and **Uninstall** buttons open a dialog containing the exact command — e.g. `/plugin install <name>@<marketplace>` — with a **Copy** button. Paste it into your Claude CLI session to run it; plugin commands can't be executed from the Hammoc chat.
|
|
253
|
+
- **Add marketplace** — A form takes a marketplace URL and produces the matching `/plugin marketplace add <url>` command to copy.
|
|
254
|
+
- **Auto-refresh** — After you install or remove a plugin in your CLI session, Hammoc detects the on-disk change and updates both this catalog's **Installed** badges and the Plugins panel cards automatically.
|
|
255
|
+
- **Resilience** — If one marketplace's catalog file can't be read, only that marketplace shows an error badge and the rest still load. If the installed-plugins file is in an unrecognized format, a warning banner notes that installed state may be incomplete.
|
|
256
|
+
|