@qduc/term2 0.1.3 → 0.1.5
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/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +5 -0
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -2
- package/dist/app.js.map +1 -1
- package/dist/app.model-command-feedback.test.d.ts +2 -0
- package/dist/app.model-command-feedback.test.d.ts.map +1 -0
- package/dist/app.model-command-feedback.test.js +19 -0
- package/dist/app.model-command-feedback.test.js.map +1 -0
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/components/BottomArea.d.ts +2 -0
- package/dist/components/BottomArea.d.ts.map +1 -1
- package/dist/components/BottomArea.js +2 -2
- package/dist/components/BottomArea.js.map +1 -1
- package/dist/components/ChatMessage.js +1 -1
- package/dist/components/ChatMessage.js.map +1 -1
- package/dist/components/InputBox.js +1 -1
- package/dist/components/InputBox.js.map +1 -1
- package/dist/components/MarkdownRenderer.js +1 -1
- package/dist/components/MarkdownRenderer.js.map +1 -1
- package/dist/components/MentorMode.test.d.ts +2 -0
- package/dist/components/MentorMode.test.d.ts.map +1 -0
- package/dist/components/MentorMode.test.js.map +1 -0
- package/dist/components/ModelSelectionMenu.d.ts.map +1 -1
- package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts +2 -0
- package/dist/components/ModelSelectionMenu.error-tabs.test.d.ts.map +1 -0
- package/dist/components/ModelSelectionMenu.error-tabs.test.js +18 -0
- package/dist/components/ModelSelectionMenu.error-tabs.test.js.map +1 -0
- package/dist/components/ModelSelectionMenu.js +24 -15
- package/dist/components/ModelSelectionMenu.js.map +1 -1
- package/dist/components/SettingsSelectionMenu.js +1 -1
- package/dist/components/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/SlashCommandMenu.js +2 -2
- package/dist/components/SlashCommandMenu.js.map +1 -1
- package/dist/components/StatusBar.d.ts +2 -0
- package/dist/components/StatusBar.d.ts.map +1 -1
- package/dist/components/StatusBar.js +44 -39
- package/dist/components/StatusBar.js.map +1 -1
- package/dist/components/StatusBar.test.d.ts +2 -0
- package/dist/components/StatusBar.test.d.ts.map +1 -0
- package/dist/components/StatusBar.test.js +19 -0
- package/dist/components/StatusBar.test.js.map +1 -0
- package/dist/components/TextInput.d.ts.map +1 -1
- package/dist/components/TextInput.js +1 -2
- package/dist/components/TextInput.js.map +1 -1
- package/dist/components/TextInput.test.js.map +1 -1
- package/dist/debug-schema.d.ts +2 -0
- package/dist/debug-schema.d.ts.map +1 -0
- package/dist/debug-schema.js +22 -0
- package/dist/debug-schema.js.map +1 -0
- package/dist/hooks/use-conversation.d.ts +2 -0
- package/dist/hooks/use-conversation.d.ts.map +1 -1
- package/dist/hooks/use-conversation.js +79 -493
- package/dist/hooks/use-conversation.js.map +1 -1
- package/dist/hooks/use-model-selection.d.ts.map +1 -1
- package/dist/hooks/use-model-selection.js +1 -25
- package/dist/hooks/use-model-selection.js.map +1 -1
- package/dist/hooks/use-model-selection.test.d.ts +2 -0
- package/dist/hooks/use-model-selection.test.d.ts.map +1 -0
- package/dist/hooks/use-model-selection.test.js +28 -0
- package/dist/hooks/use-model-selection.test.js.map +1 -0
- package/dist/hooks/use-path-completion.test.d.ts +2 -0
- package/dist/hooks/use-path-completion.test.d.ts.map +1 -0
- package/dist/hooks/use-path-completion.test.js +29 -0
- package/dist/hooks/use-path-completion.test.js.map +1 -0
- package/dist/hooks/use-settings-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-completion.js +2 -0
- package/dist/hooks/use-settings-completion.js.map +1 -1
- package/dist/hooks/use-settings-value-completion.d.ts.map +1 -1
- package/dist/hooks/use-settings-value-completion.js +1 -0
- package/dist/hooks/use-settings-value-completion.js.map +1 -1
- package/dist/lib/editor-impl.test.d.ts +2 -0
- package/dist/lib/editor-impl.test.d.ts.map +1 -0
- package/dist/lib/editor-impl.test.js +188 -0
- package/dist/lib/editor-impl.test.js.map +1 -0
- package/dist/lib/openai-agent-client.d.ts.map +1 -1
- package/dist/lib/openai-agent-client.js +12 -4
- package/dist/lib/openai-agent-client.js.map +1 -1
- package/dist/lib/openai-agent-client.public-methods.test.d.ts +2 -0
- package/dist/lib/openai-agent-client.public-methods.test.d.ts.map +1 -0
- package/dist/lib/openai-agent-client.public-methods.test.js +188 -0
- package/dist/lib/openai-agent-client.public-methods.test.js.map +1 -0
- package/dist/prompts/default.md.bak +77 -0
- package/dist/prompts/simple-mentor.md +0 -8
- package/dist/providers/github-copilot/converters.d.ts +45 -0
- package/dist/providers/github-copilot/converters.d.ts.map +1 -0
- package/dist/providers/github-copilot/converters.js +118 -0
- package/dist/providers/github-copilot/converters.js.map +1 -0
- package/dist/providers/github-copilot/converters.test.d.ts +2 -0
- package/dist/providers/github-copilot/converters.test.d.ts.map +1 -0
- package/dist/providers/github-copilot/converters.test.js +162 -0
- package/dist/providers/github-copilot/converters.test.js.map +1 -0
- package/dist/providers/github-copilot/github-copilot.provider.d.ts +2 -0
- package/dist/providers/github-copilot/github-copilot.provider.d.ts.map +1 -0
- package/dist/providers/github-copilot/github-copilot.provider.js +75 -0
- package/dist/providers/github-copilot/github-copilot.provider.js.map +1 -0
- package/dist/providers/github-copilot/github-copilot.provider.test.d.ts +2 -0
- package/dist/providers/github-copilot/github-copilot.provider.test.d.ts.map +1 -0
- package/dist/providers/github-copilot/github-copilot.provider.test.js +26 -0
- package/dist/providers/github-copilot/github-copilot.provider.test.js.map +1 -0
- package/dist/providers/github-copilot/index.d.ts +4 -0
- package/dist/providers/github-copilot/index.d.ts.map +1 -0
- package/dist/providers/github-copilot/index.js +4 -0
- package/dist/providers/github-copilot/index.js.map +1 -0
- package/dist/providers/github-copilot/model-direct.d.ts +34 -0
- package/dist/providers/github-copilot/model-direct.d.ts.map +1 -0
- package/dist/providers/github-copilot/model-direct.js +443 -0
- package/dist/providers/github-copilot/model-direct.js.map +1 -0
- package/dist/providers/github-copilot/model.d.ts +24 -0
- package/dist/providers/github-copilot/model.d.ts.map +1 -0
- package/dist/providers/github-copilot/model.delta.test.d.ts +2 -0
- package/dist/providers/github-copilot/model.delta.test.d.ts.map +1 -0
- package/dist/providers/github-copilot/model.delta.test.js +15 -0
- package/dist/providers/github-copilot/model.delta.test.js.map +1 -0
- package/dist/providers/github-copilot/model.js +581 -0
- package/dist/providers/github-copilot/model.js.map +1 -0
- package/dist/providers/github-copilot/provider.d.ts +20 -0
- package/dist/providers/github-copilot/provider.d.ts.map +1 -0
- package/dist/providers/github-copilot/provider.js +30 -0
- package/dist/providers/github-copilot/provider.js.map +1 -0
- package/dist/providers/github-copilot/provider.test.d.ts +2 -0
- package/dist/providers/github-copilot/provider.test.d.ts.map +1 -0
- package/dist/providers/github-copilot/provider.test.js +52 -0
- package/dist/providers/github-copilot/provider.test.js.map +1 -0
- package/dist/providers/github-copilot/utils.d.ts +20 -0
- package/dist/providers/github-copilot/utils.d.ts.map +1 -0
- package/dist/providers/github-copilot/utils.js +142 -0
- package/dist/providers/github-copilot/utils.js.map +1 -0
- package/dist/providers/github-copilot/utils.test.d.ts +2 -0
- package/dist/providers/github-copilot/utils.test.d.ts.map +1 -0
- package/dist/providers/github-copilot/utils.test.js +21 -0
- package/dist/providers/github-copilot/utils.test.js.map +1 -0
- package/dist/providers/openai-compatible/reasoning-content.test.js.map +1 -1
- package/dist/providers/openrouter/converters.d.ts.map +1 -1
- package/dist/providers/openrouter/converters.js +64 -46
- package/dist/providers/openrouter/converters.js.map +1 -1
- package/dist/providers/openrouter/converters.test.js +13 -12
- package/dist/providers/openrouter/converters.test.js.map +1 -1
- package/dist/providers/openrouter/merge-messages.test.d.ts +2 -0
- package/dist/providers/openrouter/merge-messages.test.d.ts.map +1 -0
- package/dist/providers/openrouter/merge-messages.test.js +83 -0
- package/dist/providers/openrouter/merge-messages.test.js.map +1 -0
- package/dist/providers/openrouter/reasoning-content.test.js.map +1 -1
- package/dist/providers/openrouter.history.test.d.ts +2 -0
- package/dist/providers/openrouter.history.test.d.ts.map +1 -0
- package/dist/providers/openrouter.history.test.js +533 -0
- package/dist/providers/openrouter.history.test.js.map +1 -0
- package/dist/providers/openrouter.test.js.map +1 -1
- package/dist/reproduce_issue.test.d.ts +2 -0
- package/dist/reproduce_issue.test.d.ts.map +1 -0
- package/dist/reproduce_issue.test.js +31 -0
- package/dist/reproduce_issue.test.js.map +1 -0
- package/dist/services/conversation-events.d.ts +3 -0
- package/dist/services/conversation-events.d.ts.map +1 -1
- package/dist/services/conversation-service.test.js +183 -149
- package/dist/services/conversation-session.d.ts +2 -0
- package/dist/services/conversation-session.d.ts.map +1 -1
- package/dist/services/conversation-session.js +151 -28
- package/dist/services/conversation-session.js.map +1 -1
- package/dist/services/conversation-session.usage.test.d.ts +2 -0
- package/dist/services/conversation-session.usage.test.d.ts.map +1 -0
- package/dist/services/conversation-session.usage.test.js +59 -0
- package/dist/services/conversation-session.usage.test.js.map +1 -0
- package/dist/services/settings-service.d.ts +9 -3
- package/dist/services/settings-service.d.ts.map +1 -1
- package/dist/services/settings-service.js +14 -0
- package/dist/services/settings-service.js.map +1 -1
- package/dist/test-search-tool.d.ts +2 -0
- package/dist/test-search-tool.d.ts.map +1 -0
- package/dist/test-search-tool.js +36 -0
- package/dist/test-search-tool.js.map +1 -0
- package/dist/tools/edit-healing.d.ts +24 -0
- package/dist/tools/edit-healing.d.ts.map +1 -0
- package/dist/tools/edit-healing.js +230 -0
- package/dist/tools/edit-healing.js.map +1 -0
- package/dist/tools/edit-healing.test.d.ts +2 -0
- package/dist/tools/edit-healing.test.d.ts.map +1 -0
- package/dist/tools/edit-healing.test.js +34 -0
- package/dist/tools/edit-healing.test.js.map +1 -0
- package/dist/tools/find-files.d.ts +1 -0
- package/dist/tools/find-files.d.ts.map +1 -1
- package/dist/tools/find-files.js +92 -8
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/find-files.test.js +45 -0
- package/dist/tools/find-files.test.js.map +1 -1
- package/dist/tools/search-replace.d.ts +2 -0
- package/dist/tools/search-replace.d.ts.map +1 -1
- package/dist/tools/search-replace.js +207 -23
- package/dist/tools/search-replace.js.map +1 -1
- package/dist/tools/search-replace.test.js +223 -2
- package/dist/tools/search-replace.test.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +20 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +87 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-fetch.test.d.ts +2 -0
- package/dist/tools/web-fetch.test.d.ts.map +1 -0
- package/dist/tools/web-fetch.test.js +94 -0
- package/dist/tools/web-fetch.test.js.map +1 -0
- package/dist/utils/command-safety/index.d.ts +2 -2
- package/dist/utils/command-safety/index.d.ts.map +1 -1
- package/dist/utils/command-safety/index.js +7 -6
- package/dist/utils/command-safety/index.js.map +1 -1
- package/dist/utils/command-safety.d.ts.map +1 -1
- package/dist/utils/command-safety.find.test.js +19 -21
- package/dist/utils/command-safety.find.test.js.map +1 -1
- package/dist/utils/command-safety.js +364 -10
- package/dist/utils/command-safety.js.map +1 -1
- package/dist/utils/conversation-event-handler.d.ts +63 -0
- package/dist/utils/conversation-event-handler.d.ts.map +1 -0
- package/dist/utils/conversation-event-handler.js +132 -0
- package/dist/utils/conversation-event-handler.js.map +1 -0
- package/dist/utils/conversation-event-handler.test.d.ts +2 -0
- package/dist/utils/conversation-event-handler.test.d.ts.map +1 -0
- package/dist/utils/conversation-event-handler.test.js +281 -0
- package/dist/utils/conversation-event-handler.test.js.map +1 -0
- package/dist/utils/conversation-utils.d.ts +41 -0
- package/dist/utils/conversation-utils.d.ts.map +1 -0
- package/dist/utils/conversation-utils.js +109 -0
- package/dist/utils/conversation-utils.js.map +1 -0
- package/dist/utils/conversation-utils.test.d.ts +2 -0
- package/dist/utils/conversation-utils.test.d.ts.map +1 -0
- package/dist/utils/conversation-utils.test.js +190 -0
- package/dist/utils/conversation-utils.test.js.map +1 -0
- package/dist/utils/extract-command-messages.repro.test.d.ts +2 -0
- package/dist/utils/extract-command-messages.repro.test.d.ts.map +1 -0
- package/dist/utils/extract-command-messages.repro.test.js +31 -0
- package/dist/utils/extract-command-messages.repro.test.js.map +1 -0
- package/dist/utils/extract-command-messages.test.js +51 -58
- package/dist/utils/ink-render-options.d.ts +9 -0
- package/dist/utils/ink-render-options.d.ts.map +1 -0
- package/dist/utils/ink-render-options.js +8 -0
- package/dist/utils/ink-render-options.js.map +1 -0
- package/dist/utils/message-utils.d.ts +17 -0
- package/dist/utils/message-utils.d.ts.map +1 -0
- package/dist/utils/message-utils.js +52 -0
- package/dist/utils/message-utils.js.map +1 -0
- package/dist/utils/message-utils.test.d.ts +2 -0
- package/dist/utils/message-utils.test.d.ts.map +1 -0
- package/dist/utils/message-utils.test.js +48 -0
- package/dist/utils/message-utils.test.js.map +1 -0
- package/dist/utils/token-usage.d.ts +16 -0
- package/dist/utils/token-usage.d.ts.map +1 -0
- package/dist/utils/token-usage.js +110 -0
- package/dist/utils/token-usage.js.map +1 -0
- package/dist/utils/token-usage.test.d.ts +2 -0
- package/dist/utils/token-usage.test.d.ts.map +1 -0
- package/dist/utils/token-usage.test.js +38 -0
- package/dist/utils/token-usage.test.js.map +1 -0
- package/dist/utils/trim-tool-output.d.ts +2 -0
- package/dist/utils/trim-tool-output.d.ts.map +1 -0
- package/dist/utils/trim-tool-output.js +52 -0
- package/dist/utils/trim-tool-output.js.map +1 -0
- package/package.json +10 -3
- package/readme.md +22 -1
- package/dist/agent.lite-mode.test.d.ts +0 -2
- package/dist/agent.lite-mode.test.d.ts.map +0 -1
- package/dist/agent.lite-mode.test.js +0 -39
- package/dist/agent.lite-mode.test.js.map +0 -1
- package/dist/debug_ask_mentor.d.ts +0 -2
- package/dist/debug_ask_mentor.d.ts.map +0 -1
- package/dist/debug_ask_mentor.js +0 -73
- package/dist/debug_ask_mentor.js.map +0 -1
- package/dist/modes/companion/command-index.d.ts +0 -26
- package/dist/modes/companion/command-index.d.ts.map +0 -1
- package/dist/modes/companion/command-index.js +0 -50
- package/dist/modes/companion/command-index.js.map +0 -1
- package/dist/modes/companion/command-index.test.d.ts +0 -2
- package/dist/modes/companion/command-index.test.d.ts.map +0 -1
- package/dist/modes/companion/command-index.test.js +0 -86
- package/dist/modes/companion/command-index.test.js.map +0 -1
- package/dist/modes/companion/companion-app.d.ts +0 -12
- package/dist/modes/companion/companion-app.d.ts.map +0 -1
- package/dist/modes/companion/companion-app.js +0 -297
- package/dist/modes/companion/companion-app.js.map +0 -1
- package/dist/modes/companion/companion-session.d.ts +0 -63
- package/dist/modes/companion/companion-session.d.ts.map +0 -1
- package/dist/modes/companion/companion-session.js +0 -146
- package/dist/modes/companion/companion-session.js.map +0 -1
- package/dist/modes/companion/companion-session.test.d.ts +0 -2
- package/dist/modes/companion/companion-session.test.d.ts.map +0 -1
- package/dist/modes/companion/companion-session.test.js +0 -28
- package/dist/modes/companion/companion-session.test.js.map +0 -1
- package/dist/modes/companion/components/status-bar.d.ts +0 -13
- package/dist/modes/companion/components/status-bar.d.ts.map +0 -1
- package/dist/modes/companion/components/status-bar.js +0 -26
- package/dist/modes/companion/components/status-bar.js.map +0 -1
- package/dist/modes/companion/context-buffer.d.ts +0 -65
- package/dist/modes/companion/context-buffer.d.ts.map +0 -1
- package/dist/modes/companion/context-buffer.js +0 -156
- package/dist/modes/companion/context-buffer.js.map +0 -1
- package/dist/modes/companion/context-buffer.test.d.ts +0 -2
- package/dist/modes/companion/context-buffer.test.d.ts.map +0 -1
- package/dist/modes/companion/context-buffer.test.js +0 -154
- package/dist/modes/companion/context-buffer.test.js.map +0 -1
- package/dist/modes/companion/event-detector.d.ts +0 -46
- package/dist/modes/companion/event-detector.d.ts.map +0 -1
- package/dist/modes/companion/event-detector.js +0 -169
- package/dist/modes/companion/event-detector.js.map +0 -1
- package/dist/modes/companion/event-detector.test.d.ts +0 -2
- package/dist/modes/companion/event-detector.test.d.ts.map +0 -1
- package/dist/modes/companion/event-detector.test.js +0 -121
- package/dist/modes/companion/event-detector.test.js.map +0 -1
- package/dist/modes/companion/index.d.ts +0 -33
- package/dist/modes/companion/index.d.ts.map +0 -1
- package/dist/modes/companion/index.js +0 -21
- package/dist/modes/companion/index.js.map +0 -1
- package/dist/modes/companion/input-key-mapper.d.ts +0 -3
- package/dist/modes/companion/input-key-mapper.d.ts.map +0 -1
- package/dist/modes/companion/input-key-mapper.js +0 -31
- package/dist/modes/companion/input-key-mapper.js.map +0 -1
- package/dist/modes/companion/input-key-mapper.test.d.ts +0 -2
- package/dist/modes/companion/input-key-mapper.test.d.ts.map +0 -1
- package/dist/modes/companion/input-key-mapper.test.js +0 -26
- package/dist/modes/companion/input-key-mapper.test.js.map +0 -1
- package/dist/modes/companion/input-parser.d.ts +0 -53
- package/dist/modes/companion/input-parser.d.ts.map +0 -1
- package/dist/modes/companion/input-parser.js +0 -114
- package/dist/modes/companion/input-parser.js.map +0 -1
- package/dist/modes/companion/input-parser.test.d.ts +0 -2
- package/dist/modes/companion/input-parser.test.d.ts.map +0 -1
- package/dist/modes/companion/input-parser.test.js +0 -123
- package/dist/modes/companion/input-parser.test.js.map +0 -1
- package/dist/modes/companion/mode-manager.d.ts +0 -41
- package/dist/modes/companion/mode-manager.d.ts.map +0 -1
- package/dist/modes/companion/mode-manager.js +0 -56
- package/dist/modes/companion/mode-manager.js.map +0 -1
- package/dist/modes/companion/mode-manager.test.d.ts +0 -2
- package/dist/modes/companion/mode-manager.test.d.ts.map +0 -1
- package/dist/modes/companion/mode-manager.test.js +0 -65
- package/dist/modes/companion/mode-manager.test.js.map +0 -1
- package/dist/modes/companion/output-classifier.d.ts +0 -15
- package/dist/modes/companion/output-classifier.d.ts.map +0 -1
- package/dist/modes/companion/output-classifier.js +0 -77
- package/dist/modes/companion/output-classifier.js.map +0 -1
- package/dist/modes/companion/output-classifier.test.d.ts +0 -2
- package/dist/modes/companion/output-classifier.test.d.ts.map +0 -1
- package/dist/modes/companion/output-classifier.test.js +0 -133
- package/dist/modes/companion/output-classifier.test.js.map +0 -1
- package/dist/modes/companion/pty-wrapper.d.ts +0 -46
- package/dist/modes/companion/pty-wrapper.d.ts.map +0 -1
- package/dist/modes/companion/pty-wrapper.js +0 -143
- package/dist/modes/companion/pty-wrapper.js.map +0 -1
- package/dist/modes/companion/safety-classifier.d.ts +0 -31
- package/dist/modes/companion/safety-classifier.d.ts.map +0 -1
- package/dist/modes/companion/safety-classifier.js +0 -140
- package/dist/modes/companion/safety-classifier.js.map +0 -1
- package/dist/modes/companion/safety-classifier.test.d.ts +0 -2
- package/dist/modes/companion/safety-classifier.test.d.ts.map +0 -1
- package/dist/modes/companion/safety-classifier.test.js +0 -151
- package/dist/modes/companion/safety-classifier.test.js.map +0 -1
- package/dist/modes/companion/summarizer.d.ts +0 -24
- package/dist/modes/companion/summarizer.d.ts.map +0 -1
- package/dist/modes/companion/summarizer.js +0 -132
- package/dist/modes/companion/summarizer.js.map +0 -1
- package/dist/modes/companion/terminal-history.d.ts +0 -27
- package/dist/modes/companion/terminal-history.d.ts.map +0 -1
- package/dist/modes/companion/terminal-history.js +0 -142
- package/dist/modes/companion/terminal-history.js.map +0 -1
- package/dist/services/check_mock.d.ts +0 -2
- package/dist/services/check_mock.d.ts.map +0 -1
- package/dist/services/check_mock.js +0 -22
- package/dist/services/check_mock.js.map +0 -1
- package/dist/services/conversation-service.test.d.ts +0 -2
- package/dist/services/conversation-service.test.d.ts.map +0 -1
- package/dist/services/conversation-service.test.js.map +0 -1
- package/dist/utils/command-safety.devnull.test.d.ts +0 -2
- package/dist/utils/command-safety.devnull.test.d.ts.map +0 -1
- package/dist/utils/command-safety.devnull.test.js +0 -13
- package/dist/utils/command-safety.devnull.test.js.map +0 -1
- package/dist/utils/extract-command-messages.test.d.ts +0 -2
- package/dist/utils/extract-command-messages.test.d.ts.map +0 -1
- package/dist/utils/extract-command-messages.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-safety.d.ts","sourceRoot":"","sources":["../../source/utils/command-safety.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command-safety.d.ts","sourceRoot":"","sources":["../../source/utils/command-safety.ts"],"names":[],"mappings":"AAwDA;;;;GAIG;AACH,oBAAY,YAAY;IACpB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,GAAG,QAAQ;CACd;AAgZD;;GAEG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,CA4UnE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAyB9D"}
|
|
@@ -134,7 +134,7 @@ test('find - delete flag (RED)', t => {
|
|
|
134
134
|
'find ./temp -delete',
|
|
135
135
|
];
|
|
136
136
|
for (const cmd of commands) {
|
|
137
|
-
t.
|
|
137
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
138
138
|
}
|
|
139
139
|
});
|
|
140
140
|
test('find - exec with destructive commands (RED)', t => {
|
|
@@ -147,7 +147,7 @@ test('find - exec with destructive commands (RED)', t => {
|
|
|
147
147
|
'find . -exec mv {} /tmp \\;',
|
|
148
148
|
];
|
|
149
149
|
for (const cmd of commands) {
|
|
150
|
-
t.
|
|
150
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
151
151
|
}
|
|
152
152
|
});
|
|
153
153
|
test('find - exec with shell commands (RED)', t => {
|
|
@@ -158,7 +158,7 @@ test('find - exec with shell commands (RED)', t => {
|
|
|
158
158
|
'find . -exec zsh -c "test" {} \\;',
|
|
159
159
|
];
|
|
160
160
|
for (const cmd of commands) {
|
|
161
|
-
t.
|
|
161
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
162
162
|
}
|
|
163
163
|
});
|
|
164
164
|
test('find - exec with shell metacharacters (RED)', t => {
|
|
@@ -169,13 +169,13 @@ test('find - exec with shell metacharacters (RED)', t => {
|
|
|
169
169
|
'find . -exec test `whoami` \\;',
|
|
170
170
|
];
|
|
171
171
|
for (const cmd of commands) {
|
|
172
|
-
t.
|
|
172
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
173
173
|
}
|
|
174
174
|
});
|
|
175
175
|
test('find - malformed exec (no terminator) (RED)', t => {
|
|
176
176
|
const commands = ['find . -exec rm {}', 'find . -exec cat'];
|
|
177
177
|
for (const cmd of commands) {
|
|
178
|
-
t.
|
|
178
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED error for malformed exec`);
|
|
179
179
|
}
|
|
180
180
|
});
|
|
181
181
|
test('find - execdir variants (RED)', t => {
|
|
@@ -186,7 +186,7 @@ test('find - execdir variants (RED)', t => {
|
|
|
186
186
|
'find . -okdir chmod 777 {} \\;',
|
|
187
187
|
];
|
|
188
188
|
for (const cmd of commands) {
|
|
189
|
-
t.
|
|
189
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
190
190
|
}
|
|
191
191
|
});
|
|
192
192
|
// ============================================================================
|
|
@@ -194,12 +194,12 @@ test('find - execdir variants (RED)', t => {
|
|
|
194
194
|
// ============================================================================
|
|
195
195
|
test('find - multiple exec flags (RED if any dangerous)', t => {
|
|
196
196
|
// First safe, second dangerous
|
|
197
|
-
t.
|
|
197
|
+
t.true(validateCommandSafety('find . -exec echo {} \\; -exec rm {} \\;'), 'Should return true if any exec is dangerous');
|
|
198
198
|
});
|
|
199
199
|
test('find - exec with plus terminator (RED if dangerous)', t => {
|
|
200
200
|
const commands = ['find . -exec rm {} +', 'find . -exec rm {} \\+'];
|
|
201
201
|
for (const cmd of commands) {
|
|
202
|
-
t.
|
|
202
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
205
|
test('find - exec with plus terminator (YELLOW if safe)', t => {
|
|
@@ -229,7 +229,7 @@ test('find - escaped semicolons (RED if dangerous)', t => {
|
|
|
229
229
|
'find . -exec rm {} \\;',
|
|
230
230
|
];
|
|
231
231
|
for (const cmd of commands) {
|
|
232
|
-
t.
|
|
232
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
233
233
|
}
|
|
234
234
|
});
|
|
235
235
|
test('find - directory traversal in paths (RED)', t => {
|
|
@@ -238,7 +238,7 @@ test('find - directory traversal in paths (RED)', t => {
|
|
|
238
238
|
'find ../../.ssh -type f',
|
|
239
239
|
];
|
|
240
240
|
for (const cmd of commands) {
|
|
241
|
-
t.
|
|
241
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
242
242
|
}
|
|
243
243
|
});
|
|
244
244
|
test('find - home directory searches (RED)', t => {
|
|
@@ -248,20 +248,18 @@ test('find - home directory searches (RED)', t => {
|
|
|
248
248
|
'find $HOME/.env',
|
|
249
249
|
];
|
|
250
250
|
for (const cmd of commands) {
|
|
251
|
-
t.
|
|
251
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
252
252
|
}
|
|
253
253
|
});
|
|
254
254
|
test('find - empty exec command (RED)', t => {
|
|
255
|
-
t.
|
|
255
|
+
t.true(validateCommandSafety('find . -exec \\;'), 'Empty exec command should return true');
|
|
256
256
|
});
|
|
257
257
|
test('find - boolean operators maintain safety classification', t => {
|
|
258
258
|
// Safe OR safe = GREEN
|
|
259
259
|
const safe = classifyCommand('find . -name "*.txt" -o -name "*.md"');
|
|
260
260
|
t.is(safe, SafetyStatus.GREEN);
|
|
261
261
|
// Safe AND dangerous = RED
|
|
262
|
-
t.
|
|
263
|
-
message: /RED \(forbidden\)/,
|
|
264
|
-
});
|
|
262
|
+
t.true(validateCommandSafety('find . -name "*.txt" -delete'));
|
|
265
263
|
// NOT operation doesn't change classification
|
|
266
264
|
const notSafe = classifyCommand('find . ! -name "*.txt"');
|
|
267
265
|
t.is(notSafe, SafetyStatus.GREEN);
|
|
@@ -277,7 +275,7 @@ test('find - interpreter bypasses (RED)', t => {
|
|
|
277
275
|
'find . -exec node -e "require(\\"child_process\\").execSync(\\"rm *\\")" {} \\;',
|
|
278
276
|
];
|
|
279
277
|
for (const cmd of commands) {
|
|
280
|
-
t.
|
|
278
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
281
279
|
}
|
|
282
280
|
});
|
|
283
281
|
test('find - meta-executor bypasses (RED)', t => {
|
|
@@ -288,7 +286,7 @@ test('find - meta-executor bypasses (RED)', t => {
|
|
|
288
286
|
'find . -exec timeout 10 rm {} \\;',
|
|
289
287
|
];
|
|
290
288
|
for (const cmd of commands) {
|
|
291
|
-
t.
|
|
289
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
292
290
|
}
|
|
293
291
|
});
|
|
294
292
|
test('find - more destructive commands (RED)', t => {
|
|
@@ -300,11 +298,11 @@ test('find - more destructive commands (RED)', t => {
|
|
|
300
298
|
'find . -exec rsync -a {} /backup \\;',
|
|
301
299
|
];
|
|
302
300
|
for (const cmd of commands) {
|
|
303
|
-
t.
|
|
301
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
304
302
|
}
|
|
305
303
|
});
|
|
306
304
|
test('find - executing found files directly (RED)', t => {
|
|
307
|
-
t.
|
|
305
|
+
t.true(validateCommandSafety('find / -perm -4000 -exec {} \\;'), 'Executing found SUID binaries should return true for RED command');
|
|
308
306
|
});
|
|
309
307
|
test('find - inode-based bypass (YELLOW)', t => {
|
|
310
308
|
const result = classifyCommand('find / -inum 12345');
|
|
@@ -325,7 +323,7 @@ test('find - expanded home directory patterns (RED)', t => {
|
|
|
325
323
|
'find $USER -name "*.txt"',
|
|
326
324
|
];
|
|
327
325
|
for (const cmd of commands) {
|
|
328
|
-
t.
|
|
326
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
329
327
|
}
|
|
330
328
|
});
|
|
331
329
|
test('find - sensitive dotfiles expanded list (RED)', t => {
|
|
@@ -336,7 +334,7 @@ test('find - sensitive dotfiles expanded list (RED)', t => {
|
|
|
336
334
|
'find ~/.bash_history',
|
|
337
335
|
];
|
|
338
336
|
for (const cmd of commands) {
|
|
339
|
-
t.
|
|
337
|
+
t.true(validateCommandSafety(cmd), `"${cmd}" should return true for RED command`);
|
|
340
338
|
}
|
|
341
339
|
});
|
|
342
340
|
//# sourceMappingURL=command-safety.find.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-safety.find.test.js","sourceRoot":"","sources":["../../source/utils/command-safety.find.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-safety.find.test.js","sourceRoot":"","sources":["../../source/utils/command-safety.find.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ const ALLOWED_COMMANDS = new Set([
|
|
|
13
13
|
'head',
|
|
14
14
|
'tail',
|
|
15
15
|
'sed',
|
|
16
|
+
'find',
|
|
16
17
|
]);
|
|
17
18
|
const BLOCKED_COMMANDS = new Set([
|
|
18
19
|
// Filesystem
|
|
@@ -82,21 +83,274 @@ function extractWordText(word) {
|
|
|
82
83
|
}
|
|
83
84
|
return undefined;
|
|
84
85
|
}
|
|
85
|
-
// 2.
|
|
86
|
+
// 2. FIND COMMAND HELPERS
|
|
87
|
+
/**
|
|
88
|
+
* Check if a find command has dangerous execution flags (-exec, -execdir, -ok, -okdir, -delete)
|
|
89
|
+
*/
|
|
90
|
+
function hasFindDangerousExecution(args) {
|
|
91
|
+
for (let i = 0; i < args.length; i++) {
|
|
92
|
+
const argText = extractWordText(args[i]);
|
|
93
|
+
if (!argText)
|
|
94
|
+
continue;
|
|
95
|
+
// Check for -delete flag
|
|
96
|
+
if (argText === '-delete') {
|
|
97
|
+
return { dangerous: true, reason: 'find -delete (destructive)' };
|
|
98
|
+
}
|
|
99
|
+
// Check for execution flags
|
|
100
|
+
const execFlags = ['-exec', '-execdir', '-ok', '-okdir'];
|
|
101
|
+
if (!execFlags.includes(argText))
|
|
102
|
+
continue;
|
|
103
|
+
// Found an exec flag - analyze the command it executes
|
|
104
|
+
// Find the terminator (; or +)
|
|
105
|
+
let terminatorIndex = -1;
|
|
106
|
+
for (let j = i + 1; j < args.length; j++) {
|
|
107
|
+
const term = extractWordText(args[j]);
|
|
108
|
+
if (term === ';' ||
|
|
109
|
+
term === '+' ||
|
|
110
|
+
term === '\\;' ||
|
|
111
|
+
term === '\\+') {
|
|
112
|
+
terminatorIndex = j;
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (terminatorIndex === -1) {
|
|
117
|
+
// Malformed -exec (no terminator)
|
|
118
|
+
return {
|
|
119
|
+
dangerous: true,
|
|
120
|
+
reason: `find ${argText} without terminator`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// Extract the command between exec flag and terminator
|
|
124
|
+
const execArgs = args.slice(i + 1, terminatorIndex);
|
|
125
|
+
// Check for redirects (which indicate shell operations)
|
|
126
|
+
const hasRedirect = execArgs.some((a) => a?.type === 'Redirect');
|
|
127
|
+
if (hasRedirect) {
|
|
128
|
+
return {
|
|
129
|
+
dangerous: true,
|
|
130
|
+
reason: `find ${argText} with shell redirection`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
const execCommand = execArgs
|
|
134
|
+
.map(a => extractWordText(a))
|
|
135
|
+
.filter(Boolean);
|
|
136
|
+
if (execCommand.length === 0) {
|
|
137
|
+
return {
|
|
138
|
+
dangerous: true,
|
|
139
|
+
reason: `find ${argText} with empty command`,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const cmdName = execCommand[0];
|
|
143
|
+
if (!cmdName) {
|
|
144
|
+
return {
|
|
145
|
+
dangerous: true,
|
|
146
|
+
reason: `find ${argText} with undefined command`,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
// Check if {} is the command itself (executing found files)
|
|
150
|
+
if (cmdName === '{}') {
|
|
151
|
+
return {
|
|
152
|
+
dangerous: true,
|
|
153
|
+
reason: `find ${argText} {} (executes found files directly)`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
// Check for destructive commands
|
|
157
|
+
const destructiveCmds = [
|
|
158
|
+
'rm',
|
|
159
|
+
'shred',
|
|
160
|
+
'chmod',
|
|
161
|
+
'chown',
|
|
162
|
+
'mv',
|
|
163
|
+
'dd',
|
|
164
|
+
'mkfs',
|
|
165
|
+
'truncate',
|
|
166
|
+
'tee',
|
|
167
|
+
'cp',
|
|
168
|
+
'ln',
|
|
169
|
+
'install',
|
|
170
|
+
'rsync',
|
|
171
|
+
];
|
|
172
|
+
if (destructiveCmds.includes(cmdName)) {
|
|
173
|
+
return {
|
|
174
|
+
dangerous: true,
|
|
175
|
+
reason: `find ${argText} ${cmdName} (destructive)`,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
// Check for dangerous interpreters and meta-executors
|
|
179
|
+
// These can all invoke arbitrary commands or scripts
|
|
180
|
+
const dangerousInterpreters = [
|
|
181
|
+
// Shells
|
|
182
|
+
'sh',
|
|
183
|
+
'bash',
|
|
184
|
+
'zsh',
|
|
185
|
+
'ksh',
|
|
186
|
+
'dash',
|
|
187
|
+
'fish',
|
|
188
|
+
'tcsh',
|
|
189
|
+
'csh',
|
|
190
|
+
// Script interpreters
|
|
191
|
+
'perl',
|
|
192
|
+
'python',
|
|
193
|
+
'python2',
|
|
194
|
+
'python3',
|
|
195
|
+
'ruby',
|
|
196
|
+
'node',
|
|
197
|
+
'nodejs',
|
|
198
|
+
'php',
|
|
199
|
+
'lua',
|
|
200
|
+
// Meta-executors that can run commands
|
|
201
|
+
'env',
|
|
202
|
+
'xargs',
|
|
203
|
+
'parallel',
|
|
204
|
+
'nohup',
|
|
205
|
+
'nice',
|
|
206
|
+
'ionice',
|
|
207
|
+
'timeout',
|
|
208
|
+
'stdbuf',
|
|
209
|
+
'script',
|
|
210
|
+
'expect',
|
|
211
|
+
// Text processors that can execute
|
|
212
|
+
'awk',
|
|
213
|
+
'gawk',
|
|
214
|
+
'mawk',
|
|
215
|
+
'nawk',
|
|
216
|
+
'sed',
|
|
217
|
+
'ed',
|
|
218
|
+
// Editors that can run shell commands
|
|
219
|
+
'vim',
|
|
220
|
+
'nvim',
|
|
221
|
+
'emacs',
|
|
222
|
+
];
|
|
223
|
+
// Handle both bare names and full paths like /usr/bin/python
|
|
224
|
+
const isDangerousInterpreter = dangerousInterpreters.some(interp => cmdName === interp || cmdName.endsWith(`/${interp}`));
|
|
225
|
+
if (isDangerousInterpreter) {
|
|
226
|
+
return {
|
|
227
|
+
dangerous: true,
|
|
228
|
+
reason: `find ${argText} ${cmdName} (can execute commands)`,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
// Check for shell metacharacters in command
|
|
232
|
+
const fullExecCmd = execCommand.join(' ');
|
|
233
|
+
if (/[|&;$`<>]/.test(fullExecCmd)) {
|
|
234
|
+
return {
|
|
235
|
+
dangerous: true,
|
|
236
|
+
reason: `find ${argText} with shell metacharacters`,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return { dangerous: false };
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Check for suspicious find flags that warrant YELLOW classification
|
|
244
|
+
*/
|
|
245
|
+
function hasFindSuspiciousFlags(args) {
|
|
246
|
+
for (const arg of args) {
|
|
247
|
+
const argText = extractWordText(arg);
|
|
248
|
+
if (!argText)
|
|
249
|
+
continue;
|
|
250
|
+
// File output flags
|
|
251
|
+
if (['-fprint', '-fprint0', '-fprintf', '-fls'].some(flag => argText.startsWith(flag))) {
|
|
252
|
+
return {
|
|
253
|
+
suspicious: true,
|
|
254
|
+
reason: `find ${argText} (file output)`,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
// Symlink following
|
|
258
|
+
if (['-L', '-follow', '-H'].includes(argText)) {
|
|
259
|
+
return {
|
|
260
|
+
suspicious: true,
|
|
261
|
+
reason: `find ${argText} (symlink following)`,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
// SUID/SGID permission searches
|
|
265
|
+
if (argText === '-perm') {
|
|
266
|
+
// Check the next argument for dangerous permission patterns
|
|
267
|
+
const nextIdx = args.indexOf(arg) + 1;
|
|
268
|
+
if (nextIdx < args.length) {
|
|
269
|
+
const permValue = extractWordText(args[nextIdx]);
|
|
270
|
+
if (permValue) {
|
|
271
|
+
// Numeric SUID/SGID patterns (e.g., -4000, /6000)
|
|
272
|
+
const hasNumericSuid = /[-\/]?[2467]000/.test(permValue);
|
|
273
|
+
// Symbolic SUID/SGID patterns (e.g., -u+s, /g+s, +s)
|
|
274
|
+
const hasSymbolicSuid = /[ug]?\+s/.test(permValue);
|
|
275
|
+
if (hasNumericSuid || hasSymbolicSuid) {
|
|
276
|
+
return {
|
|
277
|
+
suspicious: true,
|
|
278
|
+
reason: `find -perm ${permValue} (SUID/SGID search)`,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
// Inode-based searches (can bypass path restrictions)
|
|
285
|
+
if (argText === '-inum') {
|
|
286
|
+
return {
|
|
287
|
+
suspicious: true,
|
|
288
|
+
reason: 'find -inum (inode-based access bypasses path checks)',
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
// Read-only exec (still suspicious, requires approval)
|
|
292
|
+
if (['-exec', '-execdir', '-ok', '-okdir'].includes(argText)) {
|
|
293
|
+
// If we reach here, hasFindDangerousExecution already passed (not RED)
|
|
294
|
+
// but any -exec usage should still be YELLOW
|
|
295
|
+
return {
|
|
296
|
+
suspicious: true,
|
|
297
|
+
reason: `find ${argText} (command execution)`,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return { suspicious: false };
|
|
302
|
+
}
|
|
303
|
+
// 3. PATH ANALYSIS HELPER
|
|
86
304
|
function analyzePathRisk(inputPath) {
|
|
87
305
|
const candidate = inputPath?.trim();
|
|
88
306
|
if (!candidate)
|
|
89
307
|
return SafetyStatus.GREEN;
|
|
90
|
-
// RED:
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
//
|
|
308
|
+
// RED: Home directory and sensitive paths
|
|
309
|
+
// Check for various home directory representations
|
|
310
|
+
const homePatterns = [
|
|
311
|
+
/^~/, // Tilde
|
|
312
|
+
/^\$HOME/, // $HOME variable
|
|
313
|
+
/^\$\{HOME\}/, // ${HOME} variable
|
|
314
|
+
/^\$USER/, // $USER variable
|
|
315
|
+
/^\$LOGNAME/, // $LOGNAME variable
|
|
316
|
+
/^\$XDG_/, // XDG variables
|
|
317
|
+
/^\/home\//, // Linux home directories
|
|
318
|
+
/^\/Users\//, // macOS home directories
|
|
319
|
+
/^\/root($|\/)/, // Root's home
|
|
320
|
+
];
|
|
321
|
+
const isHomeRelated = homePatterns.some(pattern => pattern.test(candidate));
|
|
322
|
+
if (isHomeRelated) {
|
|
323
|
+
// Extract the path after home prefix for further analysis
|
|
324
|
+
const sliced = candidate
|
|
325
|
+
.replace(/^~/, '')
|
|
326
|
+
.replace(/^\$\{?HOME\}?/, '')
|
|
327
|
+
.replace(/^\$\{?USER\}?/, '')
|
|
328
|
+
.replace(/^\$\{?LOGNAME\}?/, '')
|
|
329
|
+
.replace(/^\/home\/[^/]+/, '')
|
|
330
|
+
.replace(/^\/Users\/[^/]+/, '')
|
|
331
|
+
.replace(/^\/root/, '');
|
|
332
|
+
// Plain home directory access without any suffix is RED
|
|
333
|
+
if (sliced === '' || sliced === '/') {
|
|
334
|
+
loggingService.security('Path risk: home directory access', {
|
|
335
|
+
path: candidate,
|
|
336
|
+
});
|
|
337
|
+
return SafetyStatus.RED;
|
|
338
|
+
}
|
|
339
|
+
// Check for sensitive dotfiles and directories
|
|
340
|
+
const sensitivePaths = [
|
|
341
|
+
'/.ssh',
|
|
342
|
+
'/.gnupg',
|
|
343
|
+
'/.aws',
|
|
344
|
+
'/.kube',
|
|
345
|
+
'/.env',
|
|
346
|
+
'/.git',
|
|
347
|
+
'/.config',
|
|
348
|
+
'/.bash_history',
|
|
349
|
+
'/.zsh_history',
|
|
350
|
+
];
|
|
96
351
|
if (/^\/\.\w+/.test(sliced) ||
|
|
97
|
-
sliced.includes(
|
|
98
|
-
|
|
99
|
-
loggingService.security('Path risk: home dotfile', {
|
|
352
|
+
sensitivePaths.some(sensitive => sliced.includes(sensitive))) {
|
|
353
|
+
loggingService.security('Path risk: home dotfile or config', {
|
|
100
354
|
path: candidate,
|
|
101
355
|
});
|
|
102
356
|
return SafetyStatus.RED;
|
|
@@ -200,6 +454,106 @@ export function classifyCommand(commandString) {
|
|
|
200
454
|
}
|
|
201
455
|
}
|
|
202
456
|
const cmdName = typeof name === 'string' ? name : undefined;
|
|
457
|
+
// Special handling for find command
|
|
458
|
+
if (cmdName === 'find' && node.suffix) {
|
|
459
|
+
// Check for dangerous find operations first (RED)
|
|
460
|
+
const dangerResult = hasFindDangerousExecution(node.suffix);
|
|
461
|
+
if (dangerResult.dangerous) {
|
|
462
|
+
upgradeStatus(SafetyStatus.RED, dangerResult.reason || 'find with dangerous flags');
|
|
463
|
+
}
|
|
464
|
+
// Check for suspicious find flags (YELLOW)
|
|
465
|
+
if (!dangerResult.dangerous) {
|
|
466
|
+
const suspiciousResult = hasFindSuspiciousFlags(node.suffix);
|
|
467
|
+
if (suspiciousResult.suspicious) {
|
|
468
|
+
upgradeStatus(SafetyStatus.YELLOW, suspiciousResult.reason ||
|
|
469
|
+
'find with suspicious flags');
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
// Check path arguments for find
|
|
473
|
+
if (!dangerResult.dangerous) {
|
|
474
|
+
// Track if previous arg was a pattern flag like -name, -regex
|
|
475
|
+
let previousArgWasPatternFlag = false;
|
|
476
|
+
for (const arg of node.suffix) {
|
|
477
|
+
if (arg?.type === 'Redirect')
|
|
478
|
+
continue;
|
|
479
|
+
const argText = extractWordText(arg);
|
|
480
|
+
if (!argText)
|
|
481
|
+
continue;
|
|
482
|
+
// Track pattern flags
|
|
483
|
+
if ([
|
|
484
|
+
'-name',
|
|
485
|
+
'-iname',
|
|
486
|
+
'-path',
|
|
487
|
+
'-ipath',
|
|
488
|
+
'-regex',
|
|
489
|
+
'-iregex',
|
|
490
|
+
].includes(argText)) {
|
|
491
|
+
previousArgWasPatternFlag = true;
|
|
492
|
+
continue;
|
|
493
|
+
}
|
|
494
|
+
// Skip flags
|
|
495
|
+
if (argText.startsWith('-')) {
|
|
496
|
+
previousArgWasPatternFlag = false;
|
|
497
|
+
continue;
|
|
498
|
+
}
|
|
499
|
+
// Skip pattern arguments (the values after -name, -regex, etc.)
|
|
500
|
+
if (previousArgWasPatternFlag) {
|
|
501
|
+
previousArgWasPatternFlag = false;
|
|
502
|
+
continue;
|
|
503
|
+
}
|
|
504
|
+
// Skip glob patterns (contain wildcards)
|
|
505
|
+
if (/[*?[\]]/.test(argText))
|
|
506
|
+
continue;
|
|
507
|
+
// Skip safe relative paths (. and ./)
|
|
508
|
+
if (argText === '.' || argText === './')
|
|
509
|
+
continue;
|
|
510
|
+
// Skip patterns with backslashes (regex patterns)
|
|
511
|
+
if (argText.includes('\\'))
|
|
512
|
+
continue;
|
|
513
|
+
// Root traversal detection (DoS + information disclosure)
|
|
514
|
+
if (argText === '/' || argText === '//') {
|
|
515
|
+
upgradeStatus(SafetyStatus.YELLOW, 'find / (root traversal - resource intensive)');
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
// For find, analyzing paths is more lenient:
|
|
519
|
+
// - System paths like /etc are YELLOW (not RED)
|
|
520
|
+
// - Home directories and dotfiles are still RED
|
|
521
|
+
const pathStatus = analyzePathRisk(argText);
|
|
522
|
+
if (pathStatus === SafetyStatus.RED) {
|
|
523
|
+
// Keep RED for home directories, dotfiles, and traversal
|
|
524
|
+
// Downgrade system paths to YELLOW
|
|
525
|
+
const homeRelatedPatterns = [
|
|
526
|
+
/^~/, // Tilde
|
|
527
|
+
/^\$/, // Variables like $HOME, $USER
|
|
528
|
+
/^\/home\//, // Linux home
|
|
529
|
+
/^\/Users\//, // macOS home
|
|
530
|
+
/^\/root/, // Root's home
|
|
531
|
+
/\/\.ssh/, // SSH keys
|
|
532
|
+
/\/\.env/, // Environment files
|
|
533
|
+
/\/\.git/, // Git config
|
|
534
|
+
/\/\.aws/, // AWS credentials
|
|
535
|
+
/\/\.kube/, // Kubernetes config
|
|
536
|
+
/\/\.gnupg/, // GPG keys
|
|
537
|
+
/\.\./, // Directory traversal
|
|
538
|
+
];
|
|
539
|
+
const isHomeRelated = homeRelatedPatterns.some(pattern => pattern.test(argText));
|
|
540
|
+
if (isHomeRelated) {
|
|
541
|
+
upgradeStatus(SafetyStatus.RED, `find dangerous path: ${argText}`);
|
|
542
|
+
}
|
|
543
|
+
else {
|
|
544
|
+
// System paths like /etc get downgraded to YELLOW
|
|
545
|
+
upgradeStatus(SafetyStatus.YELLOW, `find system path: ${argText}`);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
else if (pathStatus === SafetyStatus.YELLOW) {
|
|
549
|
+
upgradeStatus(pathStatus, `find path argument ${argText}`);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
// Done with find-specific handling
|
|
554
|
+
// Don't process suffix generically
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
203
557
|
if (node.suffix) {
|
|
204
558
|
let hasOutputRedirect = false;
|
|
205
559
|
let hasInPlaceEdit = false;
|