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,76 @@
|
|
|
1
|
+
## 5. Projects
|
|
2
|
+
|
|
3
|
+
### 5.1 Project List
|
|
4
|
+
|
|
5
|
+
The project list page shows all your Claude Code projects in a responsive grid:
|
|
6
|
+
|
|
7
|
+
Each project card displays:
|
|
8
|
+
|
|
9
|
+
- **Project name** — Derived from the directory name
|
|
10
|
+
- **Path** — Full project directory path
|
|
11
|
+
- **Session count** — Number of chat sessions
|
|
12
|
+
- **Last modified** — When the project was last active
|
|
13
|
+
- **BMad badge** — Indicates BMAD-METHOD enabled projects
|
|
14
|
+
- **Status indicators** — Active sessions (green dot), queue status badge, terminal count (updates in real-time)
|
|
15
|
+
|
|
16
|
+
Each card has a **kebab menu** (⋮) with:
|
|
17
|
+
|
|
18
|
+
- **Setup BMad** — Initialize BMAD-METHOD on non-BMad projects (with version selection)
|
|
19
|
+
- **Hide / Unhide** — Toggle project visibility
|
|
20
|
+
- **Delete** — Remove the project
|
|
21
|
+
|
|
22
|
+
**Dashboard summary bar** appears at the top when projects exist, showing aggregate stats: Projects, Sessions, Active, Queue, Terminals.
|
|
23
|
+
|
|
24
|
+
**Header brand logo (Hammoc)** — The Hammoc logo on the left of every header is clickable and always returns you to the project list from any page (project Overview, Board, Sessions, Queue, Files, Git, Terminal, project Settings, chat session). Use it as a one-tap "Home" without going through the back button.
|
|
25
|
+
|
|
26
|
+
### 5.2 Creating a New Project
|
|
27
|
+
|
|
28
|
+
1. Click **"New Project"** on the project list page
|
|
29
|
+
2. Enter the project directory path
|
|
30
|
+
3. The path is validated automatically with a short debounce while you type (`"Validating path..."` helper text is shown). Blurring the field validates immediately
|
|
31
|
+
4. Path collision detection — if the path already belongs to an existing project, an amber warning appears with a **"Navigate to existing"** link and the **Create** button is disabled until you pick a different path
|
|
32
|
+
5. Invalid paths show the server's validation message in red below the input, and also disable **Create**
|
|
33
|
+
6. Optionally enable BMad Method initialization with version selection
|
|
34
|
+
|
|
35
|
+
### 5.3 Project Settings
|
|
36
|
+
|
|
37
|
+
Per-project settings live in their own tab inside each project (Overview / Queue / Git / Files / Terminal / Board / **Settings**), no longer under the global Settings page. Opening the tab takes you directly to that project's configuration — there is no project dropdown to disambiguate.
|
|
38
|
+
|
|
39
|
+
The Settings tab has a two-pane layout:
|
|
40
|
+
|
|
41
|
+
- **Left nav** — Top-level groups: **General**, **Harness Workbench** (see §12), **Context Builder** (§12.17), **Observability** (§12.18), and **Marketplace** (§12.19). BMad projects also get a **BMad Settings** group (§12.16)
|
|
42
|
+
- **Right panel** — Form contents for the selected group
|
|
43
|
+
|
|
44
|
+
**General group** (per-project override fields):
|
|
45
|
+
|
|
46
|
+
- **Default model** — Override the global model selection
|
|
47
|
+
- **Permission mode** — Override the global permission mode (Plan, Ask before edits, Edit automatically). Note: Bypass permissions is not available at project level
|
|
48
|
+
- **Hidden toggle** — Hide the project from the project list
|
|
49
|
+
- **Reset to Global Defaults** — Remove all overrides at once
|
|
50
|
+
|
|
51
|
+
On narrow screens, the left nav collapses into a row of buttons above the right panel (the inner Harness Workbench navigator beneath it becomes the horizontally-scrolling pill row — see §12.1).
|
|
52
|
+
|
|
53
|
+
### 5.4 Hiding Projects
|
|
54
|
+
|
|
55
|
+
- Hide projects from the kebab menu or project settings
|
|
56
|
+
- Hidden projects appear with reduced opacity when visible
|
|
57
|
+
- Toggle "Show hidden" (eye icon in header) to reveal them
|
|
58
|
+
- Hiding doesn't delete any data
|
|
59
|
+
|
|
60
|
+
### 5.5 Project Overview Page
|
|
61
|
+
|
|
62
|
+
Clicking a project card opens the Overview tab:
|
|
63
|
+
|
|
64
|
+
- **Stats cards** — Three cards showing Total Sessions, Total Messages, and Active Sessions
|
|
65
|
+
- **Recent Sessions** — Last 5 sessions with streaming indicators, session name badges, and message counts. Click to navigate directly to the session
|
|
66
|
+
- **Quick Start** — Buttons for New Session, Queue Runner, and File Explorer
|
|
67
|
+
- **Active streaming banner** — Green banner shown when sessions are actively streaming
|
|
68
|
+
|
|
69
|
+
For BMad projects, additional sections appear above this standard overview (see §11.4).
|
|
70
|
+
|
|
71
|
+
### 5.6 Deleting Projects
|
|
72
|
+
|
|
73
|
+
- Delete removes the project from Hammoc's list
|
|
74
|
+
- Optionally check **"Delete project files"** to also remove the directory on disk
|
|
75
|
+
- Confirmation dialog prevents accidental deletion
|
|
76
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
## 6. File Explorer & Editor
|
|
2
|
+
|
|
3
|
+
### 6.1 File Explorer
|
|
4
|
+
|
|
5
|
+
Access the file explorer from the sidebar tab. Toggle between views with the toolbar button:
|
|
6
|
+
|
|
7
|
+
**Grid View (Finder-style, default)**
|
|
8
|
+
- Icon-based card display with folder/file icons
|
|
9
|
+
- Click folders to navigate in, click files to open
|
|
10
|
+
- ".." entry to navigate to parent directory
|
|
11
|
+
- Breadcrumb navigation at the top
|
|
12
|
+
|
|
13
|
+
**List View (hierarchical tree)**
|
|
14
|
+
- Recursive tree with expand/collapse chevrons
|
|
15
|
+
- Lazy-loaded subdirectories
|
|
16
|
+
- Sorted by type (folders first) then by name
|
|
17
|
+
- Keyboard navigation: ArrowUp/Down/Left/Right, Enter, Home/End
|
|
18
|
+
|
|
19
|
+
**Context Menu** (right-click or ⋮ button on hover)
|
|
20
|
+
- **New File** / **New Folder** — Creates via inline input
|
|
21
|
+
- **Copy** / **Cut** / **Paste** — Copy or move files and folders within the project
|
|
22
|
+
- **Download** — Download individual files (files only)
|
|
23
|
+
- **Rename** — Inline renaming
|
|
24
|
+
- **Delete** — With confirmation dialog
|
|
25
|
+
|
|
26
|
+
**File Upload**
|
|
27
|
+
- Drag and drop files from your OS into the Grid view to upload them
|
|
28
|
+
- Paste files from clipboard (`Ctrl+V`) while the file explorer is focused
|
|
29
|
+
|
|
30
|
+
**Toolbar**
|
|
31
|
+
- **Search** — File search with real-time filtering
|
|
32
|
+
- **Hidden files** — Toggle visibility of ignored patterns (`.git`, `node_modules`, `.env`, `dist`, etc.)
|
|
33
|
+
- **View toggle** — Switch between Grid and List views
|
|
34
|
+
- **Open in OS explorer** — Opens the project folder in your OS file manager (Explorer, Finder, etc.). Only shown when accessing via localhost
|
|
35
|
+
- Default view mode configurable in settings
|
|
36
|
+
|
|
37
|
+
### 6.2 Text Editor
|
|
38
|
+
|
|
39
|
+
Click any text file to open it in the built-in editor:
|
|
40
|
+
|
|
41
|
+
- **Syntax highlighting** — Language-aware (detected from file extension)
|
|
42
|
+
- **Line numbers** and **active line highlighting**
|
|
43
|
+
- **Save** — `Ctrl+S` / `Cmd+S` or the save button
|
|
44
|
+
- **Close** — `Escape` key or the X button
|
|
45
|
+
- **Unsaved changes warning** — Confirmation dialog prevents accidental data loss
|
|
46
|
+
- **File size limit** — Files over 1MB are truncated and read-only
|
|
47
|
+
- **Binary files** — When a binary file is opened (images, PDFs, executables, etc.), the editor body shows the file's human-readable size (e.g., `104 B`, `5.0 MB`) together with a **Download** button for direct download
|
|
48
|
+
|
|
49
|
+
**External change detection**
|
|
50
|
+
|
|
51
|
+
The server watches open files and pushes a notification if the file changes on disk outside Hammoc. An alert banner appears above the editor:
|
|
52
|
+
|
|
53
|
+
- **File modified on disk (clean editor)** — Amber banner with **Reload** (re-read from disk) and **Dismiss** (keep current view)
|
|
54
|
+
- **File modified on disk (with unsaved edits)** — Amber banner warning that saving will overwrite the external changes; same Reload / Dismiss buttons
|
|
55
|
+
- **File deleted on disk** — Red banner with a **Dismiss** button (no reload is possible)
|
|
56
|
+
- **Stale-write conflict** — If you try to save a file that was modified on disk since you opened it, the save is rejected and a red banner offers **Reload** (discard your edits) or **Overwrite** (force-save over the external changes)
|
|
57
|
+
|
|
58
|
+
### 6.3 Markdown Preview
|
|
59
|
+
|
|
60
|
+
For `.md` files:
|
|
61
|
+
|
|
62
|
+
- Toggle between **Edit** and **Preview** modes via the header button
|
|
63
|
+
- Preview renders full markdown with styles
|
|
64
|
+
- Default mode (Edit or Preview) configurable in settings
|
|
65
|
+
|
|
66
|
+
### 6.4 Image Viewer
|
|
67
|
+
|
|
68
|
+
Click any image file to open the viewer in a fullscreen overlay:
|
|
69
|
+
|
|
70
|
+
- **Zoom in/out** — Button controls or mouse wheel scroll (wheel zoom cancels any active fit mode)
|
|
71
|
+
- **Drag to pan** — Click and drag to move the image. Pan position is clamped so the zoomed image cannot be dragged completely off-screen
|
|
72
|
+
- **Zoom percentage** — Displayed between zoom buttons
|
|
73
|
+
- **Fit controls** — Header buttons for **Actual size (100%)**, **Fit to screen**, **Fit to width**, and **Fit to height**. The active fit mode is cleared when you manually zoom with the wheel
|
|
74
|
+
- **Touch gestures** (mobile / touchscreen):
|
|
75
|
+
- **Pinch** with two fingers to zoom. The zoom is anchored at the midpoint between the two fingers so the content under your fingers stays put
|
|
76
|
+
- **One-finger drag** pans the image when it's zoomed in (with edge clamping)
|
|
77
|
+
- **One-finger horizontal swipe** (when the image fits on screen) navigates to the previous / next image in the set. A swipe needs to exceed roughly 50 px horizontally and be more horizontal than vertical to trigger
|
|
78
|
+
- **Multi-image navigation** — When multiple images are available (a chat message with multiple attachments, **or a file-explorer image opened from a folder containing other images**), they form a navigable set. Left/right arrow keys move between images and zoom resets to fit on each change. The header shows the current position (e.g., `filename (2/5)`)
|
|
79
|
+
- **Close** — `Escape` key or the X button
|
|
80
|
+
- Supports PNG, JPEG, GIF, WebP, SVG, BMP, ICO
|
|
81
|
+
|
|
82
|
+
### 6.5 Quick File Panel
|
|
83
|
+
|
|
84
|
+
Access files without leaving the chat:
|
|
85
|
+
|
|
86
|
+
- Open the quick panel and switch to the Files tab
|
|
87
|
+
- **Recently opened** files appear at the top (max 5 per session)
|
|
88
|
+
- Search and navigate the file tree
|
|
89
|
+
- Click to open in the editor overlay
|
|
90
|
+
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
## 7. Git
|
|
2
|
+
|
|
3
|
+
### 7.1 Git Status
|
|
4
|
+
|
|
5
|
+
The Git tab shows the current repository state with automatic refresh:
|
|
6
|
+
|
|
7
|
+
- **Top bar** — Branch selector dropdown + Pull/Push buttons
|
|
8
|
+
- **File groups** — Three collapsible sections (chevron toggle), each with file count badge:
|
|
9
|
+
- **Staged Changes** — Files ready to commit (status indicators: M green, A green, D red, R blue)
|
|
10
|
+
- **Unstaged Changes** — Modified files not yet staged (status indicators: M yellow, D red)
|
|
11
|
+
- **Untracked Files** — New files not tracked by Git (status indicator: ?)
|
|
12
|
+
- **File click** — Clicking a file name opens the Diff viewer slide panel (see 7.8)
|
|
13
|
+
- **Error banner** — Git errors appear at the top and auto-clear; dismiss manually with X
|
|
14
|
+
- **Clean state** — When no changes exist, a green checkmark with "No changes" message is shown
|
|
15
|
+
|
|
16
|
+
### 7.2 Staging Files
|
|
17
|
+
|
|
18
|
+
- **Stage individual files** — Click the "+" button next to each file (appears on hover)
|
|
19
|
+
- **Stage all** — Click "+ All" in the group header to stage all files in that group
|
|
20
|
+
- **Unstage individual** — Click the "-" button on staged files (appears on hover)
|
|
21
|
+
- **Unstage all** — Click "- All" in the Staged Changes group header
|
|
22
|
+
|
|
23
|
+
### 7.3 Committing
|
|
24
|
+
|
|
25
|
+
1. Stage the files you want to commit
|
|
26
|
+
2. Write a commit message in the textarea
|
|
27
|
+
3. Click **"Commit"** (enabled only when staged files exist and message is non-empty)
|
|
28
|
+
4. The commit history refreshes automatically after a successful commit
|
|
29
|
+
|
|
30
|
+
> **Note:** "Stage All & Commit" is available only in the Quick Git Panel (see 7.7). The full Git tab requires staging first, then committing separately.
|
|
31
|
+
|
|
32
|
+
### 7.4 Branch Management
|
|
33
|
+
|
|
34
|
+
- **Branch selector** — Dropdown button in the top bar showing the current branch
|
|
35
|
+
- **Branch list** — All local branches displayed; current branch highlighted with a blue checkmark
|
|
36
|
+
- **Create branch** — Input field at the bottom of the dropdown; press Enter to create
|
|
37
|
+
- **Switch branch** — Click on a branch name to switch
|
|
38
|
+
- **Uncommitted changes warning** — If there are staged, unstaged, or untracked files, a confirmation dialog appears before switching
|
|
39
|
+
- **Keyboard navigation** — ArrowUp/Down to navigate, Enter to select, Escape to close dropdown
|
|
40
|
+
|
|
41
|
+
### 7.5 Commit History
|
|
42
|
+
|
|
43
|
+
- Browse recent commits (up to 20 in the full tab):
|
|
44
|
+
- Short commit hash
|
|
45
|
+
- Commit message
|
|
46
|
+
- Author name
|
|
47
|
+
- Relative timestamp (e.g., "2 hours ago", "3 days ago")
|
|
48
|
+
|
|
49
|
+
### 7.6 Pull & Push
|
|
50
|
+
|
|
51
|
+
- **Pull** — Fetch and merge remote changes (↓ arrow button)
|
|
52
|
+
- **Push** — Upload local commits to remote (↑ arrow button)
|
|
53
|
+
- **Ahead/Behind counts** — Each button shows the number of commits ahead or behind the remote
|
|
54
|
+
- Errors displayed in the error banner
|
|
55
|
+
|
|
56
|
+
### 7.7 Quick Git Panel
|
|
57
|
+
|
|
58
|
+
Lightweight Git access from the quick panel side bar:
|
|
59
|
+
|
|
60
|
+
- **Branch name** with changed file count badge (e.g., "3 changes")
|
|
61
|
+
- **Commit input** — Textarea for commit message
|
|
62
|
+
- **"Stage All & Commit"** — Single green button that automatically stages all unstaged/untracked files and commits in one action
|
|
63
|
+
- **Success message** — Displayed briefly after a successful commit
|
|
64
|
+
- **Recent commits** — Shows only the 3 most recent commits (hash, timestamp, message)
|
|
65
|
+
- **"View in Git Tab"** link — Navigates to the full Git tab for advanced operations
|
|
66
|
+
- **Git init support** — If the project is not a Git repository, shows an init button
|
|
67
|
+
|
|
68
|
+
### 7.8 Diff Viewer
|
|
69
|
+
|
|
70
|
+
- Clicking a file in the Git tab opens a **slide panel** from the right side
|
|
71
|
+
- Shows the diff for the selected file, using side-by-side or inline layout based on screen width
|
|
72
|
+
- **Layout toggle** — A button in the viewer header switches between side-by-side and inline layout. The choice is persisted per user (see §2.7)
|
|
73
|
+
- **Close** — Click X button, click the backdrop, or press Escape
|
|
74
|
+
|
|
75
|
+
### 7.9 Git Repository Initialization
|
|
76
|
+
|
|
77
|
+
If the project directory is not a Git repository:
|
|
78
|
+
|
|
79
|
+
- **Git tab** — Shows an "Initialize Repository" button
|
|
80
|
+
- **Quick Git panel** — Shows a message and init button
|
|
81
|
+
- After initialization, the Git status refreshes automatically
|
|
82
|
+
|
|
83
|
+
### 7.10 AI-Assisted Split Commit
|
|
84
|
+
|
|
85
|
+
A purple dashed chip — **"Split changes into logical commits / Claude handles it in a new session"** — appears in the Git tab below the file list whenever there are uncommitted changes (staged, unstaged, or untracked). The chip is hidden on a clean working tree.
|
|
86
|
+
|
|
87
|
+
Clicking it:
|
|
88
|
+
|
|
89
|
+
1. Creates a fresh chat session
|
|
90
|
+
2. Auto-sends the bundled `%split-commit` snippet, which asks Claude to inspect the working tree (`git status` / `git diff`), group changes into coherent units, and produce one conventional-style commit per group
|
|
91
|
+
3. Navigates you into that session so you can watch the work and approve each commit
|
|
92
|
+
|
|
93
|
+
The chip lives only on the full Git tab — the Quick Git panel keeps its single "Stage All & Commit" action for fast manual commits.
|
|
94
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
## 8. Terminal
|
|
2
|
+
|
|
3
|
+
### 8.1 Web Terminal
|
|
4
|
+
|
|
5
|
+
Full terminal access in your browser:
|
|
6
|
+
|
|
7
|
+
- **Shell emulation** — Real terminal connection to your system shell
|
|
8
|
+
- **Working directory** — Opens in your project directory
|
|
9
|
+
- Supports all shell commands, interactive programs, and TUI apps
|
|
10
|
+
- **Theme** — Automatically matches app theme (dark/light)
|
|
11
|
+
- **Font** — Monospace font (JetBrains Mono, Fira Code, Cascadia Code)
|
|
12
|
+
|
|
13
|
+
### 8.2 Multiple Tabs
|
|
14
|
+
|
|
15
|
+
- Click **"New Terminal"** button (+ icon) in the header to open a new terminal tab
|
|
16
|
+
- **Maximum 5 terminals** per project; button disabled at limit
|
|
17
|
+
- **Tab labels** — Named after shell (e.g., "bash", "zsh"); numbered when multiple share the same shell ("bash 1", "bash 2")
|
|
18
|
+
- **Switch tabs** — Click on a tab label or use **ArrowLeft/ArrowRight** keyboard navigation
|
|
19
|
+
- **Close tabs** — Click the X button on each tab, or press **Delete** to close the active tab
|
|
20
|
+
- **Empty state** — When no terminals exist, a centered prompt with "New Terminal" button is shown
|
|
21
|
+
|
|
22
|
+
### 8.3 Font Size
|
|
23
|
+
|
|
24
|
+
Font size controls are available both via keyboard shortcuts and GUI buttons in the header:
|
|
25
|
+
|
|
26
|
+
- **GUI controls** — Minus (-), current size display (click to reset), Plus (+) buttons in the header
|
|
27
|
+
- `Ctrl+=` / `Ctrl++` — Increase font size
|
|
28
|
+
- `Ctrl+-` — Decrease font size
|
|
29
|
+
- `Ctrl+0` — Reset to default size
|
|
30
|
+
|
|
31
|
+
### 8.4 Connection Status
|
|
32
|
+
|
|
33
|
+
The header shows the current terminal status:
|
|
34
|
+
|
|
35
|
+
- **Connecting** — Spinner with "Connecting..." text
|
|
36
|
+
- **Connected** — Green dot indicator with "Connected" text
|
|
37
|
+
- **Disconnected** — Red dot; "Disconnected" message shown over the terminal
|
|
38
|
+
- **Exited** — Gray dot with exit code displayed
|
|
39
|
+
|
|
40
|
+
### 8.5 Security
|
|
41
|
+
|
|
42
|
+
Terminal access is restricted for safety:
|
|
43
|
+
|
|
44
|
+
- **Local network only** — Blocked when accessed from outside the local/private network. When behind a reverse proxy with `TRUST_PROXY=true`, real client IPs are used for access control
|
|
45
|
+
- **Access denied warning** — When access is denied, a shield icon with explanation is shown
|
|
46
|
+
- **Configurable** — Enable/disable via the `TERMINAL_ENABLED` environment variable (set `false` to disable)
|
|
47
|
+
- **Max sessions** — Server-side limit of 10 (configurable via `MAX_TERMINAL_SESSIONS`); client limits to 5 per project
|
|
48
|
+
- **Session persistence** — Terminal sessions survive browser refreshes and temporary network interruptions
|
|
49
|
+
|
|
50
|
+
### 8.6 Quick Terminal
|
|
51
|
+
|
|
52
|
+
Lightweight terminal access from the quick panel side bar:
|
|
53
|
+
|
|
54
|
+
- **Multi-terminal support** — Same tab management as the full Terminal tab (create, switch, close, max 5)
|
|
55
|
+
- **Font size controls** — Minus, size display (click to reset), Plus buttons in the header
|
|
56
|
+
- **"Open in Tab"** link — Navigate to the full Terminal tab
|
|
57
|
+
- **Tab keyboard navigation** — ArrowLeft/Right to switch, Delete to close
|
|
58
|
+
- **Security warning** — Same access denied warning when terminal access is restricted
|
|
59
|
+
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
## 9. Queue Runner
|
|
2
|
+
|
|
3
|
+
The Queue Runner automates sequences of prompts for batch processing.
|
|
4
|
+
|
|
5
|
+
### 9.1 Queue Editor
|
|
6
|
+
|
|
7
|
+
The editor provides **syntax highlighting**:
|
|
8
|
+
|
|
9
|
+
- **Directives** (`@new`, `@pause`, etc.) — purple
|
|
10
|
+
- **Directive arguments** — teal
|
|
11
|
+
- **Multiline markers** (`@(`, `@)`) — blue
|
|
12
|
+
- **Comments** (`#`) — gray
|
|
13
|
+
- **Regular prompts** — default text color
|
|
14
|
+
|
|
15
|
+
A non-selectable **line-number gutter** runs down the left side, sticky during both vertical and horizontal scroll, so error messages like "parse error at line 47" become directly clickable without manual counting.
|
|
16
|
+
|
|
17
|
+
**Toolbar buttons:**
|
|
18
|
+
- **Run** (Play icon) — Start queue execution; also available via `Ctrl+Enter` / `Cmd+Enter`
|
|
19
|
+
- **Load File** (Upload icon) — Import a `.txt`, `.qlaude-queue`, or similar script file (max 1 MB). Useful for loading shipped sample templates such as the BMad story workflow (see §9.9)
|
|
20
|
+
- **Template** (FileText icon) — Open the template dialog (see §9.9)
|
|
21
|
+
- **Word Wrap** (WrapText icon) — Toggle line wrapping (persisted across sessions)
|
|
22
|
+
|
|
23
|
+
**Editor behavior:**
|
|
24
|
+
- **Validation warnings** displayed above the editor (e.g., missing arguments, unclosed multiline blocks, unknown directives). When more than one warning exists, only the **most recent** is shown with a `(+N)` count badge for the others — keeps the warning area from pushing the editor down on scripts with many issues
|
|
25
|
+
- **Empty state** shows a visual command reference overlay listing all available directives
|
|
26
|
+
- Editor is hidden during queue execution, replaced by the runner panel
|
|
27
|
+
|
|
28
|
+
Each line is one prompt. Special commands start with `@`. Empty lines are ignored.
|
|
29
|
+
|
|
30
|
+
### 9.2 Special Commands
|
|
31
|
+
|
|
32
|
+
| Command | Description |
|
|
33
|
+
|---------|-------------|
|
|
34
|
+
| `@new` | Start a new chat session before the next prompt |
|
|
35
|
+
| `@save <name>` | Save the current session with a name |
|
|
36
|
+
| `@load <name>` | Load a previously saved session |
|
|
37
|
+
| `@pause [reason]` | Pause execution; optional reason text shown in the pause banner |
|
|
38
|
+
| `@model <name>` | Switch Claude model (e.g., `@model opus`) |
|
|
39
|
+
| `@delay <ms>` | Wait before the next prompt (positive integer in ms, e.g., `@delay 5000`) |
|
|
40
|
+
| `@pauseword "<keyword>"` | Set a keyword that auto-pauses the queue when found in Claude's response. Use `@pauseword ""` to clear |
|
|
41
|
+
| `@loop max=N [until="TOKEN"] [on_exceed="pause\|continue"]` | Start a loop block that repeats up to N times (see §9.5) |
|
|
42
|
+
| `@end` | End a loop block |
|
|
43
|
+
| `@label <name>` | Define a forward jump target (see §9.6) |
|
|
44
|
+
| `@jumpif "<token>" <label>` | Jump to `<label>` if the previous prompt response contains `<token>` (see §9.6) |
|
|
45
|
+
| `@(` | Start a multiline prompt (all lines until `@)` are treated as one prompt) |
|
|
46
|
+
| `@)` | End a multiline prompt |
|
|
47
|
+
| `# comment` | Comment line (not sent to Claude) |
|
|
48
|
+
| `\@` | Escape: send literal `@` as a prompt (not treated as directive) |
|
|
49
|
+
|
|
50
|
+
- Missing required arguments (e.g., `@save` without a name) produce a validation warning
|
|
51
|
+
- Unknown directives (e.g., `@unknown`) produce a warning and are sent as regular prompts
|
|
52
|
+
|
|
53
|
+
### 9.3 Multiline Prompts
|
|
54
|
+
|
|
55
|
+
For prompts that span multiple lines, use `@(` and `@)`:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
@(
|
|
59
|
+
Please review this code and check for:
|
|
60
|
+
1. Security vulnerabilities
|
|
61
|
+
2. Performance issues
|
|
62
|
+
3. Code style violations
|
|
63
|
+
@)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
An unclosed multiline block (missing `@)`) produces a warning and is still sent as a single prompt.
|
|
67
|
+
|
|
68
|
+
### 9.4 Pauseword
|
|
69
|
+
|
|
70
|
+
The `@pauseword` directive lets you set a keyword that automatically pauses queue execution when found in Claude's response.
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
@pauseword "DONE"
|
|
74
|
+
Implement the login feature
|
|
75
|
+
Fix any remaining issues
|
|
76
|
+
@pauseword ""
|
|
77
|
+
This prompt runs without pauseword
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
- **Set** — `@pauseword "KEYWORD"` activates the keyword for all subsequent items
|
|
81
|
+
- **Clear** — `@pauseword ""` (empty string) removes the active pauseword
|
|
82
|
+
- When Claude's response contains the keyword, the queue pauses for review
|
|
83
|
+
- The pauseword is snapshotted at the start of each prompt execution
|
|
84
|
+
- Quotes are required around the keyword; mismatched or empty quotes produce a validation warning
|
|
85
|
+
|
|
86
|
+
### 9.5 Loop Blocks
|
|
87
|
+
|
|
88
|
+
The `@loop`/`@end` directives create iterative workflows that repeat a block of prompts.
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
@loop max=5 until="SUCCESS" on_exceed="pause"
|
|
92
|
+
Review the code for issues
|
|
93
|
+
Fix any problems found
|
|
94
|
+
@end
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Parameters:**
|
|
98
|
+
|
|
99
|
+
| Parameter | Required | Description |
|
|
100
|
+
|-----------|----------|-------------|
|
|
101
|
+
| `max=N` | Yes | Maximum number of iterations (positive integer) |
|
|
102
|
+
| `until="TOKEN"` | No | Stop looping when this token appears in Claude's response |
|
|
103
|
+
| `on_exceed="pause\|continue"` | No | Action when max iterations reached without the until token (default: `pause`) |
|
|
104
|
+
|
|
105
|
+
**Behavior:**
|
|
106
|
+
- Each iteration executes all prompts inside the block sequentially
|
|
107
|
+
- If `until` token is detected in a response, the loop exits early
|
|
108
|
+
- When `max` is reached without the `until` token: `pause` halts for review, `continue` moves to the next queue item
|
|
109
|
+
- During execution, the banner shows loop progress (e.g., "Loop 2/5") with inner item tracking
|
|
110
|
+
|
|
111
|
+
### 9.6 Conditional Jump
|
|
112
|
+
|
|
113
|
+
The `@label` and `@jumpif` directives let you skip a range of queue items based on the previous prompt response. They are designed for fast-paths such as "if the QA gate already passed, skip the fix loop".
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
%qa-review {story_num}
|
|
117
|
+
@(
|
|
118
|
+
If the QA gate is PASS, write exactly QA_GATE_PASS as the last line.
|
|
119
|
+
@)
|
|
120
|
+
@jumpif "QA_GATE_PASS" qa_done
|
|
121
|
+
|
|
122
|
+
@loop max=5 until="QA_GATE_PASS" on_exceed="pause"
|
|
123
|
+
%apply-qa-fixes {story_num}
|
|
124
|
+
%qa-review {story_num}
|
|
125
|
+
@(...QA_GATE_PASS check...@)
|
|
126
|
+
@end
|
|
127
|
+
|
|
128
|
+
@label qa_done
|
|
129
|
+
|
|
130
|
+
@new
|
|
131
|
+
%commit-and-done {story_num}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**`@label <name>`** — declares a jump target. The name must start with a letter or underscore and contain only letters, digits, underscore, or hyphen.
|
|
135
|
+
|
|
136
|
+
**`@jumpif "<token>" <label>`** — when reached, looks for `<token>` (substring match) in the response of the immediately preceding prompt. If found, the executor jumps directly to the matching `@label`, skipping every item in between. If not found, execution falls through to the next item.
|
|
137
|
+
|
|
138
|
+
**Rules:**
|
|
139
|
+
- **Forward only** — the target `@label` must appear later in the script than the `@jumpif`. Backward jumps are rejected with a parse warning.
|
|
140
|
+
- **Not allowed inside `@loop`** — both `@label` and `@jumpif` are rejected with a parse warning when nested inside a loop block. Use `until` for loop exit conditions instead.
|
|
141
|
+
- **Quoted token** — the token must be wrapped in double quotes and cannot contain spaces or be empty. Mismatched or missing quotes produce a parse warning.
|
|
142
|
+
- **Unique label names** — duplicate `@label` definitions emit a warning; only the first one is registered.
|
|
143
|
+
- **Missing target at parse time** — if the target label is never defined later in the script, a parse warning is emitted.
|
|
144
|
+
- **Missing target at runtime** — if the script is edited mid-run and the label disappears, the jump is silently skipped and execution falls through.
|
|
145
|
+
|
|
146
|
+
The token search uses a plain substring match against the previous prompt's complete response text, so prefer artificial single-word tokens like `QA_GATE_PASS` over natural phrases.
|
|
147
|
+
|
|
148
|
+
**Runner panel display** — In the queue runner item list, `@label` items show as `Label: <name>` and `@jumpif` items show as `Jump if: "<token>" → <target>`, so the control flow is easy to follow at a glance while the queue runs.
|
|
149
|
+
|
|
150
|
+
**`@new` boundary** — the "previous prompt response" buffer is **not** cleared by `@new`. It only updates when the next prompt actually runs. So a `@jumpif` placed immediately after `@new` (with no prompt in between) will still see the *previous* session's last prompt response. Place a real prompt between `@new` and `@jumpif` if you need a fresh evaluation.
|
|
151
|
+
|
|
152
|
+
**UI display of skipped items** — when a jump fires, the items between the `@jumpif` and its `@label` are not executed, but the runner panel currently shows them with the same green check icon as completed items. This is a cosmetic limitation; the items did not run and their session-link slots remain empty. The progress bar still advances correctly to the post-label position.
|
|
153
|
+
|
|
154
|
+
### 9.7 Running the Queue
|
|
155
|
+
|
|
156
|
+
1. Write your prompts in the queue editor
|
|
157
|
+
2. Click **"Run"** or press `Ctrl+Enter` to start
|
|
158
|
+
3. The editor switches to the **Runner Panel** showing:
|
|
159
|
+
- **Progress bar** — With percentage and count (completed / total)
|
|
160
|
+
- **Color coding** — Blue (running), amber (paused), green (completed), red (error)
|
|
161
|
+
- **Item list** with per-item status icons:
|
|
162
|
+
- Spinner (blue) — currently executing
|
|
163
|
+
- Pause icon (amber) — paused at this item
|
|
164
|
+
- Checkmark (green) — completed (shown with strikethrough text)
|
|
165
|
+
- X circle (red) — error
|
|
166
|
+
- Clock (gray) — pending
|
|
167
|
+
- **Auto-scroll** to the current item
|
|
168
|
+
4. **Controls:**
|
|
169
|
+
- **Pause** — Schedule a pause after the current item finishes. While an item is executing, this sets a "pause reservation" rather than pausing immediately. A **Cancel Pause** button appears to revoke the reservation before the item completes.
|
|
170
|
+
- **Resume** — Shown during paused state; resumes execution from the next pending item
|
|
171
|
+
- **Edit Script** — Shown during paused state; switches to the text editor with remaining items serialized as script text. Edit freely, then click **Apply** to replace pending items or **Cancel** to discard changes.
|
|
172
|
+
- **Abort** — Always available (running or paused); requires confirmation
|
|
173
|
+
- **"Go to Session"** link — Navigate to the active chat session
|
|
174
|
+
5. **Session links** — Completed items show a link icon to navigate to their associated session
|
|
175
|
+
6. **"Back to Editor"** button — Dismiss the runner panel after completion or error
|
|
176
|
+
|
|
177
|
+
**During execution (pending items only):**
|
|
178
|
+
- **Drag-and-drop reorder** — Drag pending items by the grip handle to reorder
|
|
179
|
+
- **Delete** — Click the trash icon to remove a pending item
|
|
180
|
+
- **Add** — Inline input at the bottom to add new items to the queue
|
|
181
|
+
|
|
182
|
+
### 9.8 Session Locking
|
|
183
|
+
|
|
184
|
+
While the queue is running, a **sticky banner** appears at the top of chat sessions:
|
|
185
|
+
|
|
186
|
+
- **Running** (blue) — Spinner + progress (current/total) + current prompt preview (desktop). Inside a `@loop` block, a loop badge shows iteration progress (e.g., "Loop 2/5")
|
|
187
|
+
- **Pause requested** (amber pulse) — Pause scheduled after current item finishes; cancel pause button shown
|
|
188
|
+
- **Waiting for input** (purple pulse) — Queue paused for permission approval or user question; respond in the session to continue
|
|
189
|
+
- **Paused** (amber) — Pause icon + progress; pause reason shown below if provided
|
|
190
|
+
- **Error-paused** (red) — Alert icon + error details
|
|
191
|
+
- **Completed** (green) — Checkmark + total count; dismissible with X button
|
|
192
|
+
- **Error-stopped** (red) — Error message + link to queue editor; dismissible
|
|
193
|
+
|
|
194
|
+
**Expandable item list:**
|
|
195
|
+
- When 2+ items exist, click the chevron to expand a scrollable list of all queue items with status indicators
|
|
196
|
+
- Currently executing items are highlighted; completed items appear with strikethrough text
|
|
197
|
+
|
|
198
|
+
**Banner controls:**
|
|
199
|
+
- **Pause / Cancel Pause / Resume / Abort** buttons directly in the banner (icon-only on mobile, icon+text on desktop)
|
|
200
|
+
- **"Queue Editor"** link — Navigate to the full queue editor (desktop only)
|
|
201
|
+
- **"Go to Session"** link — Navigate to the active queue session
|
|
202
|
+
|
|
203
|
+
**On other sessions:**
|
|
204
|
+
- A banner shows "Queue running in another session" with a link to navigate to it
|
|
205
|
+
- Other sessions remain fully accessible
|
|
206
|
+
|
|
207
|
+
### 9.9 Templates
|
|
208
|
+
|
|
209
|
+
Templates generate queue scripts by combining a template pattern with story selections from your project's PRD.
|
|
210
|
+
|
|
211
|
+
**Template Dialog** (opened via FileText icon in toolbar):
|
|
212
|
+
|
|
213
|
+
The dialog has two main sections:
|
|
214
|
+
|
|
215
|
+
**1. Template Source** — Three tabs:
|
|
216
|
+
- **Input** — Type template text directly in the editor with word wrap toggle; variable hint shown: `{story_num}, {epic_num}, {story_index}, {story_title}, {date}`
|
|
217
|
+
- **File** — Upload a `.txt` or `.qlaude-queue` file (max 100KB) via drag area
|
|
218
|
+
- **Saved** — Browse, select, edit, or delete previously saved templates
|
|
219
|
+
|
|
220
|
+
**2. Story Selection** — Stories extracted from your PRD:
|
|
221
|
+
- Grouped by epic with collapsible sections and checkbox selection
|
|
222
|
+
- **Select All / Deselect All** toggle
|
|
223
|
+
- **"Pause between epics"** checkbox — Inserts `@pause` between different epic groups
|
|
224
|
+
- Each epic header shows selected/total count
|
|
225
|
+
|
|
226
|
+
**Template Variables:**
|
|
227
|
+
|
|
228
|
+
| Variable | Description | Example |
|
|
229
|
+
|----------|-------------|---------|
|
|
230
|
+
| `{story_num}` | Full story number | `3.1` |
|
|
231
|
+
| `{epic_num}` | Epic number | `3` |
|
|
232
|
+
| `{story_index}` | Story index within epic | `1` |
|
|
233
|
+
| `{story_title}` | Story title (empty if not found) | `Login Page UI` |
|
|
234
|
+
| `{date}` | Execution date (YYYY-MM-DD) | `2026-03-18` |
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
@load epic-{epic_num}-base
|
|
238
|
+
Implement Story {story_num}: {story_title}
|
|
239
|
+
@save {date}/epic-{epic_num}/story-{story_index}-done
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
**Live Preview** — Shows the generated script with syntax highlighting below the template and story selection.
|
|
243
|
+
|
|
244
|
+
**Template Management:**
|
|
245
|
+
- **Save** — Save the current template with a name (inline form)
|
|
246
|
+
- **Update** — Overwrite a previously saved template
|
|
247
|
+
- **Delete** — Remove a saved template (with confirmation)
|
|
248
|
+
- Templates are saved per-project
|
|
249
|
+
|
|
250
|
+
**Bundled sample template:**
|
|
251
|
+
|
|
252
|
+
The Hammoc git repository ships a ready-to-use BMad story workflow template at `docs/queue-templates/bmad-story-workflow.qlaude-queue`. It drives a single story through Draft → Validate → Develop → QA Review → Commit and uses `@label` / `@jumpif` (see §9.6) so a first-pass QA PASS skips the fix loop entirely. To use it, download the file from the GitHub repository and import it via the **Load File** toolbar button, or paste its contents into the editor. The `{story_num}` placeholder must be replaced before running.
|
|
253
|
+
|
|
254
|
+
### 9.10 Queue Status Badge
|
|
255
|
+
|
|
256
|
+
A badge on the project card and session list shows queue status:
|
|
257
|
+
|
|
258
|
+
- **Running** — Blue badge with play icon
|
|
259
|
+
- **Paused** — Amber badge with pause icon
|
|
260
|
+
- **Error** — Red badge with alert icon
|
|
261
|
+
- **Idle** — No badge shown
|
|
262
|
+
|