helixmind 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of helixmind might be problematic. Click here for more details.
- package/LICENSE +20 -0
- package/README.md +207 -0
- package/dist/cli/agent/autonomous.d.ts +10 -0
- package/dist/cli/agent/autonomous.d.ts.map +1 -0
- package/dist/cli/agent/autonomous.js +172 -0
- package/dist/cli/agent/autonomous.js.map +1 -0
- package/dist/cli/agent/loop.d.ts +76 -0
- package/dist/cli/agent/loop.d.ts.map +1 -0
- package/dist/cli/agent/loop.js +333 -0
- package/dist/cli/agent/loop.js.map +1 -0
- package/dist/cli/agent/permissions.d.ts +28 -0
- package/dist/cli/agent/permissions.d.ts.map +1 -0
- package/dist/cli/agent/permissions.js +180 -0
- package/dist/cli/agent/permissions.js.map +1 -0
- package/dist/cli/agent/sandbox.d.ts +17 -0
- package/dist/cli/agent/sandbox.d.ts.map +1 -0
- package/dist/cli/agent/sandbox.js +124 -0
- package/dist/cli/agent/sandbox.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 +49 -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 +51 -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 +36 -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 +32 -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 +38 -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 +18 -0
- package/dist/cli/agent/tools/registry.d.ts.map +1 -0
- package/dist/cli/agent/tools/registry.js +31 -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 +79 -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 +91 -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 +168 -0
- package/dist/cli/auth/callback-server.js.map +1 -0
- package/dist/cli/auth/feature-gate.d.ts +19 -0
- package/dist/cli/auth/feature-gate.d.ts.map +1 -0
- package/dist/cli/auth/feature-gate.js +74 -0
- package/dist/cli/auth/feature-gate.js.map +1 -0
- package/dist/cli/auth/guard.d.ts +10 -0
- package/dist/cli/auth/guard.d.ts.map +1 -0
- package/dist/cli/auth/guard.js +46 -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 +194 -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 +159 -0
- package/dist/cli/brain/archive.js.map +1 -0
- package/dist/cli/brain/control-protocol.d.ts +159 -0
- package/dist/cli/brain/control-protocol.d.ts.map +1 -0
- package/dist/cli/brain/control-protocol.js +41 -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 +67 -0
- package/dist/cli/brain/generator.d.ts.map +1 -0
- package/dist/cli/brain/generator.js +239 -0
- package/dist/cli/brain/generator.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 +173 -0
- package/dist/cli/brain/relay-client.js.map +1 -0
- package/dist/cli/brain/server.d.ts +34 -0
- package/dist/cli/brain/server.d.ts.map +1 -0
- package/dist/cli/brain/server.js +425 -0
- package/dist/cli/brain/server.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 +2072 -0
- package/dist/cli/brain/template.js.map +1 -0
- package/dist/cli/checkpoints/browser.d.ts +27 -0
- package/dist/cli/checkpoints/browser.d.ts.map +1 -0
- package/dist/cli/checkpoints/browser.js +238 -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 +43 -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 +188 -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 +2321 -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 +41 -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 +26 -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 +314 -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 +72 -0
- package/dist/cli/config/store.d.ts.map +1 -0
- package/dist/cli/config/store.js +241 -0
- package/dist/cli/config/store.js.map +1 -0
- package/dist/cli/context/assembler.d.ts +8 -0
- package/dist/cli/context/assembler.d.ts.map +1 -0
- package/dist/cli/context/assembler.js +124 -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 +57 -0
- package/dist/cli/context/session-buffer.d.ts.map +1 -0
- package/dist/cli/context/session-buffer.js +268 -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 +105 -0
- package/dist/cli/context/trimmer.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 +32 -0
- package/dist/cli/feed/pipeline.d.ts.map +1 -0
- package/dist/cli/feed/pipeline.js +242 -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/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +204 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/providers/anthropic.d.ts +10 -0
- package/dist/cli/providers/anthropic.d.ts.map +1 -0
- package/dist/cli/providers/anthropic.js +117 -0
- package/dist/cli/providers/anthropic.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 +13 -0
- package/dist/cli/providers/openai.d.ts.map +1 -0
- package/dist/cli/providers/openai.js +283 -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 +61 -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 +200 -0
- package/dist/cli/sessions/manager.js.map +1 -0
- package/dist/cli/sessions/session.d.ts +54 -0
- package/dist/cli/sessions/session.d.ts.map +1 -0
- package/dist/cli/sessions/session.js +70 -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 +134 -0
- package/dist/cli/sessions/tab-view.js.map +1 -0
- package/dist/cli/ui/activity.d.ts +82 -0
- package/dist/cli/ui/activity.d.ts.map +1 -0
- package/dist/cli/ui/activity.js +309 -0
- package/dist/cli/ui/activity.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 +165 -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 +115 -0
- package/dist/cli/ui/command-suggest.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/progress.d.ts +21 -0
- package/dist/cli/ui/progress.d.ts.map +1 -0
- package/dist/cli/ui/progress.js +125 -0
- package/dist/cli/ui/progress.js.map +1 -0
- package/dist/cli/ui/select-menu.d.ts +22 -0
- package/dist/cli/ui/select-menu.d.ts.map +1 -0
- package/dist/cli/ui/select-menu.js +152 -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 +65 -0
- package/dist/cli/ui/statusbar.d.ts.map +1 -0
- package/dist/cli/ui/statusbar.js +272 -0
- package/dist/cli/ui/statusbar.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 +25 -0
- package/dist/cli/ui/tool-output.d.ts.map +1 -0
- package/dist/cli/ui/tool-output.js +171 -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 +167 -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 +492 -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/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 +43 -0
- package/dist/server.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 +212 -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 +170 -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 +24 -0
- package/dist/spiral/embeddings.d.ts.map +1 -0
- package/dist/spiral/embeddings.js +69 -0
- package/dist/spiral/embeddings.js.map +1 -0
- package/dist/spiral/engine.d.ts +95 -0
- package/dist/spiral/engine.d.ts.map +1 -0
- package/dist/spiral/engine.js +271 -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 +164 -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 +141 -0
- package/dist/storage/database.js.map +1 -0
- package/dist/storage/edges.d.ts +25 -0
- package/dist/storage/edges.d.ts.map +1 -0
- package/dist/storage/edges.js +69 -0
- package/dist/storage/edges.js.map +1 -0
- package/dist/storage/nodes.d.ts +45 -0
- package/dist/storage/nodes.d.ts.map +1 -0
- package/dist/storage/nodes.js +124 -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 +92 -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 +90 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run a single dynamic check using a mini-LLM call.
|
|
3
|
+
*/
|
|
4
|
+
export async function dynamicCheck(criterion, output, userRequest, spiralContext, provider) {
|
|
5
|
+
const prompt = buildCheckPrompt(criterion, output, userRequest, spiralContext);
|
|
6
|
+
try {
|
|
7
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
8
|
+
let responseText = '';
|
|
9
|
+
for await (const event of provider.stream(messages, VALIDATION_SYSTEM_PROMPT)) {
|
|
10
|
+
if (event.type === 'text') {
|
|
11
|
+
responseText += event.content;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return parseCheckResponse(criterion, responseText);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
// On error, pass by default (don't block the user)
|
|
18
|
+
return {
|
|
19
|
+
id: criterion.id,
|
|
20
|
+
passed: true,
|
|
21
|
+
details: `Check skipped (LLM error: ${err.message})`,
|
|
22
|
+
severity: criterion.severity,
|
|
23
|
+
autofix: false,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Run multiple dynamic checks in parallel (batch).
|
|
29
|
+
*/
|
|
30
|
+
export async function runDynamicChecks(criteria, output, userRequest, spiralContext, provider) {
|
|
31
|
+
if (criteria.length === 0)
|
|
32
|
+
return [];
|
|
33
|
+
// Run checks in parallel (max 3 concurrent)
|
|
34
|
+
const results = [];
|
|
35
|
+
const batchSize = 3;
|
|
36
|
+
for (let i = 0; i < criteria.length; i += batchSize) {
|
|
37
|
+
const batch = criteria.slice(i, i + batchSize);
|
|
38
|
+
const batchResults = await Promise.all(batch.map(c => dynamicCheck(c, output, userRequest, spiralContext, provider)));
|
|
39
|
+
results.push(...batchResults);
|
|
40
|
+
}
|
|
41
|
+
return results;
|
|
42
|
+
}
|
|
43
|
+
// ── Prompt Building ──
|
|
44
|
+
const VALIDATION_SYSTEM_PROMPT = `You are a precise code reviewer. You check one specific criterion at a time.
|
|
45
|
+
Answer ONLY in valid JSON format. Be strict but fair.
|
|
46
|
+
If you cannot determine the answer, default to "passed": true.`;
|
|
47
|
+
function buildCheckPrompt(criterion, output, userRequest, spiralContext) {
|
|
48
|
+
// Truncate output to avoid huge prompts
|
|
49
|
+
const truncatedOutput = output.length > 4000 ? output.slice(0, 4000) + '\n...[truncated]' : output;
|
|
50
|
+
const truncatedContext = spiralContext.length > 1000 ? spiralContext.slice(0, 1000) + '\n...[truncated]' : spiralContext;
|
|
51
|
+
return `Check this ONE criterion:
|
|
52
|
+
|
|
53
|
+
CRITERION: ${criterion.description}
|
|
54
|
+
SEVERITY: ${criterion.severity}
|
|
55
|
+
|
|
56
|
+
USER REQUEST: ${userRequest}
|
|
57
|
+
|
|
58
|
+
CODE/OUTPUT:
|
|
59
|
+
\`\`\`
|
|
60
|
+
${truncatedOutput}
|
|
61
|
+
\`\`\`
|
|
62
|
+
|
|
63
|
+
${truncatedContext ? `PROJECT CONTEXT:\n${truncatedContext}\n` : ''}
|
|
64
|
+
Answer ONLY in JSON:
|
|
65
|
+
{
|
|
66
|
+
"passed": true/false,
|
|
67
|
+
"details": "Brief explanation (1-2 sentences)",
|
|
68
|
+
"fix": "Concrete fix if not passed, null otherwise"
|
|
69
|
+
}`;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Parse LLM response into a CheckResult.
|
|
73
|
+
* Handles malformed JSON gracefully.
|
|
74
|
+
*/
|
|
75
|
+
function parseCheckResponse(criterion, response) {
|
|
76
|
+
try {
|
|
77
|
+
// Extract JSON from response (may have surrounding text)
|
|
78
|
+
const jsonMatch = response.match(/\{[\s\S]*\}/);
|
|
79
|
+
if (!jsonMatch) {
|
|
80
|
+
return fallbackResult(criterion, response);
|
|
81
|
+
}
|
|
82
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
83
|
+
return {
|
|
84
|
+
id: criterion.id,
|
|
85
|
+
passed: Boolean(parsed.passed),
|
|
86
|
+
details: String(parsed.details || 'No details'),
|
|
87
|
+
fix: parsed.fix || undefined,
|
|
88
|
+
severity: criterion.severity,
|
|
89
|
+
autofix: criterion.autofix && !!parsed.fix,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return fallbackResult(criterion, response);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function fallbackResult(criterion, rawResponse) {
|
|
97
|
+
// Try to infer pass/fail from response text
|
|
98
|
+
const lower = rawResponse.toLowerCase();
|
|
99
|
+
const passed = lower.includes('"passed": true') || lower.includes('"passed":true') ||
|
|
100
|
+
(lower.includes('pass') && !lower.includes('fail') && !lower.includes('not pass'));
|
|
101
|
+
return {
|
|
102
|
+
id: criterion.id,
|
|
103
|
+
passed,
|
|
104
|
+
details: rawResponse.slice(0, 200),
|
|
105
|
+
severity: criterion.severity,
|
|
106
|
+
autofix: false,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=dynamic-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-checks.js","sourceRoot":"","sources":["../../../src/cli/validation/dynamic-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LLMProvider } from '../providers/types.js';
|
|
2
|
+
export interface ValidationModelConfig {
|
|
3
|
+
provider: string;
|
|
4
|
+
model: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Get the validation model config for the given main model.
|
|
8
|
+
* Falls back to using the same provider/model if no mapping exists.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getValidationModelConfig(mainModel: string, mainProvider: string): ValidationModelConfig;
|
|
11
|
+
/**
|
|
12
|
+
* Create a validation LLM provider instance.
|
|
13
|
+
* Uses the same API key as the main provider.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createValidationProvider(mainModel: string, mainProvider: string, apiKey: string): LLMProvider;
|
|
16
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/cli/validation/model.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AA8BD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAevG;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,WAAW,CAMb"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Model Selection — picks a fast/cheap model for validation checks.
|
|
3
|
+
* The validation model is different from the main agent model (smaller, faster).
|
|
4
|
+
*/
|
|
5
|
+
import { createProvider, KNOWN_PROVIDERS } from '../providers/registry.js';
|
|
6
|
+
/**
|
|
7
|
+
* Map from main agent model to the best validation model.
|
|
8
|
+
* Strategy: use the smallest model from the same provider.
|
|
9
|
+
*/
|
|
10
|
+
const MODEL_MAP = {
|
|
11
|
+
// Anthropic
|
|
12
|
+
'claude-sonnet-4-6': { provider: 'anthropic', model: 'claude-haiku-4-5-20251001' },
|
|
13
|
+
'claude-opus-4-6': { provider: 'anthropic', model: 'claude-haiku-4-5-20251001' },
|
|
14
|
+
'claude-haiku-4-5-20251001': { provider: 'anthropic', model: 'claude-haiku-4-5-20251001' },
|
|
15
|
+
// OpenAI
|
|
16
|
+
'gpt-4o': { provider: 'openai', model: 'gpt-4o-mini' },
|
|
17
|
+
'gpt-4o-mini': { provider: 'openai', model: 'gpt-4o-mini' },
|
|
18
|
+
'gpt-4-turbo': { provider: 'openai', model: 'gpt-4o-mini' },
|
|
19
|
+
'o1': { provider: 'openai', model: 'gpt-4o-mini' },
|
|
20
|
+
'o1-mini': { provider: 'openai', model: 'gpt-4o-mini' },
|
|
21
|
+
'o3-mini': { provider: 'openai', model: 'gpt-4o-mini' },
|
|
22
|
+
// DeepSeek
|
|
23
|
+
'deepseek-chat': { provider: 'deepseek', model: 'deepseek-chat' },
|
|
24
|
+
'deepseek-reasoner': { provider: 'deepseek', model: 'deepseek-chat' },
|
|
25
|
+
// Groq (already fast)
|
|
26
|
+
'llama-3.3-70b-versatile': { provider: 'groq', model: 'llama-3.1-8b-instant' },
|
|
27
|
+
'llama-3.1-8b-instant': { provider: 'groq', model: 'llama-3.1-8b-instant' },
|
|
28
|
+
'mixtral-8x7b-32768': { provider: 'groq', model: 'llama-3.1-8b-instant' },
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Get the validation model config for the given main model.
|
|
32
|
+
* Falls back to using the same provider/model if no mapping exists.
|
|
33
|
+
*/
|
|
34
|
+
export function getValidationModelConfig(mainModel, mainProvider) {
|
|
35
|
+
const mapped = MODEL_MAP[mainModel];
|
|
36
|
+
if (mapped)
|
|
37
|
+
return mapped;
|
|
38
|
+
// Fallback: use same provider, try to find a smaller model
|
|
39
|
+
const providerInfo = KNOWN_PROVIDERS[mainProvider];
|
|
40
|
+
if (providerInfo) {
|
|
41
|
+
// Pick the last (usually smallest) model in the list, or just use the same
|
|
42
|
+
const models = providerInfo.models;
|
|
43
|
+
const smallerModel = models[models.length - 1] || mainModel;
|
|
44
|
+
return { provider: mainProvider, model: smallerModel };
|
|
45
|
+
}
|
|
46
|
+
// Ultimate fallback: same model
|
|
47
|
+
return { provider: mainProvider, model: mainModel };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Create a validation LLM provider instance.
|
|
51
|
+
* Uses the same API key as the main provider.
|
|
52
|
+
*/
|
|
53
|
+
export function createValidationProvider(mainModel, mainProvider, apiKey) {
|
|
54
|
+
const config = getValidationModelConfig(mainModel, mainProvider);
|
|
55
|
+
const providerInfo = KNOWN_PROVIDERS[config.provider];
|
|
56
|
+
const baseURL = providerInfo?.baseURL;
|
|
57
|
+
return createProvider(config.provider, apiKey, config.model, baseURL);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/cli/validation/model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQ3E;;;GAGG;AACH,MAAM,SAAS,GAA0C;IACvD,YAAY;IACZ,mBAAmB,EAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC1F,iBAAiB,EAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAC1F,2BAA2B,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAE1F,SAAS;IACT,QAAQ,EAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;IAC7D,aAAa,EAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;IAC7D,aAAa,EAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;IAC7D,IAAI,EAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;IAC7D,SAAS,EAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;IAC7D,SAAS,EAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE;IAE7D,WAAW;IACX,eAAe,EAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE;IACrE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE;IAErE,sBAAsB;IACtB,yBAAyB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC9E,sBAAsB,EAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE;IAC9E,oBAAoB,EAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,EAAE;CAC/E,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,SAAiB,EAAE,YAAoB;IAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,2DAA2D;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,YAAY,EAAE,CAAC;QACjB,2EAA2E;QAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;QACnC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC;QAC5D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACzD,CAAC;IAED,gCAAgC;IAChC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,YAAoB,EACpB,MAAc;IAEd,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,YAAY,EAAE,OAAO,CAAC;IAEtC,OAAO,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ValidationResult } from './autofix.js';
|
|
2
|
+
/**
|
|
3
|
+
* Render the validation summary box.
|
|
4
|
+
*/
|
|
5
|
+
export declare function renderValidationSummary(result: ValidationResult, verbose?: boolean): string;
|
|
6
|
+
/**
|
|
7
|
+
* Render a compact one-line validation result (for status bar or non-verbose).
|
|
8
|
+
*/
|
|
9
|
+
export declare function renderValidationOneLine(result: ValidationResult): string;
|
|
10
|
+
/**
|
|
11
|
+
* Show validation start indicator.
|
|
12
|
+
*/
|
|
13
|
+
export declare function renderValidationStart(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Render classification info (for verbose mode).
|
|
16
|
+
*/
|
|
17
|
+
export declare function renderClassification(category: string, complexity: string, criteriaCount: number): string;
|
|
18
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../src/cli/validation/reporter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAoB,MAAM,cAAc,CAAC;AAGvE;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,GAAE,OAAe,GAAG,MAAM,CA0ElG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAMxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAExG"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Reporter — Terminal UI for validation results.
|
|
3
|
+
* Shows a compact summary box with check results per category.
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
/**
|
|
7
|
+
* Render the validation summary box.
|
|
8
|
+
*/
|
|
9
|
+
export function renderValidationSummary(result, verbose = false) {
|
|
10
|
+
const totalChecks = result.results.length;
|
|
11
|
+
const passed = result.results.filter(r => r.passed).length;
|
|
12
|
+
const errors = result.results.filter(r => !r.passed && r.severity === 'error').length;
|
|
13
|
+
const warnings = result.results.filter(r => !r.passed && r.severity === 'warning').length;
|
|
14
|
+
const statusIcon = getStatusIcon(result.status);
|
|
15
|
+
const durationStr = result.duration < 1000
|
|
16
|
+
? `${result.duration}ms`
|
|
17
|
+
: `${(result.duration / 1000).toFixed(1)}s`;
|
|
18
|
+
const lines = [];
|
|
19
|
+
// ── Header ──
|
|
20
|
+
const header = `${statusIcon} Validation Matrix \u2500\u2500 ${totalChecks} checks \u2500\u2500 ${result.loops} loop${result.loops !== 1 ? 's' : ''} \u2500\u2500 ${durationStr}`;
|
|
21
|
+
lines.push(chalk.dim('\u256D\u2500\u2500\u2500 ') + headerColor(result.status)(header) + chalk.dim(' \u2500\u2500\u2500\u256E'));
|
|
22
|
+
lines.push(chalk.dim('\u2502'));
|
|
23
|
+
// ── Category summary ──
|
|
24
|
+
if (verbose) {
|
|
25
|
+
// Show every single check
|
|
26
|
+
for (const r of result.results) {
|
|
27
|
+
const icon = r.passed ? chalk.green('\u2705') : (r.severity === 'error' ? chalk.red('\u274C') : chalk.yellow('\u26A0\uFE0F'));
|
|
28
|
+
const detail = r.passed ? chalk.dim(r.details) : chalk.white(r.details);
|
|
29
|
+
lines.push(chalk.dim('\u2502 ') + `${icon} ${chalk.cyan(r.id)} ${detail}`);
|
|
30
|
+
if (!r.passed && r.fix) {
|
|
31
|
+
lines.push(chalk.dim('\u2502 \u2192 ') + chalk.yellow(r.fix));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// Group by category
|
|
37
|
+
const grouped = groupByCategory(result.results);
|
|
38
|
+
for (const [category, checks] of grouped) {
|
|
39
|
+
const categoryPassed = checks.filter(r => r.passed).length;
|
|
40
|
+
const categoryTotal = checks.length;
|
|
41
|
+
const icons = checks.map(r => r.passed ? '\u2705' : (r.severity === 'error' ? '\u274C' : '\u26A0\uFE0F')).join('');
|
|
42
|
+
// Check for autofixed items
|
|
43
|
+
const fixed = checks.filter(r => r.passed && r.autofix);
|
|
44
|
+
const fixedSuffix = fixed.length > 0 ? chalk.dim(` (${fixed.length} fixed)`) : '';
|
|
45
|
+
const label = formatCategory(category);
|
|
46
|
+
const ratio = `${categoryPassed}/${categoryTotal}`;
|
|
47
|
+
lines.push(chalk.dim('\u2502 ') + `${label}: ${icons} ${chalk.dim(ratio)}${fixedSuffix}`);
|
|
48
|
+
}
|
|
49
|
+
// Show failed checks details
|
|
50
|
+
const failed = result.results.filter(r => !r.passed && r.severity === 'error');
|
|
51
|
+
if (failed.length > 0) {
|
|
52
|
+
lines.push(chalk.dim('\u2502'));
|
|
53
|
+
for (const f of failed) {
|
|
54
|
+
lines.push(chalk.dim('\u2502 ') + chalk.red(`\u274C ${f.id}: ${f.details}`));
|
|
55
|
+
if (f.fix) {
|
|
56
|
+
lines.push(chalk.dim('\u2502 \u2192 ') + chalk.yellow(f.fix));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// ── Footer ──
|
|
62
|
+
lines.push(chalk.dim('\u2502'));
|
|
63
|
+
const footerParts = [];
|
|
64
|
+
if (result.fixesApplied > 0) {
|
|
65
|
+
footerParts.push(chalk.cyan(`\u{1F527} ${result.fixesApplied} autofix${result.fixesApplied !== 1 ? 'es' : ''} applied`));
|
|
66
|
+
}
|
|
67
|
+
footerParts.push(`${warnings} warning${warnings !== 1 ? 's' : ''}`);
|
|
68
|
+
footerParts.push(`${errors} error${errors !== 1 ? 's' : ''}`);
|
|
69
|
+
lines.push(chalk.dim('\u2502 ') + footerParts.join(chalk.dim(' \u2502 ')));
|
|
70
|
+
lines.push(chalk.dim('\u2570') + chalk.dim('\u2500'.repeat(60)) + chalk.dim('\u256F'));
|
|
71
|
+
return lines.join('\n');
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Render a compact one-line validation result (for status bar or non-verbose).
|
|
75
|
+
*/
|
|
76
|
+
export function renderValidationOneLine(result) {
|
|
77
|
+
const passed = result.results.filter(r => r.passed).length;
|
|
78
|
+
const total = result.results.length;
|
|
79
|
+
const icon = result.status === 'passed' ? '\u2705' : result.status === 'warnings' ? '\u26A0\uFE0F' : '\u274C';
|
|
80
|
+
return `${icon} Validation: ${passed}/${total} checks passed (${result.duration}ms)`;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Show validation start indicator.
|
|
84
|
+
*/
|
|
85
|
+
export function renderValidationStart() {
|
|
86
|
+
return chalk.dim('\n \u{1F50D} Validating output...\n');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Render classification info (for verbose mode).
|
|
90
|
+
*/
|
|
91
|
+
export function renderClassification(category, complexity, criteriaCount) {
|
|
92
|
+
return chalk.dim(` \u{1F4CB} Task: ${category} | Complexity: ${complexity} | ${criteriaCount} criteria`);
|
|
93
|
+
}
|
|
94
|
+
// ── Helpers ──
|
|
95
|
+
function getStatusIcon(status) {
|
|
96
|
+
switch (status) {
|
|
97
|
+
case 'passed': return '\u2705';
|
|
98
|
+
case 'warnings': return '\u26A0\uFE0F';
|
|
99
|
+
case 'errors': return '\u274C';
|
|
100
|
+
case 'max_loops': return '\u{1F504}';
|
|
101
|
+
default: return '\u2753';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function headerColor(status) {
|
|
105
|
+
switch (status) {
|
|
106
|
+
case 'passed': return chalk.green;
|
|
107
|
+
case 'warnings': return chalk.yellow;
|
|
108
|
+
case 'errors': return chalk.red;
|
|
109
|
+
case 'max_loops': return chalk.hex('#FF6600');
|
|
110
|
+
default: return chalk.white;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function formatCategory(category) {
|
|
114
|
+
const labels = {
|
|
115
|
+
structural: 'Structural ',
|
|
116
|
+
completeness: 'Completeness',
|
|
117
|
+
consistency: 'Consistency ',
|
|
118
|
+
logic: 'Logic ',
|
|
119
|
+
style: 'Style ',
|
|
120
|
+
security: 'Security ',
|
|
121
|
+
performance: 'Performance ',
|
|
122
|
+
};
|
|
123
|
+
return chalk.bold(labels[category] || category.padEnd(12));
|
|
124
|
+
}
|
|
125
|
+
function groupByCategory(results) {
|
|
126
|
+
const grouped = new Map();
|
|
127
|
+
const order = ['structural', 'completeness', 'consistency', 'logic', 'style', 'security', 'performance'];
|
|
128
|
+
// Pre-fill in order
|
|
129
|
+
for (const cat of order) {
|
|
130
|
+
grouped.set(cat, []);
|
|
131
|
+
}
|
|
132
|
+
for (const r of results) {
|
|
133
|
+
// Infer category from ID patterns
|
|
134
|
+
const category = inferCategory(r.id);
|
|
135
|
+
const list = grouped.get(category);
|
|
136
|
+
if (list) {
|
|
137
|
+
list.push(r);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
grouped.set(category, [r]);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Remove empty categories
|
|
144
|
+
for (const [key, val] of grouped) {
|
|
145
|
+
if (val.length === 0)
|
|
146
|
+
grouped.delete(key);
|
|
147
|
+
}
|
|
148
|
+
return grouped;
|
|
149
|
+
}
|
|
150
|
+
function inferCategory(id) {
|
|
151
|
+
if (id.includes('html') || id.includes('syntax') || id.includes('links') || id.includes('ids') || id.includes('import') || id.includes('types') || id.includes('bracket') || id.includes('assertion') || id.includes('mocks'))
|
|
152
|
+
return 'structural';
|
|
153
|
+
if (id.includes('requirement') || id.includes('complete') || id.includes('bug-addressed') || id.includes('output-format') || id.includes('responsive'))
|
|
154
|
+
return 'completeness';
|
|
155
|
+
if (id.includes('style') || id.includes('naming') || id.includes('pattern') || id.includes('response-format') || id.includes('spiral-style') || id.includes('spiral-pattern'))
|
|
156
|
+
return 'consistency';
|
|
157
|
+
if (id.includes('dead-code') || id.includes('async') || id.includes('error-handling') || id.includes('no-regression') || id.includes('behavior') || id.includes('edge') || id.includes('circular') || id.includes('separation') || id.includes('input-handled') || id.includes('false-positive') || id.includes('spiral-bugs'))
|
|
158
|
+
return 'logic';
|
|
159
|
+
if (id.includes('security') || id.includes('sql') || id.includes('hardcoded') || id.includes('auth') || id.includes('secret') || id.includes('injection') || id.includes('no-secrets'))
|
|
160
|
+
return 'security';
|
|
161
|
+
if (id.includes('status-code') || id.includes('img-alt') || id.includes('events'))
|
|
162
|
+
return 'structural';
|
|
163
|
+
if (id.startsWith('dyn-') || id.startsWith('spiral-'))
|
|
164
|
+
return 'completeness';
|
|
165
|
+
return 'structural';
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/cli/validation/reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spiral-based validation — checks output against project knowledge stored in spiral memory.
|
|
3
|
+
* Queries spiral for known patterns, styles, and previous bugs.
|
|
4
|
+
*/
|
|
5
|
+
import type { SpiralEngine } from '../../spiral/engine.js';
|
|
6
|
+
import type { CheckResult } from './static-checks.js';
|
|
7
|
+
/**
|
|
8
|
+
* Run all spiral-based checks.
|
|
9
|
+
* Queries the spiral for project knowledge and compares against the output.
|
|
10
|
+
*/
|
|
11
|
+
export declare function runSpiralChecks(output: string, engine: SpiralEngine | undefined): Promise<CheckResult[]>;
|
|
12
|
+
//# sourceMappingURL=spiral-checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spiral-checks.d.ts","sourceRoot":"","sources":["../../../src/cli/validation/spiral-checks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,GAAG,SAAS,GAC/B,OAAO,CAAC,WAAW,EAAE,CAAC,CAsBxB"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run all spiral-based checks.
|
|
3
|
+
* Queries the spiral for project knowledge and compares against the output.
|
|
4
|
+
*/
|
|
5
|
+
export async function runSpiralChecks(output, engine) {
|
|
6
|
+
if (!engine)
|
|
7
|
+
return [];
|
|
8
|
+
const results = [];
|
|
9
|
+
try {
|
|
10
|
+
// 1. Style consistency check
|
|
11
|
+
const styleResult = await checkStyleConsistency(output, engine);
|
|
12
|
+
if (styleResult)
|
|
13
|
+
results.push(styleResult);
|
|
14
|
+
// 2. Pattern consistency check
|
|
15
|
+
const patternResult = await checkPatternConsistency(output, engine);
|
|
16
|
+
if (patternResult)
|
|
17
|
+
results.push(patternResult);
|
|
18
|
+
// 3. Known bug patterns check
|
|
19
|
+
const bugResult = await checkKnownBugPatterns(output, engine);
|
|
20
|
+
if (bugResult)
|
|
21
|
+
results.push(bugResult);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Spiral checks are non-critical — don't block on failure
|
|
25
|
+
}
|
|
26
|
+
return results;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if the output uses colors/fonts consistent with the project.
|
|
30
|
+
*/
|
|
31
|
+
async function checkStyleConsistency(output, engine) {
|
|
32
|
+
try {
|
|
33
|
+
const styleQuery = await engine.query('project style colors fonts design theme', undefined, [3, 4, 5]);
|
|
34
|
+
if (styleQuery.node_count === 0)
|
|
35
|
+
return null;
|
|
36
|
+
// Extract colors from spiral knowledge
|
|
37
|
+
const spiralText = [
|
|
38
|
+
...styleQuery.level_3.map(n => n.content),
|
|
39
|
+
...styleQuery.level_4.map(n => n.content),
|
|
40
|
+
...styleQuery.level_5.map(n => n.content),
|
|
41
|
+
].join('\n');
|
|
42
|
+
const knownColors = spiralText.match(/#[0-9a-fA-F]{3,8}/g);
|
|
43
|
+
if (!knownColors || knownColors.length === 0)
|
|
44
|
+
return null;
|
|
45
|
+
// Extract colors from output
|
|
46
|
+
const outputColors = output.match(/#[0-9a-fA-F]{3,8}/g);
|
|
47
|
+
if (!outputColors || outputColors.length === 0)
|
|
48
|
+
return null;
|
|
49
|
+
// Check if output uses project colors
|
|
50
|
+
const uniqueKnown = new Set(knownColors.map(c => c.toLowerCase()));
|
|
51
|
+
const uniqueOutput = new Set(outputColors.map(c => c.toLowerCase()));
|
|
52
|
+
const overlap = [...uniqueOutput].filter(c => uniqueKnown.has(c));
|
|
53
|
+
if (overlap.length === 0 && uniqueOutput.size > 0) {
|
|
54
|
+
return {
|
|
55
|
+
id: 'spiral-style',
|
|
56
|
+
passed: false,
|
|
57
|
+
details: `Output uses colors not found in project: ${[...uniqueOutput].slice(0, 3).join(', ')}. Known project colors: ${[...uniqueKnown].slice(0, 3).join(', ')}`,
|
|
58
|
+
fix: `Consider using project colors: ${[...uniqueKnown].slice(0, 3).join(', ')}`,
|
|
59
|
+
severity: 'info',
|
|
60
|
+
autofix: true,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
id: 'spiral-style',
|
|
65
|
+
passed: true,
|
|
66
|
+
details: 'Colors consistent with project',
|
|
67
|
+
severity: 'info',
|
|
68
|
+
autofix: false,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if the output follows project coding patterns.
|
|
77
|
+
*/
|
|
78
|
+
async function checkPatternConsistency(output, engine) {
|
|
79
|
+
try {
|
|
80
|
+
const patternQuery = await engine.query('code patterns conventions naming imports', undefined, [4, 5]);
|
|
81
|
+
if (patternQuery.node_count === 0)
|
|
82
|
+
return null;
|
|
83
|
+
const spiralText = [
|
|
84
|
+
...patternQuery.level_4.map(n => n.content),
|
|
85
|
+
...patternQuery.level_5.map(n => n.content),
|
|
86
|
+
].join('\n');
|
|
87
|
+
const issues = [];
|
|
88
|
+
// Check import style consistency
|
|
89
|
+
if (spiralText.includes("from '") && output.includes('from "')) {
|
|
90
|
+
issues.push('Project uses single quotes for imports, output uses double quotes');
|
|
91
|
+
}
|
|
92
|
+
if (spiralText.includes('from "') && output.includes("from '")) {
|
|
93
|
+
issues.push('Project uses double quotes for imports, output uses single quotes');
|
|
94
|
+
}
|
|
95
|
+
// Check semicolon consistency
|
|
96
|
+
const spiralHasSemicolons = (spiralText.match(/;\s*$/gm) || []).length > 5;
|
|
97
|
+
const outputHasSemicolons = (output.match(/;\s*$/gm) || []).length > 2;
|
|
98
|
+
const spiralNoSemicolons = !spiralHasSemicolons && spiralText.includes('const ');
|
|
99
|
+
if (spiralHasSemicolons && !outputHasSemicolons && output.includes('const ')) {
|
|
100
|
+
issues.push('Project uses semicolons, output does not');
|
|
101
|
+
}
|
|
102
|
+
if (spiralNoSemicolons && outputHasSemicolons) {
|
|
103
|
+
issues.push('Project omits semicolons, output uses them');
|
|
104
|
+
}
|
|
105
|
+
if (issues.length > 0) {
|
|
106
|
+
return {
|
|
107
|
+
id: 'spiral-pattern',
|
|
108
|
+
passed: false,
|
|
109
|
+
details: issues.join('; '),
|
|
110
|
+
severity: 'info',
|
|
111
|
+
autofix: true,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
id: 'spiral-pattern',
|
|
116
|
+
passed: true,
|
|
117
|
+
details: 'Follows project patterns',
|
|
118
|
+
severity: 'info',
|
|
119
|
+
autofix: false,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check if the output repeats known bug patterns from the project history.
|
|
128
|
+
*/
|
|
129
|
+
async function checkKnownBugPatterns(output, engine) {
|
|
130
|
+
try {
|
|
131
|
+
const bugQuery = await engine.query('bug error fix issue problem', undefined, [2, 3]);
|
|
132
|
+
if (bugQuery.node_count === 0)
|
|
133
|
+
return null;
|
|
134
|
+
const bugPatterns = [
|
|
135
|
+
...bugQuery.level_2.map(n => n.content),
|
|
136
|
+
...bugQuery.level_3.map(n => n.content),
|
|
137
|
+
];
|
|
138
|
+
// Simple heuristic: check if output contains patterns that were previously buggy
|
|
139
|
+
const warningPatterns = [];
|
|
140
|
+
for (const bugContent of bugPatterns) {
|
|
141
|
+
// Extract code patterns from bug reports
|
|
142
|
+
const codePatterns = bugContent.match(/`([^`]+)`/g);
|
|
143
|
+
if (codePatterns) {
|
|
144
|
+
for (const pattern of codePatterns) {
|
|
145
|
+
const clean = pattern.replace(/`/g, '');
|
|
146
|
+
if (clean.length > 10 && output.includes(clean)) {
|
|
147
|
+
warningPatterns.push(clean.slice(0, 50));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (warningPatterns.length > 0) {
|
|
153
|
+
return {
|
|
154
|
+
id: 'spiral-bugs',
|
|
155
|
+
passed: false,
|
|
156
|
+
details: `Output contains patterns from previous bugs: ${warningPatterns.join(', ')}`,
|
|
157
|
+
severity: 'warning',
|
|
158
|
+
autofix: false,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return null; // No known bug patterns found — skip (don't report as pass)
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=spiral-checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spiral-checks.js","sourceRoot":"","sources":["../../../src/cli/validation/spiral-checks.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAqYD;;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"}
|