hammoc 1.3.0 → 1.5.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 +422 -403
- package/bin/hammoc.js +0 -6
- package/package.json +100 -93
- package/packages/client/dist/assets/agentExampleHighlight-BgwTm15v.js +1 -0
- package/packages/client/dist/assets/commandTokenHighlight-BljHwnrK.js +1 -0
- package/packages/client/dist/assets/index-CjyjnXB8.css +32 -0
- package/packages/client/dist/assets/index-D3LxqW3f.js +2 -0
- package/packages/client/dist/assets/index-NqJdhlek.js +1498 -0
- package/packages/client/dist/assets/snippetTokenHighlight-DWsaQXX0.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 +24 -24
- package/packages/server/dist/app.js.map +1 -1
- package/packages/server/dist/controllers/boardController.d.ts.map +1 -1
- package/packages/server/dist/controllers/boardController.js +0 -5
- package/packages/server/dist/controllers/boardController.js.map +1 -1
- 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/fileSystemController.d.ts +4 -0
- package/packages/server/dist/controllers/fileSystemController.d.ts.map +1 -1
- package/packages/server/dist/controllers/fileSystemController.js +20 -2
- package/packages/server/dist/controllers/fileSystemController.js.map +1 -1
- package/packages/server/dist/controllers/harnessAgentController.d.ts +28 -0
- package/packages/server/dist/controllers/harnessAgentController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessAgentController.js +339 -0
- package/packages/server/dist/controllers/harnessAgentController.js.map +1 -0
- package/packages/server/dist/controllers/harnessCommandController.d.ts +28 -0
- package/packages/server/dist/controllers/harnessCommandController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessCommandController.js +382 -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 +363 -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 +310 -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 +15 -0
- package/packages/server/dist/controllers/harnessShareScopeController.d.ts.map +1 -0
- package/packages/server/dist/controllers/harnessShareScopeController.js +73 -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/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/serverController.d.ts.map +1 -1
- package/packages/server/dist/controllers/serverController.js +84 -49
- package/packages/server/dist/controllers/serverController.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/websocket.d.ts +16 -0
- package/packages/server/dist/handlers/websocket.d.ts.map +1 -1
- package/packages/server/dist/handlers/websocket.js +221 -8
- package/packages/server/dist/handlers/websocket.js.map +1 -1
- package/packages/server/dist/index.js +66 -0
- package/packages/server/dist/index.js.map +1 -1
- package/packages/server/dist/locales/en/server.json +41 -6
- package/packages/server/dist/locales/es/server.json +3 -5
- package/packages/server/dist/locales/ja/server.json +3 -5
- package/packages/server/dist/locales/ko/server.json +4 -6
- package/packages/server/dist/locales/pt/server.json +3 -5
- package/packages/server/dist/locales/zh-CN/server.json +3 -5
- package/packages/server/dist/routes/account.d.ts +7 -0
- package/packages/server/dist/routes/account.d.ts.map +1 -0
- package/packages/server/dist/routes/account.js +35 -0
- package/packages/server/dist/routes/account.js.map +1 -0
- package/packages/server/dist/routes/debug.d.ts +1 -1
- package/packages/server/dist/routes/debug.d.ts.map +1 -1
- package/packages/server/dist/routes/debug.js +60 -1
- package/packages/server/dist/routes/debug.js.map +1 -1
- 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 +92 -0
- package/packages/server/dist/routes/harness.js.map +1 -0
- package/packages/server/dist/routes/preferences.d.ts.map +1 -1
- package/packages/server/dist/routes/preferences.js +11 -2
- package/packages/server/dist/routes/preferences.js.map +1 -1
- 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/accountInfoService.d.ts +38 -0
- package/packages/server/dist/services/accountInfoService.d.ts.map +1 -0
- package/packages/server/dist/services/accountInfoService.js +118 -0
- package/packages/server/dist/services/accountInfoService.js.map +1 -0
- package/packages/server/dist/services/bmadStatusService.d.ts +6 -2
- package/packages/server/dist/services/bmadStatusService.d.ts.map +1 -1
- package/packages/server/dist/services/bmadStatusService.js +88 -32
- 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 +36 -8
- 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/fileSystemService.d.ts +7 -1
- package/packages/server/dist/services/fileSystemService.d.ts.map +1 -1
- package/packages/server/dist/services/fileSystemService.js +67 -8
- package/packages/server/dist/services/fileSystemService.js.map +1 -1
- package/packages/server/dist/services/fileWatcherService.d.ts +59 -0
- package/packages/server/dist/services/fileWatcherService.d.ts.map +1 -0
- package/packages/server/dist/services/fileWatcherService.js +329 -0
- package/packages/server/dist/services/fileWatcherService.js.map +1 -0
- package/packages/server/dist/services/gitService.d.ts.map +1 -1
- package/packages/server/dist/services/gitService.js +67 -7
- package/packages/server/dist/services/gitService.js.map +1 -1
- package/packages/server/dist/services/harnessAgentService.d.ts +79 -0
- package/packages/server/dist/services/harnessAgentService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessAgentService.js +933 -0
- package/packages/server/dist/services/harnessAgentService.js.map +1 -0
- package/packages/server/dist/services/harnessCommandService.d.ts +60 -0
- package/packages/server/dist/services/harnessCommandService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessCommandService.js +853 -0
- package/packages/server/dist/services/harnessCommandService.js.map +1 -0
- package/packages/server/dist/services/harnessHookService.d.ts +55 -0
- package/packages/server/dist/services/harnessHookService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessHookService.js +1060 -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 +77 -0
- package/packages/server/dist/services/harnessMcpService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessMcpService.js +814 -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 +31 -0
- package/packages/server/dist/services/harnessShareScopeService.d.ts.map +1 -0
- package/packages/server/dist/services/harnessShareScopeService.js +93 -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/historyParser.d.ts +4 -14
- package/packages/server/dist/services/historyParser.d.ts.map +1 -1
- package/packages/server/dist/services/historyParser.js +60 -5
- package/packages/server/dist/services/historyParser.js.map +1 -1
- package/packages/server/dist/services/issueService.d.ts.map +1 -1
- package/packages/server/dist/services/issueService.js +10 -2
- 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/notificationService.d.ts.map +1 -1
- package/packages/server/dist/services/notificationService.js +34 -9
- package/packages/server/dist/services/notificationService.js.map +1 -1
- package/packages/server/dist/services/preferencesService.d.ts.map +1 -1
- package/packages/server/dist/services/preferencesService.js +8 -1
- package/packages/server/dist/services/preferencesService.js.map +1 -1
- package/packages/server/dist/services/projectService.d.ts +5 -0
- package/packages/server/dist/services/projectService.d.ts.map +1 -1
- package/packages/server/dist/services/projectService.js +42 -2
- package/packages/server/dist/services/projectService.js.map +1 -1
- package/packages/server/dist/services/ptyService.d.ts +1 -0
- package/packages/server/dist/services/ptyService.d.ts.map +1 -1
- package/packages/server/dist/services/ptyService.js +36 -5
- package/packages/server/dist/services/ptyService.js.map +1 -1
- package/packages/server/dist/services/queueService.d.ts.map +1 -1
- package/packages/server/dist/services/queueService.js +83 -14
- package/packages/server/dist/services/queueService.js.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.d.ts.map +1 -1
- package/packages/server/dist/services/sessionBufferManager.js +26 -0
- package/packages/server/dist/services/sessionBufferManager.js.map +1 -1
- package/packages/server/dist/services/sessionService.d.ts +4 -3
- package/packages/server/dist/services/sessionService.d.ts.map +1 -1
- package/packages/server/dist/services/sessionService.js +5 -4
- 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/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/services/webPushService.d.ts.map +1 -1
- package/packages/server/dist/services/webPushService.js +8 -1
- package/packages/server/dist/services/webPushService.js.map +1 -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/effortUtils.d.ts +21 -0
- package/packages/server/dist/utils/effortUtils.d.ts.map +1 -0
- package/packages/server/dist/utils/effortUtils.js +36 -0
- package/packages/server/dist/utils/effortUtils.js.map +1 -0
- 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 +105 -0
- package/packages/server/dist/utils/harnessBundleSchema.d.ts.map +1 -0
- package/packages/server/dist/utils/harnessBundleSchema.js +79 -0
- package/packages/server/dist/utils/harnessBundleSchema.js.map +1 -0
- package/packages/server/dist/utils/harnessPaths.d.ts +34 -0
- package/packages/server/dist/utils/harnessPaths.d.ts.map +1 -0
- package/packages/server/dist/utils/harnessPaths.js +124 -0
- package/packages/server/dist/utils/harnessPaths.js.map +1 -0
- package/packages/server/dist/utils/pathUtils.d.ts +3 -2
- package/packages/server/dist/utils/pathUtils.d.ts.map +1 -1
- package/packages/server/dist/utils/pathUtils.js +26 -2
- package/packages/server/dist/utils/pathUtils.js.map +1 -1
- 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 +23 -0
- package/packages/server/resources/internals/harness-files.md +63 -0
- package/packages/server/resources/internals/image-storage.md +43 -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 +74 -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 +193 -0
- package/packages/server/resources/manual/11-bmad-method-integration.md +128 -0
- package/packages/server/resources/manual/12-harness-workbench.md +175 -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 +3 -0
- package/packages/shared/dist/index.d.ts.map +1 -1
- package/packages/shared/dist/index.js +6 -0
- package/packages/shared/dist/index.js.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/fileSystem.d.ts +19 -0
- package/packages/shared/dist/types/fileSystem.d.ts.map +1 -1
- package/packages/shared/dist/types/fileSystem.js +5 -0
- package/packages/shared/dist/types/fileSystem.js.map +1 -1
- package/packages/shared/dist/types/git.d.ts +6 -1
- package/packages/shared/dist/types/git.d.ts.map +1 -1
- package/packages/shared/dist/types/git.js.map +1 -1
- 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 +170 -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/history.d.ts +7 -0
- package/packages/shared/dist/types/history.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.d.ts +4 -1
- package/packages/shared/dist/types/preferences.d.ts.map +1 -1
- package/packages/shared/dist/types/preferences.js +1 -0
- package/packages/shared/dist/types/preferences.js.map +1 -1
- package/packages/shared/dist/types/queue.d.ts +9 -0
- package/packages/shared/dist/types/queue.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.d.ts +42 -1
- package/packages/shared/dist/types/sdk.d.ts.map +1 -1
- package/packages/shared/dist/types/sdk.js +26 -2
- package/packages/shared/dist/types/sdk.js.map +1 -1
- package/packages/shared/dist/types/websocket.d.ts +24 -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/scripts/mock-telegram.mjs +172 -0
- package/scripts/run-integration-test.mjs +362 -0
- package/packages/client/dist/assets/index-Bf0D9oVJ.css +0 -32
- package/packages/client/dist/assets/index-CRmzoqHy.js +0 -2
- package/packages/client/dist/assets/index-CszGQ29O.js +0 -1432
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 28.5: YAML frontmatter round-trip helper.
|
|
3
|
+
*
|
|
4
|
+
* Slash command files (`.claude/commands/**\/*.md`) are markdown documents with
|
|
5
|
+
* an optional `--- ... ---` YAML frontmatter block at the top. To preserve
|
|
6
|
+
* comments / key order / blank lines inside the frontmatter while leaving the
|
|
7
|
+
* markdown body byte-for-byte intact, we round-trip just the frontmatter slice
|
|
8
|
+
* via `yaml`(eemeli) `parseDocument`.
|
|
9
|
+
*
|
|
10
|
+
* Behaviour:
|
|
11
|
+
* - File has no frontmatter + patch is empty (all keys absent) → return source
|
|
12
|
+
* unchanged.
|
|
13
|
+
* - File has no frontmatter + patch contains keys → prepend a
|
|
14
|
+
* fresh `--- ... ---` block.
|
|
15
|
+
* - File has frontmatter + patch is empty → strip the
|
|
16
|
+
* block entirely (matches AC3.a "all four fields absent ⇒ no frontmatter").
|
|
17
|
+
* - File has frontmatter + patch sets keys → mutate keys
|
|
18
|
+
* in place, preserving comments / order / blank lines for untouched keys.
|
|
19
|
+
*
|
|
20
|
+
* The body region (everything after the closing `---`) is taken from the source
|
|
21
|
+
* via raw substring slicing so byte-level equality holds — this is asserted by
|
|
22
|
+
* the unit tests with `result.slice(boundary) === source.slice(boundary)`.
|
|
23
|
+
*/
|
|
24
|
+
import { parseDocument } from 'yaml';
|
|
25
|
+
import { HARNESS_ERRORS } from '@hammoc/shared';
|
|
26
|
+
/** Match a leading `---\n...---\n?` frontmatter block. */
|
|
27
|
+
const FRONTMATTER_RE = /^---\s*\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n)?/;
|
|
28
|
+
function findFrontmatter(source) {
|
|
29
|
+
const match = FRONTMATTER_RE.exec(source);
|
|
30
|
+
if (!match)
|
|
31
|
+
return null;
|
|
32
|
+
const eol = source.includes('\r\n') ? '\r\n' : '\n';
|
|
33
|
+
return { inner: match[1], bodyStart: match[0].length, eol };
|
|
34
|
+
}
|
|
35
|
+
function frontmatterIsEmpty(values) {
|
|
36
|
+
for (const v of Object.values(values)) {
|
|
37
|
+
if (v !== undefined)
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
function throwParseError(cause) {
|
|
43
|
+
const err = new Error(`failed to parse frontmatter: ${cause?.message ?? String(cause)}`);
|
|
44
|
+
err.code = HARNESS_ERRORS.HARNESS_PARSE_ERROR.code;
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Apply key-level patches to the YAML frontmatter block of a markdown file.
|
|
49
|
+
* Body markdown is preserved byte-for-byte. Pass `undefined` to delete a key.
|
|
50
|
+
*
|
|
51
|
+
* - When the resulting frontmatter has no keys left, the entire `--- ... ---`
|
|
52
|
+
* block (including the closing newline) is stripped.
|
|
53
|
+
* - When the source has no frontmatter and `newFrontmatter` carries at least
|
|
54
|
+
* one defined value, a `--- ... ---` block is prepended with a single
|
|
55
|
+
* trailing newline before the body.
|
|
56
|
+
*
|
|
57
|
+
* @throws HARNESS_PARSE_ERROR when the existing frontmatter is malformed YAML.
|
|
58
|
+
*/
|
|
59
|
+
export function applyYamlFrontmatterPatch(source, newFrontmatter) {
|
|
60
|
+
const slice = findFrontmatter(source);
|
|
61
|
+
const allEmpty = frontmatterIsEmpty(newFrontmatter);
|
|
62
|
+
if (!slice) {
|
|
63
|
+
if (allEmpty)
|
|
64
|
+
return source;
|
|
65
|
+
const eol = source.includes('\r\n') ? '\r\n' : '\n';
|
|
66
|
+
let doc;
|
|
67
|
+
try {
|
|
68
|
+
doc = parseDocument('', { keepSourceTokens: true });
|
|
69
|
+
}
|
|
70
|
+
catch (cause) {
|
|
71
|
+
throwParseError(cause);
|
|
72
|
+
}
|
|
73
|
+
if (doc.contents == null) {
|
|
74
|
+
doc.contents = doc.createNode({});
|
|
75
|
+
}
|
|
76
|
+
for (const [key, value] of Object.entries(newFrontmatter)) {
|
|
77
|
+
if (value === undefined)
|
|
78
|
+
continue;
|
|
79
|
+
doc.setIn([key], value);
|
|
80
|
+
}
|
|
81
|
+
const yamlText = doc.toString().replace(/\r?\n$/, '');
|
|
82
|
+
return `---${eol}${yamlText}${eol}---${eol}${source}`;
|
|
83
|
+
}
|
|
84
|
+
let doc;
|
|
85
|
+
try {
|
|
86
|
+
doc = parseDocument(slice.inner, { keepSourceTokens: true });
|
|
87
|
+
if (doc.errors.length > 0) {
|
|
88
|
+
throw doc.errors[0];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (cause) {
|
|
92
|
+
throwParseError(cause);
|
|
93
|
+
}
|
|
94
|
+
if (doc.contents == null) {
|
|
95
|
+
doc.contents = doc.createNode({});
|
|
96
|
+
}
|
|
97
|
+
for (const [key, value] of Object.entries(newFrontmatter)) {
|
|
98
|
+
if (value === undefined) {
|
|
99
|
+
if (doc.hasIn([key]))
|
|
100
|
+
doc.deleteIn([key]);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
doc.setIn([key], value);
|
|
104
|
+
}
|
|
105
|
+
// If the patched document is empty (no top-level keys left), strip the block.
|
|
106
|
+
const docContents = doc.contents;
|
|
107
|
+
const remainingKeys = docContents?.items?.length ?? 0;
|
|
108
|
+
if (remainingKeys === 0) {
|
|
109
|
+
return source.slice(slice.bodyStart);
|
|
110
|
+
}
|
|
111
|
+
const yamlText = doc.toString().replace(/\r?\n$/, '');
|
|
112
|
+
return `---${slice.eol}${yamlText}${slice.eol}---${slice.eol}${source.slice(slice.bodyStart)}`;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Strip the `--- ... ---` block (if any) and return the remaining body.
|
|
116
|
+
* Convenience helper — used by the service to surface the body separately
|
|
117
|
+
* from frontmatter on the read path.
|
|
118
|
+
*/
|
|
119
|
+
export function splitFrontmatterAndBody(source) {
|
|
120
|
+
const slice = findFrontmatter(source);
|
|
121
|
+
if (!slice)
|
|
122
|
+
return { frontmatterRaw: null, body: source };
|
|
123
|
+
return { frontmatterRaw: slice.inner, body: source.slice(slice.bodyStart) };
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=applyYamlFrontmatterPatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyYamlFrontmatterPatch.js","sourceRoot":"","sources":["../../../src/services/utils/applyYamlFrontmatterPatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webPushService.d.ts","sourceRoot":"","sources":["../../src/services/webPushService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAuBD,cAAM,cAAc;IAClB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAA8B;IACjD,yEAAyE;IACzE,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,oBAAoB;IAI5B,qFAAqF;IACrF,OAAO,CAAC,OAAO;IAKf,iFAAiF;IACjF,OAAO,CAAC,YAAY;IAUpB,oEAAoE;YACtD,eAAe;IA8B7B,qEAAqE;YACvD,iBAAiB;IAgB/B,oCAAoC;YACtB,iBAAiB;IAM/B,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,4EAA4E;IACtE,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAK1C,yCAAyC;IACzC,oBAAoB,IAAI,MAAM;IAI9B,qEAAqE;IAC/D,SAAS,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BrH,6CAA6C;IACvC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBrD,oDAAoD;IAC9C,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"webPushService.d.ts","sourceRoot":"","sources":["../../src/services/webPushService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAuBD,cAAM,cAAc;IAClB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,MAAM,CAAS;IACvB,2CAA2C;IAC3C,OAAO,CAAC,WAAW,CAA8B;IACjD,yEAAyE;IACzE,OAAO,CAAC,aAAa,CAAoC;IAEzD,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,oBAAoB;IAI5B,qFAAqF;IACrF,OAAO,CAAC,OAAO;IAKf,iFAAiF;IACjF,OAAO,CAAC,YAAY;IAUpB,oEAAoE;YACtD,eAAe;IA8B7B,qEAAqE;YACvD,iBAAiB;IAgB/B,oCAAoC;YACtB,iBAAiB;IAM/B,oDAAoD;IAC9C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,4EAA4E;IACtE,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAK1C,yCAAyC;IACzC,oBAAoB,IAAI,MAAM;IAI9B,qEAAqE;IAC/D,SAAS,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BrH,6CAA6C;IACvC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBrD,oDAAoD;IAC9C,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiEtD,oCAAoC;IAC9B,QAAQ,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAyBhE;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -185,8 +185,10 @@ class WebPushService {
|
|
|
185
185
|
/** Send a push notification to all subscriptions */
|
|
186
186
|
async sendPush(payload) {
|
|
187
187
|
await this.ensureLoaded();
|
|
188
|
-
if (this.subscriptions.length === 0)
|
|
188
|
+
if (this.subscriptions.length === 0) {
|
|
189
|
+
logger.debug(`[WebPush] sendPush skipped: no subscriptions (tag=${payload.tag ?? 'none'})`);
|
|
189
190
|
return;
|
|
191
|
+
}
|
|
190
192
|
const keys = await this.ensureVapidKeys();
|
|
191
193
|
const vapidSubject = process.env.VAPID_SUBJECT || 'mailto:hammoc@localhost';
|
|
192
194
|
webpush.setVapidDetails(vapidSubject, keys.publicKey, keys.privateKey);
|
|
@@ -196,11 +198,15 @@ class WebPushService {
|
|
|
196
198
|
badge: payload.badge || '/favicon-192.png',
|
|
197
199
|
});
|
|
198
200
|
const expiredEndpoints = [];
|
|
201
|
+
let successCount = 0;
|
|
202
|
+
let failureCount = 0;
|
|
199
203
|
await Promise.allSettled(this.subscriptions.map(async (sub) => {
|
|
200
204
|
try {
|
|
201
205
|
await webpush.sendNotification({ endpoint: sub.endpoint, keys: sub.keys }, body, { TTL: 60 * 60 });
|
|
206
|
+
successCount += 1;
|
|
202
207
|
}
|
|
203
208
|
catch (err) {
|
|
209
|
+
failureCount += 1;
|
|
204
210
|
const statusCode = err.statusCode;
|
|
205
211
|
if (statusCode === 410 || statusCode === 404) {
|
|
206
212
|
// Subscription expired or invalid — mark for removal
|
|
@@ -212,6 +218,7 @@ class WebPushService {
|
|
|
212
218
|
}
|
|
213
219
|
}
|
|
214
220
|
}));
|
|
221
|
+
logger.info(`[WebPush] sendPush tag=${payload.tag ?? 'none'} total=${this.subscriptions.length} success=${successCount} failure=${failureCount}${expiredEndpoints.length > 0 ? ` expired=${expiredEndpoints.length}` : ''}`);
|
|
215
222
|
// Clean up expired subscriptions (serialized, with rollback)
|
|
216
223
|
if (expiredEndpoints.length > 0) {
|
|
217
224
|
await this.enqueue(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webPushService.js","sourceRoot":"","sources":["../../src/services/webPushService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"webPushService.js","sourceRoot":"","sources":["../../src/services/webPushService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Review the current working tree with `git status` and `git diff` (both staged and unstaged). Group the changes into logically coherent units so that each commit represents a single concern (one feature, one fix, one refactor, etc.). For each group:
|
|
2
|
+
|
|
3
|
+
1. Stage only the files (or hunks, via `git add -p`, when a single file mixes concerns) that belong to the group.
|
|
4
|
+
2. Commit with a clear conventional-commit style message that explains *why* the change exists, not just *what* changed.
|
|
5
|
+
3. Move on to the next group.
|
|
6
|
+
|
|
7
|
+
Do not push. Do not amend existing commits. If the changes are already coherent as a single commit, say so and make one commit instead of forcing a split.
|
|
8
|
+
|
|
9
|
+
When you finish, list the resulting commits (hash + subject line) as a summary.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 30.3 (Task 2.2): apply the three `secretsPolicy` modes to a payload
|
|
3
|
+
* before it is written into the bundle.
|
|
4
|
+
*
|
|
5
|
+
* Two operating shapes, mirroring `detectSecretsInValue` / `detectSecretsInText`:
|
|
6
|
+
*
|
|
7
|
+
* 1. `applyPolicyToValue` walks a JSON-like value (mcp config, settings.json
|
|
8
|
+
* hooks block). For `excluded` the matched leaf is deleted from its
|
|
9
|
+
* parent; for `placeholder` it is rewritten as `${ENV_REF_NAME}` using
|
|
10
|
+
* `secretPlaceholderNamer`; for `included-explicit` the value is left
|
|
11
|
+
* untouched.
|
|
12
|
+
*
|
|
13
|
+
* 2. `applyPolicyToText` walks line-oriented text (CLAUDE.md, agent body,
|
|
14
|
+
* command body). For `excluded` the offending line is replaced with the
|
|
15
|
+
* sentinel `<< SECRET REMOVED >>` so line numbers stay stable; for
|
|
16
|
+
* `placeholder` every secret substring on that line is rewritten as
|
|
17
|
+
* `${ENV_REF_NAME}`; for `included-explicit` the text is unchanged.
|
|
18
|
+
*
|
|
19
|
+
* Both return per-call counters that the caller aggregates into the
|
|
20
|
+
* `ImportApplySummary` (well, the export equivalent — same idea: surface to
|
|
21
|
+
* the user how many secrets were affected).
|
|
22
|
+
*/
|
|
23
|
+
import type { BundleItemDomain, SecretsPolicy } from '@hammoc/shared';
|
|
24
|
+
export declare const SECRET_REMOVED_TEXT_PLACEHOLDER = "<< SECRET REMOVED >>";
|
|
25
|
+
export interface ApplyPolicyValueInput {
|
|
26
|
+
policy: SecretsPolicy;
|
|
27
|
+
domain: BundleItemDomain;
|
|
28
|
+
cardName: string;
|
|
29
|
+
hookEvent?: string;
|
|
30
|
+
/** Root-relative path prefix for matched dot-paths (e.g. `mcpServers.context7`). */
|
|
31
|
+
pathPrefix?: string[];
|
|
32
|
+
value: unknown;
|
|
33
|
+
}
|
|
34
|
+
export interface ApplyPolicyValueResult {
|
|
35
|
+
value: unknown;
|
|
36
|
+
removedCount: number;
|
|
37
|
+
replacedCount: number;
|
|
38
|
+
}
|
|
39
|
+
export interface ApplyPolicyTextInput {
|
|
40
|
+
policy: SecretsPolicy;
|
|
41
|
+
domain: BundleItemDomain;
|
|
42
|
+
cardName: string;
|
|
43
|
+
hookEvent?: string;
|
|
44
|
+
text: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ApplyPolicyTextResult {
|
|
47
|
+
text: string;
|
|
48
|
+
removedCount: number;
|
|
49
|
+
replacedCount: number;
|
|
50
|
+
}
|
|
51
|
+
export declare function applyPolicyToText(input: ApplyPolicyTextInput): ApplyPolicyTextResult;
|
|
52
|
+
export declare function applyPolicyToValue(input: ApplyPolicyValueInput): ApplyPolicyValueResult;
|
|
53
|
+
//# sourceMappingURL=applySecretsPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applySecretsPolicy.d.ts","sourceRoot":"","sources":["../../src/utils/applySecretsPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEtE,eAAO,MAAM,+BAA+B,yBAAyB,CAAC;AAEtE,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAwFD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAsCpF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CA4DvF"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 30.3 (Task 2.2): apply the three `secretsPolicy` modes to a payload
|
|
3
|
+
* before it is written into the bundle.
|
|
4
|
+
*
|
|
5
|
+
* Two operating shapes, mirroring `detectSecretsInValue` / `detectSecretsInText`:
|
|
6
|
+
*
|
|
7
|
+
* 1. `applyPolicyToValue` walks a JSON-like value (mcp config, settings.json
|
|
8
|
+
* hooks block). For `excluded` the matched leaf is deleted from its
|
|
9
|
+
* parent; for `placeholder` it is rewritten as `${ENV_REF_NAME}` using
|
|
10
|
+
* `secretPlaceholderNamer`; for `included-explicit` the value is left
|
|
11
|
+
* untouched.
|
|
12
|
+
*
|
|
13
|
+
* 2. `applyPolicyToText` walks line-oriented text (CLAUDE.md, agent body,
|
|
14
|
+
* command body). For `excluded` the offending line is replaced with the
|
|
15
|
+
* sentinel `<< SECRET REMOVED >>` so line numbers stay stable; for
|
|
16
|
+
* `placeholder` every secret substring on that line is rewritten as
|
|
17
|
+
* `${ENV_REF_NAME}`; for `included-explicit` the text is unchanged.
|
|
18
|
+
*
|
|
19
|
+
* Both return per-call counters that the caller aggregates into the
|
|
20
|
+
* `ImportApplySummary` (well, the export equivalent — same idea: surface to
|
|
21
|
+
* the user how many secrets were affected).
|
|
22
|
+
*/
|
|
23
|
+
import { ENV_REF_RE, SECRET_PATTERNS, shannonEntropy, } from './secretHeuristic.js';
|
|
24
|
+
import { namePlaceholder } from './secretPlaceholderNamer.js';
|
|
25
|
+
export const SECRET_REMOVED_TEXT_PLACEHOLDER = '<< SECRET REMOVED >>';
|
|
26
|
+
const BASE64_NON_ALPHA_RE = /[0-9+/=]/;
|
|
27
|
+
function matchPasses(s, pat) {
|
|
28
|
+
if (pat.minEntropy === undefined)
|
|
29
|
+
return true;
|
|
30
|
+
return shannonEntropy(s) >= pat.minEntropy && BASE64_NON_ALPHA_RE.test(s);
|
|
31
|
+
}
|
|
32
|
+
/** Iterate every secret substring inside `text`. */
|
|
33
|
+
function* iterateSecretMatches(text) {
|
|
34
|
+
for (const pat of SECRET_PATTERNS) {
|
|
35
|
+
const re = pat.re.global ? pat.re : new RegExp(pat.re.source, pat.re.flags + 'g');
|
|
36
|
+
re.lastIndex = 0;
|
|
37
|
+
let m;
|
|
38
|
+
while ((m = re.exec(text)) !== null) {
|
|
39
|
+
const raw = m[0];
|
|
40
|
+
if (matchPasses(raw, pat)) {
|
|
41
|
+
yield { start: m.index, end: m.index + raw.length, raw, pat };
|
|
42
|
+
}
|
|
43
|
+
if (m.index === re.lastIndex)
|
|
44
|
+
re.lastIndex += 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function stripEnvRefs(text) {
|
|
49
|
+
return text.replace(ENV_REF_RE, '');
|
|
50
|
+
}
|
|
51
|
+
function containsSecret(text) {
|
|
52
|
+
const stripped = stripEnvRefs(text);
|
|
53
|
+
for (const _ of iterateSecretMatches(stripped)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Replace every secret substring inside `text` with the ENV-ref produced by
|
|
60
|
+
* the namer. Matches on the env-stripped clone first so existing `${FOO}`
|
|
61
|
+
* indirection isn't double-replaced.
|
|
62
|
+
*/
|
|
63
|
+
function replaceSecretsInText(text, makeName) {
|
|
64
|
+
// We need the original text positions but the secret-detection regex must
|
|
65
|
+
// not double-count existing ENV refs. Strategy: collect matches against the
|
|
66
|
+
// env-stripped clone, then translate offsets back to the original by
|
|
67
|
+
// walking through both strings in parallel.
|
|
68
|
+
const stripped = stripEnvRefs(text);
|
|
69
|
+
if (stripped === text) {
|
|
70
|
+
return rebuildText(text, makeName);
|
|
71
|
+
}
|
|
72
|
+
// When there were ENV refs, the safest fallback is to scan the original text
|
|
73
|
+
// directly. Existing `${FOO}` snippets won't match `SECRET_PATTERNS` (none of
|
|
74
|
+
// the regexes accept `{` or `}` in the middle), so direct scanning is fine.
|
|
75
|
+
return rebuildText(text, makeName);
|
|
76
|
+
}
|
|
77
|
+
function rebuildText(text, makeName) {
|
|
78
|
+
const matches = [];
|
|
79
|
+
for (const m of iterateSecretMatches(text)) {
|
|
80
|
+
matches.push({ start: m.start, end: m.end, raw: m.raw });
|
|
81
|
+
}
|
|
82
|
+
if (matches.length === 0)
|
|
83
|
+
return { text, replacedCount: 0 };
|
|
84
|
+
// Sort by start ascending, drop overlaps (keep first).
|
|
85
|
+
matches.sort((a, b) => a.start - b.start);
|
|
86
|
+
const nonOverlapping = [];
|
|
87
|
+
let lastEnd = -1;
|
|
88
|
+
for (const m of matches) {
|
|
89
|
+
if (m.start >= lastEnd) {
|
|
90
|
+
nonOverlapping.push(m);
|
|
91
|
+
lastEnd = m.end;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
let out = '';
|
|
95
|
+
let cursor = 0;
|
|
96
|
+
let replaced = 0;
|
|
97
|
+
for (const m of nonOverlapping) {
|
|
98
|
+
out += text.slice(cursor, m.start);
|
|
99
|
+
out += '${' + makeName(m.raw, replaced) + '}';
|
|
100
|
+
cursor = m.end;
|
|
101
|
+
replaced += 1;
|
|
102
|
+
}
|
|
103
|
+
out += text.slice(cursor);
|
|
104
|
+
return { text: out, replacedCount: replaced };
|
|
105
|
+
}
|
|
106
|
+
export function applyPolicyToText(input) {
|
|
107
|
+
const { policy, domain, cardName, hookEvent, text } = input;
|
|
108
|
+
if (policy === 'included-explicit') {
|
|
109
|
+
return { text, removedCount: 0, replacedCount: 0 };
|
|
110
|
+
}
|
|
111
|
+
if (!text) {
|
|
112
|
+
return { text, removedCount: 0, replacedCount: 0 };
|
|
113
|
+
}
|
|
114
|
+
if (policy === 'excluded') {
|
|
115
|
+
// Replace each offending line with the sentinel so line numbers stay
|
|
116
|
+
// stable for downstream tools that index by line.
|
|
117
|
+
const lines = text.split(/\r?\n/);
|
|
118
|
+
let removed = 0;
|
|
119
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
120
|
+
if (containsSecret(lines[i])) {
|
|
121
|
+
lines[i] = SECRET_REMOVED_TEXT_PLACEHOLDER;
|
|
122
|
+
removed += 1;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return { text: lines.join('\n'), removedCount: removed, replacedCount: 0 };
|
|
126
|
+
}
|
|
127
|
+
// placeholder
|
|
128
|
+
const seenCounts = new Map();
|
|
129
|
+
const result = replaceSecretsInText(text, (_raw, idx) => {
|
|
130
|
+
const base = {
|
|
131
|
+
domain,
|
|
132
|
+
fieldPath: `body:${idx}`,
|
|
133
|
+
cardName,
|
|
134
|
+
hookEvent,
|
|
135
|
+
};
|
|
136
|
+
const baseName = namePlaceholder(base);
|
|
137
|
+
const count = seenCounts.get(baseName) ?? 0;
|
|
138
|
+
seenCounts.set(baseName, count + 1);
|
|
139
|
+
return count === 0 ? baseName : `${baseName}_${count + 1}`;
|
|
140
|
+
});
|
|
141
|
+
return { text: result.text, removedCount: 0, replacedCount: result.replacedCount };
|
|
142
|
+
}
|
|
143
|
+
export function applyPolicyToValue(input) {
|
|
144
|
+
const { policy, domain, cardName, hookEvent, value } = input;
|
|
145
|
+
if (policy === 'included-explicit') {
|
|
146
|
+
return { value, removedCount: 0, replacedCount: 0 };
|
|
147
|
+
}
|
|
148
|
+
const pathPrefix = input.pathPrefix ?? [];
|
|
149
|
+
let removedCount = 0;
|
|
150
|
+
let replacedCount = 0;
|
|
151
|
+
const seenCounts = new Map();
|
|
152
|
+
const transform = (v, p) => {
|
|
153
|
+
if (typeof v === 'string') {
|
|
154
|
+
const stripped = stripEnvRefs(v);
|
|
155
|
+
if (!stripped || !containsSecret(stripped)) {
|
|
156
|
+
return v;
|
|
157
|
+
}
|
|
158
|
+
if (policy === 'excluded') {
|
|
159
|
+
removedCount += 1;
|
|
160
|
+
// Return a sentinel that the caller (e.g. the mcp/hook config walker)
|
|
161
|
+
// will interpret as "delete this leaf" — strings, by themselves, can't
|
|
162
|
+
// disappear from their parent. We use the literal undefined sentinel
|
|
163
|
+
// and let the array/object handlers filter.
|
|
164
|
+
return SECRET_REMOVED_SENTINEL;
|
|
165
|
+
}
|
|
166
|
+
// placeholder
|
|
167
|
+
const baseName = namePlaceholder({
|
|
168
|
+
domain,
|
|
169
|
+
cardName,
|
|
170
|
+
hookEvent,
|
|
171
|
+
fieldPath: p.join('.'),
|
|
172
|
+
});
|
|
173
|
+
const count = seenCounts.get(baseName) ?? 0;
|
|
174
|
+
seenCounts.set(baseName, count + 1);
|
|
175
|
+
const name = count === 0 ? baseName : `${baseName}_${count + 1}`;
|
|
176
|
+
replacedCount += 1;
|
|
177
|
+
return '${' + name + '}';
|
|
178
|
+
}
|
|
179
|
+
if (Array.isArray(v)) {
|
|
180
|
+
return v
|
|
181
|
+
.map((item, i) => transform(item, [...p, String(i)]))
|
|
182
|
+
.filter((item) => item !== SECRET_REMOVED_SENTINEL);
|
|
183
|
+
}
|
|
184
|
+
if (v && typeof v === 'object') {
|
|
185
|
+
const out = {};
|
|
186
|
+
for (const [k, child] of Object.entries(v)) {
|
|
187
|
+
const next = transform(child, [...p, k]);
|
|
188
|
+
if (next !== SECRET_REMOVED_SENTINEL)
|
|
189
|
+
out[k] = next;
|
|
190
|
+
}
|
|
191
|
+
return out;
|
|
192
|
+
}
|
|
193
|
+
return v;
|
|
194
|
+
};
|
|
195
|
+
const result = transform(value, pathPrefix);
|
|
196
|
+
// Top-level scalar might be the sentinel — flatten to undefined for callers.
|
|
197
|
+
return {
|
|
198
|
+
value: result === SECRET_REMOVED_SENTINEL ? undefined : result,
|
|
199
|
+
removedCount,
|
|
200
|
+
replacedCount,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
const SECRET_REMOVED_SENTINEL = Symbol('secret-removed');
|
|
204
|
+
//# sourceMappingURL=applySecretsPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applySecretsPolicy.js","sourceRoot":"","sources":["../../src/utils/applySecretsPolicy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 30.1 (Task 6.2): server-side guard that escalates a secret detection
|
|
3
|
+
* to a hard `HARNESS_SECRET_ON_SHARED` block when the target file is tracked
|
|
4
|
+
* by git (`shared` verdict from `harnessShareScopeService`).
|
|
5
|
+
*
|
|
6
|
+
* Sub-spike 6.2.0 decision: option (b) — distributed at the four domain
|
|
7
|
+
* services (agent / command / hook / mcp). Rationale:
|
|
8
|
+
* - `harnessService.write` IS a single common call site, so option (a)
|
|
9
|
+
* would also work for the raw write path. But AC4.d carves out
|
|
10
|
+
* domain-specific scopes (settings.json values, hook command/prompt
|
|
11
|
+
* fields, agent frontmatter) that the single point cannot meaningfully
|
|
12
|
+
* filter without re-parsing the file. Distributing the helper keeps each
|
|
13
|
+
* domain's existing per-field detection in place and just adds the
|
|
14
|
+
* "shared → block" escalation on top.
|
|
15
|
+
*
|
|
16
|
+
* The helper performs the cheap path-classification round trip
|
|
17
|
+
* (`harnessShareScopeService.evaluate` is a single `.gitignore` load + one
|
|
18
|
+
* `isIgnored()` call). User-scope writes are no-ops (no `.gitignore`
|
|
19
|
+
* involved).
|
|
20
|
+
*/
|
|
21
|
+
import { type HarnessScope } from '@hammoc/shared';
|
|
22
|
+
export interface AssertNoSecretOnSharedInput {
|
|
23
|
+
scope: HarnessScope;
|
|
24
|
+
projectSlug?: string;
|
|
25
|
+
/** Project-relative POSIX path of the file being written (e.g. `.claude/agents/dev.md`). */
|
|
26
|
+
relativePath: string;
|
|
27
|
+
/**
|
|
28
|
+
* Pre-computed detection result from the calling service. The helper does
|
|
29
|
+
* not re-run secret detection because each service knows which fields are
|
|
30
|
+
* in-scope per AC4.d.
|
|
31
|
+
*/
|
|
32
|
+
secretDetected: boolean;
|
|
33
|
+
/** Optional secret locations (line numbers / dot-paths) to surface in the error. */
|
|
34
|
+
detectedAt?: {
|
|
35
|
+
lines?: number[];
|
|
36
|
+
paths?: string[];
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export declare function assertNoSecretOnShared(input: AssertNoSecretOnSharedInput): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=assertNoSecretOnShared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertNoSecretOnShared.d.ts","sourceRoot":"","sources":["../../src/utils/assertNoSecretOnShared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnE,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,EAAE,OAAO,CAAC;IACxB,oFAAoF;IACpF,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACrD;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Story 30.1 (Task 6.2): server-side guard that escalates a secret detection
|
|
3
|
+
* to a hard `HARNESS_SECRET_ON_SHARED` block when the target file is tracked
|
|
4
|
+
* by git (`shared` verdict from `harnessShareScopeService`).
|
|
5
|
+
*
|
|
6
|
+
* Sub-spike 6.2.0 decision: option (b) — distributed at the four domain
|
|
7
|
+
* services (agent / command / hook / mcp). Rationale:
|
|
8
|
+
* - `harnessService.write` IS a single common call site, so option (a)
|
|
9
|
+
* would also work for the raw write path. But AC4.d carves out
|
|
10
|
+
* domain-specific scopes (settings.json values, hook command/prompt
|
|
11
|
+
* fields, agent frontmatter) that the single point cannot meaningfully
|
|
12
|
+
* filter without re-parsing the file. Distributing the helper keeps each
|
|
13
|
+
* domain's existing per-field detection in place and just adds the
|
|
14
|
+
* "shared → block" escalation on top.
|
|
15
|
+
*
|
|
16
|
+
* The helper performs the cheap path-classification round trip
|
|
17
|
+
* (`harnessShareScopeService.evaluate` is a single `.gitignore` load + one
|
|
18
|
+
* `isIgnored()` call). User-scope writes are no-ops (no `.gitignore`
|
|
19
|
+
* involved).
|
|
20
|
+
*/
|
|
21
|
+
import { HARNESS_ERRORS } from '@hammoc/shared';
|
|
22
|
+
import { harnessShareScopeService } from '../services/harnessShareScopeService.js';
|
|
23
|
+
export async function assertNoSecretOnShared(input) {
|
|
24
|
+
if (!input.secretDetected)
|
|
25
|
+
return;
|
|
26
|
+
// User scope (`~/.claude`) is not git-tracked — `.gitignore` does not apply.
|
|
27
|
+
if (input.scope !== 'project' || !input.projectSlug)
|
|
28
|
+
return;
|
|
29
|
+
const result = await harnessShareScopeService.evaluate({
|
|
30
|
+
projectSlug: input.projectSlug,
|
|
31
|
+
relativePaths: [input.relativePath],
|
|
32
|
+
});
|
|
33
|
+
const verdict = result.cards[input.relativePath];
|
|
34
|
+
// Only `shared` triggers the hard block. `local` / `fullyIgnored` keep
|
|
35
|
+
// the existing per-service acknowledgement flow.
|
|
36
|
+
if (verdict !== 'shared')
|
|
37
|
+
return;
|
|
38
|
+
const err = new Error('plaintext secret detected on a git-tracked file');
|
|
39
|
+
err.code = HARNESS_ERRORS.HARNESS_SECRET_ON_SHARED.code;
|
|
40
|
+
err.relativePath = input.relativePath;
|
|
41
|
+
if (input.detectedAt?.lines)
|
|
42
|
+
err.lines = input.detectedAt.lines;
|
|
43
|
+
if (input.detectedAt?.paths)
|
|
44
|
+
err.paths = input.detectedAt.paths;
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=assertNoSecretOnShared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertNoSecretOnShared.js","sourceRoot":"","sources":["../../src/utils/assertNoSecretOnShared.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAqB,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AAiBnF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAkC;IAElC,IAAI,CAAC,KAAK,CAAC,cAAc;QAAE,OAAO;IAClC,6EAA6E;IAC7E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO;IAE5D,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,QAAQ,CAAC;QACrD,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;KACpC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAEjD,uEAAuE;IACvE,iDAAiD;IACjD,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO;IAEjC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,iDAAiD,CACN,CAAC;IAClE,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,wBAAwB,CAAC,IAAI,CAAC;IACxD,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACtC,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;IAChE,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK;QAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;IAChE,MAAM,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effort Utilities
|
|
3
|
+
* Shared resolution of ThinkingEffort levels against model capabilities.
|
|
4
|
+
*/
|
|
5
|
+
import type { ThinkingEffort } from '@hammoc/shared';
|
|
6
|
+
/**
|
|
7
|
+
* Clamp unsupported effort levels:
|
|
8
|
+
* · 'max' → 'high' unless model supports it (Opus 4.6+, Sonnet 4.6)
|
|
9
|
+
* · 'xhigh' → 'high' unless model supports it (Opus 4.7 only)
|
|
10
|
+
* Other levels pass through unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export declare function clampEffortForModel(effort: ThinkingEffort | undefined, model: string | undefined): ThinkingEffort | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Whether the model supports Anthropic's adaptive thinking mode
|
|
15
|
+
* (`thinking: { type: 'adaptive' }`). Opus 4.7 requires adaptive;
|
|
16
|
+
* Opus 4.6 and Sonnet 4.6 accept adaptive as the recommended mode.
|
|
17
|
+
* Older models (Sonnet 4.5, Opus 4.5, Haiku, Sonnet 4, etc.) do NOT
|
|
18
|
+
* support adaptive and must stay on the legacy `maxThinkingTokens` path.
|
|
19
|
+
*/
|
|
20
|
+
export declare function supportsAdaptiveThinking(model: string | undefined): boolean;
|
|
21
|
+
//# sourceMappingURL=effortUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effortUtils.d.ts","sourceRoot":"","sources":["../../src/utils/effortUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAU7H;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAM3E"}
|