synabun 1.3.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +205 -662
- package/LICENSE-COMMERCIAL.md +33 -0
- package/NOTICE +17 -0
- package/README.md +175 -853
- package/THIRD-PARTY-LICENSES.md +136 -0
- package/benchmarks/browser-live-results.json +79 -0
- package/benchmarks/browser-v2-results.json +258 -0
- package/benchmarks/fixtures/browser/README.md +57 -0
- package/benchmarks/fixtures/browser/page-state.json +132 -0
- package/benchmarks/fixtures/browser/social.json +92 -0
- package/benchmarks/fixtures/browser/target.json +319 -0
- package/benchmarks/fixtures/desktop/README.md +58 -0
- package/benchmarks/fixtures/desktop/abstention.json +59 -0
- package/benchmarks/fixtures/desktop/adversarial.json +22 -0
- package/benchmarks/fixtures/desktop/forbidden.json +93 -0
- package/benchmarks/fixtures/desktop/generate.mjs +1023 -0
- package/benchmarks/fixtures/desktop/target.json +136 -0
- package/bin/synabun.js +30 -0
- package/docs/whatsapp.md +325 -0
- package/hooks/claude-code/post-plan.mjs +613 -391
- package/hooks/claude-code/post-remember.mjs +246 -122
- package/hooks/claude-code/pre-compact.mjs +171 -110
- package/hooks/claude-code/pre-task.mjs +133 -0
- package/hooks/claude-code/pre-websearch.mjs +15 -4
- package/hooks/claude-code/prompt-origin.mjs +94 -0
- package/hooks/claude-code/prompt-submit.mjs +1244 -861
- package/hooks/claude-code/session-start.mjs +114 -156
- package/hooks/claude-code/shared.mjs +1228 -368
- package/hooks/claude-code/state.mjs +167 -0
- package/hooks/claude-code/stop.mjs +515 -140
- package/hooks/claude-code/subagent-start.mjs +154 -0
- package/hooks/claude-code/subagent-stop.mjs +102 -0
- package/hooks/claude-code/task-gate.mjs +150 -0
- package/launcher.mjs +40 -0
- package/lib/claude-hooks.js +137 -0
- package/lib/claude-usage-audit.js +141 -0
- package/lib/client-config-repair.js +145 -0
- package/lib/data-home-migration.js +502 -0
- package/lib/desktop-pwa.js +206 -0
- package/lib/external-tools.js +221 -0
- package/lib/first-launch-protection.js +245 -0
- package/lib/packaged-runtime.js +110 -0
- package/lib/paths.d.ts +21 -0
- package/lib/paths.js +103 -0
- package/lib/start-launcher.js +1309 -0
- package/mcp-server/dist/config.d.ts +22 -0
- package/mcp-server/dist/config.d.ts.map +1 -0
- package/mcp-server/dist/config.js +109 -0
- package/mcp-server/dist/config.js.map +1 -0
- package/mcp-server/dist/http.d.ts +30 -0
- package/mcp-server/dist/http.d.ts.map +1 -0
- package/mcp-server/dist/http.js +276 -0
- package/mcp-server/dist/http.js.map +1 -0
- package/mcp-server/dist/index.d.ts +48 -0
- package/mcp-server/dist/index.d.ts.map +1 -0
- package/mcp-server/dist/index.js +538 -0
- package/mcp-server/dist/index.js.map +1 -0
- package/mcp-server/dist/preload-http.d.ts +3 -0
- package/mcp-server/dist/preload-http.d.ts.map +1 -0
- package/mcp-server/dist/preload-http.js +28 -0
- package/mcp-server/dist/preload-http.js.map +1 -0
- package/mcp-server/dist/preload.d.ts +3 -0
- package/mcp-server/dist/preload.d.ts.map +1 -0
- package/mcp-server/dist/preload.js +32 -0
- package/mcp-server/dist/preload.js.map +1 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts +19 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.d.ts.map +1 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js +403 -0
- package/mcp-server/dist/scripts/migrate-qdrant-to-sqlite.js.map +1 -0
- package/mcp-server/dist/scripts/setup-embeddings.d.ts +3 -0
- package/mcp-server/dist/scripts/setup-embeddings.d.ts.map +1 -0
- package/mcp-server/dist/scripts/setup-embeddings.js +15 -0
- package/mcp-server/dist/scripts/setup-embeddings.js.map +1 -0
- package/mcp-server/dist/services/assistant-judgments.d.ts +79 -0
- package/mcp-server/dist/services/assistant-judgments.d.ts.map +1 -0
- package/mcp-server/dist/services/assistant-judgments.js +128 -0
- package/mcp-server/dist/services/assistant-judgments.js.map +1 -0
- package/mcp-server/dist/services/browser-assist-gate.d.ts +314 -0
- package/mcp-server/dist/services/browser-assist-gate.d.ts.map +1 -0
- package/mcp-server/dist/services/browser-assist-gate.js +344 -0
- package/mcp-server/dist/services/browser-assist-gate.js.map +1 -0
- package/mcp-server/dist/services/browser-assist.d.ts +104 -0
- package/mcp-server/dist/services/browser-assist.d.ts.map +1 -0
- package/mcp-server/dist/services/browser-assist.js +282 -0
- package/mcp-server/dist/services/browser-assist.js.map +1 -0
- package/mcp-server/dist/services/browser-bench.d.ts +772 -0
- package/mcp-server/dist/services/browser-bench.d.ts.map +1 -0
- package/mcp-server/dist/services/browser-bench.js +424 -0
- package/mcp-server/dist/services/browser-bench.js.map +1 -0
- package/mcp-server/dist/services/browser-judgments.d.ts +196 -0
- package/mcp-server/dist/services/browser-judgments.d.ts.map +1 -0
- package/mcp-server/dist/services/browser-judgments.js +363 -0
- package/mcp-server/dist/services/browser-judgments.js.map +1 -0
- package/mcp-server/dist/services/browser-risk.d.ts +166 -0
- package/mcp-server/dist/services/browser-risk.d.ts.map +1 -0
- package/mcp-server/dist/services/browser-risk.js +458 -0
- package/mcp-server/dist/services/browser-risk.js.map +1 -0
- package/mcp-server/dist/services/categories.d.ts +61 -0
- package/mcp-server/dist/services/categories.d.ts.map +1 -0
- package/mcp-server/dist/services/categories.js +377 -0
- package/mcp-server/dist/services/categories.js.map +1 -0
- package/mcp-server/dist/services/codex-config-heal.d.ts +49 -0
- package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -0
- package/mcp-server/dist/services/codex-config-heal.js +346 -0
- package/mcp-server/dist/services/codex-config-heal.js.map +1 -0
- package/mcp-server/dist/services/desktop-assist-gate.d.ts +198 -0
- package/mcp-server/dist/services/desktop-assist-gate.d.ts.map +1 -0
- package/mcp-server/dist/services/desktop-assist-gate.js +202 -0
- package/mcp-server/dist/services/desktop-assist-gate.js.map +1 -0
- package/mcp-server/dist/services/desktop-assist.d.ts +104 -0
- package/mcp-server/dist/services/desktop-assist.d.ts.map +1 -0
- package/mcp-server/dist/services/desktop-assist.js +266 -0
- package/mcp-server/dist/services/desktop-assist.js.map +1 -0
- package/mcp-server/dist/services/desktop-bench.d.ts +553 -0
- package/mcp-server/dist/services/desktop-bench.d.ts.map +1 -0
- package/mcp-server/dist/services/desktop-bench.js +311 -0
- package/mcp-server/dist/services/desktop-bench.js.map +1 -0
- package/mcp-server/dist/services/desktop-client.d.ts +23 -0
- package/mcp-server/dist/services/desktop-client.d.ts.map +1 -0
- package/mcp-server/dist/services/desktop-client.js +79 -0
- package/mcp-server/dist/services/desktop-client.js.map +1 -0
- package/mcp-server/dist/services/desktop-judgments.d.ts +125 -0
- package/mcp-server/dist/services/desktop-judgments.d.ts.map +1 -0
- package/mcp-server/dist/services/desktop-judgments.js +177 -0
- package/mcp-server/dist/services/desktop-judgments.js.map +1 -0
- package/mcp-server/dist/services/desktop-risk.d.ts +283 -0
- package/mcp-server/dist/services/desktop-risk.d.ts.map +1 -0
- package/mcp-server/dist/services/desktop-risk.js +605 -0
- package/mcp-server/dist/services/desktop-risk.js.map +1 -0
- package/mcp-server/dist/services/discord.d.ts +112 -0
- package/mcp-server/dist/services/discord.d.ts.map +1 -0
- package/mcp-server/dist/services/discord.js +477 -0
- package/mcp-server/dist/services/discord.js.map +1 -0
- package/mcp-server/dist/services/edit-stale.d.ts +81 -0
- package/mcp-server/dist/services/edit-stale.d.ts.map +1 -0
- package/mcp-server/dist/services/edit-stale.js +358 -0
- package/mcp-server/dist/services/edit-stale.js.map +1 -0
- package/mcp-server/dist/services/embedding-service.d.ts +16 -0
- package/mcp-server/dist/services/embedding-service.d.ts.map +1 -0
- package/mcp-server/dist/services/embedding-service.js +126 -0
- package/mcp-server/dist/services/embedding-service.js.map +1 -0
- package/mcp-server/dist/services/embedding-worker.d.ts +2 -0
- package/mcp-server/dist/services/embedding-worker.d.ts.map +1 -0
- package/mcp-server/dist/services/embedding-worker.js +52 -0
- package/mcp-server/dist/services/embedding-worker.js.map +1 -0
- package/mcp-server/dist/services/fb-regions.d.ts +71 -0
- package/mcp-server/dist/services/fb-regions.d.ts.map +1 -0
- package/mcp-server/dist/services/fb-regions.js +211 -0
- package/mcp-server/dist/services/fb-regions.js.map +1 -0
- package/mcp-server/dist/services/file-checksums.d.ts +22 -0
- package/mcp-server/dist/services/file-checksums.d.ts.map +1 -0
- package/mcp-server/dist/services/file-checksums.js +55 -0
- package/mcp-server/dist/services/file-checksums.js.map +1 -0
- package/mcp-server/dist/services/file-excerpt.d.ts +24 -0
- package/mcp-server/dist/services/file-excerpt.d.ts.map +1 -0
- package/mcp-server/dist/services/file-excerpt.js +65 -0
- package/mcp-server/dist/services/file-excerpt.js.map +1 -0
- package/mcp-server/dist/services/identity.d.ts +124 -0
- package/mcp-server/dist/services/identity.d.ts.map +1 -0
- package/mcp-server/dist/services/identity.js +241 -0
- package/mcp-server/dist/services/identity.js.map +1 -0
- package/mcp-server/dist/services/local-embeddings.d.ts +2 -0
- package/mcp-server/dist/services/local-embeddings.d.ts.map +1 -0
- package/mcp-server/dist/services/local-embeddings.js +3 -0
- package/mcp-server/dist/services/local-embeddings.js.map +1 -0
- package/mcp-server/dist/services/memory-client.d.ts +4 -0
- package/mcp-server/dist/services/memory-client.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-client.js +27 -0
- package/mcp-server/dist/services/memory-client.js.map +1 -0
- package/mcp-server/dist/services/memory-judge-backfill.d.ts +135 -0
- package/mcp-server/dist/services/memory-judge-backfill.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-judge-backfill.js +510 -0
- package/mcp-server/dist/services/memory-judge-backfill.js.map +1 -0
- package/mcp-server/dist/services/memory-judgments.d.ts +362 -0
- package/mcp-server/dist/services/memory-judgments.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-judgments.js +674 -0
- package/mcp-server/dist/services/memory-judgments.js.map +1 -0
- package/mcp-server/dist/services/memory-maintenance.d.ts +108 -0
- package/mcp-server/dist/services/memory-maintenance.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-maintenance.js +403 -0
- package/mcp-server/dist/services/memory-maintenance.js.map +1 -0
- package/mcp-server/dist/services/memory-retrieval.d.ts +66 -0
- package/mcp-server/dist/services/memory-retrieval.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-retrieval.js +412 -0
- package/mcp-server/dist/services/memory-retrieval.js.map +1 -0
- package/mcp-server/dist/services/memory-schema.d.ts +16 -0
- package/mcp-server/dist/services/memory-schema.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-schema.js +282 -0
- package/mcp-server/dist/services/memory-schema.js.map +1 -0
- package/mcp-server/dist/services/memory-sessions.d.ts +24 -0
- package/mcp-server/dist/services/memory-sessions.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-sessions.js +110 -0
- package/mcp-server/dist/services/memory-sessions.js.map +1 -0
- package/mcp-server/dist/services/memory-triage.d.ts +60 -0
- package/mcp-server/dist/services/memory-triage.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-triage.js +189 -0
- package/mcp-server/dist/services/memory-triage.js.map +1 -0
- package/mcp-server/dist/services/memory-verification.d.ts +24 -0
- package/mcp-server/dist/services/memory-verification.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-verification.js +92 -0
- package/mcp-server/dist/services/memory-verification.js.map +1 -0
- package/mcp-server/dist/services/memory-writer.d.ts +26 -0
- package/mcp-server/dist/services/memory-writer.d.ts.map +1 -0
- package/mcp-server/dist/services/memory-writer.js +126 -0
- package/mcp-server/dist/services/memory-writer.js.map +1 -0
- package/mcp-server/dist/services/neural-interface.d.ts +439 -0
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -0
- package/mcp-server/dist/services/neural-interface.js +1135 -0
- package/mcp-server/dist/services/neural-interface.js.map +1 -0
- package/mcp-server/dist/services/profiles.d.ts +120 -0
- package/mcp-server/dist/services/profiles.d.ts.map +1 -0
- package/mcp-server/dist/services/profiles.js +387 -0
- package/mcp-server/dist/services/profiles.js.map +1 -0
- package/mcp-server/dist/services/secret-gate.d.ts +29 -0
- package/mcp-server/dist/services/secret-gate.d.ts.map +1 -0
- package/mcp-server/dist/services/secret-gate.js +43 -0
- package/mcp-server/dist/services/secret-gate.js.map +1 -0
- package/mcp-server/dist/services/server-instructions.d.ts +10 -0
- package/mcp-server/dist/services/server-instructions.d.ts.map +1 -0
- package/mcp-server/dist/services/server-instructions.js +101 -0
- package/mcp-server/dist/services/server-instructions.js.map +1 -0
- package/mcp-server/dist/services/sqlite.d.ts +235 -0
- package/mcp-server/dist/services/sqlite.d.ts.map +1 -0
- package/mcp-server/dist/services/sqlite.js +1185 -0
- package/mcp-server/dist/services/sqlite.js.map +1 -0
- package/mcp-server/dist/services/typesafe-bench.d.ts +99 -0
- package/mcp-server/dist/services/typesafe-bench.d.ts.map +1 -0
- package/mcp-server/dist/services/typesafe-bench.js +218 -0
- package/mcp-server/dist/services/typesafe-bench.js.map +1 -0
- package/mcp-server/dist/services/typesafe-config.d.ts +342 -0
- package/mcp-server/dist/services/typesafe-config.d.ts.map +1 -0
- package/mcp-server/dist/services/typesafe-config.js +746 -0
- package/mcp-server/dist/services/typesafe-config.js.map +1 -0
- package/mcp-server/dist/services/typesafe.d.ts +213 -0
- package/mcp-server/dist/services/typesafe.d.ts.map +1 -0
- package/mcp-server/dist/services/typesafe.js +330 -0
- package/mcp-server/dist/services/typesafe.js.map +1 -0
- package/mcp-server/dist/services/vector-cache.d.ts +68 -0
- package/mcp-server/dist/services/vector-cache.d.ts.map +1 -0
- package/mcp-server/dist/services/vector-cache.js +271 -0
- package/mcp-server/dist/services/vector-cache.js.map +1 -0
- package/mcp-server/dist/services/whiteboard-geometry.d.ts +305 -0
- package/mcp-server/dist/services/whiteboard-geometry.d.ts.map +1 -0
- package/mcp-server/dist/services/whiteboard-geometry.js +666 -0
- package/mcp-server/dist/services/whiteboard-geometry.js.map +1 -0
- package/mcp-server/dist/tools/agents.d.ts +212 -0
- package/mcp-server/dist/tools/agents.d.ts.map +1 -0
- package/mcp-server/dist/tools/agents.js +407 -0
- package/mcp-server/dist/tools/agents.js.map +1 -0
- package/mcp-server/dist/tools/bluesky.d.ts +39 -0
- package/mcp-server/dist/tools/bluesky.d.ts.map +1 -0
- package/mcp-server/dist/tools/bluesky.js +1144 -0
- package/mcp-server/dist/tools/bluesky.js.map +1 -0
- package/mcp-server/dist/tools/browser-advanced.d.ts +58 -0
- package/mcp-server/dist/tools/browser-advanced.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-advanced.js +106 -0
- package/mcp-server/dist/tools/browser-advanced.js.map +1 -0
- package/mcp-server/dist/tools/browser-batch.d.ts +99 -0
- package/mcp-server/dist/tools/browser-batch.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-batch.js +187 -0
- package/mcp-server/dist/tools/browser-batch.js.map +1 -0
- package/mcp-server/dist/tools/browser-cheatsheet.d.ts +21 -0
- package/mcp-server/dist/tools/browser-cheatsheet.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-cheatsheet.js +144 -0
- package/mcp-server/dist/tools/browser-cheatsheet.js.map +1 -0
- package/mcp-server/dist/tools/browser-interact.d.ts +239 -0
- package/mcp-server/dist/tools/browser-interact.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-interact.js +300 -0
- package/mcp-server/dist/tools/browser-interact.js.map +1 -0
- package/mcp-server/dist/tools/browser-navigate.d.ts +90 -0
- package/mcp-server/dist/tools/browser-navigate.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-navigate.js +142 -0
- package/mcp-server/dist/tools/browser-navigate.js.map +1 -0
- package/mcp-server/dist/tools/browser-observe.d.ts +561 -0
- package/mcp-server/dist/tools/browser-observe.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser-observe.js +2009 -0
- package/mcp-server/dist/tools/browser-observe.js.map +1 -0
- package/mcp-server/dist/tools/browser.d.ts +34 -0
- package/mcp-server/dist/tools/browser.d.ts.map +1 -0
- package/mcp-server/dist/tools/browser.js +112 -0
- package/mcp-server/dist/tools/browser.js.map +1 -0
- package/mcp-server/dist/tools/card-tools.d.ts +82 -0
- package/mcp-server/dist/tools/card-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/card-tools.js +137 -0
- package/mcp-server/dist/tools/card-tools.js.map +1 -0
- package/mcp-server/dist/tools/card.d.ts +8 -0
- package/mcp-server/dist/tools/card.d.ts.map +1 -0
- package/mcp-server/dist/tools/card.js +16 -0
- package/mcp-server/dist/tools/card.js.map +1 -0
- package/mcp-server/dist/tools/category.d.ts +32 -0
- package/mcp-server/dist/tools/category.d.ts.map +1 -0
- package/mcp-server/dist/tools/category.js +290 -0
- package/mcp-server/dist/tools/category.js.map +1 -0
- package/mcp-server/dist/tools/choice.d.ts +160 -0
- package/mcp-server/dist/tools/choice.d.ts.map +1 -0
- package/mcp-server/dist/tools/choice.js +80 -0
- package/mcp-server/dist/tools/choice.js.map +1 -0
- package/mcp-server/dist/tools/computer.d.ts +71 -0
- package/mcp-server/dist/tools/computer.d.ts.map +1 -0
- package/mcp-server/dist/tools/computer.js +174 -0
- package/mcp-server/dist/tools/computer.js.map +1 -0
- package/mcp-server/dist/tools/discord-channel.d.ts +44 -0
- package/mcp-server/dist/tools/discord-channel.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-channel.js +236 -0
- package/mcp-server/dist/tools/discord-channel.js.map +1 -0
- package/mcp-server/dist/tools/discord-guild.d.ts +20 -0
- package/mcp-server/dist/tools/discord-guild.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-guild.js +138 -0
- package/mcp-server/dist/tools/discord-guild.js.map +1 -0
- package/mcp-server/dist/tools/discord-member.d.ts +26 -0
- package/mcp-server/dist/tools/discord-member.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-member.js +122 -0
- package/mcp-server/dist/tools/discord-member.js.map +1 -0
- package/mcp-server/dist/tools/discord-message.d.ts +36 -0
- package/mcp-server/dist/tools/discord-message.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-message.js +184 -0
- package/mcp-server/dist/tools/discord-message.js.map +1 -0
- package/mcp-server/dist/tools/discord-onboarding.d.ts +32 -0
- package/mcp-server/dist/tools/discord-onboarding.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-onboarding.js +179 -0
- package/mcp-server/dist/tools/discord-onboarding.js.map +1 -0
- package/mcp-server/dist/tools/discord-role.d.ts +34 -0
- package/mcp-server/dist/tools/discord-role.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-role.js +178 -0
- package/mcp-server/dist/tools/discord-role.js.map +1 -0
- package/mcp-server/dist/tools/discord-thread.d.ts +28 -0
- package/mcp-server/dist/tools/discord-thread.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-thread.js +88 -0
- package/mcp-server/dist/tools/discord-thread.js.map +1 -0
- package/mcp-server/dist/tools/discord-webhook.d.ts +32 -0
- package/mcp-server/dist/tools/discord-webhook.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord-webhook.js +154 -0
- package/mcp-server/dist/tools/discord-webhook.js.map +1 -0
- package/mcp-server/dist/tools/discord.d.ts +7 -0
- package/mcp-server/dist/tools/discord.d.ts.map +1 -0
- package/mcp-server/dist/tools/discord.js +25 -0
- package/mcp-server/dist/tools/discord.js.map +1 -0
- package/mcp-server/dist/tools/fb-groups.d.ts +98 -0
- package/mcp-server/dist/tools/fb-groups.d.ts.map +1 -0
- package/mcp-server/dist/tools/fb-groups.js +369 -0
- package/mcp-server/dist/tools/fb-groups.js.map +1 -0
- package/mcp-server/dist/tools/forget.d.ts +14 -0
- package/mcp-server/dist/tools/forget.d.ts.map +1 -0
- package/mcp-server/dist/tools/forget.js +26 -0
- package/mcp-server/dist/tools/forget.js.map +1 -0
- package/mcp-server/dist/tools/git-tools.d.ts +24 -0
- package/mcp-server/dist/tools/git-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/git-tools.js +107 -0
- package/mcp-server/dist/tools/git-tools.js.map +1 -0
- package/mcp-server/dist/tools/git.d.ts +7 -0
- package/mcp-server/dist/tools/git.d.ts.map +1 -0
- package/mcp-server/dist/tools/git.js +11 -0
- package/mcp-server/dist/tools/git.js.map +1 -0
- package/mcp-server/dist/tools/gsc/experience.d.ts +135 -0
- package/mcp-server/dist/tools/gsc/experience.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc/experience.js +351 -0
- package/mcp-server/dist/tools/gsc/experience.js.map +1 -0
- package/mcp-server/dist/tools/gsc/helpers.d.ts +78 -0
- package/mcp-server/dist/tools/gsc/helpers.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc/helpers.js +258 -0
- package/mcp-server/dist/tools/gsc/helpers.js.map +1 -0
- package/mcp-server/dist/tools/gsc/indexing.d.ts +121 -0
- package/mcp-server/dist/tools/gsc/indexing.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc/indexing.js +357 -0
- package/mcp-server/dist/tools/gsc/indexing.js.map +1 -0
- package/mcp-server/dist/tools/gsc/inspect.d.ts +78 -0
- package/mcp-server/dist/tools/gsc/inspect.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc/inspect.js +321 -0
- package/mcp-server/dist/tools/gsc/inspect.js.map +1 -0
- package/mcp-server/dist/tools/gsc/navigate.d.ts +44 -0
- package/mcp-server/dist/tools/gsc/navigate.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc/navigate.js +197 -0
- package/mcp-server/dist/tools/gsc/navigate.js.map +1 -0
- package/mcp-server/dist/tools/gsc/performance.d.ts +84 -0
- package/mcp-server/dist/tools/gsc/performance.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc/performance.js +274 -0
- package/mcp-server/dist/tools/gsc/performance.js.map +1 -0
- package/mcp-server/dist/tools/gsc/settings.d.ts +153 -0
- package/mcp-server/dist/tools/gsc/settings.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc/settings.js +425 -0
- package/mcp-server/dist/tools/gsc/settings.js.map +1 -0
- package/mcp-server/dist/tools/gsc.d.ts +7 -0
- package/mcp-server/dist/tools/gsc.d.ts.map +1 -0
- package/mcp-server/dist/tools/gsc.js +51 -0
- package/mcp-server/dist/tools/gsc.js.map +1 -0
- package/mcp-server/dist/tools/image-tools.d.ts +24 -0
- package/mcp-server/dist/tools/image-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/image-tools.js +80 -0
- package/mcp-server/dist/tools/image-tools.js.map +1 -0
- package/mcp-server/dist/tools/image.d.ts +10 -0
- package/mcp-server/dist/tools/image.d.ts.map +1 -0
- package/mcp-server/dist/tools/image.js +14 -0
- package/mcp-server/dist/tools/image.js.map +1 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +97 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.js +228 -0
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +1 -0
- package/mcp-server/dist/tools/leonardo.d.ts +13 -0
- package/mcp-server/dist/tools/leonardo.d.ts.map +1 -0
- package/mcp-server/dist/tools/leonardo.js +21 -0
- package/mcp-server/dist/tools/leonardo.js.map +1 -0
- package/mcp-server/dist/tools/loop.d.ts +30 -0
- package/mcp-server/dist/tools/loop.d.ts.map +1 -0
- package/mcp-server/dist/tools/loop.js +401 -0
- package/mcp-server/dist/tools/loop.js.map +1 -0
- package/mcp-server/dist/tools/memories.d.ts +56 -0
- package/mcp-server/dist/tools/memories.d.ts.map +1 -0
- package/mcp-server/dist/tools/memories.js +171 -0
- package/mcp-server/dist/tools/memories.js.map +1 -0
- package/mcp-server/dist/tools/morelogin.d.ts +24 -0
- package/mcp-server/dist/tools/morelogin.d.ts.map +1 -0
- package/mcp-server/dist/tools/morelogin.js +79 -0
- package/mcp-server/dist/tools/morelogin.js.map +1 -0
- package/mcp-server/dist/tools/profile.d.ts +17 -0
- package/mcp-server/dist/tools/profile.d.ts.map +1 -0
- package/mcp-server/dist/tools/profile.js +114 -0
- package/mcp-server/dist/tools/profile.js.map +1 -0
- package/mcp-server/dist/tools/recall.d.ts +71 -0
- package/mcp-server/dist/tools/recall.d.ts.map +1 -0
- package/mcp-server/dist/tools/recall.js +147 -0
- package/mcp-server/dist/tools/recall.js.map +1 -0
- package/mcp-server/dist/tools/reflect.d.ts +56 -0
- package/mcp-server/dist/tools/reflect.d.ts.map +1 -0
- package/mcp-server/dist/tools/reflect.js +157 -0
- package/mcp-server/dist/tools/reflect.js.map +1 -0
- package/mcp-server/dist/tools/remember.d.ts +62 -0
- package/mcp-server/dist/tools/remember.d.ts.map +1 -0
- package/mcp-server/dist/tools/remember.js +201 -0
- package/mcp-server/dist/tools/remember.js.map +1 -0
- package/mcp-server/dist/tools/response.d.ts +23 -0
- package/mcp-server/dist/tools/response.d.ts.map +1 -0
- package/mcp-server/dist/tools/response.js +24 -0
- package/mcp-server/dist/tools/response.js.map +1 -0
- package/mcp-server/dist/tools/restore.d.ts +14 -0
- package/mcp-server/dist/tools/restore.d.ts.map +1 -0
- package/mcp-server/dist/tools/restore.js +23 -0
- package/mcp-server/dist/tools/restore.js.map +1 -0
- package/mcp-server/dist/tools/style-guide-tools.d.ts +51 -0
- package/mcp-server/dist/tools/style-guide-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/style-guide-tools.js +231 -0
- package/mcp-server/dist/tools/style-guide-tools.js.map +1 -0
- package/mcp-server/dist/tools/style-guide.d.ts +8 -0
- package/mcp-server/dist/tools/style-guide.d.ts.map +1 -0
- package/mcp-server/dist/tools/style-guide.js +12 -0
- package/mcp-server/dist/tools/style-guide.js.map +1 -0
- package/mcp-server/dist/tools/sync.d.ts +20 -0
- package/mcp-server/dist/tools/sync.d.ts.map +1 -0
- package/mcp-server/dist/tools/sync.js +156 -0
- package/mcp-server/dist/tools/sync.js.map +1 -0
- package/mcp-server/dist/tools/tictactoe-tools.d.ts +18 -0
- package/mcp-server/dist/tools/tictactoe-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/tictactoe-tools.js +78 -0
- package/mcp-server/dist/tools/tictactoe-tools.js.map +1 -0
- package/mcp-server/dist/tools/tictactoe.d.ts +7 -0
- package/mcp-server/dist/tools/tictactoe.d.ts.map +1 -0
- package/mcp-server/dist/tools/tictactoe.js +11 -0
- package/mcp-server/dist/tools/tictactoe.js.map +1 -0
- package/mcp-server/dist/tools/utils.d.ts +19 -0
- package/mcp-server/dist/tools/utils.d.ts.map +1 -0
- package/mcp-server/dist/tools/utils.js +54 -0
- package/mcp-server/dist/tools/utils.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard-format.d.ts +88 -0
- package/mcp-server/dist/tools/whiteboard-format.d.ts.map +1 -0
- package/mcp-server/dist/tools/whiteboard-format.js +337 -0
- package/mcp-server/dist/tools/whiteboard-format.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard-tools.d.ts +326 -0
- package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/whiteboard-tools.js +222 -0
- package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard.d.ts +8 -0
- package/mcp-server/dist/tools/whiteboard.d.ts.map +1 -0
- package/mcp-server/dist/tools/whiteboard.js +16 -0
- package/mcp-server/dist/tools/whiteboard.js.map +1 -0
- package/mcp-server/dist/tools/youtube/analytics.d.ts +46 -0
- package/mcp-server/dist/tools/youtube/analytics.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/analytics.js +83 -0
- package/mcp-server/dist/tools/youtube/analytics.js.map +1 -0
- package/mcp-server/dist/tools/youtube/dedup.d.ts +35 -0
- package/mcp-server/dist/tools/youtube/dedup.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/dedup.js +56 -0
- package/mcp-server/dist/tools/youtube/dedup.js.map +1 -0
- package/mcp-server/dist/tools/youtube/download.d.ts +31 -0
- package/mcp-server/dist/tools/youtube/download.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/download.js +30 -0
- package/mcp-server/dist/tools/youtube/download.js.map +1 -0
- package/mcp-server/dist/tools/youtube/helpers.d.ts +66 -0
- package/mcp-server/dist/tools/youtube/helpers.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/helpers.js +143 -0
- package/mcp-server/dist/tools/youtube/helpers.js.map +1 -0
- package/mcp-server/dist/tools/youtube/media.d.ts +43 -0
- package/mcp-server/dist/tools/youtube/media.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/media.js +97 -0
- package/mcp-server/dist/tools/youtube/media.js.map +1 -0
- package/mcp-server/dist/tools/youtube/metadata.d.ts +33 -0
- package/mcp-server/dist/tools/youtube/metadata.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/metadata.js +106 -0
- package/mcp-server/dist/tools/youtube/metadata.js.map +1 -0
- package/mcp-server/dist/tools/youtube/navigate.d.ts +30 -0
- package/mcp-server/dist/tools/youtube/navigate.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/navigate.js +71 -0
- package/mcp-server/dist/tools/youtube/navigate.js.map +1 -0
- package/mcp-server/dist/tools/youtube/playlist.d.ts +29 -0
- package/mcp-server/dist/tools/youtube/playlist.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/playlist.js +128 -0
- package/mcp-server/dist/tools/youtube/playlist.js.map +1 -0
- package/mcp-server/dist/tools/youtube/schedule.d.ts +31 -0
- package/mcp-server/dist/tools/youtube/schedule.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/schedule.js +147 -0
- package/mcp-server/dist/tools/youtube/schedule.js.map +1 -0
- package/mcp-server/dist/tools/youtube/source.d.ts +36 -0
- package/mcp-server/dist/tools/youtube/source.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/source.js +85 -0
- package/mcp-server/dist/tools/youtube/source.js.map +1 -0
- package/mcp-server/dist/tools/youtube/upload.d.ts +53 -0
- package/mcp-server/dist/tools/youtube/upload.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube/upload.js +255 -0
- package/mcp-server/dist/tools/youtube/upload.js.map +1 -0
- package/mcp-server/dist/tools/youtube.d.ts +12 -0
- package/mcp-server/dist/tools/youtube.d.ts.map +1 -0
- package/mcp-server/dist/tools/youtube.js +38 -0
- package/mcp-server/dist/tools/youtube.js.map +1 -0
- package/mcp-server/dist/tui.d.ts +3 -0
- package/mcp-server/dist/tui.d.ts.map +1 -0
- package/mcp-server/dist/tui.js +806 -0
- package/mcp-server/dist/tui.js.map +1 -0
- package/mcp-server/dist/types.d.ts +77 -0
- package/mcp-server/dist/types.d.ts.map +1 -0
- package/mcp-server/dist/types.js +2 -0
- package/mcp-server/dist/types.js.map +1 -0
- package/mcp-server/package-lock.json +4798 -0
- package/mcp-server/package.json +55 -38
- package/mcp-server/run.mjs +12 -2
- package/mcp-server/src/config.ts +48 -3
- package/mcp-server/src/http.ts +296 -93
- package/mcp-server/src/index.ts +546 -203
- package/mcp-server/src/preload-http.ts +19 -18
- package/mcp-server/src/preload.ts +19 -18
- package/mcp-server/src/scripts/setup-embeddings.ts +9 -0
- package/mcp-server/src/services/assistant-judgments.ts +157 -0
- package/mcp-server/src/services/browser-assist-gate.ts +383 -0
- package/mcp-server/src/services/browser-assist.ts +267 -0
- package/mcp-server/src/services/browser-bench.ts +477 -0
- package/mcp-server/src/services/browser-judgments.ts +414 -0
- package/mcp-server/src/services/browser-risk.ts +484 -0
- package/mcp-server/src/services/categories.ts +36 -19
- package/mcp-server/src/services/codex-config-heal.ts +403 -0
- package/mcp-server/src/services/desktop-assist-gate.ts +251 -0
- package/mcp-server/src/services/desktop-assist.ts +308 -0
- package/mcp-server/src/services/desktop-bench.ts +372 -0
- package/mcp-server/src/services/desktop-client.ts +76 -0
- package/mcp-server/src/services/desktop-judgments.ts +218 -0
- package/mcp-server/src/services/desktop-risk.ts +743 -0
- package/mcp-server/src/services/edit-stale.ts +299 -0
- package/mcp-server/src/services/embedding-service.ts +108 -0
- package/mcp-server/src/services/embedding-worker.ts +46 -0
- package/mcp-server/src/services/fb-regions.ts +221 -0
- package/mcp-server/src/services/file-checksums.ts +26 -9
- package/mcp-server/src/services/file-excerpt.ts +59 -0
- package/mcp-server/src/services/identity.ts +291 -0
- package/mcp-server/src/services/local-embeddings.ts +2 -77
- package/mcp-server/src/services/memory-client.ts +23 -0
- package/mcp-server/src/services/memory-judge-backfill.ts +462 -0
- package/mcp-server/src/services/memory-judgments.ts +901 -0
- package/mcp-server/src/services/memory-maintenance.ts +360 -0
- package/mcp-server/src/services/memory-retrieval.ts +349 -0
- package/mcp-server/src/services/memory-schema.ts +280 -0
- package/mcp-server/src/services/memory-sessions.ts +87 -0
- package/mcp-server/src/services/memory-triage.ts +182 -0
- package/mcp-server/src/services/memory-verification.ts +68 -0
- package/mcp-server/src/services/memory-writer.ts +125 -0
- package/mcp-server/src/services/neural-interface.ts +1217 -73
- package/mcp-server/src/services/profiles.ts +428 -0
- package/mcp-server/src/services/secret-gate.ts +52 -0
- package/mcp-server/src/services/server-instructions.ts +122 -0
- package/mcp-server/src/services/sqlite.ts +1456 -823
- package/mcp-server/src/services/typesafe-bench.ts +247 -0
- package/mcp-server/src/services/typesafe-config.ts +790 -0
- package/mcp-server/src/services/typesafe.ts +390 -0
- package/mcp-server/src/services/vector-cache.ts +255 -0
- package/mcp-server/src/services/whiteboard-geometry.ts +711 -0
- package/mcp-server/src/tools/agents.ts +539 -0
- package/mcp-server/src/tools/bluesky.ts +1186 -0
- package/mcp-server/src/tools/browser-advanced.ts +15 -6
- package/mcp-server/src/tools/browser-batch.ts +178 -0
- package/mcp-server/src/tools/browser-cheatsheet.ts +155 -0
- package/mcp-server/src/tools/browser-interact.ts +362 -255
- package/mcp-server/src/tools/browser-navigate.ts +164 -77
- package/mcp-server/src/tools/browser-observe.ts +2222 -1330
- package/mcp-server/src/tools/browser.ts +181 -107
- package/mcp-server/src/tools/card.ts +7 -5
- package/mcp-server/src/tools/choice.ts +103 -0
- package/mcp-server/src/tools/computer.ts +190 -0
- package/mcp-server/src/tools/discord.ts +10 -23
- package/mcp-server/src/tools/fb-groups.ts +387 -0
- package/mcp-server/src/tools/forget.ts +1 -1
- package/mcp-server/src/tools/git.ts +3 -1
- package/mcp-server/src/tools/gsc/experience.ts +440 -0
- package/mcp-server/src/tools/gsc/helpers.ts +288 -0
- package/mcp-server/src/tools/gsc/indexing.ts +495 -0
- package/mcp-server/src/tools/gsc/inspect.ts +391 -0
- package/mcp-server/src/tools/gsc/navigate.ts +236 -0
- package/mcp-server/src/tools/gsc/performance.ts +352 -0
- package/mcp-server/src/tools/gsc/settings.ts +564 -0
- package/mcp-server/src/tools/gsc.ts +95 -0
- package/mcp-server/src/tools/image.ts +3 -1
- package/mcp-server/src/tools/leonardo-browser-tools.ts +47 -37
- package/mcp-server/src/tools/leonardo.ts +7 -5
- package/mcp-server/src/tools/loop.ts +118 -25
- package/mcp-server/src/tools/memories.ts +65 -5
- package/mcp-server/src/tools/morelogin.ts +81 -0
- package/mcp-server/src/tools/profile.ts +122 -0
- package/mcp-server/src/tools/recall.ts +105 -261
- package/mcp-server/src/tools/reflect.ts +171 -145
- package/mcp-server/src/tools/remember.ts +223 -115
- package/mcp-server/src/tools/style-guide-tools.ts +250 -0
- package/mcp-server/src/tools/style-guide.ts +16 -0
- package/mcp-server/src/tools/sync.ts +66 -9
- package/mcp-server/src/tools/tictactoe.ts +3 -1
- package/mcp-server/src/tools/utils.ts +22 -0
- package/mcp-server/src/tools/whiteboard-format.ts +394 -0
- package/mcp-server/src/tools/whiteboard-tools.ts +191 -183
- package/mcp-server/src/tools/whiteboard.ts +7 -5
- package/mcp-server/src/tools/youtube/analytics.ts +106 -0
- package/mcp-server/src/tools/youtube/dedup.ts +57 -0
- package/mcp-server/src/tools/youtube/download.ts +41 -0
- package/mcp-server/src/tools/youtube/helpers.ts +183 -0
- package/mcp-server/src/tools/youtube/media.ts +109 -0
- package/mcp-server/src/tools/youtube/metadata.ts +112 -0
- package/mcp-server/src/tools/youtube/navigate.ts +81 -0
- package/mcp-server/src/tools/youtube/playlist.ts +134 -0
- package/mcp-server/src/tools/youtube/schedule.ts +158 -0
- package/mcp-server/src/tools/youtube/source.ts +101 -0
- package/mcp-server/src/tools/youtube/upload.ts +296 -0
- package/mcp-server/src/tools/youtube.ts +47 -0
- package/mcp-server/src/tui.ts +8 -9
- package/neural-interface/games/TicTacToe/1.svg +1 -0
- package/neural-interface/games/TicTacToe/2.svg +1 -0
- package/neural-interface/games/TicTacToe/3.svg +1 -0
- package/neural-interface/games/TicTacToe/4.svg +1 -0
- package/neural-interface/games/TicTacToe/5.svg +1 -0
- package/neural-interface/games/TicTacToe/6.svg +1 -0
- package/neural-interface/games/TicTacToe/7.svg +1 -0
- package/neural-interface/games/TicTacToe/8.svg +1 -0
- package/neural-interface/games/TicTacToe/9.svg +1 -0
- package/neural-interface/games/TicTacToe/Board.svg +1 -0
- package/neural-interface/games/TicTacToe/Circle.svg +1 -0
- package/neural-interface/games/TicTacToe/Cross.svg +1 -0
- package/neural-interface/i18n/en.json +7022 -0
- package/neural-interface/i18n/pt-BR.json +7026 -0
- package/neural-interface/lib/assistant-api.js +1005 -0
- package/neural-interface/lib/assistant-attachments.js +121 -0
- package/neural-interface/lib/assistant-brains/claude.js +207 -0
- package/neural-interface/lib/assistant-brains/codex-browser-policy-hook.mjs +43 -0
- package/neural-interface/lib/assistant-brains/codex-route-gate-hook.mjs +56 -0
- package/neural-interface/lib/assistant-brains/codex.js +213 -0
- package/neural-interface/lib/assistant-brains/opencode-browser-policy.js +47 -0
- package/neural-interface/lib/assistant-brains/opencode-route-gate.js +62 -0
- package/neural-interface/lib/assistant-brains/opencode.js +320 -0
- package/neural-interface/lib/assistant-budget.js +318 -0
- package/neural-interface/lib/assistant-catalog.js +731 -0
- package/neural-interface/lib/assistant-clarify.js +664 -0
- package/neural-interface/lib/assistant-config.js +232 -0
- package/neural-interface/lib/assistant-dispatch.js +2744 -0
- package/neural-interface/lib/assistant-envelope.js +582 -0
- package/neural-interface/lib/assistant-evidence.js +236 -0
- package/neural-interface/lib/assistant-hidden-models.js +272 -0
- package/neural-interface/lib/assistant-jev.js +117 -0
- package/neural-interface/lib/assistant-judgments.js +111 -0
- package/neural-interface/lib/assistant-media.js +335 -0
- package/neural-interface/lib/assistant-memory.js +398 -0
- package/neural-interface/lib/assistant-persona.js +444 -0
- package/neural-interface/lib/assistant-plan-permissions.js +448 -0
- package/neural-interface/lib/assistant-playbooks/design.md +87 -0
- package/neural-interface/lib/assistant-playbooks.js +72 -0
- package/neural-interface/lib/assistant-pricing.js +159 -0
- package/neural-interface/lib/assistant-route-gate-codex.js +163 -0
- package/neural-interface/lib/assistant-route-gate.js +212 -0
- package/neural-interface/lib/assistant-router.js +1324 -0
- package/neural-interface/lib/assistant-runtime.js +3337 -0
- package/neural-interface/lib/assistant-task-prompt.js +472 -0
- package/neural-interface/lib/assistant-usage.js +1688 -0
- package/neural-interface/lib/augmented-path.js +70 -0
- package/neural-interface/lib/automation-storage-migration.js +54 -0
- package/neural-interface/lib/backup-service.js +851 -0
- package/neural-interface/lib/backup-zip-reader.js +262 -0
- package/neural-interface/lib/browser-assist-api.js +41 -0
- package/neural-interface/lib/browser-console.js +176 -0
- package/neural-interface/lib/browser-execution.js +241 -0
- package/neural-interface/lib/browser-extraction.js +191 -0
- package/neural-interface/lib/browser-language.js +83 -0
- package/neural-interface/lib/browser-screenshot.js +399 -0
- package/neural-interface/lib/browser-semantic-context.js +639 -0
- package/neural-interface/lib/browser-snapshots.js +192 -0
- package/neural-interface/lib/browser-tab-recovery.js +119 -0
- package/neural-interface/lib/browser-targets.js +70 -0
- package/neural-interface/lib/browser-tool-policy.js +926 -0
- package/neural-interface/lib/claude-accounts.js +230 -0
- package/neural-interface/lib/claude-agent-bridge.js +3203 -0
- package/neural-interface/lib/claude-bypass-policy.js +99 -0
- package/neural-interface/lib/claude-executable.js +241 -0
- package/neural-interface/lib/claude-history.js +429 -0
- package/neural-interface/lib/claude-model-catalog.js +444 -0
- package/neural-interface/lib/claude-panel-requests.js +165 -0
- package/neural-interface/lib/claude-panel-session.js +272 -0
- package/neural-interface/lib/claude-permission-rules.js +153 -0
- package/neural-interface/lib/claude-session-cleanup.js +71 -0
- package/neural-interface/lib/claude-session-list.js +82 -0
- package/neural-interface/lib/claude-session-ops.js +140 -0
- package/neural-interface/lib/claude-settings-view.js +51 -0
- package/neural-interface/lib/claude-skin-connect.js +79 -0
- package/neural-interface/lib/claude-stall-policy.js +7 -0
- package/neural-interface/lib/claude-temporary.js +435 -0
- package/neural-interface/lib/cli-update-planner.js +312 -0
- package/neural-interface/lib/codex-capabilities.d.ts +41 -0
- package/neural-interface/lib/codex-capabilities.js +148 -0
- package/neural-interface/lib/codex-collaboration-mode.js +17 -0
- package/neural-interface/lib/codex-compat-rpc.js +241 -0
- package/neural-interface/lib/codex-mcp-approvals.js +56 -0
- package/neural-interface/lib/codex-mcp-apps.js +47 -0
- package/neural-interface/lib/codex-model-context.js +202 -0
- package/neural-interface/lib/codex-plan-store.js +71 -0
- package/neural-interface/lib/codex-request-journal.js +242 -0
- package/neural-interface/lib/codex-runtime-path.js +213 -0
- package/neural-interface/lib/codex-session-catalog.js +231 -0
- package/neural-interface/lib/codex-session-settings.js +46 -0
- package/neural-interface/lib/codex-sidepanel-permissions.js +110 -0
- package/neural-interface/lib/codex-thread-history.js +165 -0
- package/neural-interface/lib/codex-user-verification.js +34 -0
- package/neural-interface/lib/codex-writer-lifecycle.js +152 -0
- package/neural-interface/lib/confined-fs.js +256 -0
- package/neural-interface/lib/db.js +922 -0
- package/neural-interface/lib/design-md.js +9 -0
- package/neural-interface/lib/desktop/api.js +92 -0
- package/neural-interface/lib/desktop/audit.js +62 -0
- package/neural-interface/lib/desktop/build.js +423 -0
- package/neural-interface/lib/desktop/config.js +606 -0
- package/neural-interface/lib/desktop/coords.js +76 -0
- package/neural-interface/lib/desktop/fake-helper.js +1192 -0
- package/neural-interface/lib/desktop/frames.js +77 -0
- package/neural-interface/lib/desktop/grants.js +84 -0
- package/neural-interface/lib/desktop/guards.js +170 -0
- package/neural-interface/lib/desktop/helper/SynabunDesktop.swift +3056 -0
- package/neural-interface/lib/desktop/lease.js +51 -0
- package/neural-interface/lib/desktop/manager.js +545 -0
- package/neural-interface/lib/desktop/press-contexts.js +103 -0
- package/neural-interface/lib/desktop/protocol.js +495 -0
- package/neural-interface/lib/desktop/service.js +1202 -0
- package/neural-interface/lib/effort-levels.js +148 -0
- package/neural-interface/lib/event-loop-monitor.js +67 -0
- package/neural-interface/lib/exec-loop-command.js +209 -0
- package/neural-interface/lib/folder-picker.ps1 +77 -0
- package/neural-interface/lib/http-guards.js +287 -0
- package/neural-interface/lib/jsonl-lines.js +94 -0
- package/neural-interface/lib/loop-logger.js +127 -0
- package/neural-interface/lib/mcp-client-config.js +133 -0
- package/neural-interface/lib/mcp-installer.js +487 -0
- package/neural-interface/lib/mcp-profile-refresh-coordinator.js +78 -0
- package/neural-interface/lib/mcp-profile-servers.js +120 -0
- package/neural-interface/lib/memo-cache.js +84 -0
- package/neural-interface/lib/memory-api.js +758 -0
- package/neural-interface/lib/memory-map-api.js +1150 -0
- package/neural-interface/lib/memory-map-layout.js +872 -0
- package/neural-interface/lib/memory-map-worker.js +165 -0
- package/neural-interface/lib/memory-session-capture.js +81 -0
- package/neural-interface/lib/memory-timers.js +62 -0
- package/neural-interface/lib/morelogin.js +301 -0
- package/neural-interface/lib/native-binary-runtime.js +382 -0
- package/neural-interface/lib/native-loop-goal.js +33 -0
- package/neural-interface/lib/native-loop-providers.js +1002 -0
- package/neural-interface/lib/native-loop-runtime.js +747 -0
- package/neural-interface/lib/offline-page.js +54 -0
- package/neural-interface/lib/opencode-hidden-models.js +113 -0
- package/neural-interface/lib/opencode-history.js +253 -0
- package/neural-interface/lib/opencode-runtime-config.js +58 -0
- package/neural-interface/lib/opencode-v2-client.js +486 -0
- package/neural-interface/lib/opencode-v2-ws-requests.js +955 -0
- package/neural-interface/lib/path-confine.js +213 -0
- package/neural-interface/lib/plugin-installer.js +264 -0
- package/neural-interface/lib/project-storage.js +766 -0
- package/neural-interface/lib/pty-host/core.js +603 -0
- package/neural-interface/lib/pty-host/flow.js +43 -0
- package/neural-interface/lib/pty-host/host.js +47 -0
- package/neural-interface/lib/pty-host/manager.js +360 -0
- package/neural-interface/lib/pty-host/protocol.js +81 -0
- package/neural-interface/lib/pty-host/snapshot.js +133 -0
- package/neural-interface/lib/remote-policy.js +582 -0
- package/neural-interface/lib/rulesets/api.js +175 -0
- package/neural-interface/lib/rulesets/fs-safe.js +245 -0
- package/neural-interface/lib/rulesets/installer.js +1453 -0
- package/neural-interface/lib/rulesets/json-edit.js +186 -0
- package/neural-interface/lib/rulesets/lock.js +170 -0
- package/neural-interface/lib/rulesets/managed-text.js +314 -0
- package/neural-interface/lib/rulesets/normalise.js +24 -0
- package/neural-interface/lib/rulesets/render.js +84 -0
- package/neural-interface/lib/schedule-launch-intent.js +40 -0
- package/neural-interface/lib/session-cache-builder.js +524 -0
- package/neural-interface/lib/session-chunker.js +344 -0
- package/neural-interface/lib/session-indexer.js +327 -0
- package/neural-interface/lib/session-title-generator.js +232 -0
- package/neural-interface/lib/skill-prompt-bridge.js +11 -0
- package/neural-interface/lib/style-guide/api.js +375 -0
- package/neural-interface/lib/style-guide/color.js +352 -0
- package/neural-interface/lib/style-guide/export-css.js +99 -0
- package/neural-interface/lib/style-guide/export-dtcg.js +209 -0
- package/neural-interface/lib/style-guide/export-tailwind.js +102 -0
- package/neural-interface/lib/style-guide/fonts.json +227 -0
- package/neural-interface/lib/style-guide/import.js +1268 -0
- package/neural-interface/lib/style-guide/pointers.js +103 -0
- package/neural-interface/lib/style-guide/presets.js +232 -0
- package/neural-interface/lib/style-guide/render-design-md.js +319 -0
- package/neural-interface/lib/style-guide/schema.js +848 -0
- package/neural-interface/lib/style-guide/security.js +43 -0
- package/neural-interface/lib/style-guide/store.js +491 -0
- package/neural-interface/lib/style-guide/summary.js +106 -0
- package/neural-interface/lib/style-guide/tokens.js +170 -0
- package/neural-interface/lib/synabun-update-plan.js +324 -0
- package/neural-interface/lib/synabun-version.js +179 -0
- package/neural-interface/lib/system-restore.js +99 -0
- package/neural-interface/lib/terminal-env.js +86 -0
- package/neural-interface/lib/ui-blob-store.js +106 -0
- package/neural-interface/lib/vector-cache.js +2 -0
- package/neural-interface/lib/virtual-socket.js +60 -0
- package/neural-interface/lib/whatsapp/api.js +146 -0
- package/neural-interface/lib/whatsapp/auth-store.js +389 -0
- package/neural-interface/lib/whatsapp/baileys-adapter.js +457 -0
- package/neural-interface/lib/whatsapp/brain.js +128 -0
- package/neural-interface/lib/whatsapp/bridge.js +1499 -0
- package/neural-interface/lib/whatsapp/cards.js +519 -0
- package/neural-interface/lib/whatsapp/commands.js +92 -0
- package/neural-interface/lib/whatsapp/config.js +291 -0
- package/neural-interface/lib/whatsapp/connector/entry.mjs +25 -0
- package/neural-interface/lib/whatsapp/connector/manifest.json +6 -0
- package/neural-interface/lib/whatsapp/connector/npm-shrinkwrap.json +717 -0
- package/neural-interface/lib/whatsapp/connector/package.json +8 -0
- package/neural-interface/lib/whatsapp/fake-baileys.js +444 -0
- package/neural-interface/lib/whatsapp/format.js +552 -0
- package/neural-interface/lib/whatsapp/host-core.js +1225 -0
- package/neural-interface/lib/whatsapp/host.js +119 -0
- package/neural-interface/lib/whatsapp/identity.js +288 -0
- package/neural-interface/lib/whatsapp/inbound.js +149 -0
- package/neural-interface/lib/whatsapp/installer.js +562 -0
- package/neural-interface/lib/whatsapp/manager.js +638 -0
- package/neural-interface/lib/whatsapp/paths.js +81 -0
- package/neural-interface/lib/whatsapp/protocol.js +327 -0
- package/neural-interface/lib/whatsapp/qr-svg.js +57 -0
- package/neural-interface/lib/whatsapp/redact.js +130 -0
- package/neural-interface/lib/whatsapp/service.js +1305 -0
- package/neural-interface/lib/whatsapp/vendor/qrcodegen.js +848 -0
- package/neural-interface/package-lock.json +4431 -0
- package/neural-interface/package.json +58 -27
- package/neural-interface/public/apple-touch-icon.png +0 -0
- package/neural-interface/public/category-logos/synabun.png +0 -0
- package/neural-interface/public/claude.svg +1 -0
- package/neural-interface/public/favicon-16x16.png +0 -0
- package/neural-interface/public/favicon-32x32.png +0 -0
- package/neural-interface/public/icon-192.png +0 -0
- package/neural-interface/public/icon-512.png +0 -0
- package/neural-interface/public/index.html +32 -182
- package/neural-interface/public/index2d.html +2 -2
- package/neural-interface/public/install-app.html +31 -0
- package/neural-interface/public/logo-synabun.png +0 -0
- package/neural-interface/public/logoHD.png +0 -0
- package/neural-interface/public/manifest.json +2 -0
- package/neural-interface/public/mcp.svg +4 -0
- package/neural-interface/public/offline.html +670 -299
- package/neural-interface/public/onboarding.html +804 -161
- package/neural-interface/public/opencode-logo-dark-square.svg +1 -0
- package/neural-interface/public/shared/agent-runtime-options.js +596 -0
- package/neural-interface/public/shared/api.js +339 -28
- package/neural-interface/public/shared/assistant/asst-accounts.js +318 -0
- package/neural-interface/public/shared/assistant/asst-agents-dock.js +296 -0
- package/neural-interface/public/shared/assistant/asst-api.js +270 -0
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +744 -0
- package/neural-interface/public/shared/assistant/asst-budget.js +333 -0
- package/neural-interface/public/shared/assistant/asst-composer.js +656 -0
- package/neural-interface/public/shared/assistant/asst-computer.js +803 -0
- package/neural-interface/public/shared/assistant/asst-control.js +1018 -0
- package/neural-interface/public/shared/assistant/asst-hosts.js +262 -0
- package/neural-interface/public/shared/assistant/asst-mascot.js +313 -0
- package/neural-interface/public/shared/assistant/asst-menu.js +375 -0
- package/neural-interface/public/shared/assistant/asst-panel.js +1845 -0
- package/neural-interface/public/shared/assistant/asst-rack-styles.js +586 -0
- package/neural-interface/public/shared/assistant/asst-render.js +3305 -0
- package/neural-interface/public/shared/assistant/asst-route.js +1653 -0
- package/neural-interface/public/shared/assistant/asst-roving.js +75 -0
- package/neural-interface/public/shared/assistant/asst-sanitize.js +117 -0
- package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +488 -0
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +675 -0
- package/neural-interface/public/shared/assistant/asst-slash.js +258 -0
- package/neural-interface/public/shared/assistant/asst-state.js +727 -0
- package/neural-interface/public/shared/assistant/asst-styles.js +1686 -0
- package/neural-interface/public/shared/assistant/asst-tool-kinds.js +1017 -0
- package/neural-interface/public/shared/assistant/asst-usage.js +444 -0
- package/neural-interface/public/shared/assistant/asst-ws.js +175 -0
- package/neural-interface/public/shared/automation-context.js +75 -0
- package/neural-interface/public/shared/blob-store.js +99 -0
- package/neural-interface/public/shared/cdx/cdx-capabilities.js +118 -0
- package/neural-interface/public/shared/cdx/cdx-cards.js +37 -0
- package/neural-interface/public/shared/cdx/cdx-commands.js +171 -0
- package/neural-interface/public/shared/cdx/cdx-context-menu.js +402 -0
- package/neural-interface/public/shared/cdx/cdx-context-model.js +220 -0
- package/neural-interface/public/shared/cdx/cdx-features.js +408 -0
- package/neural-interface/public/shared/cdx/cdx-icons.js +89 -0
- package/neural-interface/public/shared/cdx/cdx-mcp-app-host.js +414 -0
- package/neural-interface/public/shared/cdx/cdx-mcp-app-proxy.html +6 -0
- package/neural-interface/public/shared/cdx/cdx-mcp-app-proxy.js +56 -0
- package/neural-interface/public/shared/cdx/cdx-mcp-app.js +178 -0
- package/neural-interface/public/shared/cdx/cdx-model-catalog.js +120 -0
- package/neural-interface/public/shared/cdx/cdx-output-model.js +261 -0
- package/neural-interface/public/shared/cdx/cdx-output.js +382 -0
- package/neural-interface/public/shared/cdx/cdx-panel.js +1372 -0
- package/neural-interface/public/shared/cdx/cdx-plan.js +266 -0
- package/neural-interface/public/shared/cdx/cdx-protocol.js +682 -0
- package/neural-interface/public/shared/cdx/cdx-render.js +3381 -0
- package/neural-interface/public/shared/cdx/cdx-requests.js +1136 -0
- package/neural-interface/public/shared/cdx/cdx-styles.js +3251 -0
- package/neural-interface/public/shared/cdx/cdx-tabs.js +7992 -0
- package/neural-interface/public/shared/cdx/cdx-ws.js +363 -0
- package/neural-interface/public/shared/cli-status.js +169 -0
- package/neural-interface/public/shared/command-runner-model.js +30 -0
- package/neural-interface/public/shared/constants.js +22 -5
- package/neural-interface/public/shared/cp/cp-agents.js +186 -0
- package/neural-interface/public/shared/cp/cp-bash.js +252 -0
- package/neural-interface/public/shared/cp/cp-compose.js +159 -0
- package/neural-interface/public/shared/cp/cp-context-menu.js +309 -0
- package/neural-interface/public/shared/cp/cp-context-model.js +157 -0
- package/neural-interface/public/shared/cp/cp-context-window.js +80 -0
- package/neural-interface/public/shared/cp/cp-ctx.js +11 -0
- package/neural-interface/public/shared/cp/cp-diff.js +255 -0
- package/neural-interface/public/shared/cp/cp-event-rows.js +637 -0
- package/neural-interface/public/shared/cp/cp-events.js +846 -0
- package/neural-interface/public/shared/cp/cp-markdown.js +104 -0
- package/neural-interface/public/shared/cp/cp-permission-model.js +905 -0
- package/neural-interface/public/shared/cp/cp-permissions.js +626 -0
- package/neural-interface/public/shared/cp/cp-rehydrate.js +113 -0
- package/neural-interface/public/shared/cp/cp-restore.js +224 -0
- package/neural-interface/public/shared/cp/cp-session-model.js +338 -0
- package/neural-interface/public/shared/cp/cp-session-settings.js +254 -0
- package/neural-interface/public/shared/cp/cp-sessions.js +227 -0
- package/neural-interface/public/shared/cp/cp-statusline.js +153 -0
- package/neural-interface/public/shared/cp/cp-styles.js +349 -0
- package/neural-interface/public/shared/cp/cp-tasks-model.js +282 -0
- package/neural-interface/public/shared/cp/cp-tasks.js +107 -0
- package/neural-interface/public/shared/cp/cp-temporary-view.js +56 -0
- package/neural-interface/public/shared/cp/cp-temporary.js +231 -0
- package/neural-interface/public/shared/cp/cp-tool-cards.js +326 -0
- package/neural-interface/public/shared/cp/cp-tool-results.js +618 -0
- package/neural-interface/public/shared/cp/cp-usage-model.js +124 -0
- package/neural-interface/public/shared/graph-activity.js +68 -0
- package/neural-interface/public/shared/html-shell.js +116 -17
- package/neural-interface/public/shared/i18n.js +132 -34
- package/neural-interface/public/shared/node-positions-store.js +44 -0
- package/neural-interface/public/shared/ocp-hidden-models.js +116 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-approvals.js +355 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-autoaccept-button.js +35 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-automation-ownership.js +72 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-binding.js +280 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-caps.js +67 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-changes-logic.js +179 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-changes.js +164 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +725 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-compact-button.js +75 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-composer-logic.js +1204 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-confirm-logic.js +117 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-confirm.js +59 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-gauge.js +252 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-menu.js +478 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-model.js +179 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-events.js +233 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-icons.js +30 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-manager.js +1065 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-mention-hints.js +182 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-modelpicker.js +655 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +2636 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-plan.js +601 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-profile-inheritance.js +78 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +649 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-providers.js +35 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +357 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render-logic.js +189 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +1869 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-select.js +42 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send-logic.js +117 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +1714 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-session-actions.js +468 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-session-widgets.js +63 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +366 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-settings-link.js +19 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-slash-hints.js +343 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-state.js +746 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status-logic.js +347 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status.js +338 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +3543 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-subagents-logic.js +482 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-tools-logic.js +351 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-tools.js +168 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-variantpicker.js +315 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +545 -0
- package/neural-interface/public/shared/provider-icons.js +30 -0
- package/neural-interface/public/shared/pwa-install-page.js +34 -0
- package/neural-interface/public/shared/pwa-install.css +12 -0
- package/neural-interface/public/shared/pwa-install.js +28 -0
- package/neural-interface/public/shared/session-title.js +100 -0
- package/neural-interface/public/shared/settings/settings-ia.js +389 -0
- package/neural-interface/public/shared/settings/settings-kit.js +234 -0
- package/neural-interface/public/shared/settings/settings-rules.js +160 -0
- package/neural-interface/public/shared/settings/settings-search.js +463 -0
- package/neural-interface/public/shared/settings/settings-shell.js +570 -0
- package/neural-interface/public/shared/start-bridge.js +583 -0
- package/neural-interface/public/shared/state.js +5 -0
- package/neural-interface/public/shared/storage.js +50 -7
- package/neural-interface/public/shared/styleguide/sg-agents.js +42 -0
- package/neural-interface/public/shared/styleguide/sg-brand.js +4 -0
- package/neural-interface/public/shared/styleguide/sg-color-client.js +388 -0
- package/neural-interface/public/shared/styleguide/sg-colors.js +151 -0
- package/neural-interface/public/shared/styleguide/sg-components.js +35 -0
- package/neural-interface/public/shared/styleguide/sg-history.js +41 -0
- package/neural-interface/public/shared/styleguide/sg-icons-logo.js +38 -0
- package/neural-interface/public/shared/styleguide/sg-imagery.js +4 -0
- package/neural-interface/public/shared/styleguide/sg-import-export.js +48 -0
- package/neural-interface/public/shared/styleguide/sg-kit.js +284 -0
- package/neural-interface/public/shared/styleguide/sg-labels.js +318 -0
- package/neural-interface/public/shared/styleguide/sg-layout.js +4 -0
- package/neural-interface/public/shared/styleguide/sg-motion.js +5 -0
- package/neural-interface/public/shared/styleguide/sg-panel.js +237 -0
- package/neural-interface/public/shared/styleguide/sg-preview.js +138 -0
- package/neural-interface/public/shared/styleguide/sg-rules.js +9 -0
- package/neural-interface/public/shared/styleguide/sg-shape.js +24 -0
- package/neural-interface/public/shared/styleguide/sg-state.js +132 -0
- package/neural-interface/public/shared/styleguide/sg-typography.js +125 -0
- package/neural-interface/public/shared/styles.css +8614 -1477
- package/neural-interface/public/shared/synabun-mascot.js +1625 -0
- package/neural-interface/public/shared/synabun-ticker.js +376 -0
- package/neural-interface/public/shared/term-ready.js +307 -0
- package/neural-interface/public/shared/term-renderer.js +343 -0
- package/neural-interface/public/shared/ui-assistant-panel.js +10 -0
- package/neural-interface/public/shared/ui-assistant.js +77 -0
- package/neural-interface/public/shared/ui-automation-studio.js +5105 -3573
- package/neural-interface/public/shared/ui-claude-panel.js +11685 -6333
- package/neural-interface/public/shared/ui-codex-panel.js +12 -0
- package/neural-interface/public/shared/ui-command-runner.js +251 -468
- package/neural-interface/public/shared/ui-cost-widget.js +55 -34
- package/neural-interface/public/shared/ui-detail.js +77 -14
- package/neural-interface/public/shared/ui-explorer.js +360 -181
- package/neural-interface/public/shared/ui-file-explorer.js +485 -107
- package/neural-interface/public/shared/ui-help.js +2 -2
- package/neural-interface/public/shared/ui-image-gallery.js +45 -21
- package/neural-interface/public/shared/ui-judgments.js +1346 -0
- package/neural-interface/public/shared/ui-keybinds.js +3 -2
- package/neural-interface/public/shared/ui-link.js +105 -51
- package/neural-interface/public/shared/ui-loading.js +222 -11
- package/neural-interface/public/shared/ui-memory-maintenance.js +111 -0
- package/neural-interface/public/shared/ui-menubar.js +100 -31
- package/neural-interface/public/shared/ui-native-loop-router-state.js +94 -0
- package/neural-interface/public/shared/ui-native-loop-router.js +493 -0
- package/neural-interface/public/shared/ui-native-window-id.js +7 -0
- package/neural-interface/public/shared/ui-navbar.js +357 -222
- package/neural-interface/public/shared/ui-notifications.js +58 -12
- package/neural-interface/public/shared/ui-opencode-panel-v2.js +17 -0
- package/neural-interface/public/shared/ui-panels.js +15 -7
- package/neural-interface/public/shared/ui-resume.js +823 -653
- package/neural-interface/public/shared/ui-schedule-queue.js +172 -0
- package/neural-interface/public/shared/ui-schedules-studio.js +1882 -0
- package/neural-interface/public/shared/ui-scroll-follow.js +194 -0
- package/neural-interface/public/shared/ui-sessions.js +789 -34
- package/neural-interface/public/shared/ui-settings.js +5774 -2194
- package/neural-interface/public/shared/ui-sidepanel-layout.js +109 -0
- package/neural-interface/public/shared/ui-sidepanel-runtime.js +19 -0
- package/neural-interface/public/shared/ui-sidepanel-session-entry.js +40 -0
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +221 -0
- package/neural-interface/public/shared/ui-sidepanel-state.js +131 -0
- package/neural-interface/public/shared/ui-sidepanel-tray.js +547 -0
- package/neural-interface/public/shared/ui-sidepanel-windows.js +387 -0
- package/neural-interface/public/shared/ui-skills.js +18 -32
- package/neural-interface/public/shared/ui-styleguide.js +35 -0
- package/neural-interface/public/shared/ui-sync.js +87 -0
- package/neural-interface/public/shared/ui-terminal.js +7863 -6385
- package/neural-interface/public/shared/ui-tool-updates.js +292 -0
- package/neural-interface/public/shared/ui-tooltip.js +156 -15
- package/neural-interface/public/shared/ui-tutorial-draw.js +119 -683
- package/neural-interface/public/shared/ui-tutorial-layout.js +135 -0
- package/neural-interface/public/shared/ui-tutorial-steps.js +59 -2209
- package/neural-interface/public/shared/ui-tutorial.css +102 -0
- package/neural-interface/public/shared/ui-tutorial.js +557 -1076
- package/neural-interface/public/shared/ui-update.js +420 -68
- package/neural-interface/public/shared/ui-whatsapp.js +941 -0
- package/neural-interface/public/shared/ui-whiteboard.js +1076 -233
- package/neural-interface/public/shared/ui-workspaces.js +2 -1
- package/neural-interface/public/shared/utils.js +58 -0
- package/neural-interface/public/shared/vterm-buffer.js +15 -5
- package/neural-interface/public/shared/whatsapp/wa-phone.js +65 -0
- package/neural-interface/public/shared/whatsapp/wa-view.js +411 -0
- package/neural-interface/public/sidepanel-session.html +18 -0
- package/neural-interface/public/sw.js +10 -2
- package/neural-interface/public/synabun.png +0 -0
- package/neural-interface/public/variant/2d/graph.js +1707 -1635
- package/neural-interface/public/variant/2d/lasso.js +2 -1
- package/neural-interface/public/variant/2d/layout.js +595 -594
- package/neural-interface/public/variant/2d/main.js +557 -521
- package/neural-interface/public/variant/2d/settings-gfx.js +18 -24
- package/neural-interface/public/variant/3d/main.js +517 -500
- package/neural-interface/public/variant/3d/map-controls.js +144 -0
- package/neural-interface/public/variant/3d/map-data.js +251 -0
- package/neural-interface/public/variant/3d/map-labels.js +241 -0
- package/neural-interface/public/variant/3d/map-pick.js +90 -0
- package/neural-interface/public/variant/3d/map-renderer.js +521 -0
- package/neural-interface/public/variant/3d/map-shaders.js +158 -0
- package/neural-interface/public/variant/3d/map-view.js +618 -0
- package/neural-interface/public/vendor/three/manifest.json +3 -0
- package/neural-interface/public/vendor/three/three-0.169.0.min.js +3844 -0
- package/neural-interface/public/vendor/xterm/manifest.json +3 -0
- package/neural-interface/public/vendor/xterm/xterm-6.0.0.css +285 -0
- package/neural-interface/public/vendor/xterm/xterm-6.0.0.min.js +192 -0
- package/neural-interface/scripts/build-vendor.mjs +64 -0
- package/neural-interface/scripts/codex-protocol-fixture.mjs +83 -0
- package/neural-interface/scripts/rebuild-pty.js +39 -22
- package/neural-interface/scripts/vendor-three-entry.js +24 -0
- package/neural-interface/scripts/vendor-xterm-entry.js +8 -0
- package/neural-interface/server.js +33983 -15000
- package/neural-interface/skins/default/skin.css +90 -0
- package/neural-interface/skins/default/skin.json +8 -0
- package/neural-interface/templates/rulesets/README.md +9 -0
- package/neural-interface/templates/rulesets/claude.md +3 -0
- package/neural-interface/templates/rulesets/codex.md +2 -0
- package/neural-interface/templates/rulesets/coexistence.md +6 -0
- package/neural-interface/templates/rulesets/core.md +26 -0
- package/neural-interface/templates/rulesets/cursor.md +2 -0
- package/neural-interface/templates/rulesets/gemini.md +2 -0
- package/neural-interface/templates/rulesets/legacy-hashes.json +227 -0
- package/neural-interface/templates/rulesets/manifest.json +12 -0
- package/neural-interface/templates/rulesets/opencode.md +2 -0
- package/package.json +131 -53
- package/postinstall.js +55 -26
- package/preuninstall.js +187 -0
- package/scripts/restore-data-home-from-backup.mjs +239 -0
- package/setup.js +872 -260
- package/skills/leonardo/SKILL.md +19 -10
- package/skills/leonardo/modules/image-prompter.md +18 -12
- package/skills/leonardo/modules/video-prompter.md +19 -13
- package/skills/synabun/SKILL.md +209 -185
- package/skills/synabun/icon.png +0 -0
- package/skills/synabun/modules/audit.md +380 -374
- package/skills/synabun/modules/changelog.md +15 -6
- package/skills/synabun/modules/idea.md +148 -144
- package/skills/synabun/modules/memorize.md +13 -4
- package/skills/synabun/modules/schedule.md +198 -0
- package/skills/synabun/synabunicon.png +0 -0
- package/updater.cmd +31 -0
- package/updater.mjs +382 -0
- package/updater.sh +29 -0
- package/hooks/claude-code/test-user-learning.mjs +0 -531
- package/neural-interface/public/claude-chat.css +0 -878
- package/neural-interface/public/claude-chat.html +0 -92
- package/neural-interface/public/claude-chat.js +0 -1168
- package/neural-interface/public/index-legacy.html +0 -14677
- package/neural-interface/public/index2d-legacy.html +0 -8193
- package/neural-interface/public/shared/html-term-renderer.js +0 -1022
- package/neural-interface/public/variant/3d/background.js +0 -884
- package/neural-interface/public/variant/3d/camera.js +0 -661
- package/neural-interface/public/variant/3d/gfx.js +0 -116
- package/neural-interface/public/variant/3d/graph.js +0 -2399
- package/neural-interface/public/variant/3d/settings-gfx.js +0 -228
- package/neural-interface/templates/CLAUDE-template.md +0 -211
|
@@ -10,15 +10,11 @@ import { z } from 'zod';
|
|
|
10
10
|
import * as ni from '../services/neural-interface.js';
|
|
11
11
|
import { text } from './response.js';
|
|
12
12
|
|
|
13
|
-
const
|
|
13
|
+
const tabIdField = z.string().optional().describe('Target a specific tab within the session. Auto-resolved from environment if omitted.');
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
const LEO_BASE = 'https://app.leonardo.ai';
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
const resolved = await ni.resolveSession(undefined, { url: LEO_BASE });
|
|
19
|
-
if ('error' in resolved) return null;
|
|
20
|
-
return resolved.sessionId;
|
|
21
|
-
}
|
|
17
|
+
// ── Helper ────────────────────────────────────────────────────
|
|
22
18
|
|
|
23
19
|
async function wait(ms: number): Promise<void> {
|
|
24
20
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
@@ -31,14 +27,16 @@ export const browserNavigateSchema = {
|
|
|
31
27
|
'home', 'library', 'image', 'video', 'upscaler',
|
|
32
28
|
'blueprints', 'flow-state', 'models',
|
|
33
29
|
] as const).describe('Leonardo.ai page to navigate to.'),
|
|
30
|
+
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
31
|
+
tabId: tabIdField,
|
|
34
32
|
};
|
|
35
33
|
|
|
36
34
|
export const browserNavigateDescription =
|
|
37
35
|
'Navigate the browser to a specific Leonardo.ai page. Always use this as the first step before any browser-based generation.';
|
|
38
36
|
|
|
39
|
-
export async function handleBrowserNavigate(args: { page: string }) {
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
37
|
+
export async function handleBrowserNavigate(args: { page: string; sessionId?: string; tabId?: string }) {
|
|
38
|
+
const resolved = await ni.resolveSession(args.sessionId, { url: LEO_BASE }, args.tabId, { platform: true });
|
|
39
|
+
if ('error' in resolved) return text('No browser session available. Open Leonardo.ai in the browser first using browser_navigate or the Apps menu.');
|
|
42
40
|
|
|
43
41
|
const paths: Record<string, string> = {
|
|
44
42
|
'home': '/',
|
|
@@ -52,7 +50,7 @@ export async function handleBrowserNavigate(args: { page: string }) {
|
|
|
52
50
|
};
|
|
53
51
|
|
|
54
52
|
const path = paths[args.page] || '/';
|
|
55
|
-
const res = await ni.navigate(sessionId, `${LEO_BASE}${path}
|
|
53
|
+
const res = await ni.navigate(resolved.sessionId, `${LEO_BASE}${path}`, resolved.tabId);
|
|
56
54
|
if (res.error) return text(`Navigation failed: ${res.error}`);
|
|
57
55
|
|
|
58
56
|
// Wait for page to settle
|
|
@@ -66,6 +64,8 @@ export async function handleBrowserNavigate(args: { page: string }) {
|
|
|
66
64
|
export const browserGenerateSchema = {
|
|
67
65
|
prompt: z.string().describe('The generation prompt to type into Leonardo.ai.'),
|
|
68
66
|
type: z.enum(['image', 'video'] as const).optional().describe('Generation type. Default: image.'),
|
|
67
|
+
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
68
|
+
tabId: tabIdField,
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
export const browserGenerateDescription =
|
|
@@ -74,31 +74,33 @@ export const browserGenerateDescription =
|
|
|
74
74
|
export async function handleBrowserGenerate(args: {
|
|
75
75
|
prompt: string;
|
|
76
76
|
type?: string;
|
|
77
|
+
sessionId?: string;
|
|
78
|
+
tabId?: string;
|
|
77
79
|
}) {
|
|
78
|
-
const
|
|
79
|
-
if (
|
|
80
|
+
const resolved = await ni.resolveSession(args.sessionId, { url: LEO_BASE }, args.tabId, { platform: true });
|
|
81
|
+
if ('error' in resolved) return text('No browser session available. Open Leonardo.ai first.');
|
|
80
82
|
|
|
81
83
|
const genType = args.type || 'image';
|
|
82
84
|
|
|
83
85
|
// Check current URL — navigate only if not already on the right page
|
|
84
|
-
const snapshot = await ni.snapshot(sessionId);
|
|
86
|
+
const snapshot = await ni.snapshot(resolved.sessionId, resolved.tabId);
|
|
85
87
|
const currentUrl = (snapshot as any)?.url || '';
|
|
86
88
|
const targetPath = genType === 'video' ? '/image-generation/video' : '/image-generation';
|
|
87
89
|
|
|
88
90
|
if (!currentUrl.includes(targetPath)) {
|
|
89
|
-
const navRes = await ni.navigate(sessionId, `${LEO_BASE}${targetPath}
|
|
91
|
+
const navRes = await ni.navigate(resolved.sessionId, `${LEO_BASE}${targetPath}`, resolved.tabId);
|
|
90
92
|
if (navRes.error) return text(`Navigation failed: ${navRes.error}`);
|
|
91
93
|
await wait(3000);
|
|
92
94
|
}
|
|
93
95
|
|
|
94
96
|
// Clear and fill the prompt textbox
|
|
95
|
-
const fillRes = await ni.fill(sessionId, '[aria-label="Prompt"], textbox[name="Prompt"], textarea', args.prompt);
|
|
97
|
+
const fillRes = await ni.fill(resolved.sessionId, '[aria-label="Prompt"], textbox[name="Prompt"], textarea', args.prompt, undefined, resolved.tabId);
|
|
96
98
|
if (fillRes.error) return text(`Failed to fill prompt: ${fillRes.error}`);
|
|
97
99
|
|
|
98
100
|
await wait(500);
|
|
99
101
|
|
|
100
102
|
// Click the Generate button
|
|
101
|
-
const clickRes = await ni.click(sessionId, 'button[aria-label="Generate"], button:has-text("Generate")');
|
|
103
|
+
const clickRes = await ni.click(resolved.sessionId, 'button[aria-label="Generate"], button:has-text("Generate")', undefined, resolved.tabId);
|
|
102
104
|
if (clickRes.error) return text(`Failed to click Generate: ${clickRes.error}`);
|
|
103
105
|
|
|
104
106
|
return text(`Generation started (${genType}).\n\nPrompt: "${args.prompt.substring(0, 120)}${args.prompt.length > 120 ? '...' : ''}"\n\nThe generation is processing in Leonardo.ai. Use browser_snapshot or browser_screenshot to check progress and see results. Results also appear in the library.`);
|
|
@@ -109,24 +111,26 @@ export async function handleBrowserGenerate(args: {
|
|
|
109
111
|
export const browserLibrarySchema = {
|
|
110
112
|
action: z.enum(['view', 'search'] as const).describe('Action: view (open library) or search (search for a term).'),
|
|
111
113
|
query: z.string().optional().describe('Search query (for search action).'),
|
|
114
|
+
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
115
|
+
tabId: tabIdField,
|
|
112
116
|
};
|
|
113
117
|
|
|
114
118
|
export const browserLibraryDescription =
|
|
115
119
|
'Open or search Leonardo.ai\'s library to view past generations. Use browser_snapshot after to see results.';
|
|
116
120
|
|
|
117
|
-
export async function handleBrowserLibrary(args: { action: string; query?: string }) {
|
|
118
|
-
const
|
|
119
|
-
if (
|
|
121
|
+
export async function handleBrowserLibrary(args: { action: string; query?: string; sessionId?: string; tabId?: string }) {
|
|
122
|
+
const resolved = await ni.resolveSession(args.sessionId, { url: LEO_BASE }, args.tabId, { platform: true });
|
|
123
|
+
if ('error' in resolved) return text('No browser session available.');
|
|
120
124
|
|
|
121
|
-
const navRes = await ni.navigate(sessionId, `${LEO_BASE}/library
|
|
125
|
+
const navRes = await ni.navigate(resolved.sessionId, `${LEO_BASE}/library`, resolved.tabId);
|
|
122
126
|
if (navRes.error) return text(`Navigation failed: ${navRes.error}`);
|
|
123
127
|
|
|
124
128
|
await wait(2000);
|
|
125
129
|
|
|
126
130
|
if (args.action === 'search' && args.query) {
|
|
127
|
-
const fillRes = await ni.fill(sessionId, 'input[placeholder*="Search" i]', args.query);
|
|
131
|
+
const fillRes = await ni.fill(resolved.sessionId, 'input[placeholder*="Search" i]', args.query, undefined, resolved.tabId);
|
|
128
132
|
if (fillRes.error) return text(`Failed to search: ${fillRes.error}`);
|
|
129
|
-
await ni.pressKey(sessionId, 'Enter');
|
|
133
|
+
await ni.pressKey(resolved.sessionId, 'Enter', resolved.tabId);
|
|
130
134
|
return text(`Searched Leonardo.ai library for: "${args.query}". Use browser_snapshot to see results.`);
|
|
131
135
|
}
|
|
132
136
|
|
|
@@ -137,17 +141,19 @@ export async function handleBrowserLibrary(args: { action: string; query?: strin
|
|
|
137
141
|
|
|
138
142
|
export const browserDownloadSchema = {
|
|
139
143
|
action: z.enum(['screenshot'] as const).describe('Action: screenshot (capture current Leonardo.ai page state).'),
|
|
144
|
+
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
145
|
+
tabId: tabIdField,
|
|
140
146
|
};
|
|
141
147
|
|
|
142
148
|
export const browserDownloadDescription =
|
|
143
149
|
'Capture a screenshot of the current Leonardo.ai page. Use to verify generation results or UI state.';
|
|
144
150
|
|
|
145
|
-
export async function handleBrowserDownload(args: { action: string }) {
|
|
146
|
-
const
|
|
147
|
-
if (
|
|
151
|
+
export async function handleBrowserDownload(args: { action: string; sessionId?: string; tabId?: string }) {
|
|
152
|
+
const resolved = await ni.resolveSession(args.sessionId, { url: LEO_BASE }, args.tabId, { platform: true });
|
|
153
|
+
if ('error' in resolved) return text('No browser session available.');
|
|
148
154
|
|
|
149
155
|
if (args.action === 'screenshot') {
|
|
150
|
-
const res = await ni.screenshot(sessionId);
|
|
156
|
+
const res = await ni.screenshot(resolved.sessionId, resolved.tabId);
|
|
151
157
|
if (res.error) return text(`Screenshot failed: ${res.error}`);
|
|
152
158
|
return text('Screenshot captured of the current Leonardo.ai page.');
|
|
153
159
|
}
|
|
@@ -171,6 +177,8 @@ export const browserReferenceSchema = {
|
|
|
171
177
|
autoClear: z.boolean().optional().describe(
|
|
172
178
|
'Auto-delete the source images from data/images/ after successful upload. Default: true.',
|
|
173
179
|
),
|
|
180
|
+
sessionId: z.string().optional().describe('Browser session ID. If omitted, auto-selects the only open session.'),
|
|
181
|
+
tabId: tabIdField,
|
|
174
182
|
};
|
|
175
183
|
|
|
176
184
|
export const browserReferenceDescription =
|
|
@@ -183,9 +191,11 @@ export async function handleBrowserReference(args: {
|
|
|
183
191
|
type: string;
|
|
184
192
|
filePaths: string[];
|
|
185
193
|
autoClear?: boolean;
|
|
194
|
+
sessionId?: string;
|
|
195
|
+
tabId?: string;
|
|
186
196
|
}) {
|
|
187
|
-
const
|
|
188
|
-
if (
|
|
197
|
+
const resolved = await ni.resolveSession(args.sessionId, { url: LEO_BASE }, args.tabId, { platform: true });
|
|
198
|
+
if ('error' in resolved) return text('No browser session available. Open Leonardo.ai first.');
|
|
189
199
|
|
|
190
200
|
const { type, filePaths, autoClear = true } = args;
|
|
191
201
|
const isVideo = type === 'start_frame' || type === 'end_frame';
|
|
@@ -195,7 +205,7 @@ export async function handleBrowserReference(args: {
|
|
|
195
205
|
|
|
196
206
|
if (isVideo) {
|
|
197
207
|
// Video: click "Add Image Guidance to generation" button
|
|
198
|
-
openResult = await ni.evaluate(sessionId, `(() => {
|
|
208
|
+
openResult = await ni.evaluate(resolved.sessionId, `(() => {
|
|
199
209
|
const btns = document.querySelectorAll('button');
|
|
200
210
|
for (const b of btns) {
|
|
201
211
|
if (b.textContent.includes('Image Guidance') || b.textContent.includes('Add Image')) {
|
|
@@ -203,10 +213,10 @@ export async function handleBrowserReference(args: {
|
|
|
203
213
|
}
|
|
204
214
|
}
|
|
205
215
|
return 'not found';
|
|
206
|
-
})()
|
|
216
|
+
})()`, resolved.tabId);
|
|
207
217
|
} else {
|
|
208
218
|
// Image: click "Add elements" button
|
|
209
|
-
openResult = await ni.evaluate(sessionId, `(() => {
|
|
219
|
+
openResult = await ni.evaluate(resolved.sessionId, `(() => {
|
|
210
220
|
const btns = document.querySelectorAll('button');
|
|
211
221
|
for (const b of btns) {
|
|
212
222
|
if (b.textContent.includes('Add elements') || b.textContent.includes('Add Elements')) {
|
|
@@ -214,7 +224,7 @@ export async function handleBrowserReference(args: {
|
|
|
214
224
|
}
|
|
215
225
|
}
|
|
216
226
|
return 'not found';
|
|
217
|
-
})()
|
|
227
|
+
})()`, resolved.tabId);
|
|
218
228
|
}
|
|
219
229
|
|
|
220
230
|
if (openResult.error) return text(`Failed to open reference panel: ${openResult.error}`);
|
|
@@ -233,23 +243,23 @@ export async function handleBrowserReference(args: {
|
|
|
233
243
|
const labels = typeLabels[type] || [type];
|
|
234
244
|
const labelSearch = labels.map(l => `b.textContent.includes('${l}')`).join(' || ');
|
|
235
245
|
|
|
236
|
-
const selectResult = await ni.evaluate(sessionId, `(() => {
|
|
246
|
+
const selectResult = await ni.evaluate(resolved.sessionId, `(() => {
|
|
237
247
|
const btns = document.querySelectorAll('button, [role="tab"], [role="menuitem"]');
|
|
238
248
|
for (const b of btns) {
|
|
239
249
|
if (${labelSearch}) { b.click(); return 'selected'; }
|
|
240
250
|
}
|
|
241
251
|
return 'not found — use browser_snapshot to see available options';
|
|
242
|
-
})()
|
|
252
|
+
})()`, resolved.tabId);
|
|
243
253
|
|
|
244
254
|
if (selectResult.error) return text(`Failed to select reference type: ${selectResult.error}. Use browser_snapshot to see the panel.`);
|
|
245
255
|
await wait(1000);
|
|
246
256
|
}
|
|
247
257
|
|
|
248
258
|
// Step 3: Find file input and upload
|
|
249
|
-
const uploadResult = await ni.upload(sessionId, 'input[type="file"]', filePaths);
|
|
259
|
+
const uploadResult = await ni.upload(resolved.sessionId, 'input[type="file"]', filePaths, undefined, resolved.tabId);
|
|
250
260
|
if (uploadResult.error) {
|
|
251
261
|
// Fallback: try broader selector
|
|
252
|
-
const fallback = await ni.upload(sessionId, 'input[accept*="image"]', filePaths);
|
|
262
|
+
const fallback = await ni.upload(resolved.sessionId, 'input[accept*="image"]', filePaths, undefined, resolved.tabId);
|
|
253
263
|
if (fallback.error) {
|
|
254
264
|
return text(
|
|
255
265
|
`Failed to upload reference image(s): ${uploadResult.error}. ` +
|
|
@@ -20,9 +20,11 @@ import {
|
|
|
20
20
|
* Use the /leonardo skill for the full guided creation experience.
|
|
21
21
|
*/
|
|
22
22
|
export function registerLeonardoTools(server: McpServer) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
return [
|
|
24
|
+
server.tool('leonardo_browser_navigate', browserNavigateDescription, browserNavigateSchema, handleBrowserNavigate),
|
|
25
|
+
server.tool('leonardo_browser_generate', browserGenerateDescription, browserGenerateSchema, handleBrowserGenerate),
|
|
26
|
+
server.tool('leonardo_browser_library', browserLibraryDescription, browserLibrarySchema, handleBrowserLibrary),
|
|
27
|
+
server.tool('leonardo_browser_download', browserDownloadDescription, browserDownloadSchema, handleBrowserDownload),
|
|
28
|
+
server.tool('leonardo_browser_reference', browserReferenceDescription, browserReferenceSchema, handleBrowserReference),
|
|
29
|
+
];
|
|
28
30
|
}
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { readFileSync, writeFileSync, existsSync, unlinkSync, mkdirSync, readdirSync } from 'fs';
|
|
3
|
-
import { join
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const NI_DATA_DIR = join(PROJECT_ROOT, 'data');
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { text } from './response.js';
|
|
5
|
+
import { getIdentity, effectivePins } from '../services/identity.js';
|
|
6
|
+
import { config } from '../config.js';
|
|
7
|
+
|
|
8
|
+
// Loop state files and templates live in DATA_HOME/data/
|
|
9
|
+
const DATA_HOME = process.env.SYNABUN_DATA_HOME || process.env.SYNABUN_ROOT || config.dataHome;
|
|
10
|
+
const NI_DATA_DIR = join(DATA_HOME, 'data');
|
|
12
11
|
const LOOP_DIR = join(NI_DATA_DIR, 'loop');
|
|
13
|
-
const
|
|
12
|
+
const LOOP_TEMPLATES_FILE = 'loop-templates.json';
|
|
13
|
+
const LOOP_TEMPLATES_PATH = join(NI_DATA_DIR, LOOP_TEMPLATES_FILE);
|
|
14
|
+
const LOOP_TEMPLATES_PATTERN = /^loop-templates.*\.json$/;
|
|
14
15
|
|
|
15
16
|
const MAX_ITERATIONS = 50;
|
|
16
17
|
const DEFAULT_ITERATIONS = 10;
|
|
@@ -23,29 +24,58 @@ function ensureLoopDir() {
|
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
|
|
27
|
+
const STALE_LOOP_MS = 45 * 60 * 1000;
|
|
28
|
+
const ACTIVE_POINTER_PATH = join(LOOP_DIR, 'active-pointer.json');
|
|
29
|
+
|
|
30
|
+
function isFreshActive(data: any): boolean {
|
|
31
|
+
if (!data?.active) return false;
|
|
32
|
+
const lastAct = new Date(data.lastIterationAt || data.startedAt || 0).getTime();
|
|
33
|
+
if (!lastAct) return true;
|
|
34
|
+
return Date.now() - lastAct <= STALE_LOOP_MS;
|
|
35
|
+
}
|
|
36
|
+
|
|
26
37
|
/**
|
|
27
38
|
* Resolve the session ID for loop state file.
|
|
28
|
-
* Priority:
|
|
39
|
+
* Priority:
|
|
40
|
+
* 1. explicit param
|
|
41
|
+
* 2. CLAUDE_SESSION_ID env (only if matching active flag exists)
|
|
42
|
+
* 3. SYNABUN_TERMINAL_SESSION env → terminalSessionId scan
|
|
43
|
+
* 4. active-pointer.json fallback (written by stop hook on claim)
|
|
44
|
+
* 5. legacy unclaimed loops without terminalSessionId
|
|
45
|
+
* 6. exactly-one-active fallback (single hook-driven loop)
|
|
29
46
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
47
|
+
* Verifying flag existence before trusting CLAUDE_SESSION_ID is what fixes the
|
|
48
|
+
* "No active loop" regression after /clear renamed the flag file but the env
|
|
49
|
+
* var still pointed to the pre-clear session ID.
|
|
33
50
|
*/
|
|
34
51
|
function resolveSessionId(explicit?: string): string | null {
|
|
35
52
|
if (explicit) return explicit;
|
|
36
|
-
if (process.env.CLAUDE_SESSION_ID) return process.env.CLAUDE_SESSION_ID;
|
|
37
53
|
|
|
38
54
|
ensureLoopDir();
|
|
39
55
|
|
|
40
|
-
|
|
41
|
-
|
|
56
|
+
const claudeSessionEnv = process.env.CLAUDE_SESSION_ID;
|
|
57
|
+
if (claudeSessionEnv) {
|
|
58
|
+
const path = getLoopPath(claudeSessionEnv);
|
|
59
|
+
if (existsSync(path)) {
|
|
60
|
+
try {
|
|
61
|
+
const data = JSON.parse(readFileSync(path, 'utf-8'));
|
|
62
|
+
if (isFreshActive(data)) return claudeSessionEnv;
|
|
63
|
+
} catch { /* fall through */ }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Strategy A: terminalSessionId match (survives /clear). Over HTTP the loop's
|
|
68
|
+
// terminal id arrives via the X-Synabun-Terminal header (identity context);
|
|
69
|
+
// for stdio it's the inherited env var — effectivePins covers both.
|
|
70
|
+
const terminalSessionEnv = effectivePins(getIdentity()).terminalSessionId
|
|
71
|
+
|| process.env.SYNABUN_TERMINAL_SESSION;
|
|
42
72
|
if (terminalSessionEnv) {
|
|
43
73
|
try {
|
|
44
|
-
const files = readdirSync(LOOP_DIR).filter(f => f.endsWith('.json') && !f.startsWith('pending-'));
|
|
74
|
+
const files = readdirSync(LOOP_DIR).filter(f => f.endsWith('.json') && !f.startsWith('pending-') && f !== 'active-pointer.json');
|
|
45
75
|
for (const file of files) {
|
|
46
76
|
try {
|
|
47
77
|
const data = JSON.parse(readFileSync(join(LOOP_DIR, file), 'utf-8'));
|
|
48
|
-
if (data
|
|
78
|
+
if (isFreshActive(data) && data.terminalSessionId === terminalSessionEnv) {
|
|
49
79
|
return file.replace('.json', '');
|
|
50
80
|
}
|
|
51
81
|
} catch { /* skip corrupt files */ }
|
|
@@ -53,17 +83,42 @@ function resolveSessionId(explicit?: string): string | null {
|
|
|
53
83
|
} catch { /* dir read failed */ }
|
|
54
84
|
}
|
|
55
85
|
|
|
56
|
-
//
|
|
86
|
+
// Strategy A3: active-pointer.json (written by stop hook on flag claim)
|
|
87
|
+
if (existsSync(ACTIVE_POINTER_PATH)) {
|
|
88
|
+
try {
|
|
89
|
+
const ptr = JSON.parse(readFileSync(ACTIVE_POINTER_PATH, 'utf-8'));
|
|
90
|
+
const candidatePath = getLoopPath(ptr.sessionId);
|
|
91
|
+
if (ptr.sessionId && existsSync(candidatePath)) {
|
|
92
|
+
const data = JSON.parse(readFileSync(candidatePath, 'utf-8'));
|
|
93
|
+
if (isFreshActive(data)) return ptr.sessionId;
|
|
94
|
+
}
|
|
95
|
+
} catch { /* ignore corrupt pointer */ }
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Strategy B: legacy unclaimed loops without terminalSessionId
|
|
57
99
|
try {
|
|
58
|
-
const files = readdirSync(LOOP_DIR).filter(f => f.endsWith('.json'));
|
|
100
|
+
const files = readdirSync(LOOP_DIR).filter(f => f.endsWith('.json') && !f.startsWith('pending-') && f !== 'active-pointer.json');
|
|
59
101
|
for (const file of files) {
|
|
60
102
|
try {
|
|
61
103
|
const data = JSON.parse(readFileSync(join(LOOP_DIR, file), 'utf-8'));
|
|
62
|
-
if (data
|
|
104
|
+
if (isFreshActive(data) && !data.terminalSessionId) return file.replace('.json', '');
|
|
63
105
|
} catch { /* skip corrupt files */ }
|
|
64
106
|
}
|
|
65
107
|
} catch { /* dir read failed */ }
|
|
66
108
|
|
|
109
|
+
// Strategy A2: exactly-one-fresh-active fallback
|
|
110
|
+
try {
|
|
111
|
+
const files = readdirSync(LOOP_DIR).filter(f => f.endsWith('.json') && !f.startsWith('pending-') && f !== 'active-pointer.json');
|
|
112
|
+
const matches: string[] = [];
|
|
113
|
+
for (const file of files) {
|
|
114
|
+
try {
|
|
115
|
+
const data = JSON.parse(readFileSync(join(LOOP_DIR, file), 'utf-8'));
|
|
116
|
+
if (isFreshActive(data)) matches.push(file.replace('.json', ''));
|
|
117
|
+
} catch { /* skip corrupt files */ }
|
|
118
|
+
}
|
|
119
|
+
if (matches.length === 1) return matches[0];
|
|
120
|
+
} catch { /* dir read failed */ }
|
|
121
|
+
|
|
67
122
|
return null;
|
|
68
123
|
}
|
|
69
124
|
|
|
@@ -114,11 +169,49 @@ export const loopDescription =
|
|
|
114
169
|
|
|
115
170
|
// ── Start ──────────────────────────────────────────────────────
|
|
116
171
|
|
|
172
|
+
function sortLoopTemplateFiles(a: string, b: string): number {
|
|
173
|
+
if (a === LOOP_TEMPLATES_FILE) return -1;
|
|
174
|
+
if (b === LOOP_TEMPLATES_FILE) return 1;
|
|
175
|
+
return a.localeCompare(b);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function listLoopTemplatePaths(): string[] {
|
|
179
|
+
try {
|
|
180
|
+
if (!existsSync(NI_DATA_DIR)) return existsSync(LOOP_TEMPLATES_PATH) ? [LOOP_TEMPLATES_PATH] : [];
|
|
181
|
+
return readdirSync(NI_DATA_DIR)
|
|
182
|
+
.filter(file => LOOP_TEMPLATES_PATTERN.test(file))
|
|
183
|
+
.sort(sortLoopTemplateFiles)
|
|
184
|
+
.map(file => join(NI_DATA_DIR, file));
|
|
185
|
+
} catch {
|
|
186
|
+
return existsSync(LOOP_TEMPLATES_PATH) ? [LOOP_TEMPLATES_PATH] : [];
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
191
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function readLoopTemplates(): Record<string, unknown>[] {
|
|
195
|
+
const byId = new Map<string, Record<string, unknown>>();
|
|
196
|
+
const withoutId: Record<string, unknown>[] = [];
|
|
197
|
+
for (const path of listLoopTemplatePaths()) {
|
|
198
|
+
try {
|
|
199
|
+
const data = JSON.parse(readFileSync(path, 'utf-8'));
|
|
200
|
+
const list = Array.isArray(data) ? data : (isRecord(data) && Array.isArray(data.templates) ? data.templates : []);
|
|
201
|
+
for (const item of list) {
|
|
202
|
+
if (!isRecord(item)) continue;
|
|
203
|
+
const id = typeof item.id === 'string' ? item.id : '';
|
|
204
|
+
if (id) byId.set(id, item);
|
|
205
|
+
else withoutId.push(item);
|
|
206
|
+
}
|
|
207
|
+
} catch { /* skip corrupt template files */ }
|
|
208
|
+
}
|
|
209
|
+
return [...byId.values(), ...withoutId];
|
|
210
|
+
}
|
|
211
|
+
|
|
117
212
|
function loadTemplate(nameOrId: string): Record<string, unknown> | null {
|
|
118
213
|
try {
|
|
119
|
-
|
|
120
|
-
const templates = JSON.parse(readFileSync(LOOP_TEMPLATES_PATH, 'utf-8'));
|
|
121
|
-
if (!Array.isArray(templates)) return null;
|
|
214
|
+
const templates = readLoopTemplates();
|
|
122
215
|
const lower = nameOrId.toLowerCase();
|
|
123
216
|
return templates.find((t: Record<string, unknown>) =>
|
|
124
217
|
(t.id as string) === nameOrId ||
|
|
@@ -1,16 +1,32 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { scrollMemories, getMemoryStats } from '../services/sqlite.js';
|
|
2
|
+
import { scrollMemories, getMemoryStats, getMemory, rowToSessionChunkPayload } from '../services/sqlite.js';
|
|
3
3
|
import { validateCategory } from '../services/categories.js';
|
|
4
4
|
import type { MemoryPayload } from '../types.js';
|
|
5
5
|
import { text } from './response.js';
|
|
6
|
+
import { getDb } from '../services/sqlite.js';
|
|
7
|
+
import { memoryRevision, memoryHistory, undoRevision, maintenanceStatus, pauseMaintenance, feedback, projectContext } from '../services/memory-maintenance.js';
|
|
8
|
+
import { triageMemories } from '../services/memory-triage.js';
|
|
9
|
+
|
|
10
|
+
function coerceIds() { return z.array(z.string().uuid()).max(50).optional().describe('UUIDs for get-batch; maximum 50.'); }
|
|
6
11
|
|
|
7
12
|
export function buildMemoriesSchema() {
|
|
8
13
|
return {
|
|
9
14
|
action: z
|
|
10
|
-
.enum(['recent', 'stats', 'by-category', 'by-project'] as const)
|
|
15
|
+
.enum(['recent', 'stats', 'by-category', 'by-project', 'get', 'get-batch', 'history', 'undo', 'maintenance', 'feedback', 'context', 'triage'] as const)
|
|
11
16
|
.describe(
|
|
12
|
-
'recent=latest memories, stats=counts and health, by-category=filter by type, by-project=filter by project.'
|
|
17
|
+
'recent=latest memories, stats=counts and health, by-category=filter by type, by-project=filter by project, get=FULL untruncated content of one memory by id (no vector search), triage=forget candidates (duplicates, old never-recalled notes) ranked by how little they would be missed — nothing is deleted.'
|
|
13
18
|
),
|
|
19
|
+
token_budget: z.coerce.number().int().min(100).max(16000).optional().describe('Estimated token budget for context; default 1500.'),
|
|
20
|
+
ids: coerceIds(),
|
|
21
|
+
revision: z.coerce.number().int().min(1).optional().describe('Revision to restore for undo.'),
|
|
22
|
+
expected_revision: z.coerce.number().int().min(1).optional().describe('Required current revision for undo.'),
|
|
23
|
+
operation: z.enum(['status','pause','resume','retry','undo-relation']).optional().describe('Maintenance operation; default status.'),
|
|
24
|
+
relation_id: z.string().uuid().optional().describe('Relationship to undo.'),
|
|
25
|
+
feedback: z.enum(['useful','irrelevant','incorrect']).optional().describe('Feedback signal; never treated as proof of correctness.'),
|
|
26
|
+
id: z
|
|
27
|
+
.string()
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Memory id (required for action "get"). Returns that memory\'s full content untruncated — use to fetch a consolidated/large memory directly.'),
|
|
14
30
|
category: z
|
|
15
31
|
.string()
|
|
16
32
|
.optional()
|
|
@@ -31,7 +47,7 @@ export function buildMemoriesSchema() {
|
|
|
31
47
|
export const memoriesSchema = buildMemoriesSchema();
|
|
32
48
|
|
|
33
49
|
export const memoriesDescription =
|
|
34
|
-
'Browse recent memories or
|
|
50
|
+
'Browse recent memories, get statistics, or fetch one memory in FULL by id. Use action "get" with an id to pull a large/consolidated memory untruncated (list actions truncate content to 150 chars). Use to see what you remember about a project, review recent learnings, or check memory health.';
|
|
35
51
|
|
|
36
52
|
function formatAge(isoDate: string): string {
|
|
37
53
|
const diffMs = Date.now() - new Date(isoDate).getTime();
|
|
@@ -45,7 +61,9 @@ function formatAge(isoDate: string): string {
|
|
|
45
61
|
}
|
|
46
62
|
|
|
47
63
|
export async function handleMemories(args: {
|
|
48
|
-
action: string;
|
|
64
|
+
action: string; ids?: string[]; revision?: number; expected_revision?: number;
|
|
65
|
+
operation?: string; relation_id?: string; feedback?: string; token_budget?: number;
|
|
66
|
+
id?: string;
|
|
49
67
|
category?: string;
|
|
50
68
|
project?: string;
|
|
51
69
|
limit?: number;
|
|
@@ -55,6 +73,48 @@ export async function handleMemories(args: {
|
|
|
55
73
|
const project = args.project;
|
|
56
74
|
const limit = args.limit ?? 10;
|
|
57
75
|
|
|
76
|
+
try {
|
|
77
|
+
if (action === 'context') return text(projectContext(args.project || '',args.token_budget ?? 1500));
|
|
78
|
+
if (action === 'triage') {
|
|
79
|
+
const result = await triageMemories({ project: args.project, limit, origin: 'tool' });
|
|
80
|
+
if (!result.rows.length) return text(`No forget candidates found${args.project ? ` for "${args.project}"` : ''}.`);
|
|
81
|
+
const lines = result.rows.map((r, i) => `${i + 1}. [${r.id}] ${r.category} | ${r.project} | imp:${r.importance} | recalled ${r.access_count}× | ${formatAge(r.created_at)}` +
|
|
82
|
+
`${r.expendability !== null ? ` | expendability ${r.expendability.toFixed(1)} (${r.level})` : ''}\n why: ${r.reasons.join('; ')}\n ${r.preview}${r.preview.length >= 240 ? '…' : ''}`);
|
|
83
|
+
const unjudged = result.judged ? result.rows.filter(r => r.expendability === null).length : 0;
|
|
84
|
+
return text(`Forget candidates (${result.rows.length} of ${result.candidates} found${result.judged ? ', ranked by judged expendability' : ', fallback ordering — judgment unavailable'}${unjudged ? `; ${unjudged} could not be judged this time (listed after the judged ones)` : ''}). Nothing was deleted; use \`forget\` on the ids you agree with.\n\n${lines.join('\n\n')}`);
|
|
85
|
+
}
|
|
86
|
+
if (action === 'get-batch') {
|
|
87
|
+
if (!args.ids?.length) return text('get-batch requires ids.');
|
|
88
|
+
const rows = [];
|
|
89
|
+
for (const id of args.ids) { const m = await getMemory(id); const session = !m && getDb().prepare('SELECT * FROM session_chunks WHERE id=?').get(id); rows.push(m ? {...m,revision:memoryRevision(id)} : session ? {id,type:'session',payload:rowToSessionChunkPayload(session)} : {id,error:'not found'}); }
|
|
90
|
+
return text(JSON.stringify(rows));
|
|
91
|
+
}
|
|
92
|
+
if (action === 'history') return text(JSON.stringify(memoryHistory(args.id || '',limit)));
|
|
93
|
+
if (action === 'undo') {
|
|
94
|
+
if (!args.id || !args.revision || !args.expected_revision) return text('undo requires id, revision, and expected_revision.');
|
|
95
|
+
return text(`Restored [${args.id}] as revision ${undoRevision(args.id,args.revision,args.expected_revision)}.`);
|
|
96
|
+
}
|
|
97
|
+
if (action === 'feedback') { feedback(args.id || '',args.feedback || ''); return text('Feedback recorded.'); }
|
|
98
|
+
if (action === 'maintenance') {
|
|
99
|
+
if (args.operation === 'pause' || args.operation === 'resume') pauseMaintenance(args.operation === 'pause');
|
|
100
|
+
if (args.operation === 'retry') getDb().exec("UPDATE memory_jobs SET status='pending',attempts=0,error=NULL WHERE status='failed'");
|
|
101
|
+
if (args.operation === 'undo-relation') getDb().prepare('UPDATE memory_relations SET active=0 WHERE id=?').run(args.relation_id || '');
|
|
102
|
+
return text(JSON.stringify(maintenanceStatus()));
|
|
103
|
+
}
|
|
104
|
+
} catch (error) { return { ...text((error as Error).message), isError: true }; }
|
|
105
|
+
if (action === 'get') {
|
|
106
|
+
if (!args.id) return text('action "get" requires an "id".');
|
|
107
|
+
const mem = await getMemory(args.id);
|
|
108
|
+
if (!mem) {
|
|
109
|
+
const session=getDb().prepare('SELECT * FROM session_chunks WHERE id=?').get(args.id);
|
|
110
|
+
return session ? text(`[${args.id}] Session ${session.session_id} | ${session.project}\n\n${session.content}`) : text(`No memory found with id "${args.id}".`);
|
|
111
|
+
}
|
|
112
|
+
const p = mem.payload;
|
|
113
|
+
const tagStr = p.tags?.length ? ` [${p.tags.join(', ')}]` : '';
|
|
114
|
+
const sub = p.subcategory ? `/${p.subcategory}` : '';
|
|
115
|
+
return text(`[${mem.id}] ${p.category}${sub} | ${p.project} | imp:${p.importance}${tagStr} | revision:${memoryRevision(args.id)}\n\n${p.content}`);
|
|
116
|
+
}
|
|
117
|
+
|
|
58
118
|
if (category) {
|
|
59
119
|
const catCheck = validateCategory(category);
|
|
60
120
|
if (!catCheck.valid) {
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
import * as ni from '../services/neural-interface.js';
|
|
4
|
+
import { text } from './response.js';
|
|
5
|
+
|
|
6
|
+
// ═══════════════════════════════════════════
|
|
7
|
+
// morelogin — MoreLogin anti-detect browser MCP tool
|
|
8
|
+
// ═══════════════════════════════════════════
|
|
9
|
+
|
|
10
|
+
export const moreloginSchema = {
|
|
11
|
+
action: z.enum(['status', 'list', 'create', 'start', 'stop', 'use_default']).describe(
|
|
12
|
+
'MoreLogin action. "status" = installed/running + current default. "list" = browser profiles (environments). "create" = new profile. "start"/"stop" = launch/close a profile. "use_default" = make a profile the default AI browser so every browser_* tool drives it.'
|
|
13
|
+
),
|
|
14
|
+
envId: z.string().optional().describe(
|
|
15
|
+
'MoreLogin environment (profile) id — required for start, stop, and use_default. Get ids from the "list" action.'
|
|
16
|
+
),
|
|
17
|
+
name: z.string().optional().describe(
|
|
18
|
+
'Name for a new profile ("create" action). Defaults to "SynaBun".'
|
|
19
|
+
),
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const moreloginDescription =
|
|
23
|
+
'Manage MoreLogin (anti-detect, multi-account browser) profiles. Actions: "status" (is MoreLogin installed/running, which profile is the default AI browser), "list" (profiles), "create" (new profile), "start"/"stop" (launch/close a profile), "use_default" (set a profile as the default AI browser — afterwards all browser_* tools automatically drive that MoreLogin profile). Requires the MoreLogin desktop app to be running with its local API enabled.';
|
|
24
|
+
|
|
25
|
+
interface MlEnv { id: string; name: string; status?: string }
|
|
26
|
+
|
|
27
|
+
export async function handleMoreLogin(args: { action: string; envId?: string; name?: string }) {
|
|
28
|
+
switch (args.action) {
|
|
29
|
+
case 'status': {
|
|
30
|
+
const r = await ni.moreloginStatus();
|
|
31
|
+
if (r.error) return text(`MoreLogin unreachable: ${r.error}`);
|
|
32
|
+
if (!r.installed) return text('MoreLogin is not installed. Install it from https://www.morelogin.com.');
|
|
33
|
+
if (!r.running) return text(`MoreLogin is installed but its local API is not running on port ${r.port}. Open the MoreLogin app and enable Settings → API & MCP.`);
|
|
34
|
+
const def = r.isDefault && r.defaultEnvId ? `default AI browser = env ${r.defaultEnvId}` : 'no MoreLogin default set';
|
|
35
|
+
return text(`MoreLogin running on port ${r.port}. ${r.profileCount} profile(s). ${def}.`);
|
|
36
|
+
}
|
|
37
|
+
case 'list': {
|
|
38
|
+
const r = await ni.moreloginProfiles();
|
|
39
|
+
if (r.error) return text(`MoreLogin list failed: ${r.error}`);
|
|
40
|
+
const envs = (r.envs || []) as MlEnv[];
|
|
41
|
+
if (!envs.length) return text('No MoreLogin profiles found. Create one with action "create" (or one is auto-created on first use).');
|
|
42
|
+
return text('MoreLogin profiles:\n' + envs.map(e => ` • ${e.name} (id ${e.id})${e.status ? ` — ${e.status}` : ''}`).join('\n'));
|
|
43
|
+
}
|
|
44
|
+
case 'create': {
|
|
45
|
+
const r = await ni.moreloginCreate(args.name);
|
|
46
|
+
if (r.error) return text(`Create failed: ${r.error}`);
|
|
47
|
+
const ids = (r.ids || []) as string[];
|
|
48
|
+
return text(`Created MoreLogin profile${ids.length ? ` (id ${ids.join(', ')})` : ''}.`);
|
|
49
|
+
}
|
|
50
|
+
case 'start': {
|
|
51
|
+
if (!args.envId) return text('envId is required for the "start" action. Use "list" to get ids.');
|
|
52
|
+
const r = await ni.moreloginStart(args.envId);
|
|
53
|
+
if (r.error) return text(`Start failed: ${r.error}`);
|
|
54
|
+
return text(`Started MoreLogin env ${args.envId} (debug port ${r.debugPort}).`);
|
|
55
|
+
}
|
|
56
|
+
case 'stop': {
|
|
57
|
+
if (!args.envId) return text('envId is required for the "stop" action.');
|
|
58
|
+
const r = await ni.moreloginStop(args.envId);
|
|
59
|
+
if (r.error) return text(`Stop failed: ${r.error}`);
|
|
60
|
+
return text(`Stopped MoreLogin env ${args.envId}.`);
|
|
61
|
+
}
|
|
62
|
+
case 'use_default': {
|
|
63
|
+
if (!args.envId) return text('envId is required for the "use_default" action.');
|
|
64
|
+
const r = await ni.moreloginUseDefault(args.envId);
|
|
65
|
+
if (r.error) return text(`use_default failed: ${r.error}`);
|
|
66
|
+
return text(`MoreLogin env ${args.envId} is now the default AI browser — every browser_* tool will drive it.`);
|
|
67
|
+
}
|
|
68
|
+
default:
|
|
69
|
+
return text(`Unknown action: ${args.action}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Register the MoreLogin MCP tool on the given server instance.
|
|
75
|
+
* Single tool with action-based dispatch: status, list, create, start, stop, use_default.
|
|
76
|
+
*/
|
|
77
|
+
export function registerMoreLoginTools(server: McpServer) {
|
|
78
|
+
return [
|
|
79
|
+
server.tool('morelogin', moreloginDescription, moreloginSchema, handleMoreLogin),
|
|
80
|
+
];
|
|
81
|
+
}
|