glitchcode-cli 0.1.1
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/Dockerfile +18 -0
- package/README.md +15 -0
- package/bin/glitch +180 -0
- package/bunfig.toml +7 -0
- package/drizzle.config.ts +10 -0
- package/git +0 -0
- package/migration/20260127222353_familiar_lady_ursula/migration.sql +90 -0
- package/migration/20260127222353_familiar_lady_ursula/snapshot.json +796 -0
- package/migration/20260211171708_add_project_commands/migration.sql +1 -0
- package/migration/20260211171708_add_project_commands/snapshot.json +806 -0
- package/migration/20260213144116_wakeful_the_professor/migration.sql +11 -0
- package/migration/20260213144116_wakeful_the_professor/snapshot.json +897 -0
- package/migration/20260225215848_workspace/migration.sql +7 -0
- package/migration/20260225215848_workspace/snapshot.json +959 -0
- package/migration/20260227213759_add_session_workspace_id/migration.sql +2 -0
- package/migration/20260227213759_add_session_workspace_id/snapshot.json +983 -0
- package/migration/20260228203230_blue_harpoon/migration.sql +17 -0
- package/migration/20260228203230_blue_harpoon/snapshot.json +1102 -0
- package/migration/20260303231226_add_workspace_fields/migration.sql +5 -0
- package/migration/20260303231226_add_workspace_fields/snapshot.json +1013 -0
- package/migration/20260309230000_move_org_to_state/migration.sql +3 -0
- package/migration/20260309230000_move_org_to_state/snapshot.json +1156 -0
- package/migration/20260312043431_session_message_cursor/migration.sql +4 -0
- package/migration/20260312043431_session_message_cursor/snapshot.json +1168 -0
- package/migration/20260323234822_events/migration.sql +13 -0
- package/migration/20260323234822_events/snapshot.json +1271 -0
- package/migration/20260410174513_workspace-name/migration.sql +16 -0
- package/migration/20260410174513_workspace-name/snapshot.json +1271 -0
- package/migration/20260413175956_chief_energizer/migration.sql +13 -0
- package/migration/20260413175956_chief_energizer/snapshot.json +1399 -0
- package/migration/20260422160000_context_inheritance/migration.sql +3 -0
- package/migration/20260422170000_task_registry/migration.sql +18 -0
- package/migration/20260423145421_remove_session_entry/migration.sql +4 -0
- package/migration/20260515000000_actor_rename/migration.sql +7 -0
- package/migration/20260515010000_memory_fts/migration.sql +33 -0
- package/migration/20260515020000_user_task/migration.sql +29 -0
- package/migration/20260519000000_last_checkpoint_message_id/migration.sql +1 -0
- package/migration/20260521000000_message_agent_id/migration.sql +2 -0
- package/migration/20260521000100_actor_registry_v6/migration.sql +25 -0
- package/migration/20260521010000_memory_fts_v6/migration.sql +33 -0
- package/migration/20260521020000_memory_fts_triggers/migration.sql +17 -0
- package/migration/20260526000000_agent_id_main/migration.sql +14 -0
- package/migration/20260527000000_actor_lifecycle/migration.sql +8 -0
- package/migration/20260527000100_inbox/migration.sql +12 -0
- package/migration/20260529000000_task_todo_redesign/migration.sql +16 -0
- package/migration/20260603000000_task_in_progress_owner/migration.sql +1 -0
- package/migration/20260603000000_workflow_run/migration.sql +17 -0
- package/migration/20260604000000_workflow_script_sha/migration.sql +1 -0
- package/migration/20260608000000_claude_import/migration.sql +7 -0
- package/migration/20260608010000_claude_import_message_ids/migration.sql +1 -0
- package/migration/20260609000000_history_fts/migration.sql +29 -0
- package/migration/20260609230000_workflow_agent_timeout/migration.sql +1 -0
- package/migration/20260612000000_external_import/migration.sql +16 -0
- package/package.json +203 -0
- package/parsers-config.ts +290 -0
- package/script/build.ts +304 -0
- package/script/check-migrations.ts +16 -0
- package/script/fix-node-pty.ts +28 -0
- package/script/generate.ts +23 -0
- package/script/postinstall.mjs +102 -0
- package/script/publish.ts +74 -0
- package/script/run-workspace-server +106 -0
- package/script/schema.ts +63 -0
- package/script/time.ts +6 -0
- package/script/trace-imports.ts +153 -0
- package/script/upgrade-opentui.ts +64 -0
- package/src/account/account.sql.ts +39 -0
- package/src/account/account.ts +456 -0
- package/src/account/repo.ts +166 -0
- package/src/account/schema.ts +99 -0
- package/src/account/url.ts +8 -0
- package/src/acp/README.md +174 -0
- package/src/acp/agent.ts +1783 -0
- package/src/acp/session.ts +116 -0
- package/src/acp/types.ts +24 -0
- package/src/actor/actor.sql.ts +38 -0
- package/src/actor/events.ts +67 -0
- package/src/actor/index.ts +2 -0
- package/src/actor/registry.ts +412 -0
- package/src/actor/return-header.ts +24 -0
- package/src/actor/schema.ts +47 -0
- package/src/actor/spawn-ref.ts +16 -0
- package/src/actor/spawn.ts +741 -0
- package/src/actor/turn.ts +49 -0
- package/src/actor/waiter.ts +166 -0
- package/src/agent/agent.ts +554 -0
- package/src/agent/config.ts +5 -0
- package/src/agent/generate.txt +75 -0
- package/src/agent/prompt/checkpoint-writer.txt +167 -0
- package/src/agent/prompt/compaction.txt +9 -0
- package/src/agent/prompt/distill.txt +199 -0
- package/src/agent/prompt/dream.txt +155 -0
- package/src/agent/prompt/explore.txt +18 -0
- package/src/agent/prompt/summary.txt +11 -0
- package/src/agent/prompt/title.txt +44 -0
- package/src/audio.d.ts +9 -0
- package/src/auth/index.ts +97 -0
- package/src/bus/bus-event.ts +33 -0
- package/src/bus/global.ts +12 -0
- package/src/bus/index.ts +193 -0
- package/src/cli/bootstrap.ts +33 -0
- package/src/cli/cmd/account.ts +258 -0
- package/src/cli/cmd/acp.ts +70 -0
- package/src/cli/cmd/agent.ts +248 -0
- package/src/cli/cmd/cmd.ts +7 -0
- package/src/cli/cmd/db.ts +120 -0
- package/src/cli/cmd/debug/agent.ts +192 -0
- package/src/cli/cmd/debug/config.ts +17 -0
- package/src/cli/cmd/debug/file.ts +100 -0
- package/src/cli/cmd/debug/index.ts +48 -0
- package/src/cli/cmd/debug/lsp.ts +61 -0
- package/src/cli/cmd/debug/ripgrep.ts +105 -0
- package/src/cli/cmd/debug/scrap.ts +16 -0
- package/src/cli/cmd/debug/skill.ts +23 -0
- package/src/cli/cmd/debug/snapshot.ts +53 -0
- package/src/cli/cmd/export.ts +306 -0
- package/src/cli/cmd/generate.ts +50 -0
- package/src/cli/cmd/github.ts +1647 -0
- package/src/cli/cmd/import.ts +208 -0
- package/src/cli/cmd/init.ts +148 -0
- package/src/cli/cmd/mcp.ts +812 -0
- package/src/cli/cmd/models.ts +88 -0
- package/src/cli/cmd/plug.ts +233 -0
- package/src/cli/cmd/pr.ts +138 -0
- package/src/cli/cmd/providers.ts +692 -0
- package/src/cli/cmd/run-completion.ts +77 -0
- package/src/cli/cmd/run.ts +694 -0
- package/src/cli/cmd/serve.ts +21 -0
- package/src/cli/cmd/session.ts +181 -0
- package/src/cli/cmd/stats.ts +413 -0
- package/src/cli/cmd/tui/app.tsx +1140 -0
- package/src/cli/cmd/tui/asset/TEN_VAD_LICENSE +12 -0
- package/src/cli/cmd/tui/asset/charge.wav +0 -0
- package/src/cli/cmd/tui/asset/pulse-a.wav +0 -0
- package/src/cli/cmd/tui/asset/pulse-b.wav +0 -0
- package/src/cli/cmd/tui/asset/pulse-c.wav +0 -0
- package/src/cli/cmd/tui/asset/ten_vad.wasm +0 -0
- package/src/cli/cmd/tui/asset/ten_vad_loader.js +30 -0
- package/src/cli/cmd/tui/attach.ts +84 -0
- package/src/cli/cmd/tui/component/background-image.tsx +150 -0
- package/src/cli/cmd/tui/component/bg-pulse.tsx +130 -0
- package/src/cli/cmd/tui/component/border.tsx +21 -0
- package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-agreement.tsx +111 -0
- package/src/cli/cmd/tui/component/dialog-command.tsx +219 -0
- package/src/cli/cmd/tui/component/dialog-console-org.tsx +103 -0
- package/src/cli/cmd/tui/component/dialog-glitch-login.tsx +253 -0
- package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +157 -0
- package/src/cli/cmd/tui/component/dialog-image-list.tsx +111 -0
- package/src/cli/cmd/tui/component/dialog-logo-design.tsx +37 -0
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
- package/src/cli/cmd/tui/component/dialog-mimo-login.tsx +253 -0
- package/src/cli/cmd/tui/component/dialog-model.tsx +252 -0
- package/src/cli/cmd/tui/component/dialog-provider.tsx +454 -0
- package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +101 -0
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +269 -0
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
- package/src/cli/cmd/tui/component/dialog-skill.tsx +42 -0
- package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
- package/src/cli/cmd/tui/component/dialog-status.tsx +170 -0
- package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +50 -0
- package/src/cli/cmd/tui/component/dialog-variant.tsx +39 -0
- package/src/cli/cmd/tui/component/dialog-workflows.tsx +62 -0
- package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +289 -0
- package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +81 -0
- package/src/cli/cmd/tui/component/dialog-worktree.tsx +90 -0
- package/src/cli/cmd/tui/component/error-component.tsx +92 -0
- package/src/cli/cmd/tui/component/logo.tsx +961 -0
- package/src/cli/cmd/tui/component/plugin-route-missing.tsx +14 -0
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +684 -0
- package/src/cli/cmd/tui/component/prompt/cwd.ts +0 -0
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +90 -0
- package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
- package/src/cli/cmd/tui/component/prompt/index.tsx +1871 -0
- package/src/cli/cmd/tui/component/prompt/part.ts +16 -0
- package/src/cli/cmd/tui/component/prompt/stash.tsx +101 -0
- package/src/cli/cmd/tui/component/spinner.tsx +24 -0
- package/src/cli/cmd/tui/component/starry-background.tsx +305 -0
- package/src/cli/cmd/tui/component/startup-loading.tsx +67 -0
- package/src/cli/cmd/tui/component/task-item.tsx +63 -0
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +73 -0
- package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
- package/src/cli/cmd/tui/config/cwd.ts +5 -0
- package/src/cli/cmd/tui/config/tui-migrate.ts +151 -0
- package/src/cli/cmd/tui/config/tui-schema.ts +38 -0
- package/src/cli/cmd/tui/config/tui.ts +219 -0
- package/src/cli/cmd/tui/context/args.tsx +16 -0
- package/src/cli/cmd/tui/context/directory.ts +15 -0
- package/src/cli/cmd/tui/context/event.ts +45 -0
- package/src/cli/cmd/tui/context/exit.tsx +65 -0
- package/src/cli/cmd/tui/context/helper.tsx +25 -0
- package/src/cli/cmd/tui/context/keybind.tsx +105 -0
- package/src/cli/cmd/tui/context/kv.tsx +86 -0
- package/src/cli/cmd/tui/context/language.tsx +91 -0
- package/src/cli/cmd/tui/context/local.tsx +455 -0
- package/src/cli/cmd/tui/context/plugin-keybinds.ts +41 -0
- package/src/cli/cmd/tui/context/project.tsx +109 -0
- package/src/cli/cmd/tui/context/prompt.tsx +18 -0
- package/src/cli/cmd/tui/context/route.tsx +61 -0
- package/src/cli/cmd/tui/context/sdk.tsx +150 -0
- package/src/cli/cmd/tui/context/sync.tsx +828 -0
- package/src/cli/cmd/tui/context/theme/aura.json +69 -0
- package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
- package/src/cli/cmd/tui/context/theme/carbonfox.json +248 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +230 -0
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +230 -0
- package/src/cli/cmd/tui/context/theme/catppuccin.json +112 -0
- package/src/cli/cmd/tui/context/theme/cobalt2.json +225 -0
- package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
- package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
- package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
- package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
- package/src/cli/cmd/tui/context/theme/github.json +233 -0
- package/src/cli/cmd/tui/context/theme/glitch.json +227 -0
- package/src/cli/cmd/tui/context/theme/gruvbox.json +242 -0
- package/src/cli/cmd/tui/context/theme/kanagawa.json +77 -0
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +234 -0
- package/src/cli/cmd/tui/context/theme/material.json +235 -0
- package/src/cli/cmd/tui/context/theme/matrix.json +77 -0
- package/src/cli/cmd/tui/context/theme/mercury.json +252 -0
- package/src/cli/cmd/tui/context/theme/mimocode.json +245 -0
- package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
- package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
- package/src/cli/cmd/tui/context/theme/nord.json +223 -0
- package/src/cli/cmd/tui/context/theme/one-dark.json +84 -0
- package/src/cli/cmd/tui/context/theme/orng.json +249 -0
- package/src/cli/cmd/tui/context/theme/osaka-jade.json +93 -0
- package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
- package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
- package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
- package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
- package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
- package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
- package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
- package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
- package/src/cli/cmd/tui/context/theme.tsx +1300 -0
- package/src/cli/cmd/tui/context/thinking.ts +48 -0
- package/src/cli/cmd/tui/context/tui-config.tsx +9 -0
- package/src/cli/cmd/tui/event.ts +56 -0
- package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +93 -0
- package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +193 -0
- package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +54 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +114 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx +45 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +62 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +93 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx +84 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx +54 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +66 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +98 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx +95 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +51 -0
- package/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts +31 -0
- package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +274 -0
- package/src/cli/cmd/tui/i18n/en.ts +436 -0
- package/src/cli/cmd/tui/i18n/es.ts +478 -0
- package/src/cli/cmd/tui/i18n/fr.ts +485 -0
- package/src/cli/cmd/tui/i18n/ja.ts +437 -0
- package/src/cli/cmd/tui/i18n/locales.ts +82 -0
- package/src/cli/cmd/tui/i18n/ru.ts +497 -0
- package/src/cli/cmd/tui/i18n/tr.ts +398 -0
- package/src/cli/cmd/tui/i18n/zh.ts +429 -0
- package/src/cli/cmd/tui/i18n/zht.ts +405 -0
- package/src/cli/cmd/tui/layer.ts +6 -0
- package/src/cli/cmd/tui/plugin/api.tsx +402 -0
- package/src/cli/cmd/tui/plugin/index.ts +3 -0
- package/src/cli/cmd/tui/plugin/internal.ts +35 -0
- package/src/cli/cmd/tui/plugin/runtime.ts +1057 -0
- package/src/cli/cmd/tui/plugin/slots.tsx +60 -0
- package/src/cli/cmd/tui/routes/home.tsx +165 -0
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +76 -0
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +116 -0
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +47 -0
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
- package/src/cli/cmd/tui/routes/session/footer.tsx +91 -0
- package/src/cli/cmd/tui/routes/session/index.tsx +2567 -0
- package/src/cli/cmd/tui/routes/session/permission.tsx +691 -0
- package/src/cli/cmd/tui/routes/session/question.tsx +488 -0
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +97 -0
- package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +142 -0
- package/src/cli/cmd/tui/thread.ts +323 -0
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +61 -0
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +95 -0
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +223 -0
- package/src/cli/cmd/tui/ui/dialog-help.tsx +42 -0
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +123 -0
- package/src/cli/cmd/tui/ui/dialog-select.tsx +463 -0
- package/src/cli/cmd/tui/ui/dialog.tsx +207 -0
- package/src/cli/cmd/tui/ui/link.tsx +28 -0
- package/src/cli/cmd/tui/ui/spinner.ts +378 -0
- package/src/cli/cmd/tui/ui/toast.tsx +102 -0
- package/src/cli/cmd/tui/util/clipboard.ts +203 -0
- package/src/cli/cmd/tui/util/editor.ts +36 -0
- package/src/cli/cmd/tui/util/image-protocol.ts +35 -0
- package/src/cli/cmd/tui/util/index.ts +6 -0
- package/src/cli/cmd/tui/util/model.ts +23 -0
- package/src/cli/cmd/tui/util/pinyin.ts +20 -0
- package/src/cli/cmd/tui/util/provider-origin.ts +7 -0
- package/src/cli/cmd/tui/util/revert-diff.ts +18 -0
- package/src/cli/cmd/tui/util/scroll.ts +23 -0
- package/src/cli/cmd/tui/util/selection.ts +23 -0
- package/src/cli/cmd/tui/util/signal.ts +41 -0
- package/src/cli/cmd/tui/util/sound.ts +154 -0
- package/src/cli/cmd/tui/util/system-locale.ts +209 -0
- package/src/cli/cmd/tui/util/terminal.ts +110 -0
- package/src/cli/cmd/tui/util/transcript.ts +112 -0
- package/src/cli/cmd/tui/util/vad.ts +229 -0
- package/src/cli/cmd/tui/util/voice.ts +450 -0
- package/src/cli/cmd/tui/win32.ts +130 -0
- package/src/cli/cmd/tui/worker.ts +104 -0
- package/src/cli/cmd/uninstall.ts +351 -0
- package/src/cli/cmd/upgrade.ts +79 -0
- package/src/cli/cmd/web.ts +82 -0
- package/src/cli/effect/prompt.ts +25 -0
- package/src/cli/error.ts +82 -0
- package/src/cli/heap.ts +59 -0
- package/src/cli/i18n.ts +16 -0
- package/src/cli/logo.ts +53 -0
- package/src/cli/network.ts +62 -0
- package/src/cli/ui.ts +133 -0
- package/src/cli/upgrade.ts +41 -0
- package/src/command/index.ts +276 -0
- package/src/command/template/initialize.txt +66 -0
- package/src/command/template/review.txt +101 -0
- package/src/config/agent.ts +197 -0
- package/src/config/command.ts +69 -0
- package/src/config/config.ts +1036 -0
- package/src/config/console-state.ts +16 -0
- package/src/config/entry-name.ts +16 -0
- package/src/config/error.ts +21 -0
- package/src/config/formatter.ts +17 -0
- package/src/config/history.ts +21 -0
- package/src/config/index.ts +16 -0
- package/src/config/keybinds.ts +127 -0
- package/src/config/layout.ts +10 -0
- package/src/config/lsp.ts +45 -0
- package/src/config/managed.ts +70 -0
- package/src/config/markdown.ts +97 -0
- package/src/config/mcp.ts +172 -0
- package/src/config/model-id.ts +14 -0
- package/src/config/parse.ts +44 -0
- package/src/config/paths.ts +73 -0
- package/src/config/permission.ts +76 -0
- package/src/config/plugin.ts +88 -0
- package/src/config/provider.ts +118 -0
- package/src/config/server.ts +20 -0
- package/src/config/skills.ts +16 -0
- package/src/config/variable.ts +90 -0
- package/src/control-plane/adaptors/index.ts +52 -0
- package/src/control-plane/adaptors/worktree.ts +47 -0
- package/src/control-plane/dev/debug-workspace-plugin.ts +73 -0
- package/src/control-plane/schema.ts +19 -0
- package/src/control-plane/sse.ts +66 -0
- package/src/control-plane/types.ts +34 -0
- package/src/control-plane/util.ts +37 -0
- package/src/control-plane/workspace-context.ts +26 -0
- package/src/control-plane/workspace.sql.ts +17 -0
- package/src/control-plane/workspace.ts +615 -0
- package/src/effect/app-runtime.ts +146 -0
- package/src/effect/bootstrap-runtime.ts +33 -0
- package/src/effect/bridge.ts +48 -0
- package/src/effect/cross-spawn-spawner.ts +514 -0
- package/src/effect/index.ts +5 -0
- package/src/effect/instance-ref.ts +11 -0
- package/src/effect/instance-registry.ts +12 -0
- package/src/effect/instance-state.ts +81 -0
- package/src/effect/logger.ts +73 -0
- package/src/effect/memo-map.ts +3 -0
- package/src/effect/observability.ts +107 -0
- package/src/effect/run-service.ts +52 -0
- package/src/effect/runner.ts +210 -0
- package/src/effect/runtime.ts +19 -0
- package/src/env/index.ts +37 -0
- package/src/file/ignore.ts +81 -0
- package/src/file/index.ts +664 -0
- package/src/file/protected.ts +59 -0
- package/src/file/ripgrep.ts +485 -0
- package/src/file/watcher.ts +163 -0
- package/src/flag/flag.ts +172 -0
- package/src/format/formatter.ts +403 -0
- package/src/format/index.ts +203 -0
- package/src/git/index.ts +260 -0
- package/src/global/index.ts +54 -0
- package/src/history/backfill.ts +162 -0
- package/src/history/extract.ts +67 -0
- package/src/history/fts-query.ts +15 -0
- package/src/history/fts.sql.ts +20 -0
- package/src/history/index.ts +10 -0
- package/src/history/resolve.ts +65 -0
- package/src/history/service.ts +258 -0
- package/src/history/writer.ts +112 -0
- package/src/id/id.ts +87 -0
- package/src/ide/index.ts +73 -0
- package/src/inbox/inbox-ref.ts +38 -0
- package/src/inbox/inbox.sql.ts +26 -0
- package/src/inbox/inbox.ts +223 -0
- package/src/inbox/index.ts +3 -0
- package/src/inbox/render.ts +40 -0
- package/src/index.ts +274 -0
- package/src/installation/index.ts +362 -0
- package/src/installation/version.ts +8 -0
- package/src/lsp/client.ts +249 -0
- package/src/lsp/diagnostic.ts +29 -0
- package/src/lsp/index.ts +3 -0
- package/src/lsp/language.ts +120 -0
- package/src/lsp/launch.ts +21 -0
- package/src/lsp/lsp.ts +519 -0
- package/src/lsp/server.ts +1956 -0
- package/src/mcp/auth.ts +144 -0
- package/src/mcp/index.ts +944 -0
- package/src/mcp/oauth-callback.ts +232 -0
- package/src/mcp/oauth-provider.ts +214 -0
- package/src/memory/fts-query.ts +37 -0
- package/src/memory/fts.sql.ts +19 -0
- package/src/memory/index.ts +1 -0
- package/src/memory/paths.ts +116 -0
- package/src/memory/reconcile.ts +144 -0
- package/src/memory/service.ts +144 -0
- package/src/metrics/client.ts +40 -0
- package/src/metrics/event.ts +43 -0
- package/src/metrics/index.ts +5 -0
- package/src/metrics/installation.ts +18 -0
- package/src/metrics/subscriber.ts +58 -0
- package/src/metrics/util.ts +9 -0
- package/src/node.ts +6 -0
- package/src/npm/config.ts +0 -0
- package/src/npm/index.ts +293 -0
- package/src/npmcli-config.d.ts +43 -0
- package/src/patch/index.ts +680 -0
- package/src/permission/arity.ts +163 -0
- package/src/permission/evaluate.ts +15 -0
- package/src/permission/index.ts +378 -0
- package/src/permission/schema.ts +17 -0
- package/src/plugin/checkpoint-splitover.ts +60 -0
- package/src/plugin/cloudflare.ts +76 -0
- package/src/plugin/codex.ts +607 -0
- package/src/plugin/github-copilot/copilot.ts +368 -0
- package/src/plugin/github-copilot/models.ts +153 -0
- package/src/plugin/glitch.ts +243 -0
- package/src/plugin/index.ts +581 -0
- package/src/plugin/install.ts +439 -0
- package/src/plugin/loader.ts +216 -0
- package/src/plugin/matcher.ts +33 -0
- package/src/plugin/meta.ts +188 -0
- package/src/plugin/mimo.ts +243 -0
- package/src/plugin/shared.ts +323 -0
- package/src/plugin/subagent-progress-checker.ts +147 -0
- package/src/project/bootstrap.ts +59 -0
- package/src/project/index.ts +2 -0
- package/src/project/instance.ts +190 -0
- package/src/project/project-id.ts +48 -0
- package/src/project/project.sql.ts +16 -0
- package/src/project/project.ts +522 -0
- package/src/project/schema.ts +15 -0
- package/src/project/vcs.ts +227 -0
- package/src/project/workspace-trust.ts +67 -0
- package/src/provider/auth.ts +234 -0
- package/src/provider/error.ts +216 -0
- package/src/provider/index.ts +5 -0
- package/src/provider/models.ts +180 -0
- package/src/provider/provider.ts +1788 -0
- package/src/provider/schema.ts +36 -0
- package/src/provider/sdk/copilot/README.md +5 -0
- package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +170 -0
- package/src/provider/sdk/copilot/chat/get-response-metadata.ts +15 -0
- package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +19 -0
- package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +64 -0
- package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +815 -0
- package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +28 -0
- package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +44 -0
- package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +83 -0
- package/src/provider/sdk/copilot/copilot-provider.ts +100 -0
- package/src/provider/sdk/copilot/index.ts +2 -0
- package/src/provider/sdk/copilot/openai-compatible-error.ts +27 -0
- package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +335 -0
- package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +22 -0
- package/src/provider/sdk/copilot/responses/openai-config.ts +18 -0
- package/src/provider/sdk/copilot/responses/openai-error.ts +22 -0
- package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +214 -0
- package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +1770 -0
- package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +173 -0
- package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +1 -0
- package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +87 -0
- package/src/provider/sdk/copilot/responses/tool/file-search.ts +127 -0
- package/src/provider/sdk/copilot/responses/tool/image-generation.ts +114 -0
- package/src/provider/sdk/copilot/responses/tool/local-shell.ts +64 -0
- package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +103 -0
- package/src/provider/sdk/copilot/responses/tool/web-search.ts +102 -0
- package/src/provider/transform.ts +1322 -0
- package/src/pty/index.ts +364 -0
- package/src/pty/pty.bun.ts +26 -0
- package/src/pty/pty.node.ts +27 -0
- package/src/pty/pty.ts +25 -0
- package/src/pty/schema.ts +17 -0
- package/src/question/index.ts +252 -0
- package/src/question/schema.ts +17 -0
- package/src/server/adapter.bun.ts +40 -0
- package/src/server/adapter.node.ts +66 -0
- package/src/server/adapter.ts +21 -0
- package/src/server/auth.ts +16 -0
- package/src/server/error.ts +53 -0
- package/src/server/event.ts +7 -0
- package/src/server/fence.ts +81 -0
- package/src/server/mdns.ts +60 -0
- package/src/server/middleware.ts +96 -0
- package/src/server/projectors.ts +28 -0
- package/src/server/proxy.ts +171 -0
- package/src/server/pty-ticket.ts +42 -0
- package/src/server/routes/control/index.ts +160 -0
- package/src/server/routes/control/workspace.ts +203 -0
- package/src/server/routes/global.ts +367 -0
- package/src/server/routes/instance/bash-interactive.ts +82 -0
- package/src/server/routes/instance/config.ts +89 -0
- package/src/server/routes/instance/event.ts +108 -0
- package/src/server/routes/instance/experimental.ts +408 -0
- package/src/server/routes/instance/file.ts +190 -0
- package/src/server/routes/instance/httpapi/config.ts +51 -0
- package/src/server/routes/instance/httpapi/permission.ts +72 -0
- package/src/server/routes/instance/httpapi/project.ts +62 -0
- package/src/server/routes/instance/httpapi/provider.ts +142 -0
- package/src/server/routes/instance/httpapi/question.ts +121 -0
- package/src/server/routes/instance/httpapi/server.ts +136 -0
- package/src/server/routes/instance/index.ts +301 -0
- package/src/server/routes/instance/mcp.ts +260 -0
- package/src/server/routes/instance/middleware.ts +35 -0
- package/src/server/routes/instance/permission.ts +73 -0
- package/src/server/routes/instance/project.ts +122 -0
- package/src/server/routes/instance/provider.ts +158 -0
- package/src/server/routes/instance/pty.ts +302 -0
- package/src/server/routes/instance/question.ts +162 -0
- package/src/server/routes/instance/session.ts +1296 -0
- package/src/server/routes/instance/sync.ts +143 -0
- package/src/server/routes/instance/trace.ts +59 -0
- package/src/server/routes/instance/tui.ts +384 -0
- package/src/server/routes/instance/workflows.ts +72 -0
- package/src/server/routes/ui.ts +37 -0
- package/src/server/server.ts +136 -0
- package/src/server/workspace.ts +122 -0
- package/src/session/auto-dream.ts +123 -0
- package/src/session/boundary.ts +77 -0
- package/src/session/budgeted-read.ts +118 -0
- package/src/session/checkpoint-align.ts +29 -0
- package/src/session/checkpoint-context.ts +36 -0
- package/src/session/checkpoint-paths.ts +86 -0
- package/src/session/checkpoint-progress-reconcile.ts +111 -0
- package/src/session/checkpoint-retry.ts +192 -0
- package/src/session/checkpoint-templates.ts +114 -0
- package/src/session/checkpoint-validator.ts +259 -0
- package/src/session/checkpoint.ts +1478 -0
- package/src/session/classify.ts +92 -0
- package/src/session/claude-import.ts +381 -0
- package/src/session/codex-import.ts +416 -0
- package/src/session/compaction.ts +543 -0
- package/src/session/external-import.sql.ts +18 -0
- package/src/session/external-import.ts +136 -0
- package/src/session/goal.ts +232 -0
- package/src/session/index.ts +1 -0
- package/src/session/instruction.ts +276 -0
- package/src/session/last-message-info.ts +32 -0
- package/src/session/llm-request-prefix.ts +82 -0
- package/src/session/llm.ts +725 -0
- package/src/session/max-mode.ts +397 -0
- package/src/session/message-v2.ts +1136 -0
- package/src/session/message.ts +191 -0
- package/src/session/opencode-import.ts +281 -0
- package/src/session/overflow.ts +53 -0
- package/src/session/prefix-capture-ref.ts +48 -0
- package/src/session/processor.ts +968 -0
- package/src/session/projectors.ts +137 -0
- package/src/session/prompt/anthropic.txt +154 -0
- package/src/session/prompt/beast.txt +155 -0
- package/src/session/prompt/build-switch.txt +5 -0
- package/src/session/prompt/codex.txt +79 -0
- package/src/session/prompt/compose.txt +115 -0
- package/src/session/prompt/copilot-gpt-5.txt +143 -0
- package/src/session/prompt/default.txt +151 -0
- package/src/session/prompt/gemini.txt +155 -0
- package/src/session/prompt/gpt.txt +107 -0
- package/src/session/prompt/kimi.txt +95 -0
- package/src/session/prompt/max-steps.txt +16 -0
- package/src/session/prompt/text-loop-recovery.ts +40 -0
- package/src/session/prompt/trinity.txt +97 -0
- package/src/session/prompt.ts +3476 -0
- package/src/session/prune.ts +481 -0
- package/src/session/retry.ts +166 -0
- package/src/session/revert.ts +161 -0
- package/src/session/run-state.ts +135 -0
- package/src/session/schema.ts +36 -0
- package/src/session/session.sql.ts +110 -0
- package/src/session/session.ts +908 -0
- package/src/session/status.ts +89 -0
- package/src/session/summary.ts +163 -0
- package/src/session/system.ts +86 -0
- package/src/session/todo.ts +77 -0
- package/src/share/index.ts +2 -0
- package/src/share/session.ts +57 -0
- package/src/share/share-next.ts +381 -0
- package/src/share/share.sql.ts +13 -0
- package/src/shell/shell.ts +110 -0
- package/src/skill/compose/.bundle/ask/SKILL.md +58 -0
- package/src/skill/compose/.bundle/brainstorm/SKILL.md +220 -0
- package/src/skill/compose/.bundle/brainstorm/scripts/frame-template.html +214 -0
- package/src/skill/compose/.bundle/brainstorm/scripts/helper.js +88 -0
- package/src/skill/compose/.bundle/brainstorm/scripts/server.cjs +354 -0
- package/src/skill/compose/.bundle/brainstorm/scripts/start-server.sh +148 -0
- package/src/skill/compose/.bundle/brainstorm/scripts/stop-server.sh +56 -0
- package/src/skill/compose/.bundle/brainstorm/spec-document-reviewer-prompt.md +50 -0
- package/src/skill/compose/.bundle/brainstorm/visual-companion.md +287 -0
- package/src/skill/compose/.bundle/debug/CREATION-LOG.md +119 -0
- package/src/skill/compose/.bundle/debug/SKILL.md +297 -0
- package/src/skill/compose/.bundle/debug/condition-based-waiting-example.ts +158 -0
- package/src/skill/compose/.bundle/debug/condition-based-waiting.md +115 -0
- package/src/skill/compose/.bundle/debug/defense-in-depth.md +122 -0
- package/src/skill/compose/.bundle/debug/find-polluter.sh +63 -0
- package/src/skill/compose/.bundle/debug/root-cause-tracing.md +169 -0
- package/src/skill/compose/.bundle/debug/test-academic.md +14 -0
- package/src/skill/compose/.bundle/debug/test-pressure-1.md +58 -0
- package/src/skill/compose/.bundle/debug/test-pressure-2.md +68 -0
- package/src/skill/compose/.bundle/debug/test-pressure-3.md +69 -0
- package/src/skill/compose/.bundle/execute/SKILL.md +71 -0
- package/src/skill/compose/.bundle/feedback/SKILL.md +214 -0
- package/src/skill/compose/.bundle/merge/SKILL.md +252 -0
- package/src/skill/compose/.bundle/new-skill/SKILL.md +656 -0
- package/src/skill/compose/.bundle/new-skill/anthropic-best-practices.md +1150 -0
- package/src/skill/compose/.bundle/new-skill/examples/CLAUDE_MD_TESTING.md +189 -0
- package/src/skill/compose/.bundle/new-skill/graphviz-conventions.dot +172 -0
- package/src/skill/compose/.bundle/new-skill/persuasion-principles.md +187 -0
- package/src/skill/compose/.bundle/new-skill/render-graphs.js +168 -0
- package/src/skill/compose/.bundle/new-skill/testing-skills-with-subagents.md +384 -0
- package/src/skill/compose/.bundle/parallel/SKILL.md +182 -0
- package/src/skill/compose/.bundle/plan/SKILL.md +161 -0
- package/src/skill/compose/.bundle/plan/plan-document-reviewer-prompt.md +50 -0
- package/src/skill/compose/.bundle/report/SKILL.md +180 -0
- package/src/skill/compose/.bundle/review/SKILL.md +104 -0
- package/src/skill/compose/.bundle/review/code-reviewer.md +171 -0
- package/src/skill/compose/.bundle/self-extend/SKILL.md +131 -0
- package/src/skill/compose/.bundle/self-extend/reference/hook-api.md +242 -0
- package/src/skill/compose/.bundle/self-extend/reference/skill-api.md +114 -0
- package/src/skill/compose/.bundle/self-extend/reference/tool-api.md +115 -0
- package/src/skill/compose/.bundle/self-extend/reference/tui-api.md +258 -0
- package/src/skill/compose/.bundle/subagent/SKILL.md +344 -0
- package/src/skill/compose/.bundle/subagent/code-quality-reviewer-prompt.md +24 -0
- package/src/skill/compose/.bundle/subagent/implementer-prompt.md +126 -0
- package/src/skill/compose/.bundle/subagent/spec-reviewer-prompt.md +112 -0
- package/src/skill/compose/.bundle/tdd/SKILL.md +372 -0
- package/src/skill/compose/.bundle/tdd/testing-anti-patterns.md +299 -0
- package/src/skill/compose/.bundle/verify/SKILL.md +140 -0
- package/src/skill/compose/.bundle/worktree/SKILL.md +234 -0
- package/src/skill/compose/LICENSE-karpathy +28 -0
- package/src/skill/compose/LICENSE-superpowers +26 -0
- package/src/skill/compose/bundle.macro.ts +30 -0
- package/src/skill/compose/extract.ts +85 -0
- package/src/skill/discovery.ts +116 -0
- package/src/skill/index.ts +317 -0
- package/src/snapshot/index.ts +777 -0
- package/src/sql.d.ts +4 -0
- package/src/storage/db.bun.ts +8 -0
- package/src/storage/db.node.ts +8 -0
- package/src/storage/db.ts +172 -0
- package/src/storage/index.ts +26 -0
- package/src/storage/json-migration.ts +426 -0
- package/src/storage/read-sqlite.bun.ts +11 -0
- package/src/storage/read-sqlite.node.ts +13 -0
- package/src/storage/read-sqlite.ts +10 -0
- package/src/storage/schema.sql.ts +10 -0
- package/src/storage/schema.ts +7 -0
- package/src/storage/storage.ts +331 -0
- package/src/sync/README.md +179 -0
- package/src/sync/event.sql.ts +16 -0
- package/src/sync/index.ts +278 -0
- package/src/sync/schema.ts +14 -0
- package/src/task/events.ts +28 -0
- package/src/task/gate-state.ts +54 -0
- package/src/task/gate.ts +116 -0
- package/src/task/index.ts +1 -0
- package/src/task/registry.ts +394 -0
- package/src/task/schema.ts +43 -0
- package/src/task/task.sql.ts +50 -0
- package/src/team/events.ts +22 -0
- package/src/team/index.ts +113 -0
- package/src/team/schema.ts +31 -0
- package/src/temporary.ts +33 -0
- package/src/tool/actor.shell.txt +72 -0
- package/src/tool/actor.ts +808 -0
- package/src/tool/actor.txt +103 -0
- package/src/tool/apply_patch.ts +308 -0
- package/src/tool/apply_patch.txt +33 -0
- package/src/tool/bash-interactive.ts +183 -0
- package/src/tool/bash.ts +696 -0
- package/src/tool/bash.txt +123 -0
- package/src/tool/change-directory.ts +91 -0
- package/src/tool/codesearch.ts +63 -0
- package/src/tool/codesearch.txt +12 -0
- package/src/tool/context-compressor.ts +125 -0
- package/src/tool/context-compressor.txt +5 -0
- package/src/tool/deep-file-analysis.ts +817 -0
- package/src/tool/deep-file-analysis.txt +12 -0
- package/src/tool/edit.ts +685 -0
- package/src/tool/edit.txt +10 -0
- package/src/tool/external-directory.ts +132 -0
- package/src/tool/glob.ts +100 -0
- package/src/tool/glob.txt +6 -0
- package/src/tool/grep.ts +145 -0
- package/src/tool/grep.txt +8 -0
- package/src/tool/history.ts +146 -0
- package/src/tool/history.txt +17 -0
- package/src/tool/index.ts +4 -0
- package/src/tool/invalid.ts +20 -0
- package/src/tool/invocation-style.ts +17 -0
- package/src/tool/lsp.ts +91 -0
- package/src/tool/lsp.txt +19 -0
- package/src/tool/mcp-exa.ts +78 -0
- package/src/tool/memory-path-guard.ts +162 -0
- package/src/tool/memory.ts +81 -0
- package/src/tool/memory.txt +69 -0
- package/src/tool/model-router.ts +86 -0
- package/src/tool/model-router.txt +6 -0
- package/src/tool/multiedit.ts +61 -0
- package/src/tool/multiedit.txt +41 -0
- package/src/tool/pattern-learner.ts +179 -0
- package/src/tool/pattern-learner.txt +4 -0
- package/src/tool/plan-enter.txt +14 -0
- package/src/tool/plan-exit.txt +13 -0
- package/src/tool/plan.ts +90 -0
- package/src/tool/question.ts +67 -0
- package/src/tool/question.txt +10 -0
- package/src/tool/read.ts +327 -0
- package/src/tool/read.txt +14 -0
- package/src/tool/recoverable.ts +35 -0
- package/src/tool/registry.ts +451 -0
- package/src/tool/schema.ts +17 -0
- package/src/tool/self-healing.ts +145 -0
- package/src/tool/self-healing.txt +5 -0
- package/src/tool/self-supervision.ts +208 -0
- package/src/tool/self-supervision.txt +4 -0
- package/src/tool/session-cwd.ts +35 -0
- package/src/tool/shell-tokenize.ts +346 -0
- package/src/tool/shell-wrap.ts +190 -0
- package/src/tool/skill.ts +76 -0
- package/src/tool/skill.txt +5 -0
- package/src/tool/smart-predict.ts +148 -0
- package/src/tool/smart-predict.txt +4 -0
- package/src/tool/task.shell.txt +57 -0
- package/src/tool/task.ts +456 -0
- package/src/tool/task.txt +56 -0
- package/src/tool/tool.ts +166 -0
- package/src/tool/truncate.ts +201 -0
- package/src/tool/truncation-dir.ts +4 -0
- package/src/tool/webfetch.ts +199 -0
- package/src/tool/webfetch.txt +13 -0
- package/src/tool/websearch/glitch.ts +118 -0
- package/src/tool/websearch/index.ts +104 -0
- package/src/tool/websearch/mimo.ts +118 -0
- package/src/tool/websearch/websearch.txt +14 -0
- package/src/tool/workflow.ts +164 -0
- package/src/tool/workflow.txt +25 -0
- package/src/tool/write.ts +88 -0
- package/src/tool/write.txt +9 -0
- package/src/util/abort.ts +35 -0
- package/src/util/archive.ts +15 -0
- package/src/util/color.ts +17 -0
- package/src/util/data-url.ts +9 -0
- package/src/util/defer.ts +10 -0
- package/src/util/effect-http-client.ts +11 -0
- package/src/util/effect-zod.ts +367 -0
- package/src/util/error.ts +78 -0
- package/src/util/filesystem.ts +243 -0
- package/src/util/fn.ts +21 -0
- package/src/util/format.ts +20 -0
- package/src/util/glitch-process.ts +24 -0
- package/src/util/iife.ts +3 -0
- package/src/util/index.ts +12 -0
- package/src/util/keybind.ts +101 -0
- package/src/util/lazy.ts +18 -0
- package/src/util/local-context.ts +23 -0
- package/src/util/locale.ts +79 -0
- package/src/util/lock.ts +96 -0
- package/src/util/log.ts +234 -0
- package/src/util/media.ts +26 -0
- package/src/util/mimo-process.ts +24 -0
- package/src/util/network.ts +9 -0
- package/src/util/process.ts +174 -0
- package/src/util/queue.ts +60 -0
- package/src/util/record.ts +3 -0
- package/src/util/rpc.ts +64 -0
- package/src/util/schema.ts +53 -0
- package/src/util/scrap.ts +10 -0
- package/src/util/signal.ts +12 -0
- package/src/util/timeout.ts +14 -0
- package/src/util/token.ts +5 -0
- package/src/util/update-schema.ts +13 -0
- package/src/util/which.ts +14 -0
- package/src/util/wildcard.ts +57 -0
- package/src/workflow/builtin/deep-research.js +391 -0
- package/src/workflow/builtin/model-router.js +92 -0
- package/src/workflow/builtin/self-healing.js +94 -0
- package/src/workflow/builtin/swarm-mode.js +140 -0
- package/src/workflow/builtin.ts +65 -0
- package/src/workflow/events.ts +72 -0
- package/src/workflow/meta.ts +335 -0
- package/src/workflow/persistence.ts +312 -0
- package/src/workflow/resolve.ts +45 -0
- package/src/workflow/runtime-ref.ts +18 -0
- package/src/workflow/runtime.ts +1234 -0
- package/src/workflow/sandbox.ts +286 -0
- package/src/workflow/workflow.sql.ts +31 -0
- package/src/workflow/workspace.ts +69 -0
- package/src/worktree/index.ts +614 -0
- package/sst-env.d.ts +10 -0
- package/test/AGENTS.md +133 -0
- package/test/account/repo.test.ts +352 -0
- package/test/account/service.test.ts +456 -0
- package/test/acp/agent-interface.test.ts +51 -0
- package/test/acp/event-subscription.test.ts +725 -0
- package/test/actor/cancel-cascade.test.ts +432 -0
- package/test/actor/no-completion-listener.test.ts +41 -0
- package/test/actor/poststop-progress-write-permission.repro.test.ts +414 -0
- package/test/actor/registry-render.test.ts +113 -0
- package/test/actor/registry-status.test.ts +111 -0
- package/test/actor/registry.test.ts +619 -0
- package/test/actor/return-header.test.ts +40 -0
- package/test/actor/spawn-lifecycle.test.ts +346 -0
- package/test/actor/spawn-no-deadlock.test.ts +340 -0
- package/test/actor/spawn-notification.test.ts +393 -0
- package/test/actor/spawn-task-autostart.test.ts +530 -0
- package/test/actor/spawn.test.ts +1072 -0
- package/test/actor/status-event-payload.test.ts +132 -0
- package/test/actor/terminology.test.ts +39 -0
- package/test/actor/turn.test.ts +125 -0
- package/test/actor/waiter.test.ts +246 -0
- package/test/agent/agent.test.ts +861 -0
- package/test/agent/allowlist.test.ts +45 -0
- package/test/auth/auth.test.ts +86 -0
- package/test/bus/bus-effect.test.ts +162 -0
- package/test/bus/bus-integration.test.ts +87 -0
- package/test/bus/bus.test.ts +219 -0
- package/test/cli/account.test.ts +26 -0
- package/test/cli/cmd/tui/prompt-part.test.ts +47 -0
- package/test/cli/error.test.ts +18 -0
- package/test/cli/github-action.test.ts +198 -0
- package/test/cli/github-remote.test.ts +80 -0
- package/test/cli/import.test.ts +54 -0
- package/test/cli/plugin-auth-picker.test.ts +120 -0
- package/test/cli/run-completion.test.ts +131 -0
- package/test/cli/tui/keybind-plugin.test.ts +90 -0
- package/test/cli/tui/plugin-add.test.ts +111 -0
- package/test/cli/tui/plugin-install.test.ts +87 -0
- package/test/cli/tui/plugin-lifecycle.test.ts +224 -0
- package/test/cli/tui/plugin-loader-entrypoint.test.ts +484 -0
- package/test/cli/tui/plugin-loader-pure.test.ts +71 -0
- package/test/cli/tui/plugin-loader.test.ts +816 -0
- package/test/cli/tui/plugin-toggle.test.ts +157 -0
- package/test/cli/tui/revert-diff.test.ts +35 -0
- package/test/cli/tui/route-agent-id.test.ts +26 -0
- package/test/cli/tui/sidebar-tps.test.ts +63 -0
- package/test/cli/tui/slot-replace.test.tsx +47 -0
- package/test/cli/tui/sync-bucket.test.ts +29 -0
- package/test/cli/tui/theme-store.test.ts +51 -0
- package/test/cli/tui/thread.test.ts +122 -0
- package/test/cli/tui/transcript.test.ts +426 -0
- package/test/cli/tui/use-event.test.tsx +175 -0
- package/test/cli/tui/voice.test.ts +443 -0
- package/test/command/deep-research-command.test.ts +16 -0
- package/test/config/agent-color.test.ts +77 -0
- package/test/config/checkpoint-fork.test.ts +21 -0
- package/test/config/config.test.ts +2577 -0
- package/test/config/fixtures/empty-frontmatter.md +4 -0
- package/test/config/fixtures/frontmatter.md +28 -0
- package/test/config/fixtures/markdown-header.md +11 -0
- package/test/config/fixtures/no-frontmatter.md +1 -0
- package/test/config/fixtures/weird-model-id.md +13 -0
- package/test/config/lsp.test.ts +87 -0
- package/test/config/markdown.test.ts +228 -0
- package/test/config/plugin.test.ts +0 -0
- package/test/config/tui.test.ts +627 -0
- package/test/control-plane/adaptors.test.ts +71 -0
- package/test/control-plane/sse.test.ts +56 -0
- package/test/effect/app-runtime-logger.test.ts +92 -0
- package/test/effect/cross-spawn-spawner.test.ts +411 -0
- package/test/effect/instance-state.test.ts +482 -0
- package/test/effect/observability.test.ts +46 -0
- package/test/effect/run-service.test.ts +46 -0
- package/test/effect/runner-warn-log.test.ts +111 -0
- package/test/effect/runner.test.ts +494 -0
- package/test/fake/provider.ts +90 -0
- package/test/file/fsmonitor.test.ts +68 -0
- package/test/file/ignore.test.ts +10 -0
- package/test/file/index.test.ts +956 -0
- package/test/file/path-traversal.test.ts +204 -0
- package/test/file/ripgrep.test.ts +214 -0
- package/test/file/watcher.test.ts +249 -0
- package/test/filesystem/filesystem.test.ts +319 -0
- package/test/fixture/db.ts +11 -0
- package/test/fixture/fixture.test.ts +58 -0
- package/test/fixture/fixture.ts +190 -0
- package/test/fixture/flock-worker.ts +72 -0
- package/test/fixture/lsp/fake-lsp-server.js +75 -0
- package/test/fixture/plug-worker.ts +93 -0
- package/test/fixture/plugin-meta-worker.ts +19 -0
- package/test/fixture/skills/agents-sdk/SKILL.md +152 -0
- package/test/fixture/skills/agents-sdk/references/callable.md +92 -0
- package/test/fixture/skills/cloudflare/SKILL.md +211 -0
- package/test/fixture/skills/index.json +6 -0
- package/test/fixture/tui-plugin.ts +328 -0
- package/test/fixture/tui-runtime.ts +31 -0
- package/test/format/format.test.ts +244 -0
- package/test/git/git.test.ts +128 -0
- package/test/global/fixture/global-paths-worker.ts +17 -0
- package/test/global/glitchcode-home.test.ts +143 -0
- package/test/global/mimocode-home.test.ts +143 -0
- package/test/history/backfill.test.ts +149 -0
- package/test/history/extract.test.ts +106 -0
- package/test/history/fts-query.test.ts +30 -0
- package/test/history/resolve.test.ts +130 -0
- package/test/history/service.test.ts +210 -0
- package/test/history/writer.test.ts +163 -0
- package/test/ide/ide.test.ts +82 -0
- package/test/inbox/drain-in-loop.test.ts +230 -0
- package/test/inbox/fork-agent-compat.test.ts +387 -0
- package/test/inbox/gc-on-init.test.ts +167 -0
- package/test/inbox/send-no-block.test.ts +120 -0
- package/test/inbox/sender-cancel-independence.test.ts +160 -0
- package/test/inbox/wake-matrix.test.ts +141 -0
- package/test/installation/installation.test.ts +255 -0
- package/test/keybind.test.ts +421 -0
- package/test/lib/effect.ts +53 -0
- package/test/lib/filesystem.ts +10 -0
- package/test/lib/llm-server.ts +770 -0
- package/test/lib/mock-llm.ts +159 -0
- package/test/lib/scripted-llm-server.ts +245 -0
- package/test/lsp/client.test.ts +98 -0
- package/test/lsp/index.test.ts +109 -0
- package/test/lsp/launch.test.ts +22 -0
- package/test/lsp/lifecycle.test.ts +184 -0
- package/test/mcp/headers.test.ts +178 -0
- package/test/mcp/lifecycle.test.ts +824 -0
- package/test/mcp/oauth-auto-connect.test.ts +281 -0
- package/test/mcp/oauth-browser.test.ts +268 -0
- package/test/mcp/oauth-callback.test.ts +34 -0
- package/test/memory/abort-leak-webfetch.ts +49 -0
- package/test/memory/abort-leak.test.ts +127 -0
- package/test/memory/cc-frontmatter.test.ts +85 -0
- package/test/memory/cc-paths.test.ts +60 -0
- package/test/memory/cc-reconcile.test.ts +239 -0
- package/test/memory/cc-search.test.ts +151 -0
- package/test/memory/fts-query.test.ts +48 -0
- package/test/memory/fts-rowid-stability.test.ts +271 -0
- package/test/memory/paths.test.ts +210 -0
- package/test/memory/reconcile.test.ts +115 -0
- package/test/memory/service.test.ts +169 -0
- package/test/npm.test.ts +18 -0
- package/test/patch/patch.test.ts +348 -0
- package/test/permission/abort.test.ts +116 -0
- package/test/permission/arity.test.ts +33 -0
- package/test/permission/disabled.test.ts +51 -0
- package/test/permission/next.test.ts +1080 -0
- package/test/permission/non-interactive.test.ts +55 -0
- package/test/permission-task.test.ts +326 -0
- package/test/plugin/actor-hooks.test.ts +1471 -0
- package/test/plugin/auth-override.test.ts +79 -0
- package/test/plugin/checkpoint-splitover.test.ts +434 -0
- package/test/plugin/cloudflare.test.ts +68 -0
- package/test/plugin/codex.test.ts +123 -0
- package/test/plugin/github-copilot-models.test.ts +163 -0
- package/test/plugin/glitch.test.ts +257 -0
- package/test/plugin/install-concurrency.test.ts +140 -0
- package/test/plugin/install.test.ts +570 -0
- package/test/plugin/loader-shared.test.ts +1169 -0
- package/test/plugin/matcher.test.ts +97 -0
- package/test/plugin/meta.test.ts +137 -0
- package/test/plugin/mimo.test.ts +257 -0
- package/test/plugin/shared.test.ts +88 -0
- package/test/plugin/subagent-progress-checker.test.ts +227 -0
- package/test/plugin/trigger.test.ts +116 -0
- package/test/plugin/workspace-adaptor.test.ts +109 -0
- package/test/preload.ts +102 -0
- package/test/project/migrate-global.test.ts +150 -0
- package/test/project/project-id.test.ts +64 -0
- package/test/project/project.test.ts +502 -0
- package/test/project/vcs.test.ts +286 -0
- package/test/project/worktree-remove.test.ts +126 -0
- package/test/project/worktree.test.ts +214 -0
- package/test/provider/amazon-bedrock.test.ts +462 -0
- package/test/provider/copilot/convert-to-copilot-messages.test.ts +523 -0
- package/test/provider/copilot/copilot-chat-model.test.ts +592 -0
- package/test/provider/error.test.ts +160 -0
- package/test/provider/gitlab-duo.test.ts +413 -0
- package/test/provider/model-groups.test.ts +389 -0
- package/test/provider/provider-chunk-timeout.test.ts +23 -0
- package/test/provider/provider.test.ts +2651 -0
- package/test/provider/transform.test.ts +3379 -0
- package/test/pty/pty-output-isolation.test.ts +146 -0
- package/test/pty/pty-session.test.ts +102 -0
- package/test/pty/pty-shell.test.ts +69 -0
- package/test/question/question.test.ts +464 -0
- package/test/server/global-session-list.test.ts +105 -0
- package/test/server/project-init-git.test.ts +122 -0
- package/test/server/session-actions.test.ts +49 -0
- package/test/server/session-list.test.ts +110 -0
- package/test/server/session-messages.test.ts +220 -0
- package/test/server/session-prompt-busy.test.ts +146 -0
- package/test/server/session-select.test.ts +100 -0
- package/test/server/session-task-route.test.ts +165 -0
- package/test/server/summarize-route-main-slice.test.ts +99 -0
- package/test/server/trace-attributes.test.ts +76 -0
- package/test/server/workflows-route.test.ts +279 -0
- package/test/session/bootstrap-skip-system.test.ts +121 -0
- package/test/session/boundary.test.ts +33 -0
- package/test/session/budgeted-read.test.ts +74 -0
- package/test/session/checkpoint-align.test.ts +58 -0
- package/test/session/checkpoint-boundary.test.ts +186 -0
- package/test/session/checkpoint-child-session.test.ts +508 -0
- package/test/session/checkpoint-context.test.ts +141 -0
- package/test/session/checkpoint-drain.test.ts +188 -0
- package/test/session/checkpoint-extract-titles.test.ts +58 -0
- package/test/session/checkpoint-fork-mode.test.ts +576 -0
- package/test/session/checkpoint-main-slice.test.ts +259 -0
- package/test/session/checkpoint-paths.test.ts +78 -0
- package/test/session/checkpoint-permission.test.ts +136 -0
- package/test/session/checkpoint-progress-reconcile.test.ts +219 -0
- package/test/session/checkpoint-rebuild-unify.test.ts +143 -0
- package/test/session/checkpoint-rebuild-v3.test.ts +248 -0
- package/test/session/checkpoint-render-verify.test.ts +512 -0
- package/test/session/checkpoint-retry.test.ts +150 -0
- package/test/session/checkpoint-splitover-integration.test.ts +533 -0
- package/test/session/checkpoint-templates.test.ts +51 -0
- package/test/session/checkpoint-thresholds.test.ts +120 -0
- package/test/session/checkpoint-validator.test.ts +189 -0
- package/test/session/classify-integration.test.ts +476 -0
- package/test/session/classify.test.ts +335 -0
- package/test/session/codex-import.test.ts +331 -0
- package/test/session/compaction-agent-scope.test.ts +209 -0
- package/test/session/context-inheritance.test.ts +46 -0
- package/test/session/external-import.test.ts +17 -0
- package/test/session/fork-prefix-invariant.test.ts +116 -0
- package/test/session/goal.test.ts +106 -0
- package/test/session/instruction.test.ts +387 -0
- package/test/session/invalid-output-continuation.test.ts +150 -0
- package/test/session/last-message-info.test.ts +47 -0
- package/test/session/length-tool-safety.test.ts +121 -0
- package/test/session/llm-request-prefix.test.ts +197 -0
- package/test/session/llm-retry.test.ts +59 -0
- package/test/session/llm-system-prompt.test.ts +479 -0
- package/test/session/llm.test.ts +1266 -0
- package/test/session/main-lifecycle.test.ts +51 -0
- package/test/session/main-runloop-history-invariant.test.ts +182 -0
- package/test/session/max-mode-econnreset.test.ts +229 -0
- package/test/session/max-mode.test.ts +54 -0
- package/test/session/message-v2-filter.test.ts +197 -0
- package/test/session/message-v2.test.ts +1119 -0
- package/test/session/messages-default-main.test.ts +105 -0
- package/test/session/messages-pagination.test.ts +888 -0
- package/test/session/overflow.test.ts +576 -0
- package/test/session/processor-effect.test.ts +853 -0
- package/test/session/prompt-effect.test.ts +1614 -0
- package/test/session/prompt-rebuild-loop.test.ts +108 -0
- package/test/session/prompt-rebuild-reset.test.ts +67 -0
- package/test/session/prompt-sweep.test.ts +145 -0
- package/test/session/prompt-task-gate.test.ts +127 -0
- package/test/session/prompt.test.ts +703 -0
- package/test/session/prune-main-slice.test.ts +272 -0
- package/test/session/prune-skip-system.test.ts +346 -0
- package/test/session/prune.test.ts +419 -0
- package/test/session/rebuild-microcompact.test.ts +318 -0
- package/test/session/recall-reminder.test.ts +37 -0
- package/test/session/retry.test.ts +410 -0
- package/test/session/revert-compact.test.ts +639 -0
- package/test/session/run-state-tuple-key.test.ts +152 -0
- package/test/session/session-create-registers-main.test.ts +70 -0
- package/test/session/session.test.ts +181 -0
- package/test/session/snapshot-tool-race.test.ts +301 -0
- package/test/session/structured-output-integration.test.ts +264 -0
- package/test/session/structured-output-retry.test.ts +127 -0
- package/test/session/structured-output.test.ts +397 -0
- package/test/session/summary-main-slice.test.ts +170 -0
- package/test/session/system.test.ts +72 -0
- package/test/session/text-loop-detection.test.ts +185 -0
- package/test/session/text-loop-integration.test.ts +448 -0
- package/test/share/share-next.test.ts +332 -0
- package/test/shell/shell.test.ts +73 -0
- package/test/skill/compose-review.test.ts +141 -0
- package/test/skill/discovery.test.ts +116 -0
- package/test/skill/skill.test.ts +465 -0
- package/test/snapshot/snapshot.test.ts +1531 -0
- package/test/storage/db.test.ts +16 -0
- package/test/storage/json-migration.test.ts +831 -0
- package/test/storage/storage.test.ts +293 -0
- package/test/sync/index.test.ts +237 -0
- package/test/task/gate-state.test.ts +66 -0
- package/test/task/gate.test.ts +167 -0
- package/test/task/registry.test.ts +171 -0
- package/test/task/state-machine.test.ts +292 -0
- package/test/team/migrate-to-inbox.test.ts +124 -0
- package/test/team/team.test.ts +75 -0
- package/test/tool/__snapshots__/tool.test.ts.snap +9 -0
- package/test/tool/actor-cancel.test.ts +206 -0
- package/test/tool/actor-recover.test.ts +50 -0
- package/test/tool/actor-send.test.ts +200 -0
- package/test/tool/actor-status.test.ts +296 -0
- package/test/tool/actor-wait.test.ts +193 -0
- package/test/tool/actor.shell.test.ts +250 -0
- package/test/tool/actor.test.ts +748 -0
- package/test/tool/apply_patch.test.ts +626 -0
- package/test/tool/bash.test.ts +1195 -0
- package/test/tool/describe-workflow.test.ts +12 -0
- package/test/tool/edit.test.ts +691 -0
- package/test/tool/external-directory.test.ts +207 -0
- package/test/tool/fixtures/large-image.png +0 -0
- package/test/tool/fixtures/models-api.json +65179 -0
- package/test/tool/glob.test.ts +81 -0
- package/test/tool/grep.test.ts +114 -0
- package/test/tool/history.test.ts +144 -0
- package/test/tool/invocation-style.test.ts +30 -0
- package/test/tool/memory-edit-ask-skip.test.ts +62 -0
- package/test/tool/memory-path-guard.test.ts +594 -0
- package/test/tool/memory.test.ts +71 -0
- package/test/tool/question.test.ts +167 -0
- package/test/tool/read.test.ts +483 -0
- package/test/tool/recoverable.test.ts +36 -0
- package/test/tool/registry-invocation-style.test.ts +121 -0
- package/test/tool/registry.test.ts +164 -0
- package/test/tool/shell-tokenize.test.ts +273 -0
- package/test/tool/shell-wrap-missing-script.test.ts +128 -0
- package/test/tool/shell-wrap.test.ts +257 -0
- package/test/tool/skill.test.ts +99 -0
- package/test/tool/task-recover.test.ts +36 -0
- package/test/tool/task.shell.test.ts +234 -0
- package/test/tool/task.test.ts +296 -0
- package/test/tool/tool-def-shell-shape.test.ts +23 -0
- package/test/tool/tool-define.test.ts +59 -0
- package/test/tool/tool-validation-error.test.ts +25 -0
- package/test/tool/truncation.test.ts +253 -0
- package/test/tool/webfetch.test.ts +103 -0
- package/test/tool/whitelist.test.ts +373 -0
- package/test/tool/write.test.ts +244 -0
- package/test/util/data-url.test.ts +14 -0
- package/test/util/effect-zod.test.ts +869 -0
- package/test/util/error.test.ts +38 -0
- package/test/util/filesystem.test.ts +656 -0
- package/test/util/format.test.ts +59 -0
- package/test/util/glob.test.ts +164 -0
- package/test/util/iife.test.ts +36 -0
- package/test/util/lazy.test.ts +50 -0
- package/test/util/lock.test.ts +72 -0
- package/test/util/log.test.ts +69 -0
- package/test/util/module.test.ts +59 -0
- package/test/util/process.test.ts +128 -0
- package/test/util/queue.test.ts +64 -0
- package/test/util/timeout.test.ts +21 -0
- package/test/util/which.test.ts +100 -0
- package/test/util/wildcard.test.ts +90 -0
- package/test/workflow/builtin.test.ts +22 -0
- package/test/workflow/deep-research-cluster.test.ts +47 -0
- package/test/workflow/lib.ts +243 -0
- package/test/workflow/meta.test.ts +142 -0
- package/test/workflow/model-routing.test.ts +68 -0
- package/test/workflow/persistence.test.ts +229 -0
- package/test/workflow/resolve.test.ts +37 -0
- package/test/workflow/runtime-nested.test.ts +419 -0
- package/test/workflow/runtime-worktree.test.ts +261 -0
- package/test/workflow/runtime.test.ts +1078 -0
- package/test/workflow/sandbox.test.ts +259 -0
- package/test/workflow/tool.test.ts +473 -0
- package/test/workflow/verify-wow.test.ts +144 -0
- package/test/workflow/workspace.test.ts +88 -0
- package/test/workspace/workspace-restore.test.ts +281 -0
- package/test/worktree/index.test.ts +30 -0
- package/tsconfig.json +24 -0
package/src/tool/lsp.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import z from "zod"
|
|
2
|
+
import { Effect } from "effect"
|
|
3
|
+
import * as Tool from "./tool"
|
|
4
|
+
import path from "path"
|
|
5
|
+
import { LSP } from "../lsp"
|
|
6
|
+
import DESCRIPTION from "./lsp.txt"
|
|
7
|
+
import { Instance } from "../project/instance"
|
|
8
|
+
import { pathToFileURL } from "url"
|
|
9
|
+
import { assertExternalDirectoryEffect } from "./external-directory"
|
|
10
|
+
import { AppFileSystem } from "@mimo-ai/shared/filesystem"
|
|
11
|
+
|
|
12
|
+
const operations = [
|
|
13
|
+
"goToDefinition",
|
|
14
|
+
"findReferences",
|
|
15
|
+
"hover",
|
|
16
|
+
"documentSymbol",
|
|
17
|
+
"workspaceSymbol",
|
|
18
|
+
"goToImplementation",
|
|
19
|
+
"prepareCallHierarchy",
|
|
20
|
+
"incomingCalls",
|
|
21
|
+
"outgoingCalls",
|
|
22
|
+
] as const
|
|
23
|
+
|
|
24
|
+
export const LspTool = Tool.define(
|
|
25
|
+
"lsp",
|
|
26
|
+
Effect.gen(function* () {
|
|
27
|
+
const lsp = yield* LSP.Service
|
|
28
|
+
const fs = yield* AppFileSystem.Service
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
description: DESCRIPTION,
|
|
32
|
+
parameters: z.object({
|
|
33
|
+
operation: z.enum(operations).describe("The LSP operation to perform"),
|
|
34
|
+
filePath: z.string().describe("The absolute or relative path to the file"),
|
|
35
|
+
line: z.number().int().min(1).describe("The line number (1-based, as shown in editors)"),
|
|
36
|
+
character: z.number().int().min(1).describe("The character offset (1-based, as shown in editors)"),
|
|
37
|
+
}),
|
|
38
|
+
execute: (
|
|
39
|
+
args: { operation: (typeof operations)[number]; filePath: string; line: number; character: number },
|
|
40
|
+
ctx: Tool.Context,
|
|
41
|
+
) =>
|
|
42
|
+
Effect.gen(function* () {
|
|
43
|
+
const file = path.isAbsolute(args.filePath) ? args.filePath : path.join(Instance.directory, args.filePath)
|
|
44
|
+
yield* assertExternalDirectoryEffect(ctx, file)
|
|
45
|
+
yield* ctx.ask({ permission: "lsp", patterns: ["*"], always: ["*"], metadata: {} })
|
|
46
|
+
|
|
47
|
+
const uri = pathToFileURL(file).href
|
|
48
|
+
const position = { file, line: args.line - 1, character: args.character - 1 }
|
|
49
|
+
const relPath = path.relative(Instance.worktree, file)
|
|
50
|
+
const title = `${args.operation} ${relPath}:${args.line}:${args.character}`
|
|
51
|
+
|
|
52
|
+
const exists = yield* fs.existsSafe(file)
|
|
53
|
+
if (!exists) throw new Error(`File not found: ${file}`)
|
|
54
|
+
|
|
55
|
+
const available = yield* lsp.hasClients(file)
|
|
56
|
+
if (!available) throw new Error("No LSP server available for this file type.")
|
|
57
|
+
|
|
58
|
+
yield* lsp.touchFile(file, true)
|
|
59
|
+
|
|
60
|
+
const result: unknown[] = yield* (() => {
|
|
61
|
+
switch (args.operation) {
|
|
62
|
+
case "goToDefinition":
|
|
63
|
+
return lsp.definition(position)
|
|
64
|
+
case "findReferences":
|
|
65
|
+
return lsp.references(position)
|
|
66
|
+
case "hover":
|
|
67
|
+
return lsp.hover(position)
|
|
68
|
+
case "documentSymbol":
|
|
69
|
+
return lsp.documentSymbol(uri)
|
|
70
|
+
case "workspaceSymbol":
|
|
71
|
+
return lsp.workspaceSymbol("")
|
|
72
|
+
case "goToImplementation":
|
|
73
|
+
return lsp.implementation(position)
|
|
74
|
+
case "prepareCallHierarchy":
|
|
75
|
+
return lsp.prepareCallHierarchy(position)
|
|
76
|
+
case "incomingCalls":
|
|
77
|
+
return lsp.incomingCalls(position)
|
|
78
|
+
case "outgoingCalls":
|
|
79
|
+
return lsp.outgoingCalls(position)
|
|
80
|
+
}
|
|
81
|
+
})()
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
title,
|
|
85
|
+
metadata: { result },
|
|
86
|
+
output: result.length === 0 ? `No results found for ${args.operation}` : JSON.stringify(result, null, 2),
|
|
87
|
+
}
|
|
88
|
+
}),
|
|
89
|
+
}
|
|
90
|
+
}),
|
|
91
|
+
)
|
package/src/tool/lsp.txt
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Interact with Language Server Protocol (LSP) servers to get code intelligence features.
|
|
2
|
+
|
|
3
|
+
Supported operations:
|
|
4
|
+
- goToDefinition: Find where a symbol is defined
|
|
5
|
+
- findReferences: Find all references to a symbol
|
|
6
|
+
- hover: Get hover information (documentation, type info) for a symbol
|
|
7
|
+
- documentSymbol: Get all symbols (functions, classes, variables) in a document
|
|
8
|
+
- workspaceSymbol: Search for symbols across the entire workspace
|
|
9
|
+
- goToImplementation: Find implementations of an interface or abstract method
|
|
10
|
+
- prepareCallHierarchy: Get call hierarchy item at a position (functions/methods)
|
|
11
|
+
- incomingCalls: Find all functions/methods that call the function at a position
|
|
12
|
+
- outgoingCalls: Find all functions/methods called by the function at a position
|
|
13
|
+
|
|
14
|
+
All operations require:
|
|
15
|
+
- filePath: The file to operate on
|
|
16
|
+
- line: The line number (1-based, as shown in editors)
|
|
17
|
+
- character: The character offset (1-based, as shown in editors)
|
|
18
|
+
|
|
19
|
+
Note: LSP servers must be configured for the file type. If no server is available, an error will be returned.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Duration, Effect, Schema } from "effect"
|
|
2
|
+
import { HttpClient, HttpClientRequest } from "effect/unstable/http"
|
|
3
|
+
|
|
4
|
+
const URL = process.env.EXA_API_KEY
|
|
5
|
+
? `https://mcp.exa.ai/mcp?exaApiKey=${encodeURIComponent(process.env.EXA_API_KEY)}`
|
|
6
|
+
: "https://mcp.exa.ai/mcp"
|
|
7
|
+
|
|
8
|
+
const McpResult = Schema.Struct({
|
|
9
|
+
result: Schema.Struct({
|
|
10
|
+
content: Schema.Array(
|
|
11
|
+
Schema.Struct({
|
|
12
|
+
type: Schema.String,
|
|
13
|
+
text: Schema.String,
|
|
14
|
+
}),
|
|
15
|
+
),
|
|
16
|
+
}),
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
const decode = Schema.decodeUnknownEffect(Schema.fromJsonString(McpResult))
|
|
20
|
+
|
|
21
|
+
const parseSse = Effect.fn("McpExa.parseSse")(function* (body: string) {
|
|
22
|
+
for (const line of body.split("\n")) {
|
|
23
|
+
if (!line.startsWith("data: ")) continue
|
|
24
|
+
const data = yield* decode(line.substring(6))
|
|
25
|
+
if (data.result.content[0]?.text) return data.result.content[0].text
|
|
26
|
+
}
|
|
27
|
+
return undefined
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
export const SearchArgs = Schema.Struct({
|
|
31
|
+
query: Schema.String,
|
|
32
|
+
type: Schema.String,
|
|
33
|
+
numResults: Schema.Number,
|
|
34
|
+
livecrawl: Schema.String,
|
|
35
|
+
contextMaxCharacters: Schema.optional(Schema.Number),
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
export const CodeArgs = Schema.Struct({
|
|
39
|
+
query: Schema.String,
|
|
40
|
+
tokensNum: Schema.Number,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
const McpRequest = <F extends Schema.Struct.Fields>(args: Schema.Struct<F>) =>
|
|
44
|
+
Schema.Struct({
|
|
45
|
+
jsonrpc: Schema.Literal("2.0"),
|
|
46
|
+
id: Schema.Literal(1),
|
|
47
|
+
method: Schema.Literal("tools/call"),
|
|
48
|
+
params: Schema.Struct({
|
|
49
|
+
name: Schema.String,
|
|
50
|
+
arguments: args,
|
|
51
|
+
}),
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
export const call = <F extends Schema.Struct.Fields>(
|
|
55
|
+
http: HttpClient.HttpClient,
|
|
56
|
+
tool: string,
|
|
57
|
+
args: Schema.Struct<F>,
|
|
58
|
+
value: Schema.Struct.Type<F>,
|
|
59
|
+
timeout: Duration.Input,
|
|
60
|
+
) =>
|
|
61
|
+
Effect.gen(function* () {
|
|
62
|
+
const request = yield* HttpClientRequest.post(URL).pipe(
|
|
63
|
+
HttpClientRequest.accept("application/json, text/event-stream"),
|
|
64
|
+
HttpClientRequest.schemaBodyJson(McpRequest(args))({
|
|
65
|
+
jsonrpc: "2.0" as const,
|
|
66
|
+
id: 1 as const,
|
|
67
|
+
method: "tools/call" as const,
|
|
68
|
+
params: { name: tool, arguments: value },
|
|
69
|
+
}),
|
|
70
|
+
)
|
|
71
|
+
const response = yield* HttpClient.filterStatusOk(http)
|
|
72
|
+
.execute(request)
|
|
73
|
+
.pipe(
|
|
74
|
+
Effect.timeoutOrElse({ duration: timeout, orElse: () => Effect.die(new Error(`${tool} request timed out`)) }),
|
|
75
|
+
)
|
|
76
|
+
const body = yield* response.text
|
|
77
|
+
return yield* parseSse(body)
|
|
78
|
+
})
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import * as path from "path"
|
|
2
|
+
import type { ProjectID } from "../project/schema"
|
|
3
|
+
import type { SessionID } from "../session/schema"
|
|
4
|
+
|
|
5
|
+
const VALID_SCOPES = ["global", "projects", "sessions"] as const
|
|
6
|
+
|
|
7
|
+
const TASK_ID_RE = /^T\d+(\.\d+)*$/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Returns true when the relative path under <root>/memory/ is one of the
|
|
11
|
+
* precise paths the checkpoint-writer subagent is permitted to write:
|
|
12
|
+
* projects/<pid>/memory.md (or memory-<topic>.md spillover)
|
|
13
|
+
* sessions/<sid>/checkpoint.md (or checkpoint-<topic>.md spillover)
|
|
14
|
+
* sessions/<sid>/notes.md
|
|
15
|
+
* sessions/<sid>/tasks/<task_id>/*.md
|
|
16
|
+
*
|
|
17
|
+
* Rejects anything else. Catches writer drift like
|
|
18
|
+
* `<pid>/pinned.md` (v4 name) at write time.
|
|
19
|
+
*/
|
|
20
|
+
function isCheckpointWriterAllowed(parts: string[]): boolean {
|
|
21
|
+
if (parts.length < 3) return false
|
|
22
|
+
|
|
23
|
+
if (parts[0] === "projects") {
|
|
24
|
+
if (parts.length !== 3) return false
|
|
25
|
+
const file = parts[2]
|
|
26
|
+
if (!file.endsWith(".md")) return false
|
|
27
|
+
const lower = file.toLowerCase()
|
|
28
|
+
return lower === "memory.md" || lower.startsWith("memory-")
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (parts[0] === "sessions") {
|
|
32
|
+
const rest = parts.slice(2)
|
|
33
|
+
if (rest.length === 1) {
|
|
34
|
+
const file = rest[0]
|
|
35
|
+
if (!file.endsWith(".md")) return false
|
|
36
|
+
return file === "checkpoint.md" || file === "notes.md" || file.startsWith("checkpoint-")
|
|
37
|
+
}
|
|
38
|
+
if (rest.length === 3 && rest[0] === "tasks") {
|
|
39
|
+
return TASK_ID_RE.test(rest[1]) && rest[2].endsWith(".md")
|
|
40
|
+
}
|
|
41
|
+
return false
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Format the multi-line "where to write memory" hint shown to main agent
|
|
49
|
+
* when it attempts a path with no scope dir or an invalid scope. Both throws
|
|
50
|
+
* use byte-identical bodies — the corrective action is the same.
|
|
51
|
+
*/
|
|
52
|
+
function formatMainAgentHelp(memoryFile: string, notesFile: string, target: string): string {
|
|
53
|
+
return (
|
|
54
|
+
`Memory writes go under <memoryRoot>/<scope>/<scope_id>/<key>.md (scope: global | projects | sessions). You attempted: ${target}.\n` +
|
|
55
|
+
`\n` +
|
|
56
|
+
`Canonical main-agent paths (copy verbatim):\n` +
|
|
57
|
+
` ${memoryFile}\n` +
|
|
58
|
+
` Edit ## Rules / ## Architecture decisions / ## Discovered durable knowledge.\n` +
|
|
59
|
+
` ${notesFile}\n` +
|
|
60
|
+
` Append \`## [turn N · ISO-Z]\` entries for free-form scratch.\n` +
|
|
61
|
+
`\n` +
|
|
62
|
+
`Other free-form <key>.md under a valid scope dir are also allowed.\n` +
|
|
63
|
+
`checkpoint.md, task progress, and memory-/checkpoint-<topic>.md spillovers are checkpoint-writer's domain.`
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Returns true when the path is reserved-by-pattern for the checkpoint-writer
|
|
69
|
+
* subagent — main agent must not write it directly.
|
|
70
|
+
*
|
|
71
|
+
* In v5 only the writer-managed task directory remains reserved-by-pattern.
|
|
72
|
+
* Main agent CAN write <pid>/MEMORY.md and <sid>/checkpoint.md (system prompt
|
|
73
|
+
* teaches it the rules).
|
|
74
|
+
*/
|
|
75
|
+
function isReservedForCheckpointWriter(parts: string[]): boolean {
|
|
76
|
+
if (parts[0] !== "sessions" || parts.length < 4) return false
|
|
77
|
+
// Anything under <sid>/tasks/ is writer-managed (use task tool revise action).
|
|
78
|
+
if (parts[2] === "tasks") return true
|
|
79
|
+
return false
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Throws if the target write would violate memory-scope or reserved-path
|
|
84
|
+
* rules. Pure function — does not touch the filesystem.
|
|
85
|
+
*
|
|
86
|
+
* Two policies:
|
|
87
|
+
* - For checkpoint-writer subagent: must be in the precise allowlist above
|
|
88
|
+
* (<pid>/MEMORY.md, <sid>/checkpoint.md, <sid>/tasks/<id>/*.md, plus
|
|
89
|
+
* memory-/checkpoint- spillover variants).
|
|
90
|
+
* - For all other agents: cannot write <sid>/tasks/* — that's
|
|
91
|
+
* checkpoint-writer-only.
|
|
92
|
+
*
|
|
93
|
+
* Non-memory paths and free keys under valid scopes pass through unmodified.
|
|
94
|
+
*/
|
|
95
|
+
export function assertMemoryWriteAllowed(input: {
|
|
96
|
+
target: string
|
|
97
|
+
agentName: string
|
|
98
|
+
memoryRoot: string
|
|
99
|
+
projectID: ProjectID
|
|
100
|
+
sessionID: SessionID
|
|
101
|
+
taskId?: string
|
|
102
|
+
}): void {
|
|
103
|
+
const { target, agentName, memoryRoot, projectID, sessionID } = input
|
|
104
|
+
const memoryFile = path.join(memoryRoot, "projects", projectID, "MEMORY.md")
|
|
105
|
+
const notesFile = path.join(memoryRoot, "sessions", sessionID, "notes.md")
|
|
106
|
+
const checkpointFile = path.join(memoryRoot, "sessions", sessionID, "checkpoint.md")
|
|
107
|
+
const taskMemDir = path.join(memoryRoot, "sessions", sessionID, "tasks")
|
|
108
|
+
const normalizedRoot = memoryRoot.endsWith(path.sep) ? memoryRoot : memoryRoot + path.sep
|
|
109
|
+
if (!target.startsWith(normalizedRoot)) return
|
|
110
|
+
|
|
111
|
+
const rel = path.relative(memoryRoot, target)
|
|
112
|
+
const parts = rel.split(path.sep)
|
|
113
|
+
|
|
114
|
+
if (parts.length < 2) {
|
|
115
|
+
throw new Error(formatMainAgentHelp(memoryFile, notesFile, target))
|
|
116
|
+
}
|
|
117
|
+
const scope = parts[0]
|
|
118
|
+
if (!VALID_SCOPES.includes(scope as (typeof VALID_SCOPES)[number])) {
|
|
119
|
+
throw new Error(formatMainAgentHelp(memoryFile, notesFile, target))
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (agentName === "checkpoint-writer") {
|
|
123
|
+
if (!isCheckpointWriterAllowed(parts)) {
|
|
124
|
+
throw new Error(
|
|
125
|
+
`Path '${rel}' is not in the checkpoint-writer allowlist.\n` +
|
|
126
|
+
`Writer may only write to:\n` +
|
|
127
|
+
` ${memoryFile} — project memory (or memory-<topic>.md spillover)\n` +
|
|
128
|
+
` ${checkpointFile} — session checkpoint (or checkpoint-<topic>.md spillover)\n` +
|
|
129
|
+
` ${taskMemDir}/<task_id>/*.md — per-task narratives (any .md filename)\n` +
|
|
130
|
+
`You attempted: ${target}.`,
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
return
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (isReservedForCheckpointWriter(parts)) {
|
|
137
|
+
// Spec ② follow-up: subagent bound to a specific TID may write anywhere
|
|
138
|
+
// under ITS OWN tasks/<TID>/ subtree. Cross-task writes still rejected.
|
|
139
|
+
// parts shape under tasks: ["sessions", sid, "tasks", "<TID>", "<file>.md", ...]
|
|
140
|
+
// NOTE: `parts.length >= 5` is deliberately looser than the checkpoint-writer
|
|
141
|
+
// path (which requires exactly tasks/<TID>/<file>.md). A subagent may nest
|
|
142
|
+
// its own workspace (tasks/<TID>/sub/foo.md); the `parts[3] === input.taskId`
|
|
143
|
+
// guard still confines it to its own task, so the extra depth is safe.
|
|
144
|
+
if (
|
|
145
|
+
input.taskId &&
|
|
146
|
+
parts[2] === "tasks" &&
|
|
147
|
+
parts[3] === input.taskId &&
|
|
148
|
+
parts.length >= 5 &&
|
|
149
|
+
parts[parts.length - 1].endsWith(".md")
|
|
150
|
+
) {
|
|
151
|
+
return
|
|
152
|
+
}
|
|
153
|
+
throw new Error(
|
|
154
|
+
`Path '${rel}' is reserved for the checkpoint-writer subagent.\n` +
|
|
155
|
+
`Main agent writes to:\n` +
|
|
156
|
+
` ${memoryFile}\n` +
|
|
157
|
+
` ${notesFile}\n` +
|
|
158
|
+
`Subagent bound to task <TID> may write to tasks/<TID>/*.md (pass task_id when spawning).\n` +
|
|
159
|
+
`You attempted: ${target}.`,
|
|
160
|
+
)
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Effect } from "effect"
|
|
2
|
+
import z from "zod"
|
|
3
|
+
import { Memory } from "@/memory"
|
|
4
|
+
import DESCRIPTION from "./memory.txt"
|
|
5
|
+
import * as Tool from "./tool"
|
|
6
|
+
|
|
7
|
+
const parameters = z.object({
|
|
8
|
+
operation: z.enum(["search"]).default("search").describe("Memory operation to perform"),
|
|
9
|
+
query: z.string().describe("Search query (BM25 over markdown bodies)"),
|
|
10
|
+
scope: z.enum(["global", "projects", "sessions", "cc"]).optional().describe("Filter by memory scope"),
|
|
11
|
+
scope_id: z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Filter by scope id (e.g., session id, task id, project id hash)"),
|
|
15
|
+
type: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Filter by memory type (pinned, snapshot, learning, progress, free, ...)"),
|
|
19
|
+
limit: z.number().optional().describe("Max results (default 10)"),
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
export const MemoryTool = Tool.define(
|
|
23
|
+
"memory",
|
|
24
|
+
Effect.gen(function* () {
|
|
25
|
+
const memory = yield* Memory.Service
|
|
26
|
+
return {
|
|
27
|
+
description: DESCRIPTION,
|
|
28
|
+
parameters,
|
|
29
|
+
execute: (args: z.infer<typeof parameters>) =>
|
|
30
|
+
Effect.gen(function* () {
|
|
31
|
+
const results = yield* memory.search({
|
|
32
|
+
query: args.query,
|
|
33
|
+
scope: args.scope,
|
|
34
|
+
scope_id: args.scope_id,
|
|
35
|
+
type: args.type,
|
|
36
|
+
limit: args.limit,
|
|
37
|
+
})
|
|
38
|
+
if (results.length === 0) {
|
|
39
|
+
return {
|
|
40
|
+
title: `Memory search: 0 results`,
|
|
41
|
+
output: [
|
|
42
|
+
`No matches for "${args.query}".`,
|
|
43
|
+
``,
|
|
44
|
+
`0 results does NOT mean it was never recorded. Escalate before giving up:`,
|
|
45
|
+
`1. Retry with FEWER / more distinctive terms — queries are OR-joined and`,
|
|
46
|
+
` ranked, so 1-2 rare words (an exact ID, function name, flag) beat a long`,
|
|
47
|
+
` descriptive phrase. Drop generic words ("config", "params", "database").`,
|
|
48
|
+
`2. For a LITERAL string the tokenizer splits (URLs like postgres://…, ports`,
|
|
49
|
+
` like 5433, paths) — Grep the memory dir directly; FTS can't see it.`,
|
|
50
|
+
`3. For VERBATIM recall of something a summary may have glossed over (exact`,
|
|
51
|
+
` command, the user's precise wording) — use the history tool (raw`,
|
|
52
|
+
` conversation), which keeps original messages.`,
|
|
53
|
+
`Widen scope progressively: session → project → global → history.`,
|
|
54
|
+
].join("\n"),
|
|
55
|
+
metadata: { count: 0 },
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const lines = [
|
|
59
|
+
`Found ${results.length} match${results.length === 1 ? "" : "es"} (BM25-ranked, best first).`,
|
|
60
|
+
`A hit here is authoritative — use it even if a parallel/sibling query returned nothing.`,
|
|
61
|
+
`If you need the FULL body (snippets are truncated), Read the path.`,
|
|
62
|
+
`If you need an EXACT literal (a connection string, port, token, full command line, path) and the snippet/body only paraphrases or partially shows it, the curated memory may have dropped the precise form — query the history tool for the original message, which holds it verbatim.`,
|
|
63
|
+
``,
|
|
64
|
+
]
|
|
65
|
+
for (const r of results) {
|
|
66
|
+
lines.push(`### ${r.path}`)
|
|
67
|
+
lines.push(
|
|
68
|
+
`Scope: ${r.scope}${r.scope_id ? `/${r.scope_id}` : ""}, Type: ${r.type}, Score: ${r.score.toFixed(3)}`,
|
|
69
|
+
)
|
|
70
|
+
lines.push(r.snippet)
|
|
71
|
+
lines.push("")
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
title: `Memory search: ${results.length} result${results.length === 1 ? "" : "s"}`,
|
|
75
|
+
output: lines.join("\n"),
|
|
76
|
+
metadata: { count: results.length },
|
|
77
|
+
}
|
|
78
|
+
}),
|
|
79
|
+
}
|
|
80
|
+
}),
|
|
81
|
+
)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
Search session/project/global memory using BM25 over markdown
|
|
2
|
+
bodies. Use this to recall content the agent or writer subagent
|
|
3
|
+
persisted previously: project memory, session checkpoints, task
|
|
4
|
+
narratives (under sessions/<sid>/tasks/), project notes, global
|
|
5
|
+
preferences.
|
|
6
|
+
|
|
7
|
+
Memory layout: <data>/memory/<scope>/<scope_id>/<key>.md
|
|
8
|
+
Scopes: global | projects | sessions | cc (opt-in, see below)
|
|
9
|
+
|
|
10
|
+
QUERY GUIDELINES:
|
|
11
|
+
- Queries are OR'd and BM25-ranked: a document matches if it contains
|
|
12
|
+
ANY query word, ordered by relevance (how many / how rare the matched
|
|
13
|
+
words are). Low-relevance common-word-only matches are dropped by a
|
|
14
|
+
score floor.
|
|
15
|
+
- Prefer 1–3 distinctive terms (function name, task ID, exact phrase
|
|
16
|
+
from a directive, a rare word from the snippet you want). Long lists
|
|
17
|
+
of generic words ("config params database connection") just add noise
|
|
18
|
+
and bury the real hit — pick the rarest, most specific word.
|
|
19
|
+
- "T5.3 closure" works. So does "permission deadlock". Avoid padding
|
|
20
|
+
with generic descriptors.
|
|
21
|
+
- Punctuation (`.`, `-`, `/`, `:`) is stripped during tokenization.
|
|
22
|
+
Both query and indexed body see only alphanumeric runs, so `T5.3`
|
|
23
|
+
matches `T5.3`, `T5_3`, or `T5 3`. A literal like `postgres://host:5433`
|
|
24
|
+
is indexed as tokens `postgres`, `host`, `5433` — search one of those,
|
|
25
|
+
not the full URL.
|
|
26
|
+
|
|
27
|
+
A HIT IS AUTHORITATIVE. If search returns a result, trust it — even
|
|
28
|
+
when a different/sibling query you ran returned nothing. Do not conclude
|
|
29
|
+
"I never recorded this" because one phrasing missed.
|
|
30
|
+
|
|
31
|
+
PARTIAL HIT, EXACT LITERAL NEEDED. A hit may give the gist but have
|
|
32
|
+
dropped the precise form of a connection string, port, token, full
|
|
33
|
+
command line, or path (curation paraphrases). If you need the literal
|
|
34
|
+
byte-for-byte and the result only approximates it, query the history
|
|
35
|
+
tool — the original message holds it verbatim. Don't reconstruct or
|
|
36
|
+
guess the exact value from a paraphrase.
|
|
37
|
+
|
|
38
|
+
WHEN SEARCH RETURNS 0 (escalate, do not give up):
|
|
39
|
+
1. Retry with fewer / rarer terms (see guidelines above).
|
|
40
|
+
2. For a literal string the tokenizer splits (URL, port, path) — Grep
|
|
41
|
+
the memory dir directly; FTS can't match the punctuation form.
|
|
42
|
+
3. For verbatim recall a summary may have glossed over — use the
|
|
43
|
+
history tool (raw conversation messages).
|
|
44
|
+
Widen scope progressively: session → project → global → history.
|
|
45
|
+
|
|
46
|
+
Actions:
|
|
47
|
+
- search: OR-joined BM25 query, optional scope/scope_id/type filters
|
|
48
|
+
|
|
49
|
+
After search returns paths, use Read on the most relevant ones to
|
|
50
|
+
load full content (snippets are truncated). Use Glob on
|
|
51
|
+
`<data>/memory/**/*.md` to inspect the tree if you need to find files
|
|
52
|
+
by name pattern instead of body.
|
|
53
|
+
|
|
54
|
+
CC SCOPE:
|
|
55
|
+
When memory.cc_index is enabled in config, Claude Code memory at
|
|
56
|
+
~/.claude/projects/<slug>/memory/*.md is also indexed under
|
|
57
|
+
scope="cc". scope_id is the CC project slug (a path-derived identifier
|
|
58
|
+
like "-home-user-projects-app"). Frontmatter metadata.type
|
|
59
|
+
(feedback / project / reference / user) populates the type column,
|
|
60
|
+
so e.g. type="feedback" filters CC feedback memories. CC memory is
|
|
61
|
+
read-only from this tool.
|
|
62
|
+
|
|
63
|
+
Privacy note: CC's `type: user` and `type: feedback` categories may
|
|
64
|
+
hold personal context (the user's role, preferences, prior guidance)
|
|
65
|
+
that CC originally wrote for its own future sessions. With cc_index on,
|
|
66
|
+
they become recallable from any mimocode agent — including subagents
|
|
67
|
+
that may be exposed to prompt-injected content. If that's not desired,
|
|
68
|
+
keep cc_index disabled or filter `type` at search time to exclude
|
|
69
|
+
the more sensitive categories.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import z from "zod"
|
|
2
|
+
import { Effect } from "effect"
|
|
3
|
+
import * as Tool from "./tool"
|
|
4
|
+
import DESCRIPTION from "./model-router.txt"
|
|
5
|
+
|
|
6
|
+
export const ModelRouterTool = Tool.define(
|
|
7
|
+
"model-router",
|
|
8
|
+
Effect.gen(function* () {
|
|
9
|
+
return {
|
|
10
|
+
description: DESCRIPTION,
|
|
11
|
+
parameters: z.object({
|
|
12
|
+
task: z.string().describe("The task description to analyze and route"),
|
|
13
|
+
context_size: z.string().optional().describe("Estimated context size: small/medium/large"),
|
|
14
|
+
mode: z.enum(["auto", "manual", "swarm"]).optional().default("auto").describe("Routing mode"),
|
|
15
|
+
failed_model: z.string().optional().describe("If a previous model failed, specify which one"),
|
|
16
|
+
}),
|
|
17
|
+
execute: (params: { task: string; context_size?: string; mode?: string; failed_model?: string }, ctx: Tool.Context) =>
|
|
18
|
+
Effect.gen(function* () {
|
|
19
|
+
const taskLower = params.task.toLowerCase()
|
|
20
|
+
const ctxSize = params.context_size || "small"
|
|
21
|
+
|
|
22
|
+
const modelHierarchy = [
|
|
23
|
+
{ id: "glassesglitchstudio/gulmzcetiner:X_FABLE_CODER_V1", name: "X_FABLE_CODER_V1", priority: 1, desc: "Default — Berkay's personal model", bestFor: ["general", "code", "chat", "quick"] },
|
|
24
|
+
{ id: "glassesglitchstudio/gulmzcetiner:V7_HYBRID_TITAN", name: "V7_HYBRID_TITAN", priority: 2, desc: "Deep reasoning + security", bestFor: ["reasoning", "security", "debug", "complex"] },
|
|
25
|
+
{ id: "glassesglitchstudio/gulmzcetiner:V6_OMNI_OVERLORD", name: "V6_OMNI_OVERLORD", priority: 3, desc: "128K context — large files", bestFor: ["large", "long context", "analysis", "review"] },
|
|
26
|
+
{ id: "glassesglitchstudio/gulmzcetiner:V5_NEXUS_CORE", name: "V5_NEXUS_CORE", priority: 4, desc: "Fast executor — simple tasks", bestFor: ["fast", "simple", "refactor"] },
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
const failedIdx = params.failed_model ? modelHierarchy.findIndex(m => m.name.toLowerCase().includes(params.failed_model.toLowerCase())) : -1
|
|
30
|
+
|
|
31
|
+
const excluded = failedIdx >= 0 ? modelHierarchy.slice(0, failedIdx + 1) : []
|
|
32
|
+
|
|
33
|
+
let recommended = modelHierarchy[0]
|
|
34
|
+
|
|
35
|
+
if (params.failed_model) {
|
|
36
|
+
const nextIdx = failedIdx + 1
|
|
37
|
+
if (nextIdx < modelHierarchy.length) {
|
|
38
|
+
recommended = modelHierarchy[nextIdx]
|
|
39
|
+
}
|
|
40
|
+
} else {
|
|
41
|
+
for (const m of modelHierarchy) {
|
|
42
|
+
if (m.bestFor.some(b => taskLower.includes(b))) {
|
|
43
|
+
recommended = m
|
|
44
|
+
break
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const lines: string[] = []
|
|
50
|
+
lines.push(`# Model Router Analysis`)
|
|
51
|
+
lines.push("")
|
|
52
|
+
lines.push(`Task: ${params.task}`)
|
|
53
|
+
lines.push(`Context size: ${ctxSize}`)
|
|
54
|
+
lines.push(`Mode: ${params.mode}`)
|
|
55
|
+
if (params.failed_model) lines.push(`Previous failed model: ${params.failed_model}`)
|
|
56
|
+
lines.push("")
|
|
57
|
+
lines.push("## Model Hierarchy")
|
|
58
|
+
for (const m of modelHierarchy) {
|
|
59
|
+
const isRec = m.id === recommended.id
|
|
60
|
+
const isExcluded = excluded.some(e => e.id === m.id)
|
|
61
|
+
const prefix = isRec ? "👉" : isExcluded ? "❌" : " "
|
|
62
|
+
lines.push(`${prefix} ${m.name} — ${m.desc}`)
|
|
63
|
+
}
|
|
64
|
+
lines.push("")
|
|
65
|
+
lines.push("## Recommended")
|
|
66
|
+
lines.push(`Model: ${recommended.name} (${recommended.id})`)
|
|
67
|
+
lines.push(`Reason: ${params.failed_model ? `Fallback after ${params.failed_model} failure` : "Best match for task type"}`)
|
|
68
|
+
lines.push("")
|
|
69
|
+
lines.push("## Fallback Chain")
|
|
70
|
+
lines.push("If this fails, the next model in the hierarchy will be tried automatically.")
|
|
71
|
+
lines.push("For MiMo Auto (1M context), use: provider=ollama/model=mimo-auto")
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
title: `Model Router: ${recommended.name}`,
|
|
75
|
+
metadata: {
|
|
76
|
+
recommendedModel: recommended.id,
|
|
77
|
+
recommendedName: recommended.name,
|
|
78
|
+
mode: params.mode || "auto",
|
|
79
|
+
modelCount: modelHierarchy.length,
|
|
80
|
+
},
|
|
81
|
+
output: lines.join("\n"),
|
|
82
|
+
}
|
|
83
|
+
}).pipe(Effect.orDie),
|
|
84
|
+
}
|
|
85
|
+
}),
|
|
86
|
+
)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
- Routes tasks to the best GlassesCat model based on task complexity and requirements
|
|
2
|
+
- Priority order: X_FABLE_CODER_V1 (default) → V7_HYBRID_TITAN (reasoning) → V6_OMNI_OVERLORD (long context) → V5_NEXUS_CORE (fast) → MiMo Auto (fallback)
|
|
3
|
+
- X_FABLE_CODER is always the first choice — it is the user's personal model
|
|
4
|
+
- Analyzes task type, context size, and complexity before routing
|
|
5
|
+
- Use when a task fails with one model and needs retry with another
|
|
6
|
+
- Also use when the task has specific requirements (security, long context, reasoning)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import z from "zod"
|
|
2
|
+
import { Effect } from "effect"
|
|
3
|
+
import * as Tool from "./tool"
|
|
4
|
+
import { EditTool } from "./edit"
|
|
5
|
+
import DESCRIPTION from "./multiedit.txt"
|
|
6
|
+
import path from "path"
|
|
7
|
+
import { Instance } from "../project/instance"
|
|
8
|
+
|
|
9
|
+
export const MultiEditTool = Tool.define(
|
|
10
|
+
"multiedit",
|
|
11
|
+
Effect.gen(function* () {
|
|
12
|
+
const editInfo = yield* EditTool
|
|
13
|
+
const edit = yield* editInfo.init()
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
description: DESCRIPTION,
|
|
17
|
+
parameters: z.object({
|
|
18
|
+
filePath: z.string().describe("The absolute path to the file to modify"),
|
|
19
|
+
edits: z
|
|
20
|
+
.array(
|
|
21
|
+
z.object({
|
|
22
|
+
filePath: z.string().describe("The absolute path to the file to modify"),
|
|
23
|
+
oldString: z.string().describe("The text to replace"),
|
|
24
|
+
newString: z.string().describe("The text to replace it with (must be different from oldString)"),
|
|
25
|
+
replaceAll: z.boolean().optional().describe("Replace all occurrences of oldString (default false)"),
|
|
26
|
+
}),
|
|
27
|
+
)
|
|
28
|
+
.describe("Array of edit operations to perform sequentially on the file"),
|
|
29
|
+
}),
|
|
30
|
+
execute: (
|
|
31
|
+
params: {
|
|
32
|
+
filePath: string
|
|
33
|
+
edits: Array<{ filePath: string; oldString: string; newString: string; replaceAll?: boolean }>
|
|
34
|
+
},
|
|
35
|
+
ctx: Tool.Context,
|
|
36
|
+
) =>
|
|
37
|
+
Effect.gen(function* () {
|
|
38
|
+
const results = []
|
|
39
|
+
for (const [, entry] of params.edits.entries()) {
|
|
40
|
+
const result = yield* edit.execute(
|
|
41
|
+
{
|
|
42
|
+
filePath: params.filePath,
|
|
43
|
+
oldString: entry.oldString,
|
|
44
|
+
newString: entry.newString,
|
|
45
|
+
replaceAll: entry.replaceAll,
|
|
46
|
+
},
|
|
47
|
+
ctx,
|
|
48
|
+
)
|
|
49
|
+
results.push(result)
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
title: path.relative(Instance.worktree, params.filePath),
|
|
53
|
+
metadata: {
|
|
54
|
+
results: results.map((r) => r.metadata),
|
|
55
|
+
},
|
|
56
|
+
output: results.at(-1)!.output,
|
|
57
|
+
}
|
|
58
|
+
}),
|
|
59
|
+
}
|
|
60
|
+
}),
|
|
61
|
+
)
|