helixmind 0.5.4
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/LICENSE +73 -0
- package/README.md +323 -0
- package/dist/cli/agent/autonomous.d.ts +24 -0
- package/dist/cli/agent/autonomous.d.ts.map +1 -0
- package/dist/cli/agent/autonomous.js +194 -0
- package/dist/cli/agent/autonomous.js.map +1 -0
- package/dist/cli/agent/loop.d.ts +87 -0
- package/dist/cli/agent/loop.d.ts.map +1 -0
- package/dist/cli/agent/loop.js +492 -0
- package/dist/cli/agent/loop.js.map +1 -0
- package/dist/cli/agent/monitor/alerter.d.ts +29 -0
- package/dist/cli/agent/monitor/alerter.d.ts.map +1 -0
- package/dist/cli/agent/monitor/alerter.js +80 -0
- package/dist/cli/agent/monitor/alerter.js.map +1 -0
- package/dist/cli/agent/monitor/baseline.d.ts +14 -0
- package/dist/cli/agent/monitor/baseline.d.ts.map +1 -0
- package/dist/cli/agent/monitor/baseline.js +157 -0
- package/dist/cli/agent/monitor/baseline.js.map +1 -0
- package/dist/cli/agent/monitor/prompts.d.ts +9 -0
- package/dist/cli/agent/monitor/prompts.d.ts.map +1 -0
- package/dist/cli/agent/monitor/prompts.js +103 -0
- package/dist/cli/agent/monitor/prompts.js.map +1 -0
- package/dist/cli/agent/monitor/responder.d.ts +12 -0
- package/dist/cli/agent/monitor/responder.d.ts.map +1 -0
- package/dist/cli/agent/monitor/responder.js +59 -0
- package/dist/cli/agent/monitor/responder.js.map +1 -0
- package/dist/cli/agent/monitor/scanner.d.ts +18 -0
- package/dist/cli/agent/monitor/scanner.d.ts.map +1 -0
- package/dist/cli/agent/monitor/scanner.js +81 -0
- package/dist/cli/agent/monitor/scanner.js.map +1 -0
- package/dist/cli/agent/monitor/types.d.ts +119 -0
- package/dist/cli/agent/monitor/types.d.ts.map +1 -0
- package/dist/cli/agent/monitor/types.js +5 -0
- package/dist/cli/agent/monitor/types.js.map +1 -0
- package/dist/cli/agent/monitor/watcher.d.ts +4 -0
- package/dist/cli/agent/monitor/watcher.d.ts.map +1 -0
- package/dist/cli/agent/monitor/watcher.js +214 -0
- package/dist/cli/agent/monitor/watcher.js.map +1 -0
- package/dist/cli/agent/permissions.d.ts +65 -0
- package/dist/cli/agent/permissions.d.ts.map +1 -0
- package/dist/cli/agent/permissions.js +447 -0
- package/dist/cli/agent/permissions.js.map +1 -0
- package/dist/cli/agent/plan-engine.d.ts +72 -0
- package/dist/cli/agent/plan-engine.d.ts.map +1 -0
- package/dist/cli/agent/plan-engine.js +261 -0
- package/dist/cli/agent/plan-engine.js.map +1 -0
- package/dist/cli/agent/plan-executor.d.ts +37 -0
- package/dist/cli/agent/plan-executor.d.ts.map +1 -0
- package/dist/cli/agent/plan-executor.js +105 -0
- package/dist/cli/agent/plan-executor.js.map +1 -0
- package/dist/cli/agent/plan-types.d.ts +50 -0
- package/dist/cli/agent/plan-types.d.ts.map +1 -0
- package/dist/cli/agent/plan-types.js +58 -0
- package/dist/cli/agent/plan-types.js.map +1 -0
- package/dist/cli/agent/sandbox.d.ts +28 -0
- package/dist/cli/agent/sandbox.d.ts.map +1 -0
- package/dist/cli/agent/sandbox.js +298 -0
- package/dist/cli/agent/sandbox.js.map +1 -0
- package/dist/cli/agent/swarm.d.ts +75 -0
- package/dist/cli/agent/swarm.d.ts.map +1 -0
- package/dist/cli/agent/swarm.js +272 -0
- package/dist/cli/agent/swarm.js.map +1 -0
- package/dist/cli/agent/tools/browser-click.d.ts +2 -0
- package/dist/cli/agent/tools/browser-click.d.ts.map +1 -0
- package/dist/cli/agent/tools/browser-click.js +35 -0
- package/dist/cli/agent/tools/browser-click.js.map +1 -0
- package/dist/cli/agent/tools/browser-close.d.ts +2 -0
- package/dist/cli/agent/tools/browser-close.d.ts.map +1 -0
- package/dist/cli/agent/tools/browser-close.js +27 -0
- package/dist/cli/agent/tools/browser-close.js.map +1 -0
- package/dist/cli/agent/tools/browser-navigate.d.ts +2 -0
- package/dist/cli/agent/tools/browser-navigate.d.ts.map +1 -0
- package/dist/cli/agent/tools/browser-navigate.js +27 -0
- package/dist/cli/agent/tools/browser-navigate.js.map +1 -0
- package/dist/cli/agent/tools/browser-open.d.ts +2 -0
- package/dist/cli/agent/tools/browser-open.d.ts.map +1 -0
- package/dist/cli/agent/tools/browser-open.js +38 -0
- package/dist/cli/agent/tools/browser-open.js.map +1 -0
- package/dist/cli/agent/tools/browser-screenshot.d.ts +2 -0
- package/dist/cli/agent/tools/browser-screenshot.d.ts.map +1 -0
- package/dist/cli/agent/tools/browser-screenshot.js +68 -0
- package/dist/cli/agent/tools/browser-screenshot.js.map +1 -0
- package/dist/cli/agent/tools/browser-type.d.ts +2 -0
- package/dist/cli/agent/tools/browser-type.d.ts.map +1 -0
- package/dist/cli/agent/tools/browser-type.js +33 -0
- package/dist/cli/agent/tools/browser-type.js.map +1 -0
- package/dist/cli/agent/tools/bug-list.d.ts +2 -0
- package/dist/cli/agent/tools/bug-list.d.ts.map +1 -0
- package/dist/cli/agent/tools/bug-list.js +82 -0
- package/dist/cli/agent/tools/bug-list.js.map +1 -0
- package/dist/cli/agent/tools/bug-report.d.ts +2 -0
- package/dist/cli/agent/tools/bug-report.d.ts.map +1 -0
- package/dist/cli/agent/tools/bug-report.js +130 -0
- package/dist/cli/agent/tools/bug-report.js.map +1 -0
- package/dist/cli/agent/tools/edit-file.d.ts +2 -0
- package/dist/cli/agent/tools/edit-file.d.ts.map +1 -0
- package/dist/cli/agent/tools/edit-file.js +61 -0
- package/dist/cli/agent/tools/edit-file.js.map +1 -0
- package/dist/cli/agent/tools/find.d.ts +2 -0
- package/dist/cli/agent/tools/find.d.ts.map +1 -0
- package/dist/cli/agent/tools/find.js +35 -0
- package/dist/cli/agent/tools/find.js.map +1 -0
- package/dist/cli/agent/tools/git-commit.d.ts +2 -0
- package/dist/cli/agent/tools/git-commit.d.ts.map +1 -0
- package/dist/cli/agent/tools/git-commit.js +57 -0
- package/dist/cli/agent/tools/git-commit.js.map +1 -0
- package/dist/cli/agent/tools/git-diff.d.ts +2 -0
- package/dist/cli/agent/tools/git-diff.d.ts.map +1 -0
- package/dist/cli/agent/tools/git-diff.js +45 -0
- package/dist/cli/agent/tools/git-diff.js.map +1 -0
- package/dist/cli/agent/tools/git-log.d.ts +2 -0
- package/dist/cli/agent/tools/git-log.d.ts.map +1 -0
- package/dist/cli/agent/tools/git-log.js +41 -0
- package/dist/cli/agent/tools/git-log.js.map +1 -0
- package/dist/cli/agent/tools/git-status.d.ts +2 -0
- package/dist/cli/agent/tools/git-status.d.ts.map +1 -0
- package/dist/cli/agent/tools/git-status.js +52 -0
- package/dist/cli/agent/tools/git-status.js.map +1 -0
- package/dist/cli/agent/tools/list-dir.d.ts +2 -0
- package/dist/cli/agent/tools/list-dir.d.ts.map +1 -0
- package/dist/cli/agent/tools/list-dir.js +73 -0
- package/dist/cli/agent/tools/list-dir.js.map +1 -0
- package/dist/cli/agent/tools/read-file.d.ts +2 -0
- package/dist/cli/agent/tools/read-file.d.ts.map +1 -0
- package/dist/cli/agent/tools/read-file.js +45 -0
- package/dist/cli/agent/tools/read-file.js.map +1 -0
- package/dist/cli/agent/tools/registry.d.ts +34 -0
- package/dist/cli/agent/tools/registry.d.ts.map +1 -0
- package/dist/cli/agent/tools/registry.js +53 -0
- package/dist/cli/agent/tools/registry.js.map +1 -0
- package/dist/cli/agent/tools/run-command.d.ts +2 -0
- package/dist/cli/agent/tools/run-command.d.ts.map +1 -0
- package/dist/cli/agent/tools/run-command.js +112 -0
- package/dist/cli/agent/tools/run-command.js.map +1 -0
- package/dist/cli/agent/tools/search.d.ts +2 -0
- package/dist/cli/agent/tools/search.d.ts.map +1 -0
- package/dist/cli/agent/tools/search.js +104 -0
- package/dist/cli/agent/tools/search.js.map +1 -0
- package/dist/cli/agent/tools/spiral-query.d.ts +2 -0
- package/dist/cli/agent/tools/spiral-query.d.ts.map +1 -0
- package/dist/cli/agent/tools/spiral-query.js +52 -0
- package/dist/cli/agent/tools/spiral-query.js.map +1 -0
- package/dist/cli/agent/tools/spiral-store.d.ts +2 -0
- package/dist/cli/agent/tools/spiral-store.d.ts.map +1 -0
- package/dist/cli/agent/tools/spiral-store.js +37 -0
- package/dist/cli/agent/tools/spiral-store.js.map +1 -0
- package/dist/cli/agent/tools/web-research.d.ts +2 -0
- package/dist/cli/agent/tools/web-research.d.ts.map +1 -0
- package/dist/cli/agent/tools/web-research.js +96 -0
- package/dist/cli/agent/tools/web-research.js.map +1 -0
- package/dist/cli/agent/tools/write-file.d.ts +2 -0
- package/dist/cli/agent/tools/write-file.d.ts.map +1 -0
- package/dist/cli/agent/tools/write-file.js +86 -0
- package/dist/cli/agent/tools/write-file.js.map +1 -0
- package/dist/cli/agent/undo.d.ts +30 -0
- package/dist/cli/agent/undo.d.ts.map +1 -0
- package/dist/cli/agent/undo.js +48 -0
- package/dist/cli/agent/undo.js.map +1 -0
- package/dist/cli/auth/callback-server.d.ts +15 -0
- package/dist/cli/auth/callback-server.d.ts.map +1 -0
- package/dist/cli/auth/callback-server.js +169 -0
- package/dist/cli/auth/callback-server.js.map +1 -0
- package/dist/cli/auth/feature-gate.d.ts +47 -0
- package/dist/cli/auth/feature-gate.d.ts.map +1 -0
- package/dist/cli/auth/feature-gate.js +171 -0
- package/dist/cli/auth/feature-gate.js.map +1 -0
- package/dist/cli/auth/guard.d.ts +11 -0
- package/dist/cli/auth/guard.d.ts.map +1 -0
- package/dist/cli/auth/guard.js +94 -0
- package/dist/cli/auth/guard.js.map +1 -0
- package/dist/cli/auth/login.d.ts +22 -0
- package/dist/cli/auth/login.d.ts.map +1 -0
- package/dist/cli/auth/login.js +287 -0
- package/dist/cli/auth/login.js.map +1 -0
- package/dist/cli/auth/logout.d.ts +6 -0
- package/dist/cli/auth/logout.d.ts.map +1 -0
- package/dist/cli/auth/logout.js +36 -0
- package/dist/cli/auth/logout.js.map +1 -0
- package/dist/cli/bench/dataset.d.ts +13 -0
- package/dist/cli/bench/dataset.d.ts.map +1 -0
- package/dist/cli/bench/dataset.js +97 -0
- package/dist/cli/bench/dataset.js.map +1 -0
- package/dist/cli/bench/harness.d.ts +7 -0
- package/dist/cli/bench/harness.d.ts.map +1 -0
- package/dist/cli/bench/harness.js +135 -0
- package/dist/cli/bench/harness.js.map +1 -0
- package/dist/cli/bench/metrics.d.ts +15 -0
- package/dist/cli/bench/metrics.d.ts.map +1 -0
- package/dist/cli/bench/metrics.js +98 -0
- package/dist/cli/bench/metrics.js.map +1 -0
- package/dist/cli/bench/output.d.ts +42 -0
- package/dist/cli/bench/output.d.ts.map +1 -0
- package/dist/cli/bench/output.js +140 -0
- package/dist/cli/bench/output.js.map +1 -0
- package/dist/cli/bench/prompt.d.ts +13 -0
- package/dist/cli/bench/prompt.d.ts.map +1 -0
- package/dist/cli/bench/prompt.js +106 -0
- package/dist/cli/bench/prompt.js.map +1 -0
- package/dist/cli/bench/runner.d.ts +14 -0
- package/dist/cli/bench/runner.d.ts.map +1 -0
- package/dist/cli/bench/runner.js +334 -0
- package/dist/cli/bench/runner.js.map +1 -0
- package/dist/cli/bench/types.d.ts +109 -0
- package/dist/cli/bench/types.d.ts.map +1 -0
- package/dist/cli/bench/types.js +2 -0
- package/dist/cli/bench/types.js.map +1 -0
- package/dist/cli/bench/ui.d.ts +12 -0
- package/dist/cli/bench/ui.d.ts.map +1 -0
- package/dist/cli/bench/ui.js +126 -0
- package/dist/cli/bench/ui.js.map +1 -0
- package/dist/cli/brain/archive.d.ts +33 -0
- package/dist/cli/brain/archive.d.ts.map +1 -0
- package/dist/cli/brain/archive.js +166 -0
- package/dist/cli/brain/archive.js.map +1 -0
- package/dist/cli/brain/control-protocol.d.ts +913 -0
- package/dist/cli/brain/control-protocol.d.ts.map +1 -0
- package/dist/cli/brain/control-protocol.js +87 -0
- package/dist/cli/brain/control-protocol.js.map +1 -0
- package/dist/cli/brain/exporter.d.ts +34 -0
- package/dist/cli/brain/exporter.d.ts.map +1 -0
- package/dist/cli/brain/exporter.js +37 -0
- package/dist/cli/brain/exporter.js.map +1 -0
- package/dist/cli/brain/generator.d.ts +157 -0
- package/dist/cli/brain/generator.d.ts.map +1 -0
- package/dist/cli/brain/generator.js +633 -0
- package/dist/cli/brain/generator.js.map +1 -0
- package/dist/cli/brain/instance-manager.d.ts +42 -0
- package/dist/cli/brain/instance-manager.d.ts.map +1 -0
- package/dist/cli/brain/instance-manager.js +152 -0
- package/dist/cli/brain/instance-manager.js.map +1 -0
- package/dist/cli/brain/relay-client.d.ts +8 -0
- package/dist/cli/brain/relay-client.d.ts.map +1 -0
- package/dist/cli/brain/relay-client.js +505 -0
- package/dist/cli/brain/relay-client.js.map +1 -0
- package/dist/cli/brain/server.d.ts +40 -0
- package/dist/cli/brain/server.d.ts.map +1 -0
- package/dist/cli/brain/server.js +873 -0
- package/dist/cli/brain/server.js.map +1 -0
- package/dist/cli/brain/stdout-capture.d.ts +19 -0
- package/dist/cli/brain/stdout-capture.d.ts.map +1 -0
- package/dist/cli/brain/stdout-capture.js +45 -0
- package/dist/cli/brain/stdout-capture.js.map +1 -0
- package/dist/cli/brain/sync.d.ts +53 -0
- package/dist/cli/brain/sync.d.ts.map +1 -0
- package/dist/cli/brain/sync.js +113 -0
- package/dist/cli/brain/sync.js.map +1 -0
- package/dist/cli/brain/template.d.ts +3 -0
- package/dist/cli/brain/template.d.ts.map +1 -0
- package/dist/cli/brain/template.js +2099 -0
- package/dist/cli/brain/template.js.map +1 -0
- package/dist/cli/brain/web-chat-handler.d.ts +26 -0
- package/dist/cli/brain/web-chat-handler.d.ts.map +1 -0
- package/dist/cli/brain/web-chat-handler.js +134 -0
- package/dist/cli/brain/web-chat-handler.js.map +1 -0
- package/dist/cli/browser/chrome-finder.d.ts +12 -0
- package/dist/cli/browser/chrome-finder.d.ts.map +1 -0
- package/dist/cli/browser/chrome-finder.js +74 -0
- package/dist/cli/browser/chrome-finder.js.map +1 -0
- package/dist/cli/browser/controller.d.ts +51 -0
- package/dist/cli/browser/controller.d.ts.map +1 -0
- package/dist/cli/browser/controller.js +152 -0
- package/dist/cli/browser/controller.js.map +1 -0
- package/dist/cli/browser/vision.d.ts +38 -0
- package/dist/cli/browser/vision.d.ts.map +1 -0
- package/dist/cli/browser/vision.js +123 -0
- package/dist/cli/browser/vision.js.map +1 -0
- package/dist/cli/bugs/detector.d.ts +14 -0
- package/dist/cli/bugs/detector.d.ts.map +1 -0
- package/dist/cli/bugs/detector.js +108 -0
- package/dist/cli/bugs/detector.js.map +1 -0
- package/dist/cli/bugs/journal.d.ts +39 -0
- package/dist/cli/bugs/journal.d.ts.map +1 -0
- package/dist/cli/bugs/journal.js +195 -0
- package/dist/cli/bugs/journal.js.map +1 -0
- package/dist/cli/bugs/types.d.ts +27 -0
- package/dist/cli/bugs/types.d.ts.map +1 -0
- package/dist/cli/bugs/types.js +2 -0
- package/dist/cli/bugs/types.js.map +1 -0
- package/dist/cli/checkpoints/browser.d.ts +26 -0
- package/dist/cli/checkpoints/browser.d.ts.map +1 -0
- package/dist/cli/checkpoints/browser.js +272 -0
- package/dist/cli/checkpoints/browser.js.map +1 -0
- package/dist/cli/checkpoints/keybinding.d.ts +22 -0
- package/dist/cli/checkpoints/keybinding.d.ts.map +1 -0
- package/dist/cli/checkpoints/keybinding.js +44 -0
- package/dist/cli/checkpoints/keybinding.js.map +1 -0
- package/dist/cli/checkpoints/revert.d.ts +37 -0
- package/dist/cli/checkpoints/revert.d.ts.map +1 -0
- package/dist/cli/checkpoints/revert.js +144 -0
- package/dist/cli/checkpoints/revert.js.map +1 -0
- package/dist/cli/checkpoints/store.d.ts +48 -0
- package/dist/cli/checkpoints/store.d.ts.map +1 -0
- package/dist/cli/checkpoints/store.js +196 -0
- package/dist/cli/checkpoints/store.js.map +1 -0
- package/dist/cli/commands/archive.d.ts +7 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +66 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +10 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +44 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/bench.d.ts +25 -0
- package/dist/cli/commands/bench.d.ts.map +1 -0
- package/dist/cli/commands/bench.js +114 -0
- package/dist/cli/commands/bench.js.map +1 -0
- package/dist/cli/commands/chat.d.ts +11 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +5363 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/config.d.ts +4 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +43 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/feed.d.ts +6 -0
- package/dist/cli/commands/feed.d.ts.map +1 -0
- package/dist/cli/commands/feed.js +95 -0
- package/dist/cli/commands/feed.js.map +1 -0
- package/dist/cli/commands/helix-menu.d.ts +4 -0
- package/dist/cli/commands/helix-menu.d.ts.map +1 -0
- package/dist/cli/commands/helix-menu.js +400 -0
- package/dist/cli/commands/helix-menu.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +38 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +20 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +310 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/spiral.d.ts +4 -0
- package/dist/cli/commands/spiral.d.ts.map +1 -0
- package/dist/cli/commands/spiral.js +81 -0
- package/dist/cli/commands/spiral.js.map +1 -0
- package/dist/cli/config/store.d.ts +80 -0
- package/dist/cli/config/store.d.ts.map +1 -0
- package/dist/cli/config/store.js +247 -0
- package/dist/cli/config/store.js.map +1 -0
- package/dist/cli/config/trust.d.ts +21 -0
- package/dist/cli/config/trust.d.ts.map +1 -0
- package/dist/cli/config/trust.js +106 -0
- package/dist/cli/config/trust.js.map +1 -0
- package/dist/cli/context/assembler.d.ts +9 -0
- package/dist/cli/context/assembler.d.ts.map +1 -0
- package/dist/cli/context/assembler.js +217 -0
- package/dist/cli/context/assembler.js.map +1 -0
- package/dist/cli/context/project.d.ts +13 -0
- package/dist/cli/context/project.d.ts.map +1 -0
- package/dist/cli/context/project.js +126 -0
- package/dist/cli/context/project.js.map +1 -0
- package/dist/cli/context/session-buffer.d.ts +69 -0
- package/dist/cli/context/session-buffer.d.ts.map +1 -0
- package/dist/cli/context/session-buffer.js +362 -0
- package/dist/cli/context/session-buffer.js.map +1 -0
- package/dist/cli/context/trimmer.d.ts +26 -0
- package/dist/cli/context/trimmer.d.ts.map +1 -0
- package/dist/cli/context/trimmer.js +137 -0
- package/dist/cli/context/trimmer.js.map +1 -0
- package/dist/cli/core/index.d.ts +15 -0
- package/dist/cli/core/index.d.ts.map +1 -0
- package/dist/cli/core/index.js +12 -0
- package/dist/cli/core/index.js.map +1 -0
- package/dist/cli/core/input.d.ts +208 -0
- package/dist/cli/core/input.d.ts.map +1 -0
- package/dist/cli/core/input.js +807 -0
- package/dist/cli/core/input.js.map +1 -0
- package/dist/cli/core/screen.d.ts +211 -0
- package/dist/cli/core/screen.d.ts.map +1 -0
- package/dist/cli/core/screen.js +826 -0
- package/dist/cli/core/screen.js.map +1 -0
- package/dist/cli/core/terminal.d.ts +88 -0
- package/dist/cli/core/terminal.d.ts.map +1 -0
- package/dist/cli/core/terminal.js +200 -0
- package/dist/cli/core/terminal.js.map +1 -0
- package/dist/cli/feed/analyzer.d.ts +17 -0
- package/dist/cli/feed/analyzer.d.ts.map +1 -0
- package/dist/cli/feed/analyzer.js +220 -0
- package/dist/cli/feed/analyzer.js.map +1 -0
- package/dist/cli/feed/intent.d.ts +8 -0
- package/dist/cli/feed/intent.d.ts.map +1 -0
- package/dist/cli/feed/intent.js +70 -0
- package/dist/cli/feed/intent.js.map +1 -0
- package/dist/cli/feed/parser.d.ts +23 -0
- package/dist/cli/feed/parser.d.ts.map +1 -0
- package/dist/cli/feed/parser.js +166 -0
- package/dist/cli/feed/parser.js.map +1 -0
- package/dist/cli/feed/pipeline.d.ts +33 -0
- package/dist/cli/feed/pipeline.d.ts.map +1 -0
- package/dist/cli/feed/pipeline.js +250 -0
- package/dist/cli/feed/pipeline.js.map +1 -0
- package/dist/cli/feed/reader.d.ts +10 -0
- package/dist/cli/feed/reader.d.ts.map +1 -0
- package/dist/cli/feed/reader.js +61 -0
- package/dist/cli/feed/reader.js.map +1 -0
- package/dist/cli/feed/scanner.d.ts +10 -0
- package/dist/cli/feed/scanner.d.ts.map +1 -0
- package/dist/cli/feed/scanner.js +124 -0
- package/dist/cli/feed/scanner.js.map +1 -0
- package/dist/cli/feed/watcher.d.ts +14 -0
- package/dist/cli/feed/watcher.d.ts.map +1 -0
- package/dist/cli/feed/watcher.js +76 -0
- package/dist/cli/feed/watcher.js.map +1 -0
- package/dist/cli/helixmind.cmd +2 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +297 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/jarvis/autonomy.d.ts +55 -0
- package/dist/cli/jarvis/autonomy.d.ts.map +1 -0
- package/dist/cli/jarvis/autonomy.js +176 -0
- package/dist/cli/jarvis/autonomy.js.map +1 -0
- package/dist/cli/jarvis/code-reviewer.d.ts +35 -0
- package/dist/cli/jarvis/code-reviewer.d.ts.map +1 -0
- package/dist/cli/jarvis/code-reviewer.js +93 -0
- package/dist/cli/jarvis/code-reviewer.js.map +1 -0
- package/dist/cli/jarvis/core-ethics.d.ts +35 -0
- package/dist/cli/jarvis/core-ethics.d.ts.map +1 -0
- package/dist/cli/jarvis/core-ethics.js +246 -0
- package/dist/cli/jarvis/core-ethics.js.map +1 -0
- package/dist/cli/jarvis/daemon.d.ts +24 -0
- package/dist/cli/jarvis/daemon.d.ts.map +1 -0
- package/dist/cli/jarvis/daemon.js +230 -0
- package/dist/cli/jarvis/daemon.js.map +1 -0
- package/dist/cli/jarvis/dependency-guardian.d.ts +40 -0
- package/dist/cli/jarvis/dependency-guardian.d.ts.map +1 -0
- package/dist/cli/jarvis/dependency-guardian.js +148 -0
- package/dist/cli/jarvis/dependency-guardian.js.map +1 -0
- package/dist/cli/jarvis/git-intelligence.d.ts +36 -0
- package/dist/cli/jarvis/git-intelligence.d.ts.map +1 -0
- package/dist/cli/jarvis/git-intelligence.js +222 -0
- package/dist/cli/jarvis/git-intelligence.js.map +1 -0
- package/dist/cli/jarvis/identity.d.ts +57 -0
- package/dist/cli/jarvis/identity.d.ts.map +1 -0
- package/dist/cli/jarvis/identity.js +416 -0
- package/dist/cli/jarvis/identity.js.map +1 -0
- package/dist/cli/jarvis/index.d.ts +9 -0
- package/dist/cli/jarvis/index.d.ts.map +1 -0
- package/dist/cli/jarvis/index.js +7 -0
- package/dist/cli/jarvis/index.js.map +1 -0
- package/dist/cli/jarvis/instance-lock.d.ts +15 -0
- package/dist/cli/jarvis/instance-lock.d.ts.map +1 -0
- package/dist/cli/jarvis/instance-lock.js +95 -0
- package/dist/cli/jarvis/instance-lock.js.map +1 -0
- package/dist/cli/jarvis/learning.d.ts +73 -0
- package/dist/cli/jarvis/learning.d.ts.map +1 -0
- package/dist/cli/jarvis/learning.js +284 -0
- package/dist/cli/jarvis/learning.js.map +1 -0
- package/dist/cli/jarvis/multi-project.d.ts +39 -0
- package/dist/cli/jarvis/multi-project.d.ts.map +1 -0
- package/dist/cli/jarvis/multi-project.js +152 -0
- package/dist/cli/jarvis/multi-project.js.map +1 -0
- package/dist/cli/jarvis/notifications.d.ts +39 -0
- package/dist/cli/jarvis/notifications.d.ts.map +1 -0
- package/dist/cli/jarvis/notifications.js +216 -0
- package/dist/cli/jarvis/notifications.js.map +1 -0
- package/dist/cli/jarvis/onboarding.d.ts +19 -0
- package/dist/cli/jarvis/onboarding.d.ts.map +1 -0
- package/dist/cli/jarvis/onboarding.js +116 -0
- package/dist/cli/jarvis/onboarding.js.map +1 -0
- package/dist/cli/jarvis/orchestrator.d.ts +46 -0
- package/dist/cli/jarvis/orchestrator.d.ts.map +1 -0
- package/dist/cli/jarvis/orchestrator.js +253 -0
- package/dist/cli/jarvis/orchestrator.js.map +1 -0
- package/dist/cli/jarvis/parallel.d.ts +63 -0
- package/dist/cli/jarvis/parallel.d.ts.map +1 -0
- package/dist/cli/jarvis/parallel.js +172 -0
- package/dist/cli/jarvis/parallel.js.map +1 -0
- package/dist/cli/jarvis/performance-profiler.d.ts +31 -0
- package/dist/cli/jarvis/performance-profiler.d.ts.map +1 -0
- package/dist/cli/jarvis/performance-profiler.js +229 -0
- package/dist/cli/jarvis/performance-profiler.js.map +1 -0
- package/dist/cli/jarvis/proposals.d.ts +80 -0
- package/dist/cli/jarvis/proposals.d.ts.map +1 -0
- package/dist/cli/jarvis/proposals.js +286 -0
- package/dist/cli/jarvis/proposals.js.map +1 -0
- package/dist/cli/jarvis/queue.d.ts +41 -0
- package/dist/cli/jarvis/queue.d.ts.map +1 -0
- package/dist/cli/jarvis/queue.js +245 -0
- package/dist/cli/jarvis/queue.js.map +1 -0
- package/dist/cli/jarvis/runtime-context.d.ts +34 -0
- package/dist/cli/jarvis/runtime-context.d.ts.map +1 -0
- package/dist/cli/jarvis/runtime-context.js +113 -0
- package/dist/cli/jarvis/runtime-context.js.map +1 -0
- package/dist/cli/jarvis/scheduler.d.ts +21 -0
- package/dist/cli/jarvis/scheduler.d.ts.map +1 -0
- package/dist/cli/jarvis/scheduler.js +182 -0
- package/dist/cli/jarvis/scheduler.js.map +1 -0
- package/dist/cli/jarvis/sentiment.d.ts +29 -0
- package/dist/cli/jarvis/sentiment.d.ts.map +1 -0
- package/dist/cli/jarvis/sentiment.js +221 -0
- package/dist/cli/jarvis/sentiment.js.map +1 -0
- package/dist/cli/jarvis/skill-scoring.d.ts +63 -0
- package/dist/cli/jarvis/skill-scoring.d.ts.map +1 -0
- package/dist/cli/jarvis/skill-scoring.js +226 -0
- package/dist/cli/jarvis/skill-scoring.js.map +1 -0
- package/dist/cli/jarvis/skills.d.ts +87 -0
- package/dist/cli/jarvis/skills.d.ts.map +1 -0
- package/dist/cli/jarvis/skills.js +367 -0
- package/dist/cli/jarvis/skills.js.map +1 -0
- package/dist/cli/jarvis/telegram-bot.d.ts +77 -0
- package/dist/cli/jarvis/telegram-bot.d.ts.map +1 -0
- package/dist/cli/jarvis/telegram-bot.js +251 -0
- package/dist/cli/jarvis/telegram-bot.js.map +1 -0
- package/dist/cli/jarvis/telemetry.d.ts +32 -0
- package/dist/cli/jarvis/telemetry.d.ts.map +1 -0
- package/dist/cli/jarvis/telemetry.js +213 -0
- package/dist/cli/jarvis/telemetry.js.map +1 -0
- package/dist/cli/jarvis/test-sentinel.d.ts +36 -0
- package/dist/cli/jarvis/test-sentinel.d.ts.map +1 -0
- package/dist/cli/jarvis/test-sentinel.js +178 -0
- package/dist/cli/jarvis/test-sentinel.js.map +1 -0
- package/dist/cli/jarvis/thinking-loop.d.ts +15 -0
- package/dist/cli/jarvis/thinking-loop.d.ts.map +1 -0
- package/dist/cli/jarvis/thinking-loop.js +437 -0
- package/dist/cli/jarvis/thinking-loop.js.map +1 -0
- package/dist/cli/jarvis/triggers.d.ts +23 -0
- package/dist/cli/jarvis/triggers.d.ts.map +1 -0
- package/dist/cli/jarvis/triggers.js +157 -0
- package/dist/cli/jarvis/triggers.js.map +1 -0
- package/dist/cli/jarvis/types.d.ts +582 -0
- package/dist/cli/jarvis/types.d.ts.map +1 -0
- package/dist/cli/jarvis/types.js +18 -0
- package/dist/cli/jarvis/types.js.map +1 -0
- package/dist/cli/jarvis/voice-bridge.d.ts +68 -0
- package/dist/cli/jarvis/voice-bridge.d.ts.map +1 -0
- package/dist/cli/jarvis/voice-bridge.js +254 -0
- package/dist/cli/jarvis/voice-bridge.js.map +1 -0
- package/dist/cli/jarvis/world-model.d.ts +43 -0
- package/dist/cli/jarvis/world-model.d.ts.map +1 -0
- package/dist/cli/jarvis/world-model.js +209 -0
- package/dist/cli/jarvis/world-model.js.map +1 -0
- package/dist/cli/jarvis-proxy/client.d.ts +18 -0
- package/dist/cli/jarvis-proxy/client.d.ts.map +1 -0
- package/dist/cli/jarvis-proxy/client.js +64 -0
- package/dist/cli/jarvis-proxy/client.js.map +1 -0
- package/dist/cli/jarvis-proxy/executor.d.ts +13 -0
- package/dist/cli/jarvis-proxy/executor.d.ts.map +1 -0
- package/dist/cli/jarvis-proxy/executor.js +32 -0
- package/dist/cli/jarvis-proxy/executor.js.map +1 -0
- package/dist/cli/jarvis-proxy/types.d.ts +25 -0
- package/dist/cli/jarvis-proxy/types.d.ts.map +1 -0
- package/dist/cli/jarvis-proxy/types.js +7 -0
- package/dist/cli/jarvis-proxy/types.js.map +1 -0
- package/dist/cli/license/checker.d.ts +11 -0
- package/dist/cli/license/checker.d.ts.map +1 -0
- package/dist/cli/license/checker.js +28 -0
- package/dist/cli/license/checker.js.map +1 -0
- package/dist/cli/license/validator.d.ts +13 -0
- package/dist/cli/license/validator.d.ts.map +1 -0
- package/dist/cli/license/validator.js +72 -0
- package/dist/cli/license/validator.js.map +1 -0
- package/dist/cli/providers/anthropic.d.ts +11 -0
- package/dist/cli/providers/anthropic.d.ts.map +1 -0
- package/dist/cli/providers/anthropic.js +120 -0
- package/dist/cli/providers/anthropic.js.map +1 -0
- package/dist/cli/providers/model-limits.d.ts +12 -0
- package/dist/cli/providers/model-limits.d.ts.map +1 -0
- package/dist/cli/providers/model-limits.js +63 -0
- package/dist/cli/providers/model-limits.js.map +1 -0
- package/dist/cli/providers/ollama.d.ts +37 -0
- package/dist/cli/providers/ollama.d.ts.map +1 -0
- package/dist/cli/providers/ollama.js +151 -0
- package/dist/cli/providers/ollama.js.map +1 -0
- package/dist/cli/providers/openai.d.ts +14 -0
- package/dist/cli/providers/openai.d.ts.map +1 -0
- package/dist/cli/providers/openai.js +319 -0
- package/dist/cli/providers/openai.js.map +1 -0
- package/dist/cli/providers/rate-limiter.d.ts +51 -0
- package/dist/cli/providers/rate-limiter.d.ts.map +1 -0
- package/dist/cli/providers/rate-limiter.js +164 -0
- package/dist/cli/providers/rate-limiter.js.map +1 -0
- package/dist/cli/providers/registry.d.ts +16 -0
- package/dist/cli/providers/registry.d.ts.map +1 -0
- package/dist/cli/providers/registry.js +99 -0
- package/dist/cli/providers/registry.js.map +1 -0
- package/dist/cli/providers/types.d.ts +72 -0
- package/dist/cli/providers/types.d.ts.map +1 -0
- package/dist/cli/providers/types.js +2 -0
- package/dist/cli/providers/types.js.map +1 -0
- package/dist/cli/sessions/manager.d.ts +69 -0
- package/dist/cli/sessions/manager.d.ts.map +1 -0
- package/dist/cli/sessions/manager.js +201 -0
- package/dist/cli/sessions/manager.js.map +1 -0
- package/dist/cli/sessions/session.d.ts +58 -0
- package/dist/cli/sessions/session.d.ts.map +1 -0
- package/dist/cli/sessions/session.js +74 -0
- package/dist/cli/sessions/session.js.map +1 -0
- package/dist/cli/sessions/tab-view.d.ts +18 -0
- package/dist/cli/sessions/tab-view.d.ts.map +1 -0
- package/dist/cli/sessions/tab-view.js +137 -0
- package/dist/cli/sessions/tab-view.js.map +1 -0
- package/dist/cli/ui/activity.d.ts +81 -0
- package/dist/cli/ui/activity.d.ts.map +1 -0
- package/dist/cli/ui/activity.js +286 -0
- package/dist/cli/ui/activity.js.map +1 -0
- package/dist/cli/ui/agent-display.d.ts +24 -0
- package/dist/cli/ui/agent-display.d.ts.map +1 -0
- package/dist/cli/ui/agent-display.js +36 -0
- package/dist/cli/ui/agent-display.js.map +1 -0
- package/dist/cli/ui/bottom-chrome.d.ts +121 -0
- package/dist/cli/ui/bottom-chrome.d.ts.map +1 -0
- package/dist/cli/ui/bottom-chrome.js +428 -0
- package/dist/cli/ui/bottom-chrome.js.map +1 -0
- package/dist/cli/ui/chat-view.d.ts +10 -0
- package/dist/cli/ui/chat-view.d.ts.map +1 -0
- package/dist/cli/ui/chat-view.js +237 -0
- package/dist/cli/ui/chat-view.js.map +1 -0
- package/dist/cli/ui/command-suggest.d.ts +22 -0
- package/dist/cli/ui/command-suggest.d.ts.map +1 -0
- package/dist/cli/ui/command-suggest.js +118 -0
- package/dist/cli/ui/command-suggest.js.map +1 -0
- package/dist/cli/ui/input-window.d.ts +145 -0
- package/dist/cli/ui/input-window.d.ts.map +1 -0
- package/dist/cli/ui/input-window.js +415 -0
- package/dist/cli/ui/input-window.js.map +1 -0
- package/dist/cli/ui/logo.d.ts +3 -0
- package/dist/cli/ui/logo.d.ts.map +1 -0
- package/dist/cli/ui/logo.js +25 -0
- package/dist/cli/ui/logo.js.map +1 -0
- package/dist/cli/ui/plan-display.d.ts +35 -0
- package/dist/cli/ui/plan-display.d.ts.map +1 -0
- package/dist/cli/ui/plan-display.js +381 -0
- package/dist/cli/ui/plan-display.js.map +1 -0
- package/dist/cli/ui/progress.d.ts +22 -0
- package/dist/cli/ui/progress.d.ts.map +1 -0
- package/dist/cli/ui/progress.js +126 -0
- package/dist/cli/ui/progress.js.map +1 -0
- package/dist/cli/ui/prompt-history.d.ts +37 -0
- package/dist/cli/ui/prompt-history.d.ts.map +1 -0
- package/dist/cli/ui/prompt-history.js +156 -0
- package/dist/cli/ui/prompt-history.js.map +1 -0
- package/dist/cli/ui/select-menu.d.ts +45 -0
- package/dist/cli/ui/select-menu.d.ts.map +1 -0
- package/dist/cli/ui/select-menu.js +330 -0
- package/dist/cli/ui/select-menu.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +3 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +14 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/ui/statusbar.d.ts +72 -0
- package/dist/cli/ui/statusbar.d.ts.map +1 -0
- package/dist/cli/ui/statusbar.js +376 -0
- package/dist/cli/ui/statusbar.js.map +1 -0
- package/dist/cli/ui/suggestion-panel.d.ts +52 -0
- package/dist/cli/ui/suggestion-panel.d.ts.map +1 -0
- package/dist/cli/ui/suggestion-panel.js +159 -0
- package/dist/cli/ui/suggestion-panel.js.map +1 -0
- package/dist/cli/ui/theme.d.ts +20 -0
- package/dist/cli/ui/theme.d.ts.map +1 -0
- package/dist/cli/ui/theme.js +25 -0
- package/dist/cli/ui/theme.js.map +1 -0
- package/dist/cli/ui/tool-output.d.ts +31 -0
- package/dist/cli/ui/tool-output.d.ts.map +1 -0
- package/dist/cli/ui/tool-output.js +204 -0
- package/dist/cli/ui/tool-output.js.map +1 -0
- package/dist/cli/validation/autofix.d.ts +32 -0
- package/dist/cli/validation/autofix.d.ts.map +1 -0
- package/dist/cli/validation/autofix.js +148 -0
- package/dist/cli/validation/autofix.js.map +1 -0
- package/dist/cli/validation/classifier.d.ts +17 -0
- package/dist/cli/validation/classifier.d.ts.map +1 -0
- package/dist/cli/validation/classifier.js +174 -0
- package/dist/cli/validation/classifier.js.map +1 -0
- package/dist/cli/validation/criteria.d.ts +22 -0
- package/dist/cli/validation/criteria.d.ts.map +1 -0
- package/dist/cli/validation/criteria.js +188 -0
- package/dist/cli/validation/criteria.js.map +1 -0
- package/dist/cli/validation/dynamic-checks.d.ts +16 -0
- package/dist/cli/validation/dynamic-checks.d.ts.map +1 -0
- package/dist/cli/validation/dynamic-checks.js +109 -0
- package/dist/cli/validation/dynamic-checks.js.map +1 -0
- package/dist/cli/validation/model.d.ts +16 -0
- package/dist/cli/validation/model.d.ts.map +1 -0
- package/dist/cli/validation/model.js +59 -0
- package/dist/cli/validation/model.js.map +1 -0
- package/dist/cli/validation/reporter.d.ts +18 -0
- package/dist/cli/validation/reporter.d.ts.map +1 -0
- package/dist/cli/validation/reporter.js +209 -0
- package/dist/cli/validation/reporter.js.map +1 -0
- package/dist/cli/validation/spiral-checks.d.ts +12 -0
- package/dist/cli/validation/spiral-checks.d.ts.map +1 -0
- package/dist/cli/validation/spiral-checks.js +167 -0
- package/dist/cli/validation/spiral-checks.js.map +1 -0
- package/dist/cli/validation/static-checks.d.ts +26 -0
- package/dist/cli/validation/static-checks.d.ts.map +1 -0
- package/dist/cli/validation/static-checks.js +648 -0
- package/dist/cli/validation/static-checks.js.map +1 -0
- package/dist/cli/validation/stats.d.ts +29 -0
- package/dist/cli/validation/stats.d.ts.map +1 -0
- package/dist/cli/validation/stats.js +137 -0
- package/dist/cli/validation/stats.js.map +1 -0
- package/dist/cli/version.d.ts +2 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +5 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli/voice/clone-manager.d.ts +19 -0
- package/dist/cli/voice/clone-manager.d.ts.map +1 -0
- package/dist/cli/voice/clone-manager.js +55 -0
- package/dist/cli/voice/clone-manager.js.map +1 -0
- package/dist/cli/voice/engine.d.ts +43 -0
- package/dist/cli/voice/engine.d.ts.map +1 -0
- package/dist/cli/voice/engine.js +109 -0
- package/dist/cli/voice/engine.js.map +1 -0
- package/dist/cli/voice/whisper-stt.d.ts +28 -0
- package/dist/cli/voice/whisper-stt.d.ts.map +1 -0
- package/dist/cli/voice/whisper-stt.js +78 -0
- package/dist/cli/voice/whisper-stt.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +44 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/protocol-types.d.ts +283 -0
- package/dist/shared/protocol-types.d.ts.map +1 -0
- package/dist/shared/protocol-types.js +9 -0
- package/dist/shared/protocol-types.js.map +1 -0
- package/dist/spiral/cloud/content-extractor.d.ts +27 -0
- package/dist/spiral/cloud/content-extractor.d.ts.map +1 -0
- package/dist/spiral/cloud/content-extractor.js +175 -0
- package/dist/spiral/cloud/content-extractor.js.map +1 -0
- package/dist/spiral/cloud/search-provider.d.ts +22 -0
- package/dist/spiral/cloud/search-provider.d.ts.map +1 -0
- package/dist/spiral/cloud/search-provider.js +241 -0
- package/dist/spiral/cloud/search-provider.js.map +1 -0
- package/dist/spiral/cloud/topic-detector.d.ts +25 -0
- package/dist/spiral/cloud/topic-detector.d.ts.map +1 -0
- package/dist/spiral/cloud/topic-detector.js +196 -0
- package/dist/spiral/cloud/topic-detector.js.map +1 -0
- package/dist/spiral/cloud/web-enricher.d.ts +58 -0
- package/dist/spiral/cloud/web-enricher.d.ts.map +1 -0
- package/dist/spiral/cloud/web-enricher.js +176 -0
- package/dist/spiral/cloud/web-enricher.js.map +1 -0
- package/dist/spiral/compression.d.ts +54 -0
- package/dist/spiral/compression.d.ts.map +1 -0
- package/dist/spiral/compression.js +175 -0
- package/dist/spiral/compression.js.map +1 -0
- package/dist/spiral/embeddings.d.ts +30 -0
- package/dist/spiral/embeddings.d.ts.map +1 -0
- package/dist/spiral/embeddings.js +99 -0
- package/dist/spiral/embeddings.js.map +1 -0
- package/dist/spiral/engine.d.ts +98 -0
- package/dist/spiral/engine.d.ts.map +1 -0
- package/dist/spiral/engine.js +330 -0
- package/dist/spiral/engine.js.map +1 -0
- package/dist/spiral/injection.d.ts +29 -0
- package/dist/spiral/injection.d.ts.map +1 -0
- package/dist/spiral/injection.js +176 -0
- package/dist/spiral/injection.js.map +1 -0
- package/dist/spiral/relevance.d.ts +37 -0
- package/dist/spiral/relevance.d.ts.map +1 -0
- package/dist/spiral/relevance.js +75 -0
- package/dist/spiral/relevance.js.map +1 -0
- package/dist/storage/database.d.ts +11 -0
- package/dist/storage/database.d.ts.map +1 -0
- package/dist/storage/database.js +169 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/edges.d.ts +30 -0
- package/dist/storage/edges.d.ts.map +1 -0
- package/dist/storage/edges.js +98 -0
- package/dist/storage/edges.js.map +1 -0
- package/dist/storage/nodes.d.ts +60 -0
- package/dist/storage/nodes.d.ts.map +1 -0
- package/dist/storage/nodes.js +161 -0
- package/dist/storage/nodes.js.map +1 -0
- package/dist/storage/vectors.d.ts +25 -0
- package/dist/storage/vectors.d.ts.map +1 -0
- package/dist/storage/vectors.js +110 -0
- package/dist/storage/vectors.js.map +1 -0
- package/dist/tools/spiral-compact.d.ts +14 -0
- package/dist/tools/spiral-compact.d.ts.map +1 -0
- package/dist/tools/spiral-compact.js +14 -0
- package/dist/tools/spiral-compact.js.map +1 -0
- package/dist/tools/spiral-query.d.ts +18 -0
- package/dist/tools/spiral-query.d.ts.map +1 -0
- package/dist/tools/spiral-query.js +16 -0
- package/dist/tools/spiral-query.js.map +1 -0
- package/dist/tools/spiral-relate.d.ts +21 -0
- package/dist/tools/spiral-relate.d.ts.map +1 -0
- package/dist/tools/spiral-relate.js +21 -0
- package/dist/tools/spiral-relate.js.map +1 -0
- package/dist/tools/spiral-status.d.ts +8 -0
- package/dist/tools/spiral-status.d.ts.map +1 -0
- package/dist/tools/spiral-status.js +10 -0
- package/dist/tools/spiral-status.js.map +1 -0
- package/dist/tools/spiral-store.d.ts +41 -0
- package/dist/tools/spiral-store.d.ts.map +1 -0
- package/dist/tools/spiral-store.js +22 -0
- package/dist/tools/spiral-store.js.map +1 -0
- package/dist/types.d.ts +94 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +44 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +40 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/tokens.d.ts +21 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +33 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static validation checks — no LLM calls, pure algorithms.
|
|
3
|
+
* Fast (~50ms) pattern matching, parsing, and analysis.
|
|
4
|
+
*/
|
|
5
|
+
export interface CheckResult {
|
|
6
|
+
id: string;
|
|
7
|
+
passed: boolean;
|
|
8
|
+
details: string;
|
|
9
|
+
fix?: string;
|
|
10
|
+
severity: 'error' | 'warning' | 'info';
|
|
11
|
+
autofix: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface StaticCheckContext {
|
|
14
|
+
lang?: string;
|
|
15
|
+
projectFiles?: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Run all applicable static checks on the output.
|
|
19
|
+
*/
|
|
20
|
+
export declare function runStaticChecks(output: string, criterionIds: string[], context?: StaticCheckContext): CheckResult[];
|
|
21
|
+
/**
|
|
22
|
+
* Extract code from markdown code blocks with given language hints.
|
|
23
|
+
* Also handles raw code without blocks.
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractCodeContent(output: string, languages: string[]): string | null;
|
|
26
|
+
//# sourceMappingURL=static-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-checks.d.ts","sourceRoot":"","sources":["../../../src/cli/validation/static-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AA2dD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,WAAW,EAAE,CAgBf;AAYD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAyBrF"}
|
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static validation checks — no LLM calls, pure algorithms.
|
|
3
|
+
* Fast (~50ms) pattern matching, parsing, and analysis.
|
|
4
|
+
*/
|
|
5
|
+
// ── Void HTML elements (self-closing) ──
|
|
6
|
+
const VOID_ELEMENTS = new Set([
|
|
7
|
+
'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',
|
|
8
|
+
'link', 'meta', 'param', 'source', 'track', 'wbr',
|
|
9
|
+
]);
|
|
10
|
+
// ── Static Checkers ──
|
|
11
|
+
const checkers = {
|
|
12
|
+
'html-valid': (output) => {
|
|
13
|
+
// Extract code blocks that contain HTML
|
|
14
|
+
const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue', 'svelte']);
|
|
15
|
+
if (!html)
|
|
16
|
+
return pass('html-valid', 'No HTML content found');
|
|
17
|
+
const stack = [];
|
|
18
|
+
const tagRegex = /<\/?([a-zA-Z][a-zA-Z0-9-]*)[^>]*\/?>/g;
|
|
19
|
+
let match;
|
|
20
|
+
while ((match = tagRegex.exec(html)) !== null) {
|
|
21
|
+
const fullTag = match[0];
|
|
22
|
+
const tagName = match[1].toLowerCase();
|
|
23
|
+
if (VOID_ELEMENTS.has(tagName))
|
|
24
|
+
continue;
|
|
25
|
+
if (fullTag.endsWith('/>'))
|
|
26
|
+
continue; // Self-closing
|
|
27
|
+
if (fullTag.startsWith('</')) {
|
|
28
|
+
// Closing tag
|
|
29
|
+
if (stack.length === 0) {
|
|
30
|
+
return fail('html-valid', `Unexpected closing tag </${tagName}>`, `Remove stray </${tagName}>`);
|
|
31
|
+
}
|
|
32
|
+
const expected = stack.pop();
|
|
33
|
+
if (expected !== tagName) {
|
|
34
|
+
return fail('html-valid', `Mismatched tags: expected </${expected}>, found </${tagName}>`, `Change </${tagName}> to </${expected}>`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Opening tag
|
|
39
|
+
stack.push(tagName);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (stack.length > 0) {
|
|
43
|
+
const unclosed = stack.reverse().map(t => `<${t}>`).join(', ');
|
|
44
|
+
return fail('html-valid', `Unclosed tags: ${unclosed}`, stack.map(t => `</${t}>`).join('\n'));
|
|
45
|
+
}
|
|
46
|
+
return pass('html-valid', 'HTML tags properly balanced');
|
|
47
|
+
},
|
|
48
|
+
'links-valid': (output) => {
|
|
49
|
+
const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue']);
|
|
50
|
+
if (!html)
|
|
51
|
+
return pass('links-valid', 'No HTML content found');
|
|
52
|
+
const hrefRegex = /(?:href|src|action)=["']([^"']*?)["']/gi;
|
|
53
|
+
const issues = [];
|
|
54
|
+
let match;
|
|
55
|
+
while ((match = hrefRegex.exec(html)) !== null) {
|
|
56
|
+
const value = match[1];
|
|
57
|
+
if (!value || value === '' || value === '#undefined' || value === 'undefined') {
|
|
58
|
+
issues.push(`Empty/invalid ${match[0]}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (issues.length > 0) {
|
|
62
|
+
return fail('links-valid', issues.join('; '), undefined, 'error');
|
|
63
|
+
}
|
|
64
|
+
return pass('links-valid', 'All links valid');
|
|
65
|
+
},
|
|
66
|
+
'ids-unique': (output) => {
|
|
67
|
+
const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue']);
|
|
68
|
+
if (!html)
|
|
69
|
+
return pass('ids-unique', 'No HTML content found');
|
|
70
|
+
const idRegex = /\bid=["']([^"']+)["']/gi;
|
|
71
|
+
const seen = new Map();
|
|
72
|
+
let match;
|
|
73
|
+
while ((match = idRegex.exec(html)) !== null) {
|
|
74
|
+
const id = match[1];
|
|
75
|
+
seen.set(id, (seen.get(id) || 0) + 1);
|
|
76
|
+
}
|
|
77
|
+
const duplicates = [...seen.entries()].filter(([, count]) => count > 1);
|
|
78
|
+
if (duplicates.length > 0) {
|
|
79
|
+
const dupeList = duplicates.map(([id, count]) => `"${id}" (${count}x)`).join(', ');
|
|
80
|
+
return fail('ids-unique', `Duplicate IDs: ${dupeList}`, `Rename duplicate IDs to be unique`);
|
|
81
|
+
}
|
|
82
|
+
return pass('ids-unique', 'All IDs unique');
|
|
83
|
+
},
|
|
84
|
+
'img-alt': (output) => {
|
|
85
|
+
const html = extractCodeContent(output, ['html', 'jsx', 'tsx', 'vue']);
|
|
86
|
+
if (!html)
|
|
87
|
+
return pass('img-alt', 'No HTML content found');
|
|
88
|
+
const imgRegex = /<img\b[^>]*>/gi;
|
|
89
|
+
const images = html.match(imgRegex) || [];
|
|
90
|
+
const missingAlt = images.filter(img => !img.includes('alt='));
|
|
91
|
+
if (missingAlt.length > 0) {
|
|
92
|
+
return {
|
|
93
|
+
id: 'img-alt',
|
|
94
|
+
passed: false,
|
|
95
|
+
details: `${missingAlt.length} image(s) missing alt attribute`,
|
|
96
|
+
fix: 'Add alt="" to images',
|
|
97
|
+
severity: 'warning',
|
|
98
|
+
autofix: true,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
return pass('img-alt', 'All images have alt attributes', 'warning');
|
|
102
|
+
},
|
|
103
|
+
'syntax-valid': (output, ctx) => {
|
|
104
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'json', 'css']);
|
|
105
|
+
if (!code)
|
|
106
|
+
return pass('syntax-valid', 'No code content found');
|
|
107
|
+
const lang = ctx?.lang || detectLanguage(code);
|
|
108
|
+
if (lang === 'json') {
|
|
109
|
+
try {
|
|
110
|
+
JSON.parse(code);
|
|
111
|
+
return pass('syntax-valid', 'Valid JSON');
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
return fail('syntax-valid', `Invalid JSON: ${e.message}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Check bracket/brace/paren balance
|
|
118
|
+
const balance = checkBracketBalance(code);
|
|
119
|
+
if (!balance.balanced) {
|
|
120
|
+
return fail('syntax-valid', `Unbalanced ${balance.type}: ${balance.details}`, balance.fix);
|
|
121
|
+
}
|
|
122
|
+
// Check for obvious syntax errors
|
|
123
|
+
const syntaxIssues = checkBasicSyntax(code);
|
|
124
|
+
if (syntaxIssues) {
|
|
125
|
+
return fail('syntax-valid', syntaxIssues);
|
|
126
|
+
}
|
|
127
|
+
return pass('syntax-valid', 'Syntax appears valid');
|
|
128
|
+
},
|
|
129
|
+
'imports-resolve': (output, ctx) => {
|
|
130
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
131
|
+
if (!code)
|
|
132
|
+
return pass('imports-resolve', 'No code content found');
|
|
133
|
+
const importRegex = /import\s+(?:.*?\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
134
|
+
const issues = [];
|
|
135
|
+
let match;
|
|
136
|
+
while ((match = importRegex.exec(code)) !== null) {
|
|
137
|
+
const path = match[1];
|
|
138
|
+
// Skip node_modules imports
|
|
139
|
+
if (!path.startsWith('.') && !path.startsWith('/'))
|
|
140
|
+
continue;
|
|
141
|
+
if (ctx?.projectFiles && ctx.projectFiles.length > 0) {
|
|
142
|
+
// Check if file exists in known project files
|
|
143
|
+
const normalized = path.replace(/\.(js|ts|jsx|tsx)$/, '');
|
|
144
|
+
const found = ctx.projectFiles.some(f => f.includes(normalized) || f.includes(normalized + '.ts') || f.includes(normalized + '.js'));
|
|
145
|
+
if (!found) {
|
|
146
|
+
issues.push(`Import "${path}" may not exist`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (issues.length > 0) {
|
|
151
|
+
return fail('imports-resolve', issues.join('; '));
|
|
152
|
+
}
|
|
153
|
+
return pass('imports-resolve', 'All imports appear valid');
|
|
154
|
+
},
|
|
155
|
+
'no-dead-code': (output) => {
|
|
156
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
157
|
+
if (!code)
|
|
158
|
+
return pass('no-dead-code', 'No code content found');
|
|
159
|
+
const issues = [];
|
|
160
|
+
// Check for unreachable code after return/throw/break/continue
|
|
161
|
+
const unreachableRegex = /\b(return|throw|break|continue)\b[^;]*;\s*\n\s*(?![\s}]|\/\/|\/\*|case\s|default:)([\w])/gm;
|
|
162
|
+
if (unreachableRegex.test(code)) {
|
|
163
|
+
issues.push('Possible unreachable code after return/throw');
|
|
164
|
+
}
|
|
165
|
+
// Check for unused imports (simple heuristic)
|
|
166
|
+
const importNames = extractImportNames(code);
|
|
167
|
+
for (const name of importNames) {
|
|
168
|
+
// Count occurrences after the import line
|
|
169
|
+
const afterImport = code.slice(code.indexOf(name) + name.length);
|
|
170
|
+
if (!afterImport.includes(name)) {
|
|
171
|
+
issues.push(`Possibly unused import: ${name}`);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (issues.length > 0) {
|
|
175
|
+
return { id: 'no-dead-code', passed: false, details: issues.join('; '), severity: 'warning', autofix: true };
|
|
176
|
+
}
|
|
177
|
+
return pass('no-dead-code', 'No dead code detected', 'warning');
|
|
178
|
+
},
|
|
179
|
+
'no-hardcoded': (output) => {
|
|
180
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'py', 'python']);
|
|
181
|
+
if (!code)
|
|
182
|
+
return pass('no-hardcoded', 'No code content found');
|
|
183
|
+
const issues = [];
|
|
184
|
+
// API keys / secrets patterns
|
|
185
|
+
const secretPatterns = [
|
|
186
|
+
/['"][A-Za-z0-9+/]{40,}['"]/, // Long base64-like strings
|
|
187
|
+
/(?:api[_-]?key|secret|password|token)\s*[:=]\s*['"][^'"]{8,}['"]/i,
|
|
188
|
+
/sk-[a-zA-Z0-9]{20,}/, // OpenAI key pattern
|
|
189
|
+
/ghp_[a-zA-Z0-9]{36}/, // GitHub PAT
|
|
190
|
+
/(?:AKIA|ASIA)[A-Z0-9]{16}/, // AWS access key
|
|
191
|
+
];
|
|
192
|
+
for (const pattern of secretPatterns) {
|
|
193
|
+
if (pattern.test(code)) {
|
|
194
|
+
issues.push('Possible hardcoded secret/API key detected');
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Hardcoded localhost URLs (not in comments/config)
|
|
199
|
+
if (/['"]https?:\/\/localhost:\d+/.test(code) && !code.includes('// dev') && !code.includes('development')) {
|
|
200
|
+
issues.push('Hardcoded localhost URL');
|
|
201
|
+
}
|
|
202
|
+
if (issues.length > 0) {
|
|
203
|
+
return { id: 'no-hardcoded', passed: false, details: issues.join('; '), severity: 'warning', autofix: false };
|
|
204
|
+
}
|
|
205
|
+
return pass('no-hardcoded', 'No hardcoded secrets detected', 'warning');
|
|
206
|
+
},
|
|
207
|
+
'sql-injection': (output) => {
|
|
208
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'py', 'python']);
|
|
209
|
+
if (!code)
|
|
210
|
+
return pass('sql-injection', 'No code content found');
|
|
211
|
+
// Check for string concatenation in SQL queries
|
|
212
|
+
const sqlConcat = /(?:query|exec|execute|run|prepare)\s*\(\s*[`'"](?:SELECT|INSERT|UPDATE|DELETE|CREATE|DROP|ALTER)\b[^`'"]*\$\{/i;
|
|
213
|
+
const sqlPlus = /(?:query|exec|execute|run)\s*\(\s*['"](?:SELECT|INSERT|UPDATE|DELETE)\b[^'"]*['"]\s*\+/i;
|
|
214
|
+
if (sqlConcat.test(code) || sqlPlus.test(code)) {
|
|
215
|
+
return fail('sql-injection', 'SQL query with string interpolation/concatenation detected', 'Use parameterized queries instead');
|
|
216
|
+
}
|
|
217
|
+
return pass('sql-injection', 'No SQL injection vulnerabilities detected');
|
|
218
|
+
},
|
|
219
|
+
'async-await': (output) => {
|
|
220
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
221
|
+
if (!code)
|
|
222
|
+
return pass('async-await', 'No async code found');
|
|
223
|
+
const issues = [];
|
|
224
|
+
// Find async function declarations and check if they use await.
|
|
225
|
+
// Use bracket counting instead of regex to handle nested blocks correctly.
|
|
226
|
+
const asyncPattern = /async\s+(?:function\s+)?(\w+)\s*\([^)]*\)\s*\{/g;
|
|
227
|
+
let match;
|
|
228
|
+
while ((match = asyncPattern.exec(code)) !== null) {
|
|
229
|
+
const funcName = match[1];
|
|
230
|
+
const bodyStart = match.index + match[0].length - 1; // index of opening {
|
|
231
|
+
const body = extractBalancedBlock(code, bodyStart);
|
|
232
|
+
if (body && !body.includes('await') && !body.includes('Promise') && !body.includes('.then(')) {
|
|
233
|
+
issues.push(`Async function "${funcName}" has no await`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (issues.length > 0) {
|
|
237
|
+
return fail('async-await', issues.join('; '));
|
|
238
|
+
}
|
|
239
|
+
return pass('async-await', 'Async/await usage appears correct');
|
|
240
|
+
},
|
|
241
|
+
'error-handling': (output) => {
|
|
242
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
243
|
+
if (!code)
|
|
244
|
+
return pass('error-handling', 'No code content found');
|
|
245
|
+
// Check if there are async operations without try/catch
|
|
246
|
+
const hasAsync = code.includes('await ');
|
|
247
|
+
const hasTryCatch = code.includes('try {') || code.includes('try{');
|
|
248
|
+
const hasCatch = code.includes('.catch(');
|
|
249
|
+
if (hasAsync && !hasTryCatch && !hasCatch) {
|
|
250
|
+
return fail('error-handling', 'Async operations without error handling', 'Wrap in try/catch');
|
|
251
|
+
}
|
|
252
|
+
return pass('error-handling', 'Error handling present');
|
|
253
|
+
},
|
|
254
|
+
'status-codes': (output) => {
|
|
255
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
256
|
+
if (!code)
|
|
257
|
+
return pass('status-codes', 'No HTTP status code usage found');
|
|
258
|
+
// Count status codes used
|
|
259
|
+
const statusRegex = /\.status\((\d{3})\)/g;
|
|
260
|
+
const codes = new Set();
|
|
261
|
+
let match;
|
|
262
|
+
while ((match = statusRegex.exec(code)) !== null) {
|
|
263
|
+
codes.add(match[1]);
|
|
264
|
+
}
|
|
265
|
+
if (codes.size > 0 && codes.size === 1 && codes.has('200')) {
|
|
266
|
+
return { id: 'status-codes', passed: false, details: 'Only status 200 used — use appropriate codes (201, 400, 404, 500)', severity: 'warning', autofix: true };
|
|
267
|
+
}
|
|
268
|
+
return pass('status-codes', 'HTTP status codes look appropriate', 'warning');
|
|
269
|
+
},
|
|
270
|
+
'assertions-exist': (output) => {
|
|
271
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
272
|
+
if (!code)
|
|
273
|
+
return pass('assertions-exist', 'No test code found');
|
|
274
|
+
// Find test blocks
|
|
275
|
+
const testRegex = /(?:it|test)\s*\(\s*['"][^'"]+['"]\s*,\s*(?:async\s*)?\(\s*\)\s*=>\s*\{([^]*?)(?=\n\s*(?:it|test|describe)\s*\(|\n\}\);\s*$)/g;
|
|
276
|
+
const issues = [];
|
|
277
|
+
let match;
|
|
278
|
+
while ((match = testRegex.exec(code)) !== null) {
|
|
279
|
+
const body = match[1];
|
|
280
|
+
if (!body.includes('expect(') && !body.includes('assert') && !body.includes('should')) {
|
|
281
|
+
// Extract test name for reporting
|
|
282
|
+
const nameMatch = code.slice(match.index).match(/['"]([^'"]+)['"]/);
|
|
283
|
+
issues.push(`Test "${nameMatch?.[1] || 'unknown'}" has no assertion`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (issues.length > 0) {
|
|
287
|
+
return fail('assertions-exist', issues.join('; '));
|
|
288
|
+
}
|
|
289
|
+
return pass('assertions-exist', 'All tests have assertions');
|
|
290
|
+
},
|
|
291
|
+
'mocks-cleanup': (output) => {
|
|
292
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
293
|
+
if (!code)
|
|
294
|
+
return pass('mocks-cleanup', 'No test code found');
|
|
295
|
+
const hasMocks = code.includes('vi.mock') || code.includes('jest.mock') || code.includes('sinon');
|
|
296
|
+
const hasCleanup = code.includes('afterEach') || code.includes('afterAll') || code.includes('restoreAllMocks') || code.includes('resetAllMocks') || code.includes('clearAllMocks');
|
|
297
|
+
if (hasMocks && !hasCleanup) {
|
|
298
|
+
return { id: 'mocks-cleanup', passed: false, details: 'Mocks used without cleanup (afterEach/restoreAllMocks)', fix: 'Add afterEach(() => vi.restoreAllMocks())', severity: 'warning', autofix: true };
|
|
299
|
+
}
|
|
300
|
+
return pass('mocks-cleanup', 'Mocks properly cleaned up', 'warning');
|
|
301
|
+
},
|
|
302
|
+
'input-handled': (output) => {
|
|
303
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'py', 'python']);
|
|
304
|
+
if (!code)
|
|
305
|
+
return pass('input-handled', 'No code content found');
|
|
306
|
+
// Check for array/object operations without null checks
|
|
307
|
+
const hasArrayOps = /\.\s*(?:map|filter|reduce|forEach|find)\s*\(/.test(code);
|
|
308
|
+
const hasNullCheck = /(?:if\s*\(\s*!?\s*\w+|[\w.]+\s*\?\.|[\w.]+\s*!==?\s*(?:null|undefined))/.test(code);
|
|
309
|
+
if (hasArrayOps && !hasNullCheck) {
|
|
310
|
+
return fail('input-handled', 'Array operations without null/undefined checks', 'Add input validation');
|
|
311
|
+
}
|
|
312
|
+
return pass('input-handled', 'Input handling appears adequate');
|
|
313
|
+
},
|
|
314
|
+
'no-circular': (output) => {
|
|
315
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
316
|
+
if (!code)
|
|
317
|
+
return pass('no-circular', 'No code content found');
|
|
318
|
+
// Simple heuristic: check if a file imports itself or has obvious circular patterns
|
|
319
|
+
const importRegex = /import\s+.*from\s+['"]([^'"]+)['"]/g;
|
|
320
|
+
const exportRegex = /export\s+.*from\s+['"]([^'"]+)['"]/g;
|
|
321
|
+
const imports = new Set();
|
|
322
|
+
let match;
|
|
323
|
+
while ((match = importRegex.exec(code)) !== null)
|
|
324
|
+
imports.add(match[1]);
|
|
325
|
+
while ((match = exportRegex.exec(code)) !== null)
|
|
326
|
+
imports.add(match[1]);
|
|
327
|
+
// Can't detect circular deps from a single output — pass
|
|
328
|
+
return pass('no-circular', 'No obvious circular dependencies');
|
|
329
|
+
},
|
|
330
|
+
'no-secrets': (output) => {
|
|
331
|
+
const code = extractCodeContent(output, ['json', 'yaml', 'yml', 'toml', 'env', 'ini', 'cfg', 'ts', 'typescript', 'js', 'javascript']);
|
|
332
|
+
if (!code)
|
|
333
|
+
return pass('no-secrets', 'No config content found');
|
|
334
|
+
const secretKeys = /["']?(?:password|secret|api[_-]?key|token|private[_-]?key)["']?\s*[:=]\s*["']?[^\s"',}{]{5,}/i;
|
|
335
|
+
if (secretKeys.test(code)) {
|
|
336
|
+
return fail('no-secrets', 'Possible plaintext secret in configuration');
|
|
337
|
+
}
|
|
338
|
+
return pass('no-secrets', 'No plaintext secrets detected');
|
|
339
|
+
},
|
|
340
|
+
'code-duplication': (output) => {
|
|
341
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript', 'py', 'python']);
|
|
342
|
+
if (!code)
|
|
343
|
+
return pass('code-duplication', 'No code content found');
|
|
344
|
+
// Extract meaningful lines — skip short lines, comments, and common boilerplate
|
|
345
|
+
const boilerplate = new Set(['return;', 'break;', 'continue;', 'default:', 'else {', '} else {', '});', '],', '});']);
|
|
346
|
+
const lines = code.split('\n')
|
|
347
|
+
.map(l => l.trim())
|
|
348
|
+
.filter(l => l.length > 40
|
|
349
|
+
&& !l.startsWith('//')
|
|
350
|
+
&& !l.startsWith('#')
|
|
351
|
+
&& !l.startsWith('*')
|
|
352
|
+
&& !l.startsWith('import ')
|
|
353
|
+
&& !l.startsWith('return ')
|
|
354
|
+
&& !boilerplate.has(l));
|
|
355
|
+
const lineCounts = new Map();
|
|
356
|
+
for (const line of lines) {
|
|
357
|
+
lineCounts.set(line, (lineCounts.get(line) || 0) + 1);
|
|
358
|
+
}
|
|
359
|
+
const duplicates = [...lineCounts.entries()].filter(([, count]) => count > 1);
|
|
360
|
+
if (duplicates.length > 3) {
|
|
361
|
+
const dupeList = duplicates.slice(0, 5).map(([line, count]) => `"${line.slice(0, 40)}..." (${count}x)`).join('; ');
|
|
362
|
+
return {
|
|
363
|
+
id: 'code-duplication',
|
|
364
|
+
passed: false,
|
|
365
|
+
details: `${duplicates.length} duplicate lines found: ${dupeList}`,
|
|
366
|
+
severity: 'warning',
|
|
367
|
+
autofix: false
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
return pass('code-duplication', 'No significant code duplication', 'warning');
|
|
371
|
+
},
|
|
372
|
+
'outdated-references': (output, ctx) => {
|
|
373
|
+
const code = extractCodeContent(output, ['ts', 'typescript', 'js', 'javascript']);
|
|
374
|
+
if (!code)
|
|
375
|
+
return pass('outdated-references', 'No code content found');
|
|
376
|
+
const issues = [];
|
|
377
|
+
const importRegex = /import\s+(?:.*?\s+from\s+)?['"]([^'"]+)['"]/g;
|
|
378
|
+
let match;
|
|
379
|
+
while ((match = importRegex.exec(code)) !== null) {
|
|
380
|
+
const importPath = match[1];
|
|
381
|
+
// Skip node_modules imports
|
|
382
|
+
if (!importPath.startsWith('.') && !importPath.startsWith('/'))
|
|
383
|
+
continue;
|
|
384
|
+
// In ESM TypeScript, .js imports are the CORRECT pattern (compiled output).
|
|
385
|
+
// Flag .ts imports instead — they should use .js extension for ESM.
|
|
386
|
+
if (importPath.endsWith('.ts')) {
|
|
387
|
+
issues.push(`Import "${importPath}" uses .ts extension — ESM requires .js extension`);
|
|
388
|
+
}
|
|
389
|
+
// Check if file exists in project
|
|
390
|
+
if (ctx?.projectFiles && ctx.projectFiles.length > 0) {
|
|
391
|
+
const normalized = importPath.replace(/\.(js|ts|jsx|tsx)$/, '');
|
|
392
|
+
const found = ctx.projectFiles.some(f => f.includes(normalized) ||
|
|
393
|
+
f.includes(normalized + '.ts') ||
|
|
394
|
+
f.includes(normalized + '.js') ||
|
|
395
|
+
f.includes(normalized + '/index.ts') ||
|
|
396
|
+
f.includes(normalized + '/index.js'));
|
|
397
|
+
if (!found) {
|
|
398
|
+
issues.push(`Import "${importPath}" may reference deleted/moved file`);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (issues.length > 0) {
|
|
403
|
+
return {
|
|
404
|
+
id: 'outdated-references',
|
|
405
|
+
passed: false,
|
|
406
|
+
details: issues.slice(0, 5).join('; '),
|
|
407
|
+
severity: 'warning',
|
|
408
|
+
autofix: false
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
return pass('outdated-references', 'No outdated references detected', 'warning');
|
|
412
|
+
},
|
|
413
|
+
};
|
|
414
|
+
/**
|
|
415
|
+
* Run all applicable static checks on the output.
|
|
416
|
+
*/
|
|
417
|
+
export function runStaticChecks(output, criterionIds, context) {
|
|
418
|
+
const results = [];
|
|
419
|
+
for (const id of criterionIds) {
|
|
420
|
+
const checker = checkers[id];
|
|
421
|
+
if (checker) {
|
|
422
|
+
try {
|
|
423
|
+
results.push(checker(output, context));
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
// If a checker throws, mark as passed to avoid false negatives
|
|
427
|
+
results.push(pass(id, 'Check skipped (internal error)'));
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return results;
|
|
432
|
+
}
|
|
433
|
+
// ── Helpers ──
|
|
434
|
+
function pass(id, details, severity = 'error') {
|
|
435
|
+
return { id, passed: true, details, severity, autofix: false };
|
|
436
|
+
}
|
|
437
|
+
function fail(id, details, fix, severity = 'error') {
|
|
438
|
+
return { id, passed: false, details, fix, severity, autofix: !!fix };
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Extract code from markdown code blocks with given language hints.
|
|
442
|
+
* Also handles raw code without blocks.
|
|
443
|
+
*/
|
|
444
|
+
export function extractCodeContent(output, languages) {
|
|
445
|
+
// Try to find fenced code blocks with matching language tags
|
|
446
|
+
const langPattern = languages.join('|');
|
|
447
|
+
// Match code blocks WITH the specified language, or code blocks with no language tag
|
|
448
|
+
const fencedRegex = new RegExp('```(?:(' + langPattern + ')\\s*\\n|\\s*\\n)([\\s\\S]*?)```', 'gi');
|
|
449
|
+
const blocks = [];
|
|
450
|
+
let match;
|
|
451
|
+
while ((match = fencedRegex.exec(output)) !== null) {
|
|
452
|
+
// match[1] = language tag (when lang matched), match[2] = code content
|
|
453
|
+
blocks.push(match[2]);
|
|
454
|
+
}
|
|
455
|
+
if (blocks.length > 0) {
|
|
456
|
+
return blocks.join('\n\n');
|
|
457
|
+
}
|
|
458
|
+
// No code blocks — check if the output itself looks like code
|
|
459
|
+
if (output.includes('function ') || output.includes('import ') ||
|
|
460
|
+
output.includes('class ') || output.includes('const ') ||
|
|
461
|
+
output.includes('<div') || output.includes('<html')) {
|
|
462
|
+
return output;
|
|
463
|
+
}
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
function detectLanguage(code) {
|
|
467
|
+
if (code.trim().startsWith('{') || code.trim().startsWith('['))
|
|
468
|
+
return 'json';
|
|
469
|
+
if (code.includes('import ') || code.includes('export '))
|
|
470
|
+
return 'typescript';
|
|
471
|
+
if (code.includes('<html') || code.includes('<div'))
|
|
472
|
+
return 'html';
|
|
473
|
+
if ((code.includes('def ') && !code.includes('default')) || (code.includes('class ') && code.includes(':')))
|
|
474
|
+
return 'python';
|
|
475
|
+
return 'typescript';
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Extract the balanced block starting at the given index (which should point to '{').
|
|
479
|
+
* Returns the content between the braces, or null if unbalanced.
|
|
480
|
+
*/
|
|
481
|
+
function extractBalancedBlock(code, startIdx) {
|
|
482
|
+
if (code[startIdx] !== '{')
|
|
483
|
+
return null;
|
|
484
|
+
let depth = 0;
|
|
485
|
+
let inString = false;
|
|
486
|
+
let stringChar = '';
|
|
487
|
+
let escaped = false;
|
|
488
|
+
for (let i = startIdx; i < code.length; i++) {
|
|
489
|
+
const ch = code[i];
|
|
490
|
+
if (escaped) {
|
|
491
|
+
escaped = false;
|
|
492
|
+
continue;
|
|
493
|
+
}
|
|
494
|
+
if (ch === '\\') {
|
|
495
|
+
escaped = true;
|
|
496
|
+
continue;
|
|
497
|
+
}
|
|
498
|
+
if (inString) {
|
|
499
|
+
if (ch === stringChar && stringChar !== '`') {
|
|
500
|
+
inString = false;
|
|
501
|
+
}
|
|
502
|
+
else if (ch === stringChar && stringChar === '`') {
|
|
503
|
+
inString = false;
|
|
504
|
+
}
|
|
505
|
+
else if (stringChar === '`' && ch === '$' && code[i + 1] === '{') {
|
|
506
|
+
// Template literal expression — skip ${, count inner braces
|
|
507
|
+
i++; // skip $
|
|
508
|
+
// The { will be handled by the depth counter below
|
|
509
|
+
}
|
|
510
|
+
if (inString)
|
|
511
|
+
continue;
|
|
512
|
+
}
|
|
513
|
+
if (!inString && (ch === '"' || ch === "'" || ch === '`')) {
|
|
514
|
+
inString = true;
|
|
515
|
+
stringChar = ch;
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
if (ch === '/' && code[i + 1] === '/') {
|
|
519
|
+
const nl = code.indexOf('\n', i);
|
|
520
|
+
i = nl === -1 ? code.length : nl;
|
|
521
|
+
continue;
|
|
522
|
+
}
|
|
523
|
+
if (ch === '/' && code[i + 1] === '*') {
|
|
524
|
+
const end = code.indexOf('*/', i + 2);
|
|
525
|
+
i = end === -1 ? code.length : end + 1;
|
|
526
|
+
continue;
|
|
527
|
+
}
|
|
528
|
+
if (ch === '{')
|
|
529
|
+
depth++;
|
|
530
|
+
else if (ch === '}') {
|
|
531
|
+
depth--;
|
|
532
|
+
if (depth === 0)
|
|
533
|
+
return code.slice(startIdx + 1, i);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
function checkBracketBalance(code) {
|
|
539
|
+
const pairs = { '(': ')', '[': ']', '{': '}' };
|
|
540
|
+
const stack = [];
|
|
541
|
+
let inString = false;
|
|
542
|
+
let stringChar = '';
|
|
543
|
+
let escaped = false;
|
|
544
|
+
let templateDepth = 0; // Track nested ${...} inside template literals
|
|
545
|
+
for (let i = 0; i < code.length; i++) {
|
|
546
|
+
const ch = code[i];
|
|
547
|
+
if (escaped) {
|
|
548
|
+
escaped = false;
|
|
549
|
+
continue;
|
|
550
|
+
}
|
|
551
|
+
if (ch === '\\') {
|
|
552
|
+
escaped = true;
|
|
553
|
+
continue;
|
|
554
|
+
}
|
|
555
|
+
if (inString) {
|
|
556
|
+
if (stringChar === '`') {
|
|
557
|
+
// Template literal: handle ${...} expressions
|
|
558
|
+
if (ch === '$' && code[i + 1] === '{') {
|
|
559
|
+
templateDepth++;
|
|
560
|
+
inString = false; // Exit string mode to count brackets in expression
|
|
561
|
+
i++; // skip '{'
|
|
562
|
+
stack.push('{');
|
|
563
|
+
continue;
|
|
564
|
+
}
|
|
565
|
+
if (ch === '`') {
|
|
566
|
+
inString = false;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
if (ch === stringChar)
|
|
571
|
+
inString = false;
|
|
572
|
+
}
|
|
573
|
+
continue;
|
|
574
|
+
}
|
|
575
|
+
if (ch === '"' || ch === "'" || ch === '`') {
|
|
576
|
+
inString = true;
|
|
577
|
+
stringChar = ch;
|
|
578
|
+
continue;
|
|
579
|
+
}
|
|
580
|
+
// Skip single-line comments
|
|
581
|
+
if (ch === '/' && code[i + 1] === '/') {
|
|
582
|
+
const nl = code.indexOf('\n', i);
|
|
583
|
+
i = nl === -1 ? code.length : nl;
|
|
584
|
+
continue;
|
|
585
|
+
}
|
|
586
|
+
// Skip multi-line comments
|
|
587
|
+
if (ch === '/' && code[i + 1] === '*') {
|
|
588
|
+
const end = code.indexOf('*/', i + 2);
|
|
589
|
+
i = end === -1 ? code.length : end + 1;
|
|
590
|
+
continue;
|
|
591
|
+
}
|
|
592
|
+
if (ch in pairs) {
|
|
593
|
+
stack.push(ch);
|
|
594
|
+
}
|
|
595
|
+
else if (ch === ')' || ch === ']' || ch === '}') {
|
|
596
|
+
const expected = stack.pop();
|
|
597
|
+
if (!expected) {
|
|
598
|
+
return { balanced: false, type: ch, details: `Unexpected '${ch}'`, fix: `Remove stray '${ch}'` };
|
|
599
|
+
}
|
|
600
|
+
if (pairs[expected] !== ch) {
|
|
601
|
+
return { balanced: false, type: ch, details: `Expected '${pairs[expected]}' but found '${ch}'`, fix: `Change '${ch}' to '${pairs[expected]}'` };
|
|
602
|
+
}
|
|
603
|
+
// If closing a template expression, re-enter template string mode
|
|
604
|
+
if (ch === '}' && templateDepth > 0 && expected === '{') {
|
|
605
|
+
templateDepth--;
|
|
606
|
+
inString = true;
|
|
607
|
+
stringChar = '`';
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
if (stack.length > 0) {
|
|
612
|
+
const unclosed = stack.map(s => pairs[s]).reverse().join('');
|
|
613
|
+
return { balanced: false, type: 'bracket', details: `Unclosed: ${stack.join(', ')}`, fix: `Add ${unclosed}` };
|
|
614
|
+
}
|
|
615
|
+
return { balanced: true };
|
|
616
|
+
}
|
|
617
|
+
function checkBasicSyntax(code) {
|
|
618
|
+
// Check for duplicate commas
|
|
619
|
+
if (/,,/.test(code))
|
|
620
|
+
return 'Duplicate commas found';
|
|
621
|
+
// Check for missing semicolons in obvious places (very conservative)
|
|
622
|
+
// Only flag if there's a clear pattern break
|
|
623
|
+
if (/\)\s*\n\s*(?:const|let|var|function|class|if|for|while)\b/.test(code)) {
|
|
624
|
+
// This is often valid (e.g., function call then statement), so don't flag
|
|
625
|
+
}
|
|
626
|
+
return null;
|
|
627
|
+
}
|
|
628
|
+
function extractImportNames(code) {
|
|
629
|
+
const names = [];
|
|
630
|
+
const regex = /import\s+(?:\{([^}]+)\}|(\w+))/g;
|
|
631
|
+
let match;
|
|
632
|
+
while ((match = regex.exec(code)) !== null) {
|
|
633
|
+
if (match[1]) {
|
|
634
|
+
// Named imports: { foo, bar as baz }
|
|
635
|
+
for (const part of match[1].split(',')) {
|
|
636
|
+
const name = part.trim().split(/\s+as\s+/).pop()?.trim();
|
|
637
|
+
if (name && name.length > 1)
|
|
638
|
+
names.push(name);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
else if (match[2]) {
|
|
642
|
+
// Default import
|
|
643
|
+
names.push(match[2]);
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
return names;
|
|
647
|
+
}
|
|
648
|
+
//# sourceMappingURL=static-checks.js.map
|