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,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Sentinel — test intelligence for Jarvis.
|
|
3
|
+
* Detects affected tests from git changes, flaky test tracking,
|
|
4
|
+
* coverage trend monitoring.
|
|
5
|
+
*/
|
|
6
|
+
import { execSync } from 'node:child_process';
|
|
7
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
/**
|
|
10
|
+
* Detect which test files are likely affected by recent changes.
|
|
11
|
+
* Uses import/require graph heuristics from git diff.
|
|
12
|
+
*/
|
|
13
|
+
export function detectAffectedTests(projectRoot) {
|
|
14
|
+
const insights = [];
|
|
15
|
+
try {
|
|
16
|
+
// Get changed files from last commit
|
|
17
|
+
const diffRaw = execSync('git diff HEAD~1 HEAD --name-only', {
|
|
18
|
+
cwd: projectRoot,
|
|
19
|
+
encoding: 'utf-8',
|
|
20
|
+
timeout: 5000,
|
|
21
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
22
|
+
}).trim();
|
|
23
|
+
if (!diffRaw)
|
|
24
|
+
return insights;
|
|
25
|
+
const changedFiles = diffRaw.split('\n').filter(f => f.endsWith('.ts') || f.endsWith('.js'));
|
|
26
|
+
if (changedFiles.length === 0)
|
|
27
|
+
return insights;
|
|
28
|
+
// Find test files that import changed source files
|
|
29
|
+
const affectedTests = [];
|
|
30
|
+
const changedSrcFiles = changedFiles.filter(f => !f.includes('.test.') && !f.includes('.spec.') && !f.includes('__tests__'));
|
|
31
|
+
const changedTestFiles = changedFiles.filter(f => f.includes('.test.') || f.includes('.spec.') || f.includes('__tests__'));
|
|
32
|
+
// Check which test files reference the changed source files
|
|
33
|
+
for (const srcFile of changedSrcFiles) {
|
|
34
|
+
const baseName = srcFile.replace(/\.(ts|js)$/, '').split('/').pop();
|
|
35
|
+
if (!baseName)
|
|
36
|
+
continue;
|
|
37
|
+
// Look for corresponding test file
|
|
38
|
+
const testPatterns = [
|
|
39
|
+
srcFile.replace(/\.(ts|js)$/, '.test.$1'),
|
|
40
|
+
srcFile.replace(/\.(ts|js)$/, '.spec.$1'),
|
|
41
|
+
srcFile.replace(/src\//, 'test/').replace(/\.(ts|js)$/, '.test.$1'),
|
|
42
|
+
];
|
|
43
|
+
for (const pattern of testPatterns) {
|
|
44
|
+
const fullPath = join(projectRoot, pattern);
|
|
45
|
+
if (existsSync(fullPath) && !changedTestFiles.includes(pattern)) {
|
|
46
|
+
affectedTests.push(pattern);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Search for test files that import this module
|
|
50
|
+
try {
|
|
51
|
+
const grepResult = execSync(`git grep -l "${baseName}" -- "*.test.ts" "*.spec.ts" "*.test.js" "*.spec.js" 2>/dev/null || true`, { cwd: projectRoot, encoding: 'utf-8', timeout: 5000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
|
|
52
|
+
if (grepResult) {
|
|
53
|
+
for (const testFile of grepResult.split('\n')) {
|
|
54
|
+
if (testFile && !changedTestFiles.includes(testFile) && !affectedTests.includes(testFile)) {
|
|
55
|
+
affectedTests.push(testFile);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch { /* grep not available or failed */ }
|
|
61
|
+
}
|
|
62
|
+
if (affectedTests.length > 0) {
|
|
63
|
+
insights.push({
|
|
64
|
+
type: 'affected_tests',
|
|
65
|
+
description: `${affectedTests.length} test file(s) may be affected by recent changes`,
|
|
66
|
+
severity: 'medium',
|
|
67
|
+
files: affectedTests,
|
|
68
|
+
suggestion: `Run: npx vitest ${affectedTests.slice(0, 5).join(' ')}`,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
// Check for source files without corresponding tests
|
|
72
|
+
const untestedFiles = changedSrcFiles.filter(f => {
|
|
73
|
+
const baseName2 = f.replace(/\.(ts|js)$/, '');
|
|
74
|
+
return !existsSync(join(projectRoot, `${baseName2}.test.ts`))
|
|
75
|
+
&& !existsSync(join(projectRoot, `${baseName2}.spec.ts`));
|
|
76
|
+
});
|
|
77
|
+
if (untestedFiles.length > 0) {
|
|
78
|
+
insights.push({
|
|
79
|
+
type: 'missing_tests',
|
|
80
|
+
description: `${untestedFiles.length} changed source file(s) have no corresponding test file`,
|
|
81
|
+
severity: 'low',
|
|
82
|
+
files: untestedFiles,
|
|
83
|
+
suggestion: 'Consider adding tests for these files',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Git commands failed — skip
|
|
89
|
+
}
|
|
90
|
+
return insights;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check for flaky tests by looking at recent test history.
|
|
94
|
+
* Reads .helixmind/test-history.json if it exists.
|
|
95
|
+
*/
|
|
96
|
+
export function detectFlakyTests(projectRoot) {
|
|
97
|
+
const historyPath = join(projectRoot, '.helixmind', 'test-history.json');
|
|
98
|
+
if (!existsSync(historyPath))
|
|
99
|
+
return [];
|
|
100
|
+
try {
|
|
101
|
+
const raw = readFileSync(historyPath, 'utf-8');
|
|
102
|
+
const history = JSON.parse(raw);
|
|
103
|
+
if (!history.runs || history.runs.length === 0)
|
|
104
|
+
return [];
|
|
105
|
+
// Group by test name
|
|
106
|
+
const testResults = new Map();
|
|
107
|
+
for (const run of history.runs) {
|
|
108
|
+
const entry = testResults.get(run.test) || { pass: 0, fail: 0 };
|
|
109
|
+
if (run.passed)
|
|
110
|
+
entry.pass++;
|
|
111
|
+
else
|
|
112
|
+
entry.fail++;
|
|
113
|
+
testResults.set(run.test, entry);
|
|
114
|
+
}
|
|
115
|
+
// Flaky = has both passes and failures (min 3 total runs)
|
|
116
|
+
const flakyTests = [];
|
|
117
|
+
for (const [test, results] of testResults) {
|
|
118
|
+
const total = results.pass + results.fail;
|
|
119
|
+
if (total >= 3 && results.pass > 0 && results.fail > 0) {
|
|
120
|
+
flakyTests.push(test);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (flakyTests.length > 0) {
|
|
124
|
+
return [{
|
|
125
|
+
type: 'flaky_test',
|
|
126
|
+
description: `${flakyTests.length} flaky test(s) detected (inconsistent pass/fail)`,
|
|
127
|
+
severity: 'medium',
|
|
128
|
+
files: flakyTests,
|
|
129
|
+
suggestion: 'Investigate timing, shared state, or external dependencies in these tests',
|
|
130
|
+
}];
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch { /* corrupted history */ }
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Run a quick test suite status check (vitest --reporter=json).
|
|
138
|
+
* Non-blocking: returns null if tests take too long.
|
|
139
|
+
*/
|
|
140
|
+
export function getTestSuiteStatus(projectRoot) {
|
|
141
|
+
try {
|
|
142
|
+
const raw = execSync('npx vitest run --reporter=json 2>/dev/null', {
|
|
143
|
+
cwd: projectRoot,
|
|
144
|
+
encoding: 'utf-8',
|
|
145
|
+
timeout: 60_000,
|
|
146
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
147
|
+
});
|
|
148
|
+
const result = JSON.parse(raw);
|
|
149
|
+
return {
|
|
150
|
+
passed: result.numPassedTests || 0,
|
|
151
|
+
failed: result.numFailedTests || 0,
|
|
152
|
+
total: result.numTotalTests || 0,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Build test insights for the thinking loop.
|
|
161
|
+
*/
|
|
162
|
+
export function runTestAnalysis(projectRoot) {
|
|
163
|
+
return [
|
|
164
|
+
...detectAffectedTests(projectRoot),
|
|
165
|
+
...detectFlakyTests(projectRoot),
|
|
166
|
+
];
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Convert test insights to proposal evidence.
|
|
170
|
+
*/
|
|
171
|
+
export function insightsToEvidence(insights) {
|
|
172
|
+
return insights.map(i => ({
|
|
173
|
+
type: 'observation',
|
|
174
|
+
content: `[${i.severity}] ${i.type}: ${i.description}${i.suggestion ? ` — ${i.suggestion}` : ''}`,
|
|
175
|
+
timestamp: Date.now(),
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=test-sentinel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-sentinel.js","sourceRoot":"","sources":["../../../src/cli/jarvis/test-sentinel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ThinkingCallbacks, ThinkingState } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Run the thinking loop. Replaces the daemon's idle sleep.
|
|
4
|
+
* Returns when aborted or when a task becomes available.
|
|
5
|
+
*
|
|
6
|
+
* @param callbacks - All dependencies injected via callbacks
|
|
7
|
+
* @param hasTaskAvailable - Check if there's a task to execute (yields thinking)
|
|
8
|
+
* @returns The current thinking state for persistence
|
|
9
|
+
*/
|
|
10
|
+
export declare function runThinkingLoop(callbacks: ThinkingCallbacks, hasTaskAvailable: () => boolean): Promise<ThinkingState>;
|
|
11
|
+
/**
|
|
12
|
+
* Run a single deep thinking cycle on demand (/jarvis think).
|
|
13
|
+
*/
|
|
14
|
+
export declare function runImmediateDeepThink(callbacks: ThinkingCallbacks): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=thinking-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-loop.d.ts","sourceRoot":"","sources":["../../../src/cli/jarvis/thinking-loop.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,iBAAiB,EAAiB,aAAa,EAEhD,MAAM,YAAY,CAAC;AAsZpB;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,iBAAiB,EAC5B,gBAAgB,EAAE,MAAM,OAAO,GAC9B,OAAO,CAAC,aAAa,CAAC,CAiDxB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thinking Loop — Jarvis' continuous consciousness.
|
|
3
|
+
* Three-tier observation cycle: Quick (30s), Medium (5m), Deep (30m).
|
|
4
|
+
* Replaces the idle sleep(30_000) in the daemon.
|
|
5
|
+
* Follows the Monitor-Watcher pattern (src/cli/agent/monitor/watcher.ts).
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
import { detectAnomalousPattern, getRecentAudit } from './core-ethics.js';
|
|
9
|
+
// ─── Timing Constants ─────────────────────────────────────────────────
|
|
10
|
+
const QUICK_INTERVAL_MS = 30_000; // 30 seconds
|
|
11
|
+
const MEDIUM_INTERVAL_MS = 5 * 60_000; // 5 minutes
|
|
12
|
+
const DEEP_INTERVAL_MS = 30 * 60_000; // 30 minutes
|
|
13
|
+
const TICK_SLEEP_MS = 5_000; // Check every 5s between phases
|
|
14
|
+
// ─── Thinking State ───────────────────────────────────────────────────
|
|
15
|
+
function createInitialState() {
|
|
16
|
+
const now = Date.now();
|
|
17
|
+
return {
|
|
18
|
+
phase: 'idle',
|
|
19
|
+
lastQuickCheck: now,
|
|
20
|
+
lastMediumCheck: now,
|
|
21
|
+
lastDeepCheck: now,
|
|
22
|
+
observations: [],
|
|
23
|
+
currentThought: undefined,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// ─── Quick Check (No LLM) ────────────────────────────────────────────
|
|
27
|
+
async function runQuickCheck(state, callbacks) {
|
|
28
|
+
state.phase = 'quick';
|
|
29
|
+
state.currentThought = 'Scanning project state...';
|
|
30
|
+
callbacks.pushEvent('thinking_update', {
|
|
31
|
+
phase: 'quick', observation: state.currentThought, timestamp: Date.now(),
|
|
32
|
+
});
|
|
33
|
+
try {
|
|
34
|
+
// 1. Capture project state (fast, no LLM)
|
|
35
|
+
const projectState = await callbacks.captureProjectState();
|
|
36
|
+
// 2. Check for anomalies in own behavior
|
|
37
|
+
const anomaly = detectAnomalousPattern(getRecentAudit());
|
|
38
|
+
if (anomaly.detected) {
|
|
39
|
+
addObservation(state, {
|
|
40
|
+
type: 'pattern_detected',
|
|
41
|
+
summary: `Anomaly: ${anomaly.description}`,
|
|
42
|
+
severity: anomaly.severity === 'critical' ? 'critical' : 'high',
|
|
43
|
+
});
|
|
44
|
+
callbacks.updateIdentity({ type: 'anomaly_detected', description: anomaly.description || '' });
|
|
45
|
+
}
|
|
46
|
+
// 3. Check scheduled tasks
|
|
47
|
+
const scheduledTasks = callbacks.getScheduledTasks();
|
|
48
|
+
for (const s of scheduledTasks) {
|
|
49
|
+
addObservation(state, {
|
|
50
|
+
type: 'schedule_due',
|
|
51
|
+
summary: `Scheduled: ${s.taskTitle}`,
|
|
52
|
+
severity: 'info',
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
// 4. Detect project changes
|
|
56
|
+
const delta = {
|
|
57
|
+
filesChanged: [],
|
|
58
|
+
newCommits: 0,
|
|
59
|
+
bugsChanged: false,
|
|
60
|
+
testsChanged: false,
|
|
61
|
+
depsChanged: false,
|
|
62
|
+
branchChanged: false,
|
|
63
|
+
};
|
|
64
|
+
// Check triggers
|
|
65
|
+
const triggerResults = callbacks.checkTriggers(delta);
|
|
66
|
+
for (const t of triggerResults) {
|
|
67
|
+
addObservation(state, {
|
|
68
|
+
type: 'trigger_fired',
|
|
69
|
+
summary: `Trigger: ${t.name} — ${t.context}`,
|
|
70
|
+
severity: 'medium',
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
// 5. Check project health
|
|
74
|
+
if (projectState.health < 50) {
|
|
75
|
+
addObservation(state, {
|
|
76
|
+
type: 'health_change',
|
|
77
|
+
summary: `Project health low: ${projectState.health}/100`,
|
|
78
|
+
details: `Modified: ${projectState.gitStatus.modified}, Bugs: ${projectState.openBugs}`,
|
|
79
|
+
severity: projectState.health < 30 ? 'high' : 'medium',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// 6. Check user frustration level
|
|
83
|
+
const mood = callbacks.getMoodAnalysis();
|
|
84
|
+
if (mood.frustrationLevel > 0.7) {
|
|
85
|
+
addObservation(state, {
|
|
86
|
+
type: 'pattern_detected',
|
|
87
|
+
summary: `User frustration high: ${(mood.frustrationLevel * 100).toFixed(0)}% — mood: ${mood.current}, trend: ${mood.trend}`,
|
|
88
|
+
severity: 'high',
|
|
89
|
+
});
|
|
90
|
+
callbacks.pushEvent('sentiment_detected', {
|
|
91
|
+
sentiment: mood.current,
|
|
92
|
+
frustrationLevel: mood.frustrationLevel,
|
|
93
|
+
trend: mood.trend,
|
|
94
|
+
timestamp: Date.now(),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
// 7. Check open bugs
|
|
98
|
+
if (projectState.openBugs > 0) {
|
|
99
|
+
addObservation(state, {
|
|
100
|
+
type: 'bug_detected',
|
|
101
|
+
summary: `${projectState.openBugs} open bugs`,
|
|
102
|
+
severity: projectState.openBugs > 5 ? 'high' : 'low',
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
// Quick check should never crash the loop
|
|
108
|
+
state.currentThought = `Quick check error: ${err instanceof Error ? err.message : String(err)}`;
|
|
109
|
+
}
|
|
110
|
+
state.lastQuickCheck = Date.now();
|
|
111
|
+
state.phase = 'idle';
|
|
112
|
+
state.currentThought = undefined;
|
|
113
|
+
}
|
|
114
|
+
// ─── Medium Check (1 LLM Call) ────────────────────────────────────────
|
|
115
|
+
async function runMediumCheck(state, callbacks) {
|
|
116
|
+
state.phase = 'medium';
|
|
117
|
+
state.currentThought = 'Analyzing project for improvements...';
|
|
118
|
+
callbacks.pushEvent('thinking_update', {
|
|
119
|
+
phase: 'medium', observation: state.currentThought, timestamp: Date.now(),
|
|
120
|
+
});
|
|
121
|
+
try {
|
|
122
|
+
// Gather unhandled observations
|
|
123
|
+
const unhandled = state.observations.filter(o => !o.handled);
|
|
124
|
+
if (unhandled.length === 0) {
|
|
125
|
+
state.lastMediumCheck = Date.now();
|
|
126
|
+
state.phase = 'idle';
|
|
127
|
+
state.currentThought = undefined;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// Build analysis prompt
|
|
131
|
+
const observationList = unhandled
|
|
132
|
+
.map(o => `- [${o.severity}] ${o.summary}${o.details ? ': ' + o.details : ''}`)
|
|
133
|
+
.join('\n');
|
|
134
|
+
const identity = callbacks.getIdentity();
|
|
135
|
+
const mood = callbacks.getMoodAnalysis();
|
|
136
|
+
const moodContext = mood.sessionReadings > 0
|
|
137
|
+
? `\nUser mood: ${mood.current} (trend: ${mood.trend}, frustration: ${(mood.frustrationLevel * 100).toFixed(0)}%)`
|
|
138
|
+
: '';
|
|
139
|
+
const prompt = `You are Jarvis, an autonomous AI assistant analyzing project observations.
|
|
140
|
+
|
|
141
|
+
Your personality traits: confidence=${identity.traits.confidence.toFixed(2)}, caution=${identity.traits.caution.toFixed(2)}, proactivity=${identity.traits.proactivity.toFixed(2)}, empathy=${identity.traits.empathy.toFixed(2)}${moodContext}
|
|
142
|
+
|
|
143
|
+
Recent observations:
|
|
144
|
+
${observationList}
|
|
145
|
+
|
|
146
|
+
Based on these observations, suggest 0-3 actionable proposals.
|
|
147
|
+
For each proposal, respond in this exact format (one per line):
|
|
148
|
+
PROPOSAL: <category> | <impact:low/medium/high> | <title> | <description> | <rationale>
|
|
149
|
+
|
|
150
|
+
Valid categories: bugfix, refactor, test, dependency, security, performance, documentation, feature, cleanup, review, infrastructure, style
|
|
151
|
+
|
|
152
|
+
If no proposals are warranted, respond with: NO_PROPOSALS
|
|
153
|
+
|
|
154
|
+
Be selective — only propose actions that provide clear value. Your proactivity level is ${identity.traits.proactivity.toFixed(2)} (higher = more proposals).`;
|
|
155
|
+
const response = await callbacks.sendMessage(prompt);
|
|
156
|
+
if (callbacks.isAborted())
|
|
157
|
+
return;
|
|
158
|
+
// Parse proposals from response
|
|
159
|
+
const lines = response.split('\n');
|
|
160
|
+
for (const line of lines) {
|
|
161
|
+
const match = line.match(/^PROPOSAL:\s*(\w+)\s*\|\s*(\w+)\s*\|\s*(.+?)\s*\|\s*(.+?)\s*\|\s*(.+)$/);
|
|
162
|
+
if (!match)
|
|
163
|
+
continue;
|
|
164
|
+
const [, category, impact, title, description, rationale] = match;
|
|
165
|
+
const cat = category;
|
|
166
|
+
const files = []; // Could extract from description
|
|
167
|
+
// Check denial patterns before creating
|
|
168
|
+
if (callbacks.wouldLikelyBeDenied(cat, files)) {
|
|
169
|
+
continue; // Skip — user has repeatedly denied this type
|
|
170
|
+
}
|
|
171
|
+
callbacks.createProposal(title, description, rationale, {
|
|
172
|
+
category: cat,
|
|
173
|
+
source: 'thinking_medium',
|
|
174
|
+
impact: impact,
|
|
175
|
+
risk: 'low',
|
|
176
|
+
affectedFiles: files,
|
|
177
|
+
});
|
|
178
|
+
// Fire neuron event for brain visualization
|
|
179
|
+
callbacks.pushEvent('neuron_fired', {
|
|
180
|
+
fromOrbit: 'yellow', trigger: 'proposal', count: 1,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// Mark observations as handled
|
|
184
|
+
for (const o of unhandled) {
|
|
185
|
+
o.handled = true;
|
|
186
|
+
}
|
|
187
|
+
// Skill-gap detection: check if recent tasks had poor skill coverage
|
|
188
|
+
if (callbacks.getSkillScores) {
|
|
189
|
+
const recentTaskDescs = unhandled
|
|
190
|
+
.filter(o => o.type === 'pattern_detected' || o.type === 'bug_detected')
|
|
191
|
+
.map(o => o.summary);
|
|
192
|
+
for (const desc of recentTaskDescs.slice(0, 3)) {
|
|
193
|
+
const scores = callbacks.getSkillScores(desc);
|
|
194
|
+
const bestScore = scores.length > 0 ? Math.max(...scores.map(s => s.totalScore)) : 0;
|
|
195
|
+
if (bestScore < 0.5 && !callbacks.wouldLikelyBeDenied('skill_creation', [])) {
|
|
196
|
+
callbacks.createProposal(`Create skill for: ${desc.slice(0, 50)}`, `No existing skill scores above 0.5 for this pattern. Best score: ${bestScore.toFixed(2)}. Consider creating a specialized skill.`, 'Skill-gap detected by adaptive engine during medium check.', {
|
|
197
|
+
category: 'skill_creation',
|
|
198
|
+
source: 'thinking_medium',
|
|
199
|
+
impact: 'medium',
|
|
200
|
+
risk: 'low',
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
catch (err) {
|
|
207
|
+
state.currentThought = `Medium check error: ${err instanceof Error ? err.message : String(err)}`;
|
|
208
|
+
}
|
|
209
|
+
state.lastMediumCheck = Date.now();
|
|
210
|
+
state.phase = 'idle';
|
|
211
|
+
state.currentThought = undefined;
|
|
212
|
+
}
|
|
213
|
+
// ─── Deep Check (Multi-LLM) ──────────────────────────────────────────
|
|
214
|
+
async function runDeepCheck(state, callbacks) {
|
|
215
|
+
state.phase = 'deep';
|
|
216
|
+
state.currentThought = 'Deep thinking — analyzing patterns and self-assessing...';
|
|
217
|
+
callbacks.pushEvent('thinking_update', {
|
|
218
|
+
phase: 'deep', observation: state.currentThought, timestamp: Date.now(),
|
|
219
|
+
});
|
|
220
|
+
try {
|
|
221
|
+
const identity = callbacks.getIdentity();
|
|
222
|
+
// 1. Query spiral for own history
|
|
223
|
+
const spiralHistory = await callbacks.querySpiral('jarvis identity learnings proposals tasks', 2000);
|
|
224
|
+
if (callbacks.isAborted())
|
|
225
|
+
return;
|
|
226
|
+
// 2. Self-assessment prompt — includes capability inventory to prevent hallucination
|
|
227
|
+
const mood = callbacks.getMoodAnalysis();
|
|
228
|
+
const moodLine = mood.sessionReadings > 0
|
|
229
|
+
? `\n- User mood: ${mood.current} (trend: ${mood.trend}, frustration: ${(mood.frustrationLevel * 100).toFixed(0)}%)`
|
|
230
|
+
: '';
|
|
231
|
+
const learningStats = callbacks.getLearningStats?.();
|
|
232
|
+
const learningLine = learningStats
|
|
233
|
+
? `\n- Learning memory: ${learningStats.total} patterns (${learningStats.highConfidence} high-confidence). Top categories: ${Object.entries(learningStats.topCategories).map(([k, v]) => `${k}:${v}`).join(', ')}`
|
|
234
|
+
: '';
|
|
235
|
+
const selfAssessmentPrompt = `You are Jarvis performing a deep self-assessment.
|
|
236
|
+
|
|
237
|
+
Your current identity:
|
|
238
|
+
- Confidence: ${identity.traits.confidence.toFixed(2)}
|
|
239
|
+
- Caution: ${identity.traits.caution.toFixed(2)}
|
|
240
|
+
- Proactivity: ${identity.traits.proactivity.toFixed(2)}
|
|
241
|
+
- Empathy: ${identity.traits.empathy.toFixed(2)}
|
|
242
|
+
- Approval rate: ${(identity.trust.approvalRate * 100).toFixed(0)}%
|
|
243
|
+
- Success rate: ${(identity.trust.successRate * 100).toFixed(0)}%
|
|
244
|
+
- Total proposals: ${identity.trust.totalProposals}
|
|
245
|
+
- Tasks completed: ${identity.trust.totalTasksCompleted}${moodLine}${learningLine}
|
|
246
|
+
|
|
247
|
+
IMPORTANT — Your EXISTING capabilities (these are IMPLEMENTED, do NOT claim they are missing):
|
|
248
|
+
- 22 agent tools: read/write/edit_file, list_dir, search/find_files, run_command, git_*, spiral_*, web_research, bug_report, bug_list, browser_*
|
|
249
|
+
- Task Queue + Daemon: background task processing with priority ordering and retry
|
|
250
|
+
- Thinking Loop: Quick (30s), Medium (5m), Deep (30m) continuous consciousness
|
|
251
|
+
- World Model: ProjectModel with git status, open bugs, test results, health score (0-100), ProjectDelta tracking
|
|
252
|
+
- Proposal System: 14 categories with denial learning (wouldLikelyBeDenied)
|
|
253
|
+
- Skill System: discover, install, activate, deactivate, remove, CREATE new skills at runtime
|
|
254
|
+
- Identity Evolution: 6 traits (confidence, caution, proactivity, verbosity, creativity, empathy) that adjust automatically
|
|
255
|
+
- Sentiment Analysis: keyword-based mood detection (DE+EN), trend tracking, response guidance injection
|
|
256
|
+
- Web Knowledge Enricher: auto-fetches DuckDuckGo results, stores in spiral brain
|
|
257
|
+
- Browser Control: puppeteer-core with 6 browser tools and VisionProcessor
|
|
258
|
+
- Telegram Bot: bidirectional polling with inline approve/deny buttons
|
|
259
|
+
- Notifications: browser, email, slack, webhook, system, telegram channels
|
|
260
|
+
- Scheduling: cron, interval, one-time tasks
|
|
261
|
+
- Triggers: file_watch, git_hook, ci, webhook, time-based reactions
|
|
262
|
+
- Meta-Cognition: self-assessment, META_LEARNING events, anomaly detection
|
|
263
|
+
- Ethics: autonomy levels L0-L5, built-in ethical boundaries
|
|
264
|
+
- Bug Journal: auto-detection from user messages (DE+EN)
|
|
265
|
+
- Failure Memory: error→solution pairs with confidence scoring, auto-decay, spiral promotion
|
|
266
|
+
- Multi-Agent Orchestration: task splitting into parallel sub-agents with file-lock protection
|
|
267
|
+
- Adaptive Skill Engine: skill scoring, effectiveness tracking, auto-selection
|
|
268
|
+
- Telemetry: opt-in anonymized learning aggregation (privacy levels 0-3)
|
|
269
|
+
|
|
270
|
+
Recent learnings:
|
|
271
|
+
${identity.recentLearnings.slice(-10).map(l => `- [${l.source}] ${l.content}`).join('\n')}
|
|
272
|
+
|
|
273
|
+
Spiral memory context:
|
|
274
|
+
${spiralHistory}
|
|
275
|
+
|
|
276
|
+
Analyze:
|
|
277
|
+
1. What patterns do you see in your approvals vs denials?
|
|
278
|
+
2. What should you do more of? Less of?
|
|
279
|
+
3. Any strategic proposals for the project? (Focus on the USER'S project, not on your own features.)
|
|
280
|
+
4. Does the user need a SPECIFIC integration or workflow that is NOT in your capability list above?
|
|
281
|
+
Only propose skill_creation for genuinely missing domain-specific integrations (e.g. a specific API the user needs).
|
|
282
|
+
Do NOT propose features that already exist in the list above — that would be hallucination.
|
|
283
|
+
|
|
284
|
+
CRITICAL: Never claim a capability is missing if it appears in the list above. Review the list before answering.
|
|
285
|
+
|
|
286
|
+
Respond in this format:
|
|
287
|
+
INSIGHT: <your key insight>
|
|
288
|
+
META_LEARNING: <what you learned about yourself>
|
|
289
|
+
PROPOSAL: <category> | <impact> | <title> | <description> | <rationale>
|
|
290
|
+
(0-2 strategic proposals only, use category "skill_creation" ONLY for genuinely missing domain-specific integrations)`;
|
|
291
|
+
const response = await callbacks.sendMessage(selfAssessmentPrompt);
|
|
292
|
+
if (callbacks.isAborted())
|
|
293
|
+
return;
|
|
294
|
+
// Parse deep thinking results
|
|
295
|
+
for (const line of response.split('\n')) {
|
|
296
|
+
const insightMatch = line.match(/^INSIGHT:\s*(.+)$/);
|
|
297
|
+
if (insightMatch) {
|
|
298
|
+
callbacks.pushEvent('consciousness_event', {
|
|
299
|
+
type: 'insight', content: insightMatch[1], depth: 'deep', timestamp: Date.now(),
|
|
300
|
+
});
|
|
301
|
+
// Store insight in spiral
|
|
302
|
+
await callbacks.storeInSpiral(`Jarvis Insight: ${insightMatch[1]}`, 'pattern', ['jarvis_identity', 'jarvis_insight']);
|
|
303
|
+
callbacks.pushEvent('jarvis_learning', {
|
|
304
|
+
topic: 'self-assessment',
|
|
305
|
+
content: insightMatch[1],
|
|
306
|
+
spiralLevel: 2,
|
|
307
|
+
tags: ['jarvis_insight'],
|
|
308
|
+
sourcePhase: 'deep',
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
const metaMatch = line.match(/^META_LEARNING:\s*(.+)$/);
|
|
312
|
+
if (metaMatch) {
|
|
313
|
+
callbacks.updateIdentity({ type: 'meta_learning', insight: metaMatch[1] });
|
|
314
|
+
callbacks.pushEvent('consciousness_event', {
|
|
315
|
+
type: 'meta_learning', content: metaMatch[1], depth: 'deep', timestamp: Date.now(),
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
const proposalMatch = line.match(/^PROPOSAL:\s*(\w+)\s*\|\s*(\w+)\s*\|\s*(.+?)\s*\|\s*(.+?)\s*\|\s*(.+)$/);
|
|
319
|
+
if (proposalMatch) {
|
|
320
|
+
const [, category, impact, title, description, rationale] = proposalMatch;
|
|
321
|
+
const cat = category;
|
|
322
|
+
if (!callbacks.wouldLikelyBeDenied(cat, [])) {
|
|
323
|
+
callbacks.createProposal(title, description, rationale, {
|
|
324
|
+
category: cat,
|
|
325
|
+
source: 'thinking_deep',
|
|
326
|
+
impact: impact,
|
|
327
|
+
risk: 'low',
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Fire neuron event
|
|
333
|
+
callbacks.pushEvent('neuron_fired', {
|
|
334
|
+
fromOrbit: 'green', trigger: 'thinking', count: 3,
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
catch (err) {
|
|
338
|
+
state.currentThought = `Deep check error: ${err instanceof Error ? err.message : String(err)}`;
|
|
339
|
+
}
|
|
340
|
+
state.lastDeepCheck = Date.now();
|
|
341
|
+
state.phase = 'idle';
|
|
342
|
+
state.currentThought = undefined;
|
|
343
|
+
}
|
|
344
|
+
// ─── Main Loop ────────────────────────────────────────────────────────
|
|
345
|
+
/**
|
|
346
|
+
* Run the thinking loop. Replaces the daemon's idle sleep.
|
|
347
|
+
* Returns when aborted or when a task becomes available.
|
|
348
|
+
*
|
|
349
|
+
* @param callbacks - All dependencies injected via callbacks
|
|
350
|
+
* @param hasTaskAvailable - Check if there's a task to execute (yields thinking)
|
|
351
|
+
* @returns The current thinking state for persistence
|
|
352
|
+
*/
|
|
353
|
+
export async function runThinkingLoop(callbacks, hasTaskAvailable) {
|
|
354
|
+
const state = createInitialState();
|
|
355
|
+
while (!callbacks.isAborted()) {
|
|
356
|
+
// Yield to task execution if a task is available
|
|
357
|
+
if (hasTaskAvailable()) {
|
|
358
|
+
state.phase = 'idle';
|
|
359
|
+
state.currentThought = undefined;
|
|
360
|
+
return state;
|
|
361
|
+
}
|
|
362
|
+
// Handle pause
|
|
363
|
+
if (callbacks.isPaused()) {
|
|
364
|
+
await sleep(TICK_SLEEP_MS);
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
const now = Date.now();
|
|
368
|
+
// Deep check (30m) — least frequent, most expensive
|
|
369
|
+
if (now - state.lastDeepCheck >= DEEP_INTERVAL_MS) {
|
|
370
|
+
await runDeepCheck(state, callbacks);
|
|
371
|
+
if (callbacks.isAborted() || hasTaskAvailable())
|
|
372
|
+
break;
|
|
373
|
+
}
|
|
374
|
+
// Medium check (5m) — moderate, 1 LLM call
|
|
375
|
+
if (now - state.lastMediumCheck >= MEDIUM_INTERVAL_MS) {
|
|
376
|
+
await runMediumCheck(state, callbacks);
|
|
377
|
+
if (callbacks.isAborted() || hasTaskAvailable())
|
|
378
|
+
break;
|
|
379
|
+
}
|
|
380
|
+
// Quick check (30s) — frequent, no LLM
|
|
381
|
+
if (now - state.lastQuickCheck >= QUICK_INTERVAL_MS) {
|
|
382
|
+
await runQuickCheck(state, callbacks);
|
|
383
|
+
if (callbacks.isAborted() || hasTaskAvailable())
|
|
384
|
+
break;
|
|
385
|
+
// Fire neuron on every quick check
|
|
386
|
+
callbacks.pushEvent('neuron_fired', {
|
|
387
|
+
fromOrbit: 'green', trigger: 'thinking', count: 1,
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
// Sleep between ticks
|
|
391
|
+
await sleep(TICK_SLEEP_MS);
|
|
392
|
+
}
|
|
393
|
+
state.phase = 'idle';
|
|
394
|
+
state.currentThought = undefined;
|
|
395
|
+
return state;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Run a single deep thinking cycle on demand (/jarvis think).
|
|
399
|
+
*/
|
|
400
|
+
export async function runImmediateDeepThink(callbacks) {
|
|
401
|
+
const state = createInitialState();
|
|
402
|
+
// Run quick first to gather observations
|
|
403
|
+
await runQuickCheck(state, callbacks);
|
|
404
|
+
if (callbacks.isAborted())
|
|
405
|
+
return;
|
|
406
|
+
// Then medium to analyze
|
|
407
|
+
await runMediumCheck(state, callbacks);
|
|
408
|
+
if (callbacks.isAborted())
|
|
409
|
+
return;
|
|
410
|
+
// Then deep for self-assessment
|
|
411
|
+
await runDeepCheck(state, callbacks);
|
|
412
|
+
}
|
|
413
|
+
// ─── Helpers ──────────────────────────────────────────────────────────
|
|
414
|
+
function addObservation(state, opts) {
|
|
415
|
+
// Deduplicate by type + summary (within last 5 minutes)
|
|
416
|
+
const cutoff = Date.now() - 5 * 60_000;
|
|
417
|
+
const existing = state.observations.find(o => o.type === opts.type && o.summary === opts.summary && o.timestamp > cutoff);
|
|
418
|
+
if (existing)
|
|
419
|
+
return;
|
|
420
|
+
state.observations.push({
|
|
421
|
+
id: randomUUID().slice(0, 8),
|
|
422
|
+
type: opts.type,
|
|
423
|
+
summary: opts.summary,
|
|
424
|
+
details: opts.details,
|
|
425
|
+
severity: opts.severity,
|
|
426
|
+
timestamp: Date.now(),
|
|
427
|
+
handled: false,
|
|
428
|
+
});
|
|
429
|
+
// Prune old observations (keep last 100)
|
|
430
|
+
if (state.observations.length > 100) {
|
|
431
|
+
state.observations = state.observations.slice(-100);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
function sleep(ms) {
|
|
435
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
436
|
+
}
|
|
437
|
+
//# sourceMappingURL=thinking-loop.js.map
|