synabun 2.0.9 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +115 -0
- package/README.md +25 -2
- package/THIRD-PARTY-LICENSES.md +68 -4
- package/bin/synabun.js +71 -24
- package/docs/whatsapp.md +2 -2
- package/hooks/claude-code/pre-websearch.mjs +12 -1
- package/hooks/claude-code/shared.mjs +5 -0
- package/hooks/claude-code/stop.mjs +1 -1
- package/launcher.mjs +9 -3
- package/lib/claude-hooks.js +172 -18
- package/lib/client-config-repair.js +17 -8
- package/lib/desktop-app.js +7 -1
- package/lib/external-tools.js +1 -1
- package/lib/first-launch-protection.js +57 -12
- package/lib/mcp-dist.js +176 -0
- package/lib/release-npm-ci.mjs +138 -0
- package/lib/release-publish.mjs +91 -0
- package/lib/release-scan.mjs +50 -0
- package/lib/server-crash-record.js +123 -0
- package/lib/server-exit.js +318 -0
- package/lib/server-supervisor.js +508 -0
- package/lib/start-launcher.js +43 -5
- package/lib/tools-cli.js +45 -0
- package/lib/update-snapshot.js +228 -0
- package/lib/virustotal.mjs +192 -0
- package/lib/windows-crash-event.js +269 -0
- package/mcp-server/dist/http.d.ts +20 -1
- package/mcp-server/dist/http.d.ts.map +1 -1
- package/mcp-server/dist/http.js +59 -12
- package/mcp-server/dist/http.js.map +1 -1
- package/mcp-server/dist/index.d.ts +33 -27
- package/mcp-server/dist/index.d.ts.map +1 -1
- package/mcp-server/dist/index.js +128 -143
- package/mcp-server/dist/index.js.map +1 -1
- package/mcp-server/dist/preload.js +1 -1
- package/mcp-server/dist/preload.js.map +1 -1
- package/mcp-server/dist/services/codex-config-heal.d.ts +6 -2
- package/mcp-server/dist/services/codex-config-heal.d.ts.map +1 -1
- package/mcp-server/dist/services/codex-config-heal.js +81 -28
- package/mcp-server/dist/services/codex-config-heal.js.map +1 -1
- package/mcp-server/dist/services/memory-judge-backfill.d.ts +6 -0
- package/mcp-server/dist/services/memory-judge-backfill.d.ts.map +1 -1
- package/mcp-server/dist/services/memory-judge-backfill.js +7 -1
- package/mcp-server/dist/services/memory-judge-backfill.js.map +1 -1
- package/mcp-server/dist/services/neural-interface.d.ts +16 -10
- package/mcp-server/dist/services/neural-interface.d.ts.map +1 -1
- package/mcp-server/dist/services/neural-interface.js +67 -11
- package/mcp-server/dist/services/neural-interface.js.map +1 -1
- package/mcp-server/dist/services/server-instructions.d.ts +7 -2
- package/mcp-server/dist/services/server-instructions.d.ts.map +1 -1
- package/mcp-server/dist/services/server-instructions.js +20 -62
- package/mcp-server/dist/services/server-instructions.js.map +1 -1
- package/mcp-server/dist/services/tool-catalog.d.ts +120 -0
- package/mcp-server/dist/services/tool-catalog.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-catalog.js +339 -0
- package/mcp-server/dist/services/tool-catalog.js.map +1 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts +12 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.js +40 -0
- package/mcp-server/dist/services/tool-list-refresh-barrier.js.map +1 -0
- package/mcp-server/dist/services/tool-list.d.ts +108 -0
- package/mcp-server/dist/services/tool-list.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-list.js +334 -0
- package/mcp-server/dist/services/tool-list.js.map +1 -0
- package/mcp-server/dist/services/tool-runtime.d.ts +161 -0
- package/mcp-server/dist/services/tool-runtime.d.ts.map +1 -0
- package/mcp-server/dist/services/tool-runtime.js +400 -0
- package/mcp-server/dist/services/tool-runtime.js.map +1 -0
- package/mcp-server/dist/services/whiteboard-geometry.d.ts +26 -2
- package/mcp-server/dist/services/whiteboard-geometry.d.ts.map +1 -1
- package/mcp-server/dist/services/whiteboard-geometry.js +91 -8
- package/mcp-server/dist/services/whiteboard-geometry.js.map +1 -1
- package/mcp-server/dist/tools/agents.d.ts +10 -10
- package/mcp-server/dist/tools/agents.d.ts.map +1 -1
- package/mcp-server/dist/tools/agents.js +22 -13
- package/mcp-server/dist/tools/agents.js.map +1 -1
- package/mcp-server/dist/tools/browser-batch.d.ts +3 -3
- package/mcp-server/dist/tools/image-tools.d.ts +1 -1
- package/mcp-server/dist/tools/image-tools.js +1 -1
- package/mcp-server/dist/tools/skill-tools.d.ts +505 -0
- package/mcp-server/dist/tools/skill-tools.d.ts.map +1 -0
- package/mcp-server/dist/tools/skill-tools.js +639 -0
- package/mcp-server/dist/tools/skill-tools.js.map +1 -0
- package/mcp-server/dist/tools/skill.d.ts +7 -0
- package/mcp-server/dist/tools/skill.d.ts.map +1 -0
- package/mcp-server/dist/tools/skill.js +11 -0
- package/mcp-server/dist/tools/skill.js.map +1 -0
- package/mcp-server/dist/tools/tool-groups.d.ts +68 -0
- package/mcp-server/dist/tools/tool-groups.d.ts.map +1 -0
- package/mcp-server/dist/tools/tool-groups.js +147 -0
- package/mcp-server/dist/tools/tool-groups.js.map +1 -0
- package/mcp-server/dist/tools/whiteboard-format.d.ts.map +1 -1
- package/mcp-server/dist/tools/whiteboard-format.js +7 -4
- package/mcp-server/dist/tools/whiteboard-format.js.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.d.ts +64 -13
- package/mcp-server/dist/tools/whiteboard-tools.d.ts.map +1 -1
- package/mcp-server/dist/tools/whiteboard-tools.js +30 -5
- package/mcp-server/dist/tools/whiteboard-tools.js.map +1 -1
- package/mcp-server/package-lock.json +2 -2
- package/mcp-server/package.json +1 -1
- package/mcp-server/src/http.ts +75 -12
- package/mcp-server/src/index.ts +147 -154
- package/mcp-server/src/preload.ts +12 -12
- package/mcp-server/src/services/codex-config-heal.ts +80 -29
- package/mcp-server/src/services/memory-judge-backfill.ts +7 -1
- package/mcp-server/src/services/neural-interface.ts +79 -20
- package/mcp-server/src/services/server-instructions.ts +27 -63
- package/mcp-server/src/services/tool-catalog.ts +403 -0
- package/mcp-server/src/services/tool-list-refresh-barrier.ts +33 -0
- package/mcp-server/src/services/tool-list.ts +410 -0
- package/mcp-server/src/services/tool-runtime.ts +457 -0
- package/mcp-server/src/services/whiteboard-geometry.ts +94 -9
- package/mcp-server/src/tools/agents.ts +22 -14
- package/mcp-server/src/tools/image-tools.ts +1 -1
- package/mcp-server/src/tools/skill-tools.ts +589 -0
- package/mcp-server/src/tools/skill.ts +13 -0
- package/mcp-server/src/tools/tool-groups.ts +164 -0
- package/mcp-server/src/tools/whiteboard-format.ts +9 -3
- package/mcp-server/src/tools/whiteboard-tools.ts +39 -5
- package/neural-interface/i18n/en.json +3680 -206
- package/neural-interface/i18n/pt-BR.json +3628 -157
- package/neural-interface/lib/account-usage.js +5 -3
- package/neural-interface/lib/app-controls-api.js +161 -0
- package/neural-interface/lib/assistant-api.js +148 -35
- package/neural-interface/lib/assistant-brains/claude.js +4 -3
- package/neural-interface/lib/assistant-brains/codex-browser-policy-hook.mjs +12 -2
- package/neural-interface/lib/assistant-brains/codex-route-gate-hook.mjs +32 -9
- package/neural-interface/lib/assistant-brains/codex.js +9 -5
- package/neural-interface/lib/assistant-brains/opencode.js +122 -44
- package/neural-interface/lib/assistant-brains/opencode2-browser-policy/index.js +59 -0
- package/neural-interface/lib/assistant-brains/opencode2-route-gate/index.js +97 -0
- package/neural-interface/lib/assistant-catalog.js +23 -9
- package/neural-interface/lib/assistant-dispatch.js +874 -156
- package/neural-interface/lib/assistant-envelope.js +22 -2
- package/neural-interface/lib/assistant-persona.js +80 -11
- package/neural-interface/lib/assistant-plan-permissions.js +10 -9
- package/neural-interface/lib/assistant-route-gate-codex.js +3 -0
- package/neural-interface/lib/assistant-route-gate.js +6 -4
- package/neural-interface/lib/assistant-router.js +13 -8
- package/neural-interface/lib/assistant-runtime.js +183 -26
- package/neural-interface/lib/assistant-task-prompt.js +78 -14
- package/neural-interface/lib/assistant-tools.js +51 -0
- package/neural-interface/lib/backup-service.js +620 -3
- package/neural-interface/lib/backup-zip-reader.js +10 -5
- package/neural-interface/lib/backup-zip-writer.js +257 -0
- package/neural-interface/lib/browser-execution.js +10 -2
- package/neural-interface/lib/browser-guard-cdp.js +83 -0
- package/neural-interface/lib/browser-network-guard.js +284 -0
- package/neural-interface/lib/browser-policy-roots.js +64 -0
- package/neural-interface/lib/browser-tool-policy.js +186 -31
- package/neural-interface/lib/claude-agent-bridge.js +4 -2
- package/neural-interface/lib/claude-hooks-status.js +103 -0
- package/neural-interface/lib/claude-model-catalog.js +64 -14
- package/neural-interface/lib/claude-temporary.js +5 -11
- package/neural-interface/lib/cli-install.js +18 -138
- package/neural-interface/lib/cli-resolver.js +4 -1
- package/neural-interface/lib/cli-update-planner.js +32 -31
- package/neural-interface/lib/cloudflared/tunnel.js +42 -2
- package/neural-interface/lib/codex-mcp-approvals.js +11 -0
- package/neural-interface/lib/codex-settings-schema.js +109 -47
- package/neural-interface/lib/codex-worker-app-server.js +172 -0
- package/neural-interface/lib/confined-fs.js +30 -3
- package/neural-interface/lib/crash-notice-api.js +98 -0
- package/neural-interface/lib/editor-completion-opencode.js +164 -67
- package/neural-interface/lib/exec-loop-command.js +4 -1
- package/neural-interface/lib/http-guards.js +8 -2
- package/neural-interface/lib/install-details.js +4 -1
- package/neural-interface/lib/launch-cache.js +293 -0
- package/neural-interface/lib/login-start.js +524 -0
- package/neural-interface/lib/mcp-agent-servers.js +67 -0
- package/neural-interface/lib/mcp-client-config.js +0 -29
- package/neural-interface/lib/mcp-external-servers.js +323 -0
- package/neural-interface/lib/{mcp-profile-refresh-coordinator.js → mcp-tools-refresh-coordinator.js} +4 -4
- package/neural-interface/lib/morelogin.js +30 -0
- package/neural-interface/lib/native-loop-providers.js +565 -50
- package/neural-interface/lib/native-loop-runtime.js +287 -41
- package/neural-interface/lib/opencode-config.js +557 -0
- package/neural-interface/lib/opencode-db-schema.js +58 -0
- package/neural-interface/lib/opencode-history.js +49 -204
- package/neural-interface/lib/opencode-mcp-ready.js +108 -0
- package/neural-interface/lib/opencode-native-boundary.js +44 -0
- package/neural-interface/lib/opencode-protocol.js +310 -0
- package/neural-interface/lib/opencode-provider-view.js +81 -0
- package/neural-interface/lib/opencode-runtime-config.js +32 -15
- package/neural-interface/lib/opencode-serve-records.js +624 -0
- package/neural-interface/lib/opencode-v2-client.js +53 -131
- package/neural-interface/lib/opencode-v2-ws-requests.js +35 -195
- package/neural-interface/lib/opencode-worker-activity.js +229 -0
- package/neural-interface/lib/opencode-worker-data.js +27 -0
- package/neural-interface/lib/opencode2-client.js +796 -0
- package/neural-interface/lib/opencode2-proxy.js +76 -0
- package/neural-interface/lib/opencode2-translate.js +1057 -0
- package/neural-interface/lib/owner-authority.js +249 -0
- package/neural-interface/lib/page-session.js +275 -0
- package/neural-interface/lib/peer-identity.js +763 -0
- package/neural-interface/lib/process-identity.js +361 -0
- package/neural-interface/lib/request-gate.js +17 -2
- package/neural-interface/lib/rulesets/api.js +1 -1
- package/neural-interface/lib/rulesets/fs-safe.js +1 -1
- package/neural-interface/lib/rulesets/installer.js +92 -27
- package/neural-interface/lib/rulesets/json-edit.js +1 -1
- package/neural-interface/lib/session-cache-builder.js +18 -10
- package/neural-interface/lib/session-title-generator.js +58 -18
- package/neural-interface/lib/skills/api-v2.js +495 -0
- package/neural-interface/lib/skills/bundle.js +418 -0
- package/neural-interface/lib/skills/catalog.js +294 -0
- package/neural-interface/lib/skills/creation-api.js +191 -0
- package/neural-interface/lib/skills/creation-brief.js +247 -0
- package/neural-interface/lib/skills/creation-sources.js +267 -0
- package/neural-interface/lib/skills/creation.js +843 -0
- package/neural-interface/lib/skills/deploy.js +564 -0
- package/neural-interface/lib/skills/digest.js +119 -0
- package/neural-interface/lib/skills/discover.js +111 -0
- package/neural-interface/lib/skills/draft-confinement.js +214 -0
- package/neural-interface/lib/skills/eval-confinement.js +397 -0
- package/neural-interface/lib/skills/eval-sandbox.js +280 -0
- package/neural-interface/lib/skills/eval-trace.js +119 -0
- package/neural-interface/lib/skills/evals-api.js +212 -0
- package/neural-interface/lib/skills/evals.js +1573 -0
- package/neural-interface/lib/skills/export.js +200 -0
- package/neural-interface/lib/skills/frontmatter.js +64 -0
- package/neural-interface/lib/skills/health.js +75 -0
- package/neural-interface/lib/skills/json-edit.js +165 -0
- package/neural-interface/lib/skills/known-bridge-digests.json +387 -0
- package/neural-interface/lib/skills/known-bridges.js +96 -0
- package/neural-interface/lib/skills/library.js +823 -0
- package/neural-interface/lib/skills/local-store.js +21 -0
- package/neural-interface/lib/skills/migration.js +433 -0
- package/neural-interface/lib/skills/operations.js +45 -0
- package/neural-interface/lib/skills/ownership.js +427 -0
- package/neural-interface/lib/skills/packages.js +88 -0
- package/neural-interface/lib/skills/reviews.js +212 -0
- package/neural-interface/lib/skills/revision.js +80 -0
- package/neural-interface/lib/skills/roots.js +262 -0
- package/neural-interface/lib/skills/runtime-checks.js +355 -0
- package/neural-interface/lib/skills/scan-assets.js +252 -0
- package/neural-interface/lib/skills/scan-context.js +26 -0
- package/neural-interface/lib/skills/scan-shell.js +324 -0
- package/neural-interface/lib/skills/scan.js +364 -0
- package/neural-interface/lib/skills/scanners.js +54 -0
- package/neural-interface/lib/skills/service.js +522 -0
- package/neural-interface/lib/skills/telemetry.js +113 -0
- package/neural-interface/lib/sqlite-integrity-worker.js +22 -0
- package/neural-interface/lib/style-guide/api.js +4 -3
- package/neural-interface/lib/tool-lists.js +124 -0
- package/neural-interface/lib/untrusted-file-headers.js +27 -0
- package/neural-interface/lib/whatsapp/bridge.js +6 -3
- package/neural-interface/lib/worker-confinement.js +1192 -0
- package/neural-interface/lib/worker-guard-setting.js +56 -0
- package/neural-interface/lib/worker-mcp-channel.js +175 -0
- package/neural-interface/lib/worker-relay-ports.js +227 -0
- package/neural-interface/lib/worker-resume.js +229 -0
- package/neural-interface/lib/worker-sandbox.js +299 -0
- package/neural-interface/package-lock.json +1354 -50
- package/neural-interface/package.json +6 -2
- package/neural-interface/public/index.html +5 -3
- package/neural-interface/public/index2d.html +19 -11
- package/neural-interface/public/onboarding.html +2 -2
- package/neural-interface/public/shared/account-menu.js +8 -5
- package/neural-interface/public/shared/agent-runtime-options.js +76 -16
- package/neural-interface/public/shared/api.js +1527 -1336
- package/neural-interface/public/shared/app-frame.js +192 -0
- package/neural-interface/public/shared/assistant/asst-agents-dock.js +205 -19
- package/neural-interface/public/shared/assistant/asst-api.js +11 -3
- package/neural-interface/public/shared/assistant/asst-ask-styles.js +270 -0
- package/neural-interface/public/shared/assistant/asst-ask-tail.js +118 -0
- package/neural-interface/public/shared/assistant/asst-ask.js +397 -0
- package/neural-interface/public/shared/assistant/asst-brain-picker.js +241 -112
- package/neural-interface/public/shared/assistant/asst-composer.js +1 -1
- package/neural-interface/public/shared/assistant/asst-control.js +157 -26
- package/neural-interface/public/shared/assistant/asst-followups-card.js +383 -0
- package/neural-interface/public/shared/assistant/asst-followups.js +417 -0
- package/neural-interface/public/shared/assistant/asst-hosts.js +49 -2
- package/neural-interface/public/shared/assistant/asst-limit-dock.js +40 -0
- package/neural-interface/public/shared/assistant/asst-limit-wait.js +294 -0
- package/neural-interface/public/shared/assistant/asst-limit.js +168 -0
- package/neural-interface/public/shared/assistant/asst-mascot.js +49 -12
- package/neural-interface/public/shared/assistant/asst-menu.js +84 -12
- package/neural-interface/public/shared/assistant/asst-panel.js +303 -44
- package/neural-interface/public/shared/assistant/asst-rack-styles.js +93 -58
- package/neural-interface/public/shared/assistant/asst-redact.js +186 -0
- package/neural-interface/public/shared/assistant/asst-render.js +770 -100
- package/neural-interface/public/shared/assistant/asst-route.js +83 -12
- package/neural-interface/public/shared/assistant/asst-run-stage.js +231 -0
- package/neural-interface/public/shared/assistant/asst-sanitize.js +193 -3
- package/neural-interface/public/shared/assistant/asst-scene-styles.js +273 -0
- package/neural-interface/public/shared/assistant/asst-scenes.js +530 -0
- package/neural-interface/public/shared/assistant/asst-sidepanel-styles.js +3 -15
- package/neural-interface/public/shared/assistant/asst-sidepanel.js +67 -4
- package/neural-interface/public/shared/assistant/asst-slash.js +9 -7
- package/neural-interface/public/shared/assistant/asst-state.js +25 -15
- package/neural-interface/public/shared/assistant/asst-stop.js +127 -0
- package/neural-interface/public/shared/assistant/asst-styles.js +102 -21
- package/neural-interface/public/shared/assistant/asst-tool-kinds.js +165 -13
- package/neural-interface/public/shared/automation-context.js +5 -2
- package/neural-interface/public/shared/cc-dropdown.js +550 -0
- package/neural-interface/public/shared/cdx/cdx-context-menu.js +10 -9
- package/neural-interface/public/shared/cdx/cdx-copy.js +16 -0
- package/neural-interface/public/shared/cdx/cdx-output-model.js +22 -1
- package/neural-interface/public/shared/cdx/cdx-output.js +8 -7
- package/neural-interface/public/shared/cdx/cdx-panel.js +58 -150
- package/neural-interface/public/shared/cdx/cdx-protocol.js +28 -1
- package/neural-interface/public/shared/cdx/cdx-render.js +62 -32
- package/neural-interface/public/shared/cdx/cdx-requests.js +3 -3
- package/neural-interface/public/shared/cdx/cdx-skill-hints.js +54 -0
- package/neural-interface/public/shared/cdx/cdx-styles.js +15 -3
- package/neural-interface/public/shared/cdx/cdx-tabs.js +201 -74
- package/neural-interface/public/shared/cdx/cdx-ws.js +0 -1
- package/neural-interface/public/shared/cli-install-view.js +4 -8
- package/neural-interface/public/shared/cli-status.js +2 -2
- package/neural-interface/public/shared/constants.js +2 -2
- package/neural-interface/public/shared/context-menu-areas.js +34 -0
- package/neural-interface/public/shared/context-menu-logic.js +243 -0
- package/neural-interface/public/shared/context-menu-model.js +366 -0
- package/neural-interface/public/shared/context-menu.js +372 -0
- package/neural-interface/public/shared/cp/cp-context-menu.js +10 -9
- package/neural-interface/public/shared/cp/cp-markdown.js +4 -57
- package/neural-interface/public/shared/crash-notice-view.js +168 -0
- package/neural-interface/public/shared/data-cache.js +223 -0
- package/neural-interface/public/shared/desktop-bridge.js +11 -0
- package/neural-interface/public/shared/desktop-titlebar-view.js +78 -1
- package/neural-interface/public/shared/desktop-titlebar.js +214 -28
- package/neural-interface/public/shared/desktop-update-view.js +35 -5
- package/neural-interface/public/shared/editor/editor-panel-logic.js +2 -2
- package/neural-interface/public/shared/file-links.js +73 -8
- package/neural-interface/public/shared/html-shell.js +78 -86
- package/neural-interface/public/shared/i18n.js +2 -0
- package/neural-interface/public/shared/launch-prefetch.js +59 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-approvals.js +7 -7
- package/neural-interface/public/shared/ocp-v2/ocp-v2-binding.js +4 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-caps.js +3 -2
- package/neural-interface/public/shared/ocp-v2/ocp-v2-changes-logic.js +3 -101
- package/neural-interface/public/shared/ocp-v2/ocp-v2-childpanel.js +9 -2
- package/neural-interface/public/shared/ocp-v2/ocp-v2-compact-button.js +1 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-composer-logic.js +2 -6
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-menu.js +11 -11
- package/neural-interface/public/shared/ocp-v2/ocp-v2-context-model.js +0 -3
- package/neural-interface/public/shared/ocp-v2/ocp-v2-events.js +8 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-manager.js +7 -7
- package/neural-interface/public/shared/ocp-v2/ocp-v2-modelpicker.js +54 -17
- package/neural-interface/public/shared/ocp-v2/ocp-v2-outcome-notifications.js +16 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-panel.js +140 -254
- package/neural-interface/public/shared/ocp-v2/ocp-v2-plan.js +1 -2
- package/neural-interface/public/shared/ocp-v2/ocp-v2-projectbar.js +97 -203
- package/neural-interface/public/shared/ocp-v2/ocp-v2-providers.js +11 -9
- package/neural-interface/public/shared/ocp-v2/ocp-v2-rehydrate.js +15 -4
- package/neural-interface/public/shared/ocp-v2/ocp-v2-render.js +7 -22
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send-logic.js +401 -0
- package/neural-interface/public/shared/ocp-v2/ocp-v2-send.js +20 -13
- package/neural-interface/public/shared/ocp-v2/ocp-v2-session-actions.js +8 -61
- package/neural-interface/public/shared/ocp-v2/ocp-v2-sessions-logic.js +53 -82
- package/neural-interface/public/shared/ocp-v2/ocp-v2-slash-hints.js +16 -15
- package/neural-interface/public/shared/ocp-v2/ocp-v2-state.js +8 -21
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status-logic.js +1 -99
- package/neural-interface/public/shared/ocp-v2/ocp-v2-status.js +5 -35
- package/neural-interface/public/shared/ocp-v2/ocp-v2-styles.js +48 -40
- package/neural-interface/public/shared/ocp-v2/{ocp-v2-profile-inheritance.js → ocp-v2-tools-inheritance.js} +16 -16
- package/neural-interface/public/shared/ocp-v2/ocp-v2-ws.js +205 -62
- package/neural-interface/public/shared/opencode-providers.js +39 -0
- package/neural-interface/public/shared/page-session.js +96 -0
- package/neural-interface/public/shared/registry.js +5 -3
- package/neural-interface/public/shared/retired-2d.js +3 -0
- package/neural-interface/public/shared/schedules-view.js +452 -0
- package/neural-interface/public/shared/settings/settings-app-pane.js +335 -0
- package/neural-interface/public/shared/settings/settings-app.js +243 -0
- package/neural-interface/public/shared/settings/settings-claude-hooks.js +135 -0
- package/neural-interface/public/shared/settings/settings-data.js +90 -0
- package/neural-interface/public/shared/settings/settings-ia.js +23 -6
- package/neural-interface/public/shared/settings/settings-opencode.js +89 -0
- package/neural-interface/public/shared/settings/settings-skill-folders-pane.js +265 -0
- package/neural-interface/public/shared/settings/settings-skill-folders.js +130 -0
- package/neural-interface/public/shared/settings/settings-worker-guard.js +72 -0
- package/neural-interface/public/shared/sidepanel-session-status.js +49 -0
- package/neural-interface/public/shared/skills/ss-args.js +96 -0
- package/neural-interface/public/shared/skills/ss-creation.js +219 -0
- package/neural-interface/public/shared/skills/ss-dialog.js +130 -0
- package/neural-interface/public/shared/skills/ss-doc.js +173 -0
- package/neural-interface/public/shared/skills/ss-eval-adapters.js +269 -0
- package/neural-interface/public/shared/skills/ss-eval-grade.js +359 -0
- package/neural-interface/public/shared/skills/ss-eval-optimise.js +153 -0
- package/neural-interface/public/shared/skills/ss-eval-plan.js +315 -0
- package/neural-interface/public/shared/skills/ss-evals.js +417 -0
- package/neural-interface/public/shared/skills/ss-form.js +159 -0
- package/neural-interface/public/shared/skills/ss-frontmatter.js +376 -0
- package/neural-interface/public/shared/skills/ss-ids.js +32 -0
- package/neural-interface/public/shared/skills/ss-lint.js +141 -0
- package/neural-interface/public/shared/skills/ss-presets.js +117 -0
- package/neural-interface/public/shared/skills/ss-profiles.js +475 -0
- package/neural-interface/public/shared/skills/ss-resources.js +165 -0
- package/neural-interface/public/shared/skills/ss-review-view.js +190 -0
- package/neural-interface/public/shared/skills/ss-tabs.js +79 -0
- package/neural-interface/public/shared/skills/ss-unicode.js +135 -0
- package/neural-interface/public/shared/skills/studio/sx-actions.js +222 -0
- package/neural-interface/public/shared/skills/studio/sx-cm.js +101 -0
- package/neural-interface/public/shared/skills/studio/sx-create-ai-view.js +749 -0
- package/neural-interface/public/shared/skills/studio/sx-create-ai.js +236 -0
- package/neural-interface/public/shared/skills/studio/sx-create-view.js +254 -0
- package/neural-interface/public/shared/skills/studio/sx-create.js +126 -0
- package/neural-interface/public/shared/skills/studio/sx-diff-view.js +43 -0
- package/neural-interface/public/shared/skills/studio/sx-diff.js +133 -0
- package/neural-interface/public/shared/skills/studio/sx-docs.js +480 -0
- package/neural-interface/public/shared/skills/studio/sx-dom.js +229 -0
- package/neural-interface/public/shared/skills/studio/sx-edit-view.js +848 -0
- package/neural-interface/public/shared/skills/studio/sx-editor-model.js +193 -0
- package/neural-interface/public/shared/skills/studio/sx-errors.js +22 -0
- package/neural-interface/public/shared/skills/studio/sx-geometry.js +82 -0
- package/neural-interface/public/shared/skills/studio/sx-import.js +262 -0
- package/neural-interface/public/shared/skills/studio/sx-inspector.js +308 -0
- package/neural-interface/public/shared/skills/studio/sx-install-flow.js +279 -0
- package/neural-interface/public/shared/skills/studio/sx-install.js +296 -0
- package/neural-interface/public/shared/skills/studio/sx-library-view.js +639 -0
- package/neural-interface/public/shared/skills/studio/sx-library.js +475 -0
- package/neural-interface/public/shared/skills/studio/sx-main.js +681 -0
- package/neural-interface/public/shared/skills/studio/sx-operations-view.js +98 -0
- package/neural-interface/public/shared/skills/studio/sx-operations.js +11 -0
- package/neural-interface/public/shared/skills/studio/sx-plan.js +158 -0
- package/neural-interface/public/shared/skills/studio/sx-publish-view.js +621 -0
- package/neural-interface/public/shared/skills/studio/sx-review-view.js +369 -0
- package/neural-interface/public/shared/skills/studio/sx-review.js +148 -0
- package/neural-interface/public/shared/skills/studio/sx-scan.js +35 -0
- package/neural-interface/public/shared/skills/studio/sx-snippets.js +96 -0
- package/neural-interface/public/shared/skills/studio/sx-subject.js +248 -0
- package/neural-interface/public/shared/skills/studio/sx-test-view.js +994 -0
- package/neural-interface/public/shared/skills/studio/sx-test.js +328 -0
- package/neural-interface/public/shared/skills/studio/sx-versions-view.js +241 -0
- package/neural-interface/public/shared/skills/studio/sx-workspace-view.js +425 -0
- package/neural-interface/public/shared/styleguide/sg-panel.js +4 -2
- package/neural-interface/public/shared/styles.css +2065 -2150
- package/neural-interface/public/shared/synabun-mascot.js +1115 -9
- package/neural-interface/public/shared/tool-list-picker.js +55 -0
- package/neural-interface/public/shared/tool-list-storage.js +24 -0
- package/neural-interface/public/shared/tool-list-view.js +112 -0
- package/neural-interface/public/shared/tour/tour-actor.js +268 -0
- package/neural-interface/public/shared/tour/tour-beats.js +336 -0
- package/neural-interface/public/shared/tour/tour-engine.js +884 -0
- package/neural-interface/public/shared/tour/tour-ink.js +390 -0
- package/neural-interface/public/shared/tour/tour-stage.js +440 -0
- package/neural-interface/public/shared/tour/tour-state.js +40 -0
- package/neural-interface/public/shared/tour/tour-tips.js +99 -0
- package/neural-interface/public/shared/tour/tour.css +144 -0
- package/neural-interface/public/shared/ui-assistant.js +27 -5
- package/neural-interface/public/shared/ui-automation-studio.js +155 -152
- package/neural-interface/public/shared/ui-bookmarks.js +2 -1
- package/neural-interface/public/shared/ui-claude-panel.js +153 -13
- package/neural-interface/public/shared/ui-codex-panel.js +1 -0
- package/neural-interface/public/shared/ui-command-runner.js +6 -3
- package/neural-interface/public/shared/ui-context-menu.js +295 -0
- package/neural-interface/public/shared/ui-cost-widget.js +57 -59
- package/neural-interface/public/shared/ui-crash-notice.js +187 -0
- package/neural-interface/public/shared/ui-detail.js +21 -9
- package/neural-interface/public/shared/ui-file-links.js +1 -0
- package/neural-interface/public/shared/ui-image-gallery.js +56 -52
- package/neural-interface/public/shared/ui-invite.js +18 -2
- package/neural-interface/public/shared/ui-keybinds.js +26 -1
- package/neural-interface/public/shared/ui-link.js +9 -9
- package/neural-interface/public/shared/ui-menubar.js +229 -40
- package/neural-interface/public/shared/ui-native-loop-router-state.js +5 -0
- package/neural-interface/public/shared/ui-native-loop-router.js +9 -1
- package/neural-interface/public/shared/ui-navbar.js +4 -24
- package/neural-interface/public/shared/ui-opencode-panel-v2.js +1 -0
- package/neural-interface/public/shared/ui-panels.js +96 -65
- package/neural-interface/public/shared/ui-schedules-studio.js +2267 -953
- package/neural-interface/public/shared/ui-sessions.js +20 -7
- package/neural-interface/public/shared/ui-settings.js +679 -496
- package/neural-interface/public/shared/ui-sidebar.js +4 -4
- package/neural-interface/public/shared/ui-sidepanel-session-entry.js +13 -0
- package/neural-interface/public/shared/ui-sidepanel-sessions.js +56 -5
- package/neural-interface/public/shared/ui-sidepanel-state.js +23 -12
- package/neural-interface/public/shared/ui-sidepanel-tray.js +84 -8
- package/neural-interface/public/shared/ui-sidepanel-windows.js +16 -11
- package/neural-interface/public/shared/ui-skills.js +42 -2781
- package/neural-interface/public/shared/ui-styleguide.js +5 -2
- package/neural-interface/public/shared/ui-sync.js +22 -5
- package/neural-interface/public/shared/ui-terminal.js +159 -199
- package/neural-interface/public/shared/ui-tool-updates.js +3 -1
- package/neural-interface/public/shared/ui-tooltip.js +10 -5
- package/neural-interface/public/shared/ui-trash.js +14 -5
- package/neural-interface/public/shared/ui-tutorial-layout.js +3 -117
- package/neural-interface/public/shared/ui-tutorial-preview.js +103 -0
- package/neural-interface/public/shared/ui-tutorial-steps.js +3 -61
- package/neural-interface/public/shared/ui-tutorial.css +47 -100
- package/neural-interface/public/shared/ui-tutorial.js +285 -499
- package/neural-interface/public/shared/ui-update.js +121 -16
- package/neural-interface/public/shared/ui-whiteboard.js +313 -59
- package/neural-interface/public/shared/ui-worker-end.js +4 -0
- package/neural-interface/public/shared/ui-workspaces.js +3 -2
- package/neural-interface/public/shared/view-variant.js +66 -0
- package/neural-interface/public/shared/whatsapp/wa-view.js +1 -1
- package/neural-interface/public/shared/whiteboard-list.js +172 -0
- package/neural-interface/public/shared/worker-end.js +10 -3
- package/neural-interface/public/shared/worker-restart.js +12 -0
- package/neural-interface/public/sidepanel-session.html +1 -1
- package/neural-interface/public/variant/2d/background.js +2 -1
- package/neural-interface/public/variant/2d/context-menu.js +8 -2
- package/neural-interface/public/variant/2d/graph.js +42 -20
- package/neural-interface/public/variant/2d/hulls.js +14 -9
- package/neural-interface/public/variant/2d/lasso.js +11 -7
- package/neural-interface/public/variant/2d/main.js +36 -2
- package/neural-interface/public/variant/2d/minimap.js +11 -13
- package/neural-interface/public/variant/3d/main.js +72 -6
- package/neural-interface/public/variant/3d/map-controls.js +24 -9
- package/neural-interface/public/vendor/caveat/OFL.txt +93 -0
- package/neural-interface/public/vendor/caveat/caveat-latin-400-normal.woff2 +0 -0
- package/neural-interface/public/vendor/caveat/caveat-latin-700-normal.woff2 +0 -0
- package/neural-interface/public/vendor/caveat/caveat.css +17 -0
- package/neural-interface/public/vendor/caveat/manifest.json +12 -0
- package/neural-interface/public/vendor/highlight/LICENSE +29 -0
- package/neural-interface/public/vendor/highlight/github-dark-dimmed-11.12.0.min.css +9 -0
- package/neural-interface/public/vendor/highlight/highlight-11.12.0.min.js +1262 -0
- package/neural-interface/public/vendor/highlight/manifest.json +5 -0
- package/neural-interface/public/vendor/html2canvas/LICENSE +22 -0
- package/neural-interface/public/vendor/html2canvas/html2canvas-1.4.1.min.js +20 -0
- package/neural-interface/public/vendor/html2canvas/manifest.json +4 -0
- package/neural-interface/public/vendor/marked/LICENSE.md +44 -0
- package/neural-interface/public/vendor/marked/manifest.json +4 -0
- package/neural-interface/public/vendor/marked/marked-14.1.4.esm.js +2502 -0
- package/neural-interface/public/vendor/mermaid/LICENSE +21 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/abnfDiagram-PAR5IXJI.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/architecture-7GRP2DOG-M7G3SWCO.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/architectureDiagram-2PNWDENW.mjs +36 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/blockDiagram-PUWGUBOA.mjs +129 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/c4Diagram-3NLNHZP5.mjs +38 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-2NMSUPJH.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-32MCUW2P.mjs +206 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-3NPNU5GP.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-3SMGFRGC.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-4CAJECRU.mjs +14 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-4OADUZ5Q.mjs +10 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5IMINLNL.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5IQCK5RY.mjs +3 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-5MVFYWFU.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-AQ6EADP3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-AZZRMDJM.mjs +15 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-CLS4B6BI.mjs +168 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-DZP67EKU.mjs +70 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-EICP7K5X.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-GDY2UAB4.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-H7VHZCWX.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-IJBDOHL6.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JFFVMJIA.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JQRUD6KW.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-JZGDI5JK.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-KD6SPIPN.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-NF366YI6.mjs +231 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-NUDPKBEF.mjs +32 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-OJINMHTS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-Q6NGPIAH.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-QJSWEUOL.mjs +132 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-R7JDMUKV.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-RCXAM2GK.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-RT4MAWR3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-SFMINX4W.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-SLDQ463B.mjs +88 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-STOV2HOB.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-T5OCTHI4.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-TCEHX7R3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VQC2EELJ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VRZKL3EH.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VTHDQ7BV.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-VY2OSTJR.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-WUBWJARI.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-YBMQ5JGJ.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-YDMLL4PJ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-Z6V44ARX.mjs +62 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZJJ7VQJP.mjs +339 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZNLK7HRR.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZQN7UHIL.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZS6VBONO.mjs +174 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/chunk-ZUNWM646.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-FGAMPOII.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/classDiagram-v2-AI5RJEK4.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cose-bilkent-Q72C2OJ3.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cynefin-OW5HDTMX-6OCTWOGG.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/cynefinDiagram-2OOWUY4M.mjs +62 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/dagre-MPVFI544.mjs +4 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-AE4NWXFW.mjs +24 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-BUJID5UG.mjs +41 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-C44CZ5NI.mjs +24 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-EYOLEXXS.mjs +30 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/diagram-P7B6PWOJ.mjs +3 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ebnfDiagram-FTPZ3PV6.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/erDiagram-H3ERR26V.mjs +99 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/eventmodeling-NTZA5JFV-WKSWQHFS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/flowDiagram-YHGXBVSY.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ganttDiagram-RWFTB7ED.mjs +292 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/gitGraph-4MIJSDKK-JH2HKYUO.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/gitGraphDiagram-MAR6GKOP.mjs +106 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/info-A6RAGUB7-3TX3OFWW.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/infoDiagram-LV547AFH.mjs +2 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/ishikawaDiagram-PUJQGNDS.mjs +70 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/journeyDiagram-EW5QJT4W.mjs +139 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/kanban-definition-JSQERAZB.mjs +89 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/katex-CZ4GXH2S.mjs +257 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/mindmap-definition-VBJCLQLM.mjs +96 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/packet-AYTQ26CC-MKII6P3Y.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pegDiagram-7WILOQTJ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pie-WAS4IAKB-6B4OPMJ5.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/pieDiagram-EFA7CBSB.mjs +39 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/quadrantDiagram-WARVYA7P.mjs +7 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/radar-RG4KPBEZ-UPTR3XUL.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-74A4TZTK-MEFUPFMS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-abnf-HS5TGJTU-R5YG2S5D.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-ebnf-LZEXJU2U-G5QEX2L6.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroad-peg-WCYAUIDC-H5I2ZRY2.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/railroadDiagram-5NIQVNLQ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/requirementDiagram-SXREGOKZ.mjs +84 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sankeyDiagram-VV74M2VP.mjs +40 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sequenceDiagram-52ZFIFDL.mjs +162 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/sizeCapture-FGA5AGYP.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-3QAKPIVI.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/stateDiagram-v2-HN2P4RDZ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/swimlanes-QLVP42QD.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/swimlanesDiagram-JKPDBFCN.mjs +8 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/timeline-definition-GS45XAXW.mjs +120 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/treeView-Q6P3EWNA-ZRJGANNQ.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/treemap-WGGIJYW6-K64VN5AS.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/vennDiagram-QIQU2ZRJ.mjs +34 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/wardley-WFR3VGLG-D67OWCCH.mjs +1 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/wardleyDiagram-U6YNM66N.mjs +78 -0
- package/neural-interface/public/vendor/mermaid/chunks/mermaid.esm.min/xychartDiagram-XJAZEDNM.mjs +7 -0
- package/neural-interface/public/vendor/mermaid/manifest.json +4 -0
- package/neural-interface/public/vendor/mermaid/mermaid-11.17.2.esm.min.mjs +14 -0
- package/neural-interface/public/vendor/yaml/LICENSE +13 -0
- package/neural-interface/public/vendor/yaml/manifest.json +4 -0
- package/neural-interface/public/vendor/yaml/yaml-2.9.1.min.js +137 -0
- package/neural-interface/scripts/build-vendor.mjs +116 -3
- package/neural-interface/server.js +4834 -2541
- package/neural-interface/templates/rulesets/core.md +1 -1
- package/neural-interface/templates/rulesets/legacy-hashes.json +18 -0
- package/neural-interface/templates/rulesets/manifest.json +8 -8
- package/npm-shrinkwrap.json +18 -12
- package/package.json +16 -3
- package/postinstall.js +9 -4
- package/preuninstall.js +1 -1
- package/setup.js +97 -322
- package/skills/skill-forge/SKILL.md +177 -0
- package/skills/skill-forge/evals/evals.json +54 -0
- package/skills/skill-forge/references/package.md +105 -0
- package/skills/skill-forge/references/review-and-recovery.md +63 -0
- package/skills/skill-forge/references/runtime-profiles.md +20 -0
- package/skills/skill-forge/references/sources-and-capabilities.md +51 -0
- package/skills/synabun/SKILL.md +10 -7
- package/skills/synabun/modules/audit.md +1 -5
- package/skills/synabun/modules/changelog.md +1 -5
- package/skills/synabun/modules/idea.md +1 -1
- package/skills/synabun/modules/memorize.md +6 -9
- package/skills/synabun/modules/schedule.md +5 -5
- package/mcp-server/dist/services/profiles.d.ts +0 -120
- package/mcp-server/dist/services/profiles.d.ts.map +0 -1
- package/mcp-server/dist/services/profiles.js +0 -387
- package/mcp-server/dist/services/profiles.js.map +0 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts +0 -97
- package/mcp-server/dist/tools/leonardo-browser-tools.d.ts.map +0 -1
- package/mcp-server/dist/tools/leonardo-browser-tools.js +0 -228
- package/mcp-server/dist/tools/leonardo-browser-tools.js.map +0 -1
- package/mcp-server/dist/tools/leonardo.d.ts +0 -13
- package/mcp-server/dist/tools/leonardo.d.ts.map +0 -1
- package/mcp-server/dist/tools/leonardo.js +0 -21
- package/mcp-server/dist/tools/leonardo.js.map +0 -1
- package/mcp-server/dist/tools/profile.d.ts +0 -17
- package/mcp-server/dist/tools/profile.d.ts.map +0 -1
- package/mcp-server/dist/tools/profile.js +0 -114
- package/mcp-server/dist/tools/profile.js.map +0 -1
- package/mcp-server/src/services/profiles.ts +0 -428
- package/mcp-server/src/tools/leonardo-browser-tools.ts +0 -291
- package/mcp-server/src/tools/leonardo.ts +0 -30
- package/mcp-server/src/tools/profile.ts +0 -122
- package/neural-interface/lib/assistant-brains/opencode-browser-policy.js +0 -47
- package/neural-interface/lib/assistant-brains/opencode-route-gate.js +0 -62
- package/neural-interface/lib/mcp-profile-servers.js +0 -120
- package/neural-interface/public/shared/ui-tutorial-draw.js +0 -311
- package/skills/leonardo/SKILL.md +0 -168
- package/skills/leonardo/icon.svg +0 -1
- package/skills/leonardo/modules/browser-guide.md +0 -378
- package/skills/leonardo/modules/image-prompter.md +0 -283
- package/skills/leonardo/modules/model-advisor.md +0 -100
- package/skills/leonardo/modules/prompt-library.md +0 -110
- package/skills/leonardo/modules/style-guide.md +0 -186
- package/skills/leonardo/modules/video-prompter.md +0 -317
|
@@ -19,15 +19,11 @@
|
|
|
19
19
|
// checked against the SHA-256 GitHub publishes for it, or, when
|
|
20
20
|
// GitHub's API does not answer, from https://chatgpt.com/codex/
|
|
21
21
|
// (the same file). The installer checks the package it fetches.
|
|
22
|
-
// OpenCode
|
|
23
|
-
// macOS and Linux
|
|
24
|
-
//
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
// GitHub releases, checked against its published SHA-256, its
|
|
28
|
-
// opencode.exe read out without an unzip program (the backups'
|
|
29
|
-
// streaming reader) and put in %USERPROFILE%\.opencode\bin, the
|
|
30
|
-
// folder the official installer uses (and the resolver looks in).
|
|
22
|
+
// OpenCode OpenCode 2's install script https://opencode.ai/v2/install
|
|
23
|
+
// (bash) on macOS and Linux, the one `opencode upgrade` itself
|
|
24
|
+
// runs (it puts opencode in ~/.opencode/bin). Windows has no
|
|
25
|
+
// one-click install: OpenCode 2 comes from WinGet there
|
|
26
|
+
// (Anomaly.OpenCode), and the banner shows that command.
|
|
31
27
|
//
|
|
32
28
|
// Every download is HTTPS, every redirect too, and only to the vendor's own
|
|
33
29
|
// hosts. Nothing runs as administrator; everything lands in the user's own
|
|
@@ -41,12 +37,11 @@
|
|
|
41
37
|
// `code` the page has words for. Nothing here throws to a caller of start().
|
|
42
38
|
|
|
43
39
|
import { spawn } from 'node:child_process';
|
|
44
|
-
import { createHash
|
|
45
|
-
import {
|
|
40
|
+
import { createHash } from 'node:crypto';
|
|
41
|
+
import { existsSync, rmSync } from 'node:fs';
|
|
46
42
|
import { mkdtemp, open } from 'node:fs/promises';
|
|
47
43
|
import os from 'node:os';
|
|
48
44
|
import path from 'node:path';
|
|
49
|
-
import { openZipArchive } from './backup-zip-reader.js';
|
|
50
45
|
import { buildInstallCommand } from './cli-update-planner.js';
|
|
51
46
|
import { packagedPathLast, rememberedPackagedPath, withPathEnv } from './augmented-path.js';
|
|
52
47
|
|
|
@@ -60,7 +55,6 @@ export const CLI_INSTALL_ERROR_CODES = Object.freeze([
|
|
|
60
55
|
'timeout', // nothing arrived for too long, or the installer ran too long
|
|
61
56
|
'installer-failed', // the vendor's installer exited with an error
|
|
62
57
|
'not-found-after-install', // it finished, but no working CLI is found
|
|
63
|
-
'unpack', // the archive did not hold the program
|
|
64
58
|
'disk', // a file could not be written
|
|
65
59
|
'cancelled', // stopped (SynaBun shutting down)
|
|
66
60
|
'internal', // anything else
|
|
@@ -79,13 +73,12 @@ export class CliInstallError extends Error {
|
|
|
79
73
|
export const CLI_INSTALL_GUIDES = Object.freeze({
|
|
80
74
|
'claude-code': 'https://code.claude.com/docs/en/setup',
|
|
81
75
|
codex: 'https://learn.chatgpt.com/docs/codex/cli',
|
|
82
|
-
opencode: 'https://opencode.ai/docs
|
|
76
|
+
opencode: 'https://opencode.ai/v2/docs',
|
|
83
77
|
gemini: 'https://github.com/google-gemini/gemini-cli',
|
|
84
78
|
});
|
|
85
79
|
|
|
86
80
|
const GITHUB_DOWNLOAD_HOSTS = ['github.com', 'objects.githubusercontent.com', 'release-assets.githubusercontent.com', 'github-releases.githubusercontent.com'];
|
|
87
81
|
const MAX_SCRIPT_BYTES = 2 * 1024 * 1024;
|
|
88
|
-
const MAX_ARCHIVE_BYTES = 600 * 1024 * 1024;
|
|
89
82
|
const MAX_JSON_BYTES = 8 * 1024 * 1024;
|
|
90
83
|
const MAX_REDIRECTS = 6;
|
|
91
84
|
const LOG_KEEP = 200;
|
|
@@ -95,12 +88,12 @@ const hostIs = (...hosts) => (url) => hosts.includes(url.hostname);
|
|
|
95
88
|
|
|
96
89
|
/**
|
|
97
90
|
* The one-click method for a tool on this system, or null when there is none
|
|
98
|
-
* (Gemini CLI, a 32-bit or other system). Pure: tests ask
|
|
91
|
+
* (Gemini CLI, OpenCode on Windows, a 32-bit or other system). Pure: tests ask
|
|
92
|
+
* it for every OS.
|
|
99
93
|
*/
|
|
100
94
|
export function installPlanFor(toolKey, { platform = process.platform, arch = process.arch, env = process.env, home } = {}) {
|
|
101
95
|
if (!(SUPPORTED[platform] || []).includes(arch)) return null;
|
|
102
96
|
const windows = platform === 'win32';
|
|
103
|
-
const homeDir = home || (windows ? env.USERPROFILE : env.HOME) || os.homedir();
|
|
104
97
|
switch (toolKey) {
|
|
105
98
|
case 'claude-code':
|
|
106
99
|
return {
|
|
@@ -126,30 +119,16 @@ export function installPlanFor(toolKey, { platform = process.platform, arch = pr
|
|
|
126
119
|
env: { CODEX_NON_INTERACTIVE: '1' },
|
|
127
120
|
};
|
|
128
121
|
case 'opencode':
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
tool: toolKey,
|
|
132
|
-
kind: 'archive',
|
|
133
|
-
interpreter: null,
|
|
134
|
-
repo: 'anomalyco/opencode',
|
|
135
|
-
tag: /^v1\.\d+\.\d+$/,
|
|
136
|
-
assets: arch === 'arm64' ? ['opencode-windows-arm64.zip'] : ['opencode-windows-x64-baseline.zip', 'opencode-windows-x64.zip'],
|
|
137
|
-
member: 'opencode.exe',
|
|
138
|
-
// The official installer's folder; $OPENCODE_INSTALL_DIR, which older installers honoured, when set.
|
|
139
|
-
dir: env.OPENCODE_INSTALL_DIR || path.win32.join(homeDir, '.opencode', 'bin'),
|
|
140
|
-
source: 'https://github.com/anomalyco/opencode/releases',
|
|
141
|
-
label: 'OpenCode release archive',
|
|
142
|
-
env: {},
|
|
143
|
-
};
|
|
144
|
-
}
|
|
122
|
+
// OpenCode 2's own installer is a bash script; on Windows it comes from WinGet (no one-click install).
|
|
123
|
+
if (windows) return null;
|
|
145
124
|
return {
|
|
146
125
|
tool: toolKey,
|
|
147
126
|
kind: 'script',
|
|
148
127
|
interpreter: 'bash',
|
|
149
|
-
url: 'https://opencode.ai/install',
|
|
128
|
+
url: 'https://opencode.ai/v2/install',
|
|
150
129
|
allow: (url) => url.hostname === 'opencode.ai' || (url.hostname === 'raw.githubusercontent.com' && url.pathname.startsWith('/anomalyco/opencode/')),
|
|
151
|
-
source: 'https://opencode.ai/install',
|
|
152
|
-
label: 'OpenCode install script',
|
|
130
|
+
source: 'https://opencode.ai/v2/install',
|
|
131
|
+
label: 'OpenCode 2 install script',
|
|
153
132
|
env: {},
|
|
154
133
|
};
|
|
155
134
|
default:
|
|
@@ -340,55 +319,6 @@ export function releaseAsset(release, name, repo) {
|
|
|
340
319
|
return { name, url, size: Number(asset.size) || null, sha256: sha256OfDigest(asset.digest) };
|
|
341
320
|
}
|
|
342
321
|
|
|
343
|
-
/**
|
|
344
|
-
* The newest OpenCode 1 release (not a draft, not a prerelease; OpenCode 2 is
|
|
345
|
-
* a different program SynaBun's panel does not drive) that carries one of
|
|
346
|
-
* `assets`, the first listed preferred.
|
|
347
|
-
*/
|
|
348
|
-
export function pickOpencodeRelease(releases, { assets, repo = 'anomalyco/opencode', tag = /^v1\.\d+\.\d+$/ } = {}) {
|
|
349
|
-
for (const release of Array.isArray(releases) ? releases : []) {
|
|
350
|
-
if (!release || release.draft || release.prerelease || !tag.test(String(release.tag_name || ''))) continue;
|
|
351
|
-
for (const name of assets || []) {
|
|
352
|
-
const asset = releaseAsset(release, name, repo);
|
|
353
|
-
if (asset) return { tag: release.tag_name, version: String(release.tag_name).replace(/^v/, ''), asset };
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
return null;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// ── Zip ─────────────────────────────────────────────────────────────────────
|
|
360
|
-
|
|
361
|
-
const unpack = (message) => new CliInstallError('unpack', message);
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* Read one member out of a zip archive into `destination` (a new file),
|
|
365
|
-
* without an unzip program and without using a name of the archive as a path:
|
|
366
|
-
* only the entry called exactly `member` is read, through the streaming
|
|
367
|
-
* reader of backups (backup-zip-reader.js: ZIP64, stored or deflated, checked
|
|
368
|
-
* against its size and CRC-32).
|
|
369
|
-
*/
|
|
370
|
-
export async function extractZipMember({ archive, member, destination, maxSize = 1024 ** 3, mode = 0o755 }) {
|
|
371
|
-
let zip;
|
|
372
|
-
try { zip = await openZipArchive(archive); } catch (error) { throw unpack(`The download is not a readable zip archive (${error?.message || error}).`); }
|
|
373
|
-
let opened = false;
|
|
374
|
-
try {
|
|
375
|
-
const entry = zip.getEntry(member);
|
|
376
|
-
if (!entry) throw unpack(`The archive holds no ${member}.`);
|
|
377
|
-
if (entry.uncompressedSize > maxSize) throw unpack(`The archive's ${member} is larger than expected.`);
|
|
378
|
-
const out = createWriteStream(destination, { flags: 'wx', mode });
|
|
379
|
-
out.on('open', () => { opened = true; });
|
|
380
|
-
await zip.pipeEntry(entry, out);
|
|
381
|
-
return { size: entry.uncompressedSize };
|
|
382
|
-
} catch (error) {
|
|
383
|
-
if (opened) rmSync(destination, { force: true });
|
|
384
|
-
if (error instanceof CliInstallError) throw error;
|
|
385
|
-
if (DISK_CODES.has(errorCode(error))) throw asInstallError(error, 'disk', `The program could not be written (${errorCode(error)}).`);
|
|
386
|
-
throw unpack(`The archive's ${member} could not be read (${error?.message || error}).`);
|
|
387
|
-
} finally {
|
|
388
|
-
try { await zip.close(); } catch { /* closed */ }
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
|
|
392
322
|
// ── Output ──────────────────────────────────────────────────────────────────
|
|
393
323
|
|
|
394
324
|
const ANSI = /\x1b\[[0-9;?]*[ -\/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[()][A-Za-z0-9]|\x1b[=>78DEHMNOZc]/g;
|
|
@@ -630,52 +560,6 @@ export function createCliInstaller({
|
|
|
630
560
|
});
|
|
631
561
|
}
|
|
632
562
|
|
|
633
|
-
async function installArchive(job, plan, workDir, { step, line, progress }) {
|
|
634
|
-
step('download');
|
|
635
|
-
const releases = await fetchGithubJson(`https://api.github.com/repos/${plan.repo}/releases?per_page=20`, { fetchImpl, signal: job.abort.signal });
|
|
636
|
-
const picked = pickOpencodeRelease(releases, { assets: plan.assets, repo: plan.repo, tag: plan.tag });
|
|
637
|
-
if (!picked) throw new CliInstallError('http', `No OpenCode 1 release of ${plan.repo} carries ${plan.assets.join(' or ')}.`);
|
|
638
|
-
job.source = picked.asset.url;
|
|
639
|
-
line(`OpenCode ${picked.version}: ${picked.asset.name}`);
|
|
640
|
-
const archive = path.join(workDir, picked.asset.name);
|
|
641
|
-
const got = await downloadFile({
|
|
642
|
-
url: picked.asset.url,
|
|
643
|
-
allow: (url) => GITHUB_DOWNLOAD_HOSTS.includes(url.hostname),
|
|
644
|
-
destination: archive,
|
|
645
|
-
maxBytes: MAX_ARCHIVE_BYTES,
|
|
646
|
-
expectedSize: picked.asset.size,
|
|
647
|
-
sha256: picked.asset.sha256,
|
|
648
|
-
fetchImpl,
|
|
649
|
-
signal: job.abort.signal,
|
|
650
|
-
onProgress: progress,
|
|
651
|
-
stallMs,
|
|
652
|
-
});
|
|
653
|
-
step('verify');
|
|
654
|
-
line(picked.asset.sha256 ? `SHA-256 matches the published one (${got.sha256.slice(0, 12)}…).` : 'GitHub publishes no SHA-256 for this file; its size matches.');
|
|
655
|
-
step('extract');
|
|
656
|
-
try { mkdirSync(plan.dir, { recursive: true }); } catch (error) { throw asInstallError(error, 'disk', `${plan.dir} could not be created (${errorCode(error)}).`); }
|
|
657
|
-
const part = path.join(plan.dir, `.${plan.member}.${randomBytes(4).toString('hex')}.part`);
|
|
658
|
-
await extractZipMember({ archive, member: plan.member, destination: part });
|
|
659
|
-
step('place');
|
|
660
|
-
const head = Buffer.alloc(2);
|
|
661
|
-
const handle = await open(part, 'r');
|
|
662
|
-
try { await handle.read(head, 0, 2, 0); } finally { await handle.close(); }
|
|
663
|
-
if (head[0] !== 0x4d || head[1] !== 0x5a) {
|
|
664
|
-
rmSync(part, { force: true });
|
|
665
|
-
throw new CliInstallError('unpack', `The archive's ${plan.member} is not a Windows program.`);
|
|
666
|
-
}
|
|
667
|
-
const target = path.join(plan.dir, plan.member);
|
|
668
|
-
try {
|
|
669
|
-
renameSync(part, target);
|
|
670
|
-
} catch (error) {
|
|
671
|
-
rmSync(part, { force: true });
|
|
672
|
-
throw asInstallError(error, 'disk', `${target} could not be written (${errorCode(error)}: is an OpenCode still running from there?).`);
|
|
673
|
-
}
|
|
674
|
-
// Files SynaBun writes carry no Mark of the Web; a copy that does (a mirror, an antivirus) is cleared so it can start.
|
|
675
|
-
try { unlinkSync(`${target}:Zone.Identifier`); } catch { /* none */ }
|
|
676
|
-
line(`Placed ${target}`);
|
|
677
|
-
}
|
|
678
|
-
|
|
679
563
|
async function run(job) {
|
|
680
564
|
const { plan, tool } = job;
|
|
681
565
|
const io = stepper(job);
|
|
@@ -685,13 +569,9 @@ export function createCliInstaller({
|
|
|
685
569
|
emit(job, { type: 'start', tool, method: plan.kind, source: plan.source, label: plan.label, platform, arch });
|
|
686
570
|
try { before = await readOsPath(); } catch { before = []; }
|
|
687
571
|
workDir = await mkdtemp(path.join(tmpRoot, `synabun-cli-install-${tool}-`));
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
await runScript(job, plan, script, workDir, before, io);
|
|
692
|
-
} else {
|
|
693
|
-
await installArchive(job, plan, workDir, io);
|
|
694
|
-
}
|
|
572
|
+
const script = await fetchScript(job, plan, workDir, io);
|
|
573
|
+
io.step('run');
|
|
574
|
+
await runScript(job, plan, script, workDir, before, io);
|
|
695
575
|
io.step('check');
|
|
696
576
|
const status = await resolver.resolve(tool, { force: true });
|
|
697
577
|
if (status?.state !== 'installed') {
|
|
@@ -198,7 +198,10 @@ export function describeConfigured(value, toolKey, {
|
|
|
198
198
|
return { value: raw, kind: 'command', name: text };
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
/**
|
|
201
|
+
/**
|
|
202
|
+
* npm's opencode-ai (OpenCode 1): its command file runs node_modules\opencode-ai\bin\opencode.exe, the platform build
|
|
203
|
+
* its postinstall put there. Still found, so that SynaBun can say which version it is when it refuses it.
|
|
204
|
+
*/
|
|
202
205
|
export function windowsOpencodeTargets(launcher, arch = process.arch) {
|
|
203
206
|
const pathImpl = path.win32;
|
|
204
207
|
const folder = pathImpl.dirname(String(launcher || ''));
|
|
@@ -16,12 +16,15 @@
|
|
|
16
16
|
// PATH, so the update silently does nothing and the badge never clears.
|
|
17
17
|
// ═══════════════════════════════════════════
|
|
18
18
|
|
|
19
|
-
/**
|
|
19
|
+
/**
|
|
20
|
+
* npm package name per tool key. OpenCode has none: npm's opencode-ai is
|
|
21
|
+
* OpenCode 1, which SynaBun does not drive, and OpenCode 2 is installed by its
|
|
22
|
+
* own script, Homebrew or WinGet (lib/opencode-protocol.js).
|
|
23
|
+
*/
|
|
20
24
|
export const NPM_PKGS = {
|
|
21
25
|
'claude-code': '@anthropic-ai/claude-code',
|
|
22
26
|
'codex': '@openai/codex',
|
|
23
27
|
'gemini': '@google/gemini-cli',
|
|
24
|
-
'opencode': 'opencode-ai',
|
|
25
28
|
};
|
|
26
29
|
|
|
27
30
|
/**
|
|
@@ -33,7 +36,8 @@ export const BREW_FALLBACK_TOKENS = {
|
|
|
33
36
|
'claude-code': 'claude-code',
|
|
34
37
|
'codex': 'codex',
|
|
35
38
|
'gemini': 'gemini-cli',
|
|
36
|
-
'opencode
|
|
39
|
+
// OpenCode 2's own tap (its `opencode` formula there is still OpenCode 1).
|
|
40
|
+
'opencode': 'anomalyco/tap/opencode-v2',
|
|
37
41
|
};
|
|
38
42
|
|
|
39
43
|
/**
|
|
@@ -59,19 +63,18 @@ const SELF_UPDATERS = {
|
|
|
59
63
|
};
|
|
60
64
|
|
|
61
65
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
* the channels we
|
|
66
|
+
* The `upgrade --method` of OpenCode 2 for a detected source (its own installer
|
|
67
|
+
* script, a JavaScript package manager, WinGet). Mapping our detected source
|
|
68
|
+
* onto it lets OpenCode do its own install-aware work for the channels we
|
|
69
|
+
* cannot drive directly.
|
|
65
70
|
*/
|
|
66
71
|
const OPENCODE_METHODS = {
|
|
67
72
|
'standalone': 'curl',
|
|
68
73
|
'npm': 'npm',
|
|
69
74
|
'pnpm': 'pnpm',
|
|
70
75
|
'bun': 'bun',
|
|
71
|
-
'
|
|
72
|
-
'
|
|
73
|
-
'choco': 'choco',
|
|
74
|
-
'scoop': 'scoop',
|
|
76
|
+
'yarn': 'yarn',
|
|
77
|
+
'winget': 'winget',
|
|
75
78
|
};
|
|
76
79
|
|
|
77
80
|
/** Sources that mean "a package manager other than the tool itself owns this". */
|
|
@@ -248,6 +251,15 @@ function planUpdateCommand(toolKey, installSource, { brewToken = null, platform
|
|
|
248
251
|
: `brew upgrade ${token}`;
|
|
249
252
|
}
|
|
250
253
|
|
|
254
|
+
// OpenCode 2 updates itself through the channel it came from (brew is handled above).
|
|
255
|
+
if (toolKey === 'opencode') {
|
|
256
|
+
// Its installer script is bash: a copy in %USERPROFILE%\.opencode\bin on Windows is no OpenCode 2 install.
|
|
257
|
+
if (installSource === 'standalone' && platform === 'win32') return null;
|
|
258
|
+
if (OPENCODE_METHODS[installSource]) return `opencode upgrade --method ${OPENCODE_METHODS[installSource]}`;
|
|
259
|
+
if (['volta', 'scoop', 'choco'].includes(installSource)) return null; // not an OpenCode 2 channel: the caller shows a hint
|
|
260
|
+
return selfUpdate;
|
|
261
|
+
}
|
|
262
|
+
|
|
251
263
|
if (!npmPkg) return selfUpdate;
|
|
252
264
|
|
|
253
265
|
switch (installSource) {
|
|
@@ -255,24 +267,15 @@ function planUpdateCommand(toolKey, installSource, { brewToken = null, platform
|
|
|
255
267
|
case 'yarn': return `yarn global add ${npmPkg}@latest`;
|
|
256
268
|
case 'volta': return `volta install ${npmPkg}@latest`;
|
|
257
269
|
case 'bun':
|
|
270
|
+
return `bun add -g ${npmPkg}@latest`;
|
|
258
271
|
case 'pnpm':
|
|
259
|
-
|
|
260
|
-
if (toolKey === 'opencode') return `opencode upgrade --method ${OPENCODE_METHODS[installSource]}`;
|
|
261
|
-
return installSource === 'bun'
|
|
262
|
-
? `bun add -g ${npmPkg}@latest`
|
|
263
|
-
: `pnpm add -g ${npmPkg}@latest`;
|
|
272
|
+
return `pnpm add -g ${npmPkg}@latest`;
|
|
264
273
|
case 'scoop':
|
|
265
274
|
case 'choco':
|
|
266
|
-
if (toolKey === 'opencode') return `opencode upgrade --method ${OPENCODE_METHODS[installSource]}`;
|
|
267
|
-
return null; // no safe automated path — caller shows a hint
|
|
268
275
|
case 'winget':
|
|
269
|
-
return null;
|
|
276
|
+
return null; // no safe automated path — caller shows a hint
|
|
270
277
|
case 'standalone':
|
|
271
278
|
// The tool's own installer put it here, so its own updater is right.
|
|
272
|
-
// OpenCode's `curl` method runs its bash install script, which Windows
|
|
273
|
-
// does not have: a copy in %USERPROFILE%\.opencode\bin there came from
|
|
274
|
-
// the release archive (lib/cli-install.js) and has no updater to call.
|
|
275
|
-
if (toolKey === 'opencode') return platform === 'win32' ? null : 'opencode upgrade --method curl';
|
|
276
279
|
return selfUpdate;
|
|
277
280
|
case 'native':
|
|
278
281
|
return selfUpdate;
|
|
@@ -373,10 +376,10 @@ export function installSourceLabel(source) {
|
|
|
373
376
|
/**
|
|
374
377
|
* The install command each vendor documents first for an operating system
|
|
375
378
|
* (checked 2026-10-17): Anthropic's native installer (code.claude.com/docs/en/setup),
|
|
376
|
-
* OpenAI's standalone installer (learn.chatgpt.com/docs/codex/cli), OpenCode's
|
|
377
|
-
* install script (opencode.ai/
|
|
378
|
-
*
|
|
379
|
-
*
|
|
379
|
+
* OpenAI's standalone installer (learn.chatgpt.com/docs/codex/cli), OpenCode 2's
|
|
380
|
+
* install script (https://opencode.ai/v2/install, the one `opencode upgrade`
|
|
381
|
+
* runs; on Windows, where the script does not run, WinGet). These are the same
|
|
382
|
+
* official sources the Install button runs (lib/cli-install.js).
|
|
380
383
|
*/
|
|
381
384
|
export function vendorInstallCommand(toolKey, platform = process.platform) {
|
|
382
385
|
const windows = platform === 'win32';
|
|
@@ -388,7 +391,7 @@ export function vendorInstallCommand(toolKey, platform = process.platform) {
|
|
|
388
391
|
? 'powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"'
|
|
389
392
|
: 'curl -fsSL https://chatgpt.com/codex/install.sh | sh';
|
|
390
393
|
case 'opencode':
|
|
391
|
-
return windows ?
|
|
394
|
+
return windows ? 'winget install --id Anomaly.OpenCode --exact' : 'curl -fsSL https://opencode.ai/v2/install | bash';
|
|
392
395
|
default:
|
|
393
396
|
return NPM_PKGS[toolKey] ? `npm install -g ${NPM_PKGS[toolKey]}` : '';
|
|
394
397
|
}
|
|
@@ -420,6 +423,8 @@ export function buildInstallCommand(toolKey, installSource = 'unknown', { platfo
|
|
|
420
423
|
? `brew install --cask ${token}`
|
|
421
424
|
: `brew install ${token}`;
|
|
422
425
|
}
|
|
426
|
+
// OpenCode 2 has no npm package: its own installer whatever JavaScript package manager the machine uses.
|
|
427
|
+
if (toolKey === 'opencode') return vendorInstallCommand(toolKey, platform || process.platform);
|
|
423
428
|
if (!npmPkg) return '';
|
|
424
429
|
switch (installSource) {
|
|
425
430
|
case 'bun': return `bun add -g ${npmPkg}`;
|
|
@@ -438,10 +443,6 @@ function platformInstallCommand(toolKey, installSource, platform) {
|
|
|
438
443
|
if (windows && installSource === 'winget') return 'winget install Anthropic.ClaudeCode';
|
|
439
444
|
return vendor;
|
|
440
445
|
}
|
|
441
|
-
if (toolKey === 'opencode' && windows) {
|
|
442
|
-
if (installSource === 'scoop') return 'scoop install opencode';
|
|
443
|
-
if (installSource === 'choco') return 'choco install opencode';
|
|
444
|
-
}
|
|
445
446
|
// A JavaScript package manager this machine already uses: keep to it.
|
|
446
447
|
if (['npm', 'bun', 'pnpm', 'yarn', 'volta'].includes(installSource)) return null;
|
|
447
448
|
return vendor || null;
|
|
@@ -28,6 +28,15 @@
|
|
|
28
28
|
//
|
|
29
29
|
// An ended process is not forgotten: it is asked to end (SIGTERM), killed when
|
|
30
30
|
// it is still there a moment later (SIGKILL), and kept until it has exited.
|
|
31
|
+
//
|
|
32
|
+
// Each cloudflared it starts is on record from its spawn until it has exited
|
|
33
|
+
// (`records`: lib/opencode-serve-records.js, kind 'quick', in
|
|
34
|
+
// DATA_HOME/runtime/tunnels), with a token of its start in its environment. A
|
|
35
|
+
// server that ends without its exit handlers (a native crash) leaves its
|
|
36
|
+
// cloudflared running on macOS and Linux (Windows ends a child with its parent),
|
|
37
|
+
// the old address still pointing at the port the next server listens on: the
|
|
38
|
+
// next server ends it by that record (server.js sweepLeftoverTunnels), and only
|
|
39
|
+
// while the OS still reports that very process.
|
|
31
40
|
|
|
32
41
|
import { spawn as nodeSpawn } from 'node:child_process';
|
|
33
42
|
|
|
@@ -69,6 +78,22 @@ export function tunnelArguments(port, source) {
|
|
|
69
78
|
return ['tunnel', ...(source === 'system' ? [] : ['--no-autoupdate']), '--url', `http://localhost:${port}`];
|
|
70
79
|
}
|
|
71
80
|
|
|
81
|
+
/** The kind of the tunnel's records (lib/opencode-serve-records.js createServeRecords `kinds`). */
|
|
82
|
+
export const TUNNEL_KINDS = Object.freeze(['quick']);
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Are `args` (a command line's arguments, as the platform reads them: lib/opencode-serve-records.js commandArgs) a
|
|
86
|
+
* quick tunnel to this server's `port` (`… tunnel … --url http://localhost:<port>`, as tunnelArguments makes them)?
|
|
87
|
+
* What a tunnel record must name.
|
|
88
|
+
*/
|
|
89
|
+
export function tunnelsToPort(args, port) {
|
|
90
|
+
const p = Number(port);
|
|
91
|
+
if (!Array.isArray(args) || !Number.isInteger(p) || p <= 0 || p > 65535) return false;
|
|
92
|
+
if (!args.includes('tunnel')) return false;
|
|
93
|
+
const url = `http://localhost:${p}`;
|
|
94
|
+
return args.some((arg, i) => arg === `--url=${url}` || (arg === '--url' && args[i + 1] === url));
|
|
95
|
+
}
|
|
96
|
+
|
|
72
97
|
/** What cloudflared said last that reads like a reason: its last error line, without the timestamp. */
|
|
73
98
|
function lastReason(output) {
|
|
74
99
|
const lines = output.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
@@ -85,8 +110,10 @@ function lastReason(output) {
|
|
|
85
110
|
* @param {number} [o.urlTimeoutMs] how long a started cloudflared may take to print its address
|
|
86
111
|
* @param {number} [o.killAfterMs] how long an ended cloudflared has to exit before it is killed
|
|
87
112
|
* @param {(line: string) => void} [o.log]
|
|
113
|
+
* @param {{ newToken: () => string, tokenEnv: string, record: (entry: object) => Promise<object|null>, remove: (entry: object) => boolean }} [o.records]
|
|
114
|
+
* where each cloudflared it starts is kept on record until it has exited (lib/opencode-serve-records.js, kind 'quick')
|
|
88
115
|
*/
|
|
89
|
-
export function createQuickTunnel({ cloudflared, port, onUrl = () => {}, spawn = nodeSpawn, urlTimeoutMs = 90_000, killAfterMs = 1000, log = () => {} }) {
|
|
116
|
+
export function createQuickTunnel({ cloudflared, port, onUrl = () => {}, spawn = nodeSpawn, urlTimeoutMs = 90_000, killAfterMs = 1000, log = () => {}, records = null }) {
|
|
90
117
|
let phase = 'idle'; // idle | preparing | starting | running | failed
|
|
91
118
|
let child = null;
|
|
92
119
|
let url = null;
|
|
@@ -117,7 +144,19 @@ export function createQuickTunnel({ cloudflared, port, onUrl = () => {}, spawn =
|
|
|
117
144
|
log(` Tunnel: ${code === 'ended' ? 'stopped' : 'not started'} (${code}): ${message}`);
|
|
118
145
|
}
|
|
119
146
|
|
|
147
|
+
// On record from its spawn until it has exited: what the next server ends when this one crashed (see above).
|
|
148
|
+
function keepOnRecord(proc, token) {
|
|
149
|
+
const pid = Number(proc?.pid) || null;
|
|
150
|
+
if (!pid) return;
|
|
151
|
+
const kept = Promise.resolve().then(() => records.record({ kind: TUNNEL_KINDS[0], port: Number(port), pid, token })).catch(() => null);
|
|
152
|
+
proc.once('exit', () => { kept.then((entry) => { if (entry) records.remove(entry); }).catch(() => {}); });
|
|
153
|
+
}
|
|
154
|
+
|
|
120
155
|
function launch(found, mine) {
|
|
156
|
+
// The token of this start, in its environment: made before the check below, so nothing runs between them.
|
|
157
|
+
let token = null;
|
|
158
|
+
try { token = records?.tokenEnv ? records.newToken() : null; } catch { token = null; }
|
|
159
|
+
const options = { stdio: ['ignore', 'pipe', 'pipe'], windowsHide: true, ...(token ? { env: { ...process.env, [records.tokenEnv]: token } } : {}) };
|
|
121
160
|
// Checked once more as it is about to run (the manager's confirm: the very file its check read, still where
|
|
122
161
|
// nobody else can change it), and started at once by the real path that was checked: nothing runs in between.
|
|
123
162
|
let path = found.path;
|
|
@@ -128,10 +167,11 @@ export function createQuickTunnel({ cloudflared, port, onUrl = () => {}, spawn =
|
|
|
128
167
|
}
|
|
129
168
|
let proc;
|
|
130
169
|
try {
|
|
131
|
-
proc = spawn(path, tunnelArguments(port, found.source),
|
|
170
|
+
proc = spawn(path, tunnelArguments(port, found.source), options);
|
|
132
171
|
} catch (failure) {
|
|
133
172
|
return fail('launch', `cloudflared could not be started (${failure?.code || failure?.message || failure}).`);
|
|
134
173
|
}
|
|
174
|
+
if (token) keepOnRecord(proc, token);
|
|
135
175
|
child = proc;
|
|
136
176
|
copy = { source: found.source, version: found.version };
|
|
137
177
|
phase = 'starting';
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
+
import { codexMcpToolApproval } from '../public/shared/cdx/cdx-protocol.js';
|
|
2
|
+
|
|
1
3
|
const CODEX_MCP_APPROVAL_MODES = new Set(['auto', 'prompt', 'writes', 'approve']);
|
|
2
4
|
|
|
5
|
+
/** Auto is this session's choice; Claude's allow list is not a Codex approval prerequisite. */
|
|
6
|
+
export function shouldAutoAcceptCodexMcpToolApproval(params, { autoAccept = false, role = null } = {}) {
|
|
7
|
+
const approval = codexMcpToolApproval(params);
|
|
8
|
+
if (!approval) return false;
|
|
9
|
+
// agent_route owns the model-choice card. Calling it must not require an
|
|
10
|
+
// additional permission card, even when ordinary tools are set to Ask.
|
|
11
|
+
return autoAccept || (role === 'assistant' && approval.fullName === 'mcp__SynaBun__agent_route');
|
|
12
|
+
}
|
|
13
|
+
|
|
3
14
|
export function codexConfigKeyPathSegment(value) {
|
|
4
15
|
const text = String(value || '').trim();
|
|
5
16
|
if (!text) throw new Error('Codex config key path segments cannot be empty');
|