@sleepy-ai/cli 0.1.6 → 0.1.7
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/{src/skill/compose/LICENSE-superpowers → LICENSE} +3 -6
- package/README.md +139 -6
- package/package.json +35 -199
- package/postinstall.mjs +102 -0
- package/.sleepycode-test-fixtures-50158/sleepycode-test-eqsxv84ythu/.watcher-b67v64k2mnv +0 -1
- package/Dockerfile +0 -18
- package/drizzle.config.ts +0 -10
- package/git +0 -0
- package/migration/20260127222353_familiar_lady_ursula/migration.sql +0 -90
- package/migration/20260127222353_familiar_lady_ursula/snapshot.json +0 -796
- package/migration/20260211171708_add_project_commands/migration.sql +0 -1
- package/migration/20260211171708_add_project_commands/snapshot.json +0 -806
- package/migration/20260213144116_wakeful_the_professor/migration.sql +0 -11
- package/migration/20260213144116_wakeful_the_professor/snapshot.json +0 -897
- package/migration/20260225215848_workspace/migration.sql +0 -7
- package/migration/20260225215848_workspace/snapshot.json +0 -959
- package/migration/20260227213759_add_session_workspace_id/migration.sql +0 -2
- package/migration/20260227213759_add_session_workspace_id/snapshot.json +0 -983
- package/migration/20260228203230_blue_harpoon/migration.sql +0 -17
- package/migration/20260228203230_blue_harpoon/snapshot.json +0 -1102
- package/migration/20260303231226_add_workspace_fields/migration.sql +0 -5
- package/migration/20260303231226_add_workspace_fields/snapshot.json +0 -1013
- package/migration/20260309230000_move_org_to_state/migration.sql +0 -3
- package/migration/20260309230000_move_org_to_state/snapshot.json +0 -1156
- package/migration/20260312043431_session_message_cursor/migration.sql +0 -4
- package/migration/20260312043431_session_message_cursor/snapshot.json +0 -1168
- package/migration/20260323234822_events/migration.sql +0 -13
- package/migration/20260323234822_events/snapshot.json +0 -1271
- package/migration/20260410174513_workspace-name/migration.sql +0 -16
- package/migration/20260410174513_workspace-name/snapshot.json +0 -1271
- package/migration/20260413175956_chief_energizer/migration.sql +0 -13
- package/migration/20260413175956_chief_energizer/snapshot.json +0 -1399
- package/migration/20260422160000_context_inheritance/migration.sql +0 -3
- package/migration/20260422170000_task_registry/migration.sql +0 -18
- package/migration/20260423145421_remove_session_entry/migration.sql +0 -4
- package/migration/20260515000000_actor_rename/migration.sql +0 -7
- package/migration/20260515010000_memory_fts/migration.sql +0 -33
- package/migration/20260515020000_user_task/migration.sql +0 -29
- package/migration/20260519000000_last_checkpoint_message_id/migration.sql +0 -1
- package/migration/20260521000000_message_agent_id/migration.sql +0 -2
- package/migration/20260521000100_actor_registry_v6/migration.sql +0 -25
- package/migration/20260521010000_memory_fts_v6/migration.sql +0 -33
- package/migration/20260521020000_memory_fts_triggers/migration.sql +0 -17
- package/migration/20260526000000_agent_id_main/migration.sql +0 -14
- package/migration/20260527000000_actor_lifecycle/migration.sql +0 -8
- package/migration/20260527000100_inbox/migration.sql +0 -12
- package/migration/20260529000000_task_todo_redesign/migration.sql +0 -16
- package/migration/20260603000000_task_in_progress_owner/migration.sql +0 -1
- package/migration/20260603000000_workflow_run/migration.sql +0 -17
- package/migration/20260604000000_workflow_script_sha/migration.sql +0 -1
- package/migration/20260608000000_claude_import/migration.sql +0 -7
- package/migration/20260608010000_claude_import_message_ids/migration.sql +0 -1
- package/migration/20260609000000_history_fts/migration.sql +0 -29
- package/migration/20260609230000_workflow_agent_timeout/migration.sql +0 -1
- package/migration/20260612000000_external_import/migration.sql +0 -16
- package/parsers-config.ts +0 -290
- package/src/account/account.sql.ts +0 -39
- package/src/account/account.ts +0 -456
- package/src/account/repo.ts +0 -166
- package/src/account/schema.ts +0 -99
- package/src/account/url.ts +0 -8
- package/src/acp/README.md +0 -174
- package/src/acp/agent.ts +0 -1787
- package/src/acp/session.ts +0 -116
- package/src/acp/types.ts +0 -24
- package/src/actor/actor.sql.ts +0 -38
- package/src/actor/events.ts +0 -67
- package/src/actor/index.ts +0 -2
- package/src/actor/registry.ts +0 -412
- package/src/actor/return-header.ts +0 -24
- package/src/actor/schema.ts +0 -47
- package/src/actor/spawn-ref.ts +0 -16
- package/src/actor/spawn.ts +0 -756
- package/src/actor/turn.ts +0 -49
- package/src/actor/waiter.ts +0 -166
- package/src/agent/agent.ts +0 -574
- package/src/agent/config.ts +0 -5
- package/src/agent/generate.txt +0 -75
- package/src/agent/prompt/checkpoint-writer.txt +0 -167
- package/src/agent/prompt/compaction.txt +0 -9
- package/src/agent/prompt/distill.txt +0 -199
- package/src/agent/prompt/dream.txt +0 -155
- package/src/agent/prompt/explore.txt +0 -18
- package/src/agent/prompt/summary.txt +0 -11
- package/src/agent/prompt/title.txt +0 -44
- package/src/audio.d.ts +0 -9
- package/src/auth/index.ts +0 -97
- package/src/bus/bus-event.ts +0 -33
- package/src/bus/global.ts +0 -12
- package/src/bus/index.ts +0 -193
- package/src/cli/bootstrap.ts +0 -33
- package/src/cli/cmd/account.ts +0 -258
- package/src/cli/cmd/acp.ts +0 -70
- package/src/cli/cmd/agent.ts +0 -248
- package/src/cli/cmd/cmd.ts +0 -7
- package/src/cli/cmd/db.ts +0 -120
- package/src/cli/cmd/debug/agent.ts +0 -192
- package/src/cli/cmd/debug/config.ts +0 -17
- package/src/cli/cmd/debug/file.ts +0 -100
- package/src/cli/cmd/debug/index.ts +0 -48
- package/src/cli/cmd/debug/lsp.ts +0 -61
- package/src/cli/cmd/debug/ripgrep.ts +0 -105
- package/src/cli/cmd/debug/scrap.ts +0 -16
- package/src/cli/cmd/debug/skill.ts +0 -23
- package/src/cli/cmd/debug/snapshot.ts +0 -53
- package/src/cli/cmd/doctor.ts +0 -116
- package/src/cli/cmd/export.ts +0 -306
- package/src/cli/cmd/generate.ts +0 -50
- package/src/cli/cmd/github.ts +0 -1647
- package/src/cli/cmd/import.ts +0 -208
- package/src/cli/cmd/init.ts +0 -97
- package/src/cli/cmd/login.ts +0 -402
- package/src/cli/cmd/mcp.ts +0 -812
- package/src/cli/cmd/models.ts +0 -88
- package/src/cli/cmd/plug.ts +0 -233
- package/src/cli/cmd/pr.ts +0 -138
- package/src/cli/cmd/providers.ts +0 -713
- package/src/cli/cmd/run-completion.ts +0 -77
- package/src/cli/cmd/run.ts +0 -694
- package/src/cli/cmd/serve.ts +0 -30
- package/src/cli/cmd/session.ts +0 -181
- package/src/cli/cmd/stats.ts +0 -413
- package/src/cli/cmd/tui/app.tsx +0 -1181
- package/src/cli/cmd/tui/asset/TEN_VAD_LICENSE +0 -12
- 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 +0 -30
- package/src/cli/cmd/tui/attach.ts +0 -84
- package/src/cli/cmd/tui/component/background-image.tsx +0 -150
- package/src/cli/cmd/tui/component/banner-session-expired.tsx +0 -48
- package/src/cli/cmd/tui/component/bg-pulse.tsx +0 -130
- package/src/cli/cmd/tui/component/border.tsx +0 -21
- package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -31
- package/src/cli/cmd/tui/component/dialog-agreement.tsx +0 -111
- package/src/cli/cmd/tui/component/dialog-command.tsx +0 -219
- package/src/cli/cmd/tui/component/dialog-console-org.tsx +0 -103
- package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +0 -157
- package/src/cli/cmd/tui/component/dialog-image-list.tsx +0 -111
- package/src/cli/cmd/tui/component/dialog-logo-design.tsx +0 -37
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -86
- package/src/cli/cmd/tui/component/dialog-model.tsx +0 -299
- package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -449
- package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +0 -101
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -269
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -31
- package/src/cli/cmd/tui/component/dialog-skill.tsx +0 -42
- package/src/cli/cmd/tui/component/dialog-sleepy-login.tsx +0 -288
- package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -87
- package/src/cli/cmd/tui/component/dialog-status.tsx +0 -170
- package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -44
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -50
- package/src/cli/cmd/tui/component/dialog-token-plan.tsx +0 -77
- package/src/cli/cmd/tui/component/dialog-variant.tsx +0 -39
- package/src/cli/cmd/tui/component/dialog-workflows.tsx +0 -51
- package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +0 -289
- package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +0 -81
- package/src/cli/cmd/tui/component/dialog-worktree.tsx +0 -90
- package/src/cli/cmd/tui/component/error-component.tsx +0 -92
- package/src/cli/cmd/tui/component/logo.tsx +0 -961
- package/src/cli/cmd/tui/component/plugin-route-missing.tsx +0 -14
- package/src/cli/cmd/tui/component/prompt/autocomplete-detect.ts +0 -34
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -668
- package/src/cli/cmd/tui/component/prompt/cwd.ts +0 -0
- package/src/cli/cmd/tui/component/prompt/frecency.tsx +0 -90
- package/src/cli/cmd/tui/component/prompt/history.tsx +0 -108
- package/src/cli/cmd/tui/component/prompt/index.tsx +0 -1869
- package/src/cli/cmd/tui/component/prompt/offset.ts +0 -45
- package/src/cli/cmd/tui/component/prompt/part.ts +0 -36
- package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
- package/src/cli/cmd/tui/component/spinner.tsx +0 -24
- package/src/cli/cmd/tui/component/starry-background.tsx +0 -305
- package/src/cli/cmd/tui/component/startup-loading.tsx +0 -67
- package/src/cli/cmd/tui/component/task-item.tsx +0 -63
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -73
- package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
- package/src/cli/cmd/tui/component/workflow-tree.tsx +0 -177
- package/src/cli/cmd/tui/config/cwd.ts +0 -5
- package/src/cli/cmd/tui/config/tui-migrate.ts +0 -151
- package/src/cli/cmd/tui/config/tui-schema.ts +0 -38
- package/src/cli/cmd/tui/config/tui.ts +0 -219
- package/src/cli/cmd/tui/context/args.tsx +0 -16
- package/src/cli/cmd/tui/context/directory.ts +0 -15
- package/src/cli/cmd/tui/context/event.ts +0 -45
- package/src/cli/cmd/tui/context/exit.tsx +0 -65
- package/src/cli/cmd/tui/context/helper.tsx +0 -25
- package/src/cli/cmd/tui/context/keybind.tsx +0 -105
- package/src/cli/cmd/tui/context/kv.tsx +0 -86
- package/src/cli/cmd/tui/context/language.tsx +0 -91
- package/src/cli/cmd/tui/context/local.tsx +0 -469
- package/src/cli/cmd/tui/context/plugin-keybinds.ts +0 -41
- package/src/cli/cmd/tui/context/project.tsx +0 -109
- package/src/cli/cmd/tui/context/prompt.tsx +0 -18
- package/src/cli/cmd/tui/context/route.tsx +0 -68
- package/src/cli/cmd/tui/context/sdk.tsx +0 -150
- package/src/cli/cmd/tui/context/sync.tsx +0 -884
- package/src/cli/cmd/tui/context/theme/aura.json +0 -69
- package/src/cli/cmd/tui/context/theme/ayu.json +0 -80
- package/src/cli/cmd/tui/context/theme/carbonfox.json +0 -248
- package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +0 -230
- package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +0 -230
- package/src/cli/cmd/tui/context/theme/catppuccin.json +0 -112
- package/src/cli/cmd/tui/context/theme/cobalt2.json +0 -225
- package/src/cli/cmd/tui/context/theme/cursor.json +0 -249
- package/src/cli/cmd/tui/context/theme/dracula.json +0 -219
- package/src/cli/cmd/tui/context/theme/everforest.json +0 -241
- package/src/cli/cmd/tui/context/theme/flexoki.json +0 -237
- package/src/cli/cmd/tui/context/theme/github.json +0 -233
- package/src/cli/cmd/tui/context/theme/gruvbox.json +0 -242
- package/src/cli/cmd/tui/context/theme/kanagawa.json +0 -77
- package/src/cli/cmd/tui/context/theme/lucent-orng.json +0 -234
- package/src/cli/cmd/tui/context/theme/material.json +0 -235
- package/src/cli/cmd/tui/context/theme/matrix.json +0 -77
- package/src/cli/cmd/tui/context/theme/mercury.json +0 -252
- package/src/cli/cmd/tui/context/theme/monokai.json +0 -221
- package/src/cli/cmd/tui/context/theme/nightowl.json +0 -221
- package/src/cli/cmd/tui/context/theme/nord.json +0 -223
- package/src/cli/cmd/tui/context/theme/one-dark.json +0 -84
- package/src/cli/cmd/tui/context/theme/orng.json +0 -249
- package/src/cli/cmd/tui/context/theme/osaka-jade.json +0 -93
- package/src/cli/cmd/tui/context/theme/palenight.json +0 -222
- package/src/cli/cmd/tui/context/theme/rosepine.json +0 -234
- package/src/cli/cmd/tui/context/theme/sleepycode.json +0 -245
- package/src/cli/cmd/tui/context/theme/solarized.json +0 -223
- package/src/cli/cmd/tui/context/theme/synthwave84.json +0 -226
- package/src/cli/cmd/tui/context/theme/tokyonight.json +0 -243
- package/src/cli/cmd/tui/context/theme/vercel.json +0 -245
- package/src/cli/cmd/tui/context/theme/vesper.json +0 -218
- package/src/cli/cmd/tui/context/theme/zenburn.json +0 -223
- package/src/cli/cmd/tui/context/theme.tsx +0 -1298
- package/src/cli/cmd/tui/context/thinking.ts +0 -48
- package/src/cli/cmd/tui/context/tui-config.tsx +0 -9
- package/src/cli/cmd/tui/event.ts +0 -62
- package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +0 -93
- package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +0 -193
- package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +0 -54
- package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +0 -267
- package/src/cli/cmd/tui/feature-plugins/sidebar/cwd.tsx +0 -45
- package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +0 -62
- package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +0 -93
- package/src/cli/cmd/tui/feature-plugins/sidebar/goal.tsx +0 -84
- package/src/cli/cmd/tui/feature-plugins/sidebar/instructions.tsx +0 -54
- package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +0 -66
- package/src/cli/cmd/tui/feature-plugins/sidebar/mascot.tsx +0 -69
- package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +0 -98
- package/src/cli/cmd/tui/feature-plugins/sidebar/task.tsx +0 -95
- package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +0 -51
- package/src/cli/cmd/tui/feature-plugins/sidebar/tps.ts +0 -31
- package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +0 -274
- package/src/cli/cmd/tui/i18n/en.ts +0 -465
- package/src/cli/cmd/tui/i18n/es.ts +0 -508
- package/src/cli/cmd/tui/i18n/fr.ts +0 -515
- package/src/cli/cmd/tui/i18n/ja.ts +0 -463
- package/src/cli/cmd/tui/i18n/locales.ts +0 -82
- package/src/cli/cmd/tui/i18n/ru.ts +0 -527
- package/src/cli/cmd/tui/i18n/slash-command.ts +0 -11
- package/src/cli/cmd/tui/i18n/zh.ts +0 -454
- package/src/cli/cmd/tui/i18n/zht.ts +0 -430
- package/src/cli/cmd/tui/layer.ts +0 -6
- package/src/cli/cmd/tui/plugin/api.tsx +0 -402
- package/src/cli/cmd/tui/plugin/index.ts +0 -3
- package/src/cli/cmd/tui/plugin/internal.ts +0 -37
- package/src/cli/cmd/tui/plugin/runtime.ts +0 -1057
- package/src/cli/cmd/tui/plugin/slots.tsx +0 -60
- package/src/cli/cmd/tui/routes/home.tsx +0 -165
- package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +0 -76
- package/src/cli/cmd/tui/routes/session/dialog-message.tsx +0 -116
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -47
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
- package/src/cli/cmd/tui/routes/session/footer.tsx +0 -91
- package/src/cli/cmd/tui/routes/session/index.tsx +0 -3073
- package/src/cli/cmd/tui/routes/session/permission.tsx +0 -697
- package/src/cli/cmd/tui/routes/session/question.tsx +0 -488
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -97
- package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +0 -143
- package/src/cli/cmd/tui/thread.ts +0 -324
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -61
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -95
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -223
- package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -42
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -123
- package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -467
- package/src/cli/cmd/tui/ui/dialog.tsx +0 -207
- package/src/cli/cmd/tui/ui/link.tsx +0 -28
- package/src/cli/cmd/tui/ui/spinner.ts +0 -378
- package/src/cli/cmd/tui/ui/toast.tsx +0 -102
- package/src/cli/cmd/tui/util/clipboard.ts +0 -203
- package/src/cli/cmd/tui/util/editor.ts +0 -36
- package/src/cli/cmd/tui/util/image-protocol.ts +0 -35
- package/src/cli/cmd/tui/util/index.ts +0 -6
- package/src/cli/cmd/tui/util/model.ts +0 -23
- package/src/cli/cmd/tui/util/pinyin.ts +0 -20
- package/src/cli/cmd/tui/util/provider-origin.ts +0 -7
- package/src/cli/cmd/tui/util/revert-diff.ts +0 -18
- package/src/cli/cmd/tui/util/scroll.ts +0 -23
- package/src/cli/cmd/tui/util/selection.ts +0 -23
- package/src/cli/cmd/tui/util/signal.ts +0 -41
- package/src/cli/cmd/tui/util/sound.ts +0 -154
- package/src/cli/cmd/tui/util/system-locale.ts +0 -209
- package/src/cli/cmd/tui/util/terminal.ts +0 -110
- package/src/cli/cmd/tui/util/transcript.ts +0 -112
- package/src/cli/cmd/tui/util/vad.ts +0 -229
- package/src/cli/cmd/tui/util/voice.ts +0 -450
- package/src/cli/cmd/tui/win32.ts +0 -130
- package/src/cli/cmd/tui/worker.ts +0 -104
- package/src/cli/cmd/uninstall.ts +0 -351
- package/src/cli/cmd/upgrade.ts +0 -79
- package/src/cli/cmd/web.ts +0 -96
- package/src/cli/effect/prompt.ts +0 -25
- package/src/cli/error.ts +0 -82
- package/src/cli/heap.ts +0 -59
- package/src/cli/i18n.ts +0 -15
- package/src/cli/logo.ts +0 -53
- package/src/cli/network.ts +0 -68
- package/src/cli/ui.ts +0 -133
- package/src/cli/upgrade.ts +0 -41
- package/src/command/index.ts +0 -276
- package/src/command/template/initialize.txt +0 -66
- package/src/command/template/review.txt +0 -101
- package/src/config/agent.ts +0 -197
- package/src/config/command.ts +0 -69
- package/src/config/compose.ts +0 -26
- package/src/config/config.ts +0 -1047
- package/src/config/console-state.ts +0 -16
- package/src/config/entry-name.ts +0 -16
- package/src/config/error.ts +0 -21
- package/src/config/formatter.ts +0 -17
- package/src/config/history.ts +0 -21
- package/src/config/index.ts +0 -17
- package/src/config/keybinds.ts +0 -127
- package/src/config/layout.ts +0 -10
- package/src/config/lsp.ts +0 -45
- package/src/config/managed.ts +0 -70
- package/src/config/markdown.ts +0 -97
- package/src/config/mcp.ts +0 -172
- package/src/config/model-id.ts +0 -14
- package/src/config/parse.ts +0 -44
- package/src/config/paths.ts +0 -85
- package/src/config/permission.ts +0 -76
- package/src/config/plugin.ts +0 -88
- package/src/config/provider.ts +0 -118
- package/src/config/server.ts +0 -20
- package/src/config/skills.ts +0 -16
- package/src/config/variable.ts +0 -90
- package/src/control-plane/adaptors/index.ts +0 -52
- package/src/control-plane/adaptors/worktree.ts +0 -47
- package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
- package/src/control-plane/schema.ts +0 -19
- package/src/control-plane/sse.ts +0 -66
- package/src/control-plane/types.ts +0 -34
- package/src/control-plane/util.ts +0 -37
- package/src/control-plane/workspace-context.ts +0 -26
- package/src/control-plane/workspace.sql.ts +0 -17
- package/src/control-plane/workspace.ts +0 -615
- package/src/effect/app-runtime.ts +0 -146
- package/src/effect/bootstrap-runtime.ts +0 -33
- package/src/effect/bridge.ts +0 -48
- package/src/effect/cross-spawn-spawner.ts +0 -514
- package/src/effect/index.ts +0 -5
- package/src/effect/instance-ref.ts +0 -11
- package/src/effect/instance-registry.ts +0 -12
- package/src/effect/instance-state.ts +0 -81
- package/src/effect/logger.ts +0 -73
- package/src/effect/memo-map.ts +0 -3
- package/src/effect/observability.ts +0 -107
- package/src/effect/run-service.ts +0 -52
- package/src/effect/runner.ts +0 -210
- package/src/effect/runtime.ts +0 -19
- package/src/env/index.ts +0 -37
- package/src/file/ignore.ts +0 -81
- package/src/file/index.ts +0 -664
- package/src/file/protected.ts +0 -59
- package/src/file/ripgrep.ts +0 -485
- package/src/file/watcher.ts +0 -163
- package/src/flag/flag.ts +0 -185
- package/src/format/formatter.ts +0 -403
- package/src/format/index.ts +0 -203
- package/src/git/index.ts +0 -260
- package/src/global/index.ts +0 -54
- package/src/history/backfill.ts +0 -162
- package/src/history/extract.ts +0 -67
- package/src/history/fts-query.ts +0 -15
- package/src/history/fts.sql.ts +0 -20
- package/src/history/index.ts +0 -10
- package/src/history/resolve.ts +0 -65
- package/src/history/service.ts +0 -258
- package/src/history/writer.ts +0 -112
- package/src/id/id.ts +0 -87
- package/src/ide/index.ts +0 -73
- package/src/inbox/inbox-ref.ts +0 -38
- package/src/inbox/inbox.sql.ts +0 -26
- package/src/inbox/inbox.ts +0 -223
- package/src/inbox/index.ts +0 -3
- package/src/inbox/render.ts +0 -40
- package/src/index.ts +0 -268
- package/src/installation/index.ts +0 -362
- package/src/installation/version.ts +0 -8
- package/src/lsp/client.ts +0 -249
- package/src/lsp/diagnostic.ts +0 -29
- package/src/lsp/index.ts +0 -3
- package/src/lsp/language.ts +0 -120
- package/src/lsp/launch.ts +0 -21
- package/src/lsp/lsp.ts +0 -519
- package/src/lsp/server.ts +0 -1956
- package/src/mcp/auth.ts +0 -144
- package/src/mcp/index.ts +0 -939
- package/src/mcp/oauth-callback.ts +0 -236
- package/src/mcp/oauth-provider.ts +0 -214
- package/src/memory/fts-query.ts +0 -37
- package/src/memory/fts.sql.ts +0 -19
- package/src/memory/index.ts +0 -1
- package/src/memory/paths.ts +0 -116
- package/src/memory/reconcile.ts +0 -144
- package/src/memory/service.ts +0 -144
- package/src/metrics/client.ts +0 -40
- package/src/metrics/event.ts +0 -43
- package/src/metrics/index.ts +0 -5
- package/src/metrics/installation.ts +0 -18
- package/src/metrics/subscriber.ts +0 -58
- package/src/metrics/util.ts +0 -9
- package/src/node.ts +0 -6
- package/src/npm/config.ts +0 -0
- package/src/npm/index.ts +0 -293
- package/src/npmcli-config.d.ts +0 -43
- package/src/patch/index.ts +0 -680
- package/src/permission/arity.ts +0 -163
- package/src/permission/evaluate.ts +0 -15
- package/src/permission/index.ts +0 -382
- package/src/permission/schema.ts +0 -17
- package/src/plugin/checkpoint-splitover.ts +0 -60
- package/src/plugin/cloudflare.ts +0 -76
- package/src/plugin/codex.ts +0 -611
- package/src/plugin/github-copilot/copilot.ts +0 -368
- package/src/plugin/github-copilot/models.ts +0 -153
- package/src/plugin/index.ts +0 -637
- package/src/plugin/install.ts +0 -439
- package/src/plugin/loader.ts +0 -216
- package/src/plugin/matcher.ts +0 -33
- package/src/plugin/meta.ts +0 -188
- package/src/plugin/shared.ts +0 -323
- package/src/plugin/sleepy.ts +0 -244
- package/src/plugin/subagent-progress-checker.ts +0 -147
- package/src/project/bootstrap.ts +0 -59
- package/src/project/index.ts +0 -2
- package/src/project/instance.ts +0 -215
- package/src/project/project-id.ts +0 -48
- package/src/project/project.sql.ts +0 -16
- package/src/project/project.ts +0 -522
- package/src/project/schema.ts +0 -15
- package/src/project/vcs.ts +0 -227
- package/src/project/workspace-trust.ts +0 -67
- package/src/provider/auth.ts +0 -234
- package/src/provider/error.ts +0 -216
- package/src/provider/index.ts +0 -5
- package/src/provider/models-snapshot.d.ts +0 -2
- package/src/provider/models-snapshot.js +0 -3
- package/src/provider/models.ts +0 -180
- package/src/provider/provider.ts +0 -2098
- package/src/provider/schema.ts +0 -36
- package/src/provider/sdk/copilot/README.md +0 -5
- package/src/provider/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -170
- package/src/provider/sdk/copilot/chat/get-response-metadata.ts +0 -15
- package/src/provider/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -19
- package/src/provider/sdk/copilot/chat/openai-compatible-api-types.ts +0 -64
- package/src/provider/sdk/copilot/chat/openai-compatible-chat-language-model.ts +0 -815
- package/src/provider/sdk/copilot/chat/openai-compatible-chat-options.ts +0 -28
- package/src/provider/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -44
- package/src/provider/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -83
- package/src/provider/sdk/copilot/copilot-provider.ts +0 -100
- package/src/provider/sdk/copilot/index.ts +0 -2
- package/src/provider/sdk/copilot/openai-compatible-error.ts +0 -27
- package/src/provider/sdk/copilot/responses/convert-to-openai-responses-input.ts +0 -335
- package/src/provider/sdk/copilot/responses/map-openai-responses-finish-reason.ts +0 -22
- package/src/provider/sdk/copilot/responses/openai-config.ts +0 -18
- package/src/provider/sdk/copilot/responses/openai-error.ts +0 -22
- package/src/provider/sdk/copilot/responses/openai-responses-api-types.ts +0 -214
- package/src/provider/sdk/copilot/responses/openai-responses-language-model.ts +0 -1770
- package/src/provider/sdk/copilot/responses/openai-responses-prepare-tools.ts +0 -173
- package/src/provider/sdk/copilot/responses/openai-responses-settings.ts +0 -1
- package/src/provider/sdk/copilot/responses/tool/code-interpreter.ts +0 -87
- package/src/provider/sdk/copilot/responses/tool/file-search.ts +0 -127
- package/src/provider/sdk/copilot/responses/tool/image-generation.ts +0 -114
- package/src/provider/sdk/copilot/responses/tool/local-shell.ts +0 -64
- package/src/provider/sdk/copilot/responses/tool/web-search-preview.ts +0 -103
- package/src/provider/sdk/copilot/responses/tool/web-search.ts +0 -102
- package/src/provider/session-check.ts +0 -163
- package/src/provider/transform.ts +0 -1376
- package/src/pty/index.ts +0 -364
- package/src/pty/pty.bun.ts +0 -26
- package/src/pty/pty.node.ts +0 -27
- package/src/pty/pty.ts +0 -25
- package/src/pty/schema.ts +0 -17
- package/src/question/index.ts +0 -252
- package/src/question/schema.ts +0 -17
- package/src/server/adapter.bun.ts +0 -40
- package/src/server/adapter.node.ts +0 -66
- package/src/server/adapter.ts +0 -21
- package/src/server/auth.ts +0 -16
- package/src/server/error.ts +0 -53
- package/src/server/event.ts +0 -7
- package/src/server/fence.ts +0 -81
- package/src/server/mdns.ts +0 -60
- package/src/server/middleware.ts +0 -94
- package/src/server/projectors.ts +0 -28
- package/src/server/proxy.ts +0 -171
- package/src/server/pty-ticket.ts +0 -42
- package/src/server/rate-limit.ts +0 -38
- package/src/server/routes/control/index.ts +0 -160
- package/src/server/routes/control/workspace.ts +0 -203
- package/src/server/routes/global.ts +0 -367
- package/src/server/routes/instance/bash-interactive.ts +0 -82
- package/src/server/routes/instance/config.ts +0 -89
- package/src/server/routes/instance/event.ts +0 -108
- package/src/server/routes/instance/experimental.ts +0 -408
- package/src/server/routes/instance/file.ts +0 -190
- package/src/server/routes/instance/httpapi/config.ts +0 -51
- package/src/server/routes/instance/httpapi/permission.ts +0 -72
- package/src/server/routes/instance/httpapi/project.ts +0 -62
- package/src/server/routes/instance/httpapi/provider.ts +0 -142
- package/src/server/routes/instance/httpapi/question.ts +0 -121
- package/src/server/routes/instance/httpapi/server.ts +0 -153
- package/src/server/routes/instance/index.ts +0 -301
- package/src/server/routes/instance/mcp.ts +0 -260
- package/src/server/routes/instance/middleware.ts +0 -44
- package/src/server/routes/instance/permission.ts +0 -73
- package/src/server/routes/instance/project.ts +0 -122
- package/src/server/routes/instance/provider.ts +0 -158
- package/src/server/routes/instance/pty.ts +0 -302
- package/src/server/routes/instance/question.ts +0 -162
- package/src/server/routes/instance/session.ts +0 -1328
- package/src/server/routes/instance/sync.ts +0 -143
- package/src/server/routes/instance/trace.ts +0 -59
- package/src/server/routes/instance/tui.ts +0 -384
- package/src/server/routes/instance/workflows.ts +0 -142
- package/src/server/routes/ui.ts +0 -37
- package/src/server/server.ts +0 -146
- package/src/server/workspace.ts +0 -122
- package/src/session/auto-dream.ts +0 -123
- package/src/session/boundary.ts +0 -77
- package/src/session/budgeted-read.ts +0 -118
- package/src/session/checkpoint-align.ts +0 -29
- package/src/session/checkpoint-context.ts +0 -36
- package/src/session/checkpoint-paths.ts +0 -86
- package/src/session/checkpoint-progress-reconcile.ts +0 -111
- package/src/session/checkpoint-retry.ts +0 -192
- package/src/session/checkpoint-templates.ts +0 -114
- package/src/session/checkpoint-validator.ts +0 -259
- package/src/session/checkpoint.ts +0 -1560
- package/src/session/classify.ts +0 -117
- package/src/session/claude-import.ts +0 -381
- package/src/session/codex-import.ts +0 -416
- package/src/session/compaction.ts +0 -545
- package/src/session/external-import.sql.ts +0 -18
- package/src/session/external-import.ts +0 -136
- package/src/session/goal.ts +0 -232
- package/src/session/index.ts +0 -1
- package/src/session/instruction.ts +0 -276
- package/src/session/last-message-info.ts +0 -32
- package/src/session/llm-request-prefix.ts +0 -82
- package/src/session/llm.ts +0 -737
- package/src/session/max-mode.ts +0 -410
- package/src/session/message-v2.ts +0 -1138
- package/src/session/message.ts +0 -191
- package/src/session/opencode-import.ts +0 -281
- package/src/session/overflow.ts +0 -53
- package/src/session/prefix-capture-ref.ts +0 -48
- package/src/session/processor.ts +0 -983
- package/src/session/projectors.ts +0 -137
- package/src/session/prompt/anthropic.txt +0 -154
- package/src/session/prompt/beast.txt +0 -155
- package/src/session/prompt/build-switch.txt +0 -5
- package/src/session/prompt/codex.txt +0 -79
- package/src/session/prompt/compose.txt +0 -119
- package/src/session/prompt/copilot-gpt-5.txt +0 -143
- package/src/session/prompt/deepseek.txt +0 -131
- package/src/session/prompt/default.old.txt +0 -151
- package/src/session/prompt/default.txt +0 -172
- package/src/session/prompt/gemini.txt +0 -155
- package/src/session/prompt/glm.txt +0 -51
- package/src/session/prompt/gpt.txt +0 -107
- package/src/session/prompt/kimi.txt +0 -95
- package/src/session/prompt/max-steps.txt +0 -16
- package/src/session/prompt/minimax.txt +0 -140
- package/src/session/prompt/text-loop-recovery.ts +0 -40
- package/src/session/prompt/text-ngram-detection.ts +0 -87
- package/src/session/prompt/trinity.txt +0 -97
- package/src/session/prompt.ts +0 -3878
- package/src/session/prune.ts +0 -481
- package/src/session/retry.ts +0 -178
- package/src/session/revert.ts +0 -161
- package/src/session/run-state.ts +0 -135
- package/src/session/schema.ts +0 -36
- package/src/session/session.sql.ts +0 -110
- package/src/session/session.ts +0 -908
- package/src/session/status.ts +0 -89
- package/src/session/summary.ts +0 -163
- package/src/session/system.ts +0 -96
- package/src/session/todo.ts +0 -77
- package/src/session/trajectory.ts +0 -98
- package/src/share/index.ts +0 -2
- package/src/share/session.ts +0 -57
- package/src/share/share-next.ts +0 -381
- package/src/share/share.sql.ts +0 -13
- package/src/shell/shell.ts +0 -124
- package/src/skill/builtin/.bundle/self-extend/SKILL.md +0 -131
- package/src/skill/builtin/.bundle/self-extend/reference/hook-api.md +0 -242
- package/src/skill/builtin/.bundle/self-extend/reference/skill-api.md +0 -114
- package/src/skill/builtin/.bundle/self-extend/reference/tool-api.md +0 -115
- package/src/skill/builtin/.bundle/self-extend/reference/tui-api.md +0 -258
- package/src/skill/builtin/bundle.macro.ts +0 -30
- package/src/skill/builtin/extract.ts +0 -41
- package/src/skill/compose/.bundle/ask/SKILL.md +0 -58
- package/src/skill/compose/.bundle/brainstorm/SKILL.md +0 -200
- package/src/skill/compose/.bundle/brainstorm/scripts/frame-template.html +0 -214
- package/src/skill/compose/.bundle/brainstorm/scripts/helper.js +0 -88
- package/src/skill/compose/.bundle/brainstorm/scripts/server.cjs +0 -354
- package/src/skill/compose/.bundle/brainstorm/scripts/start-server.sh +0 -148
- package/src/skill/compose/.bundle/brainstorm/scripts/stop-server.sh +0 -56
- package/src/skill/compose/.bundle/brainstorm/spec-document-reviewer-prompt.md +0 -50
- package/src/skill/compose/.bundle/brainstorm/visual-companion.md +0 -258
- package/src/skill/compose/.bundle/debug/CREATION-LOG.md +0 -119
- package/src/skill/compose/.bundle/debug/SKILL.md +0 -297
- package/src/skill/compose/.bundle/debug/condition-based-waiting-example.ts +0 -158
- package/src/skill/compose/.bundle/debug/condition-based-waiting.md +0 -106
- package/src/skill/compose/.bundle/debug/defense-in-depth.md +0 -122
- package/src/skill/compose/.bundle/debug/find-polluter.sh +0 -63
- package/src/skill/compose/.bundle/debug/root-cause-tracing.md +0 -144
- package/src/skill/compose/.bundle/debug/test-academic.md +0 -14
- package/src/skill/compose/.bundle/debug/test-pressure-1.md +0 -58
- package/src/skill/compose/.bundle/debug/test-pressure-2.md +0 -68
- package/src/skill/compose/.bundle/debug/test-pressure-3.md +0 -69
- package/src/skill/compose/.bundle/execute/SKILL.md +0 -71
- package/src/skill/compose/.bundle/feedback/SKILL.md +0 -214
- package/src/skill/compose/.bundle/merge/SKILL.md +0 -252
- package/src/skill/compose/.bundle/new-skill/SKILL.md +0 -211
- package/src/skill/compose/.bundle/parallel/SKILL.md +0 -168
- package/src/skill/compose/.bundle/plan/SKILL.md +0 -183
- package/src/skill/compose/.bundle/plan/plan-document-reviewer-prompt.md +0 -50
- package/src/skill/compose/.bundle/report/SKILL.md +0 -180
- package/src/skill/compose/.bundle/review/SKILL.md +0 -104
- package/src/skill/compose/.bundle/review/code-reviewer.md +0 -178
- package/src/skill/compose/.bundle/subagent/SKILL.md +0 -325
- package/src/skill/compose/.bundle/subagent/code-quality-reviewer-prompt.md +0 -26
- package/src/skill/compose/.bundle/subagent/implementer-prompt.md +0 -128
- package/src/skill/compose/.bundle/subagent/spec-reviewer-prompt.md +0 -118
- package/src/skill/compose/.bundle/tdd/SKILL.md +0 -360
- package/src/skill/compose/.bundle/tdd/testing-anti-patterns.md +0 -299
- package/src/skill/compose/.bundle/verify/SKILL.md +0 -140
- package/src/skill/compose/.bundle/worktree/SKILL.md +0 -234
- package/src/skill/compose/LICENSE-karpathy +0 -28
- package/src/skill/compose/bundle.macro.ts +0 -30
- package/src/skill/compose/extract.ts +0 -85
- package/src/skill/discovery.ts +0 -114
- package/src/skill/index.ts +0 -328
- package/src/snapshot/index.ts +0 -777
- package/src/sql.d.ts +0 -4
- package/src/storage/db.bun.ts +0 -8
- package/src/storage/db.node.ts +0 -8
- package/src/storage/db.ts +0 -172
- package/src/storage/index.ts +0 -26
- package/src/storage/json-migration.ts +0 -426
- package/src/storage/read-sqlite.bun.ts +0 -11
- package/src/storage/read-sqlite.node.ts +0 -13
- package/src/storage/read-sqlite.ts +0 -10
- package/src/storage/schema.sql.ts +0 -10
- package/src/storage/schema.ts +0 -7
- package/src/storage/storage.ts +0 -331
- package/src/sync/README.md +0 -179
- package/src/sync/event.sql.ts +0 -16
- package/src/sync/index.ts +0 -278
- package/src/sync/schema.ts +0 -14
- package/src/task/events.ts +0 -28
- package/src/task/gate-state.ts +0 -54
- package/src/task/gate.ts +0 -116
- package/src/task/index.ts +0 -1
- package/src/task/registry.ts +0 -394
- package/src/task/schema.ts +0 -43
- package/src/task/task.sql.ts +0 -50
- package/src/team/events.ts +0 -22
- package/src/team/index.ts +0 -113
- package/src/team/schema.ts +0 -31
- package/src/temporary.ts +0 -33
- package/src/tool/actor.shell.txt +0 -72
- package/src/tool/actor.ts +0 -804
- package/src/tool/actor.txt +0 -103
- package/src/tool/apply_patch.ts +0 -308
- package/src/tool/apply_patch.txt +0 -33
- package/src/tool/bash-interactive.ts +0 -183
- package/src/tool/bash.ts +0 -704
- package/src/tool/bash.txt +0 -123
- package/src/tool/change-directory.ts +0 -91
- package/src/tool/codesearch.ts +0 -63
- package/src/tool/codesearch.txt +0 -12
- package/src/tool/edit.ts +0 -693
- package/src/tool/edit.txt +0 -10
- package/src/tool/external-directory.ts +0 -132
- package/src/tool/glob.ts +0 -100
- package/src/tool/glob.txt +0 -6
- package/src/tool/grep.ts +0 -145
- package/src/tool/grep.txt +0 -8
- package/src/tool/history.ts +0 -146
- package/src/tool/history.txt +0 -17
- package/src/tool/index.ts +0 -4
- package/src/tool/invalid.ts +0 -20
- package/src/tool/invocation-style.ts +0 -17
- package/src/tool/lsp.ts +0 -91
- package/src/tool/lsp.txt +0 -19
- package/src/tool/mcp-exa.ts +0 -78
- package/src/tool/memory-path-guard.ts +0 -162
- package/src/tool/memory.ts +0 -81
- package/src/tool/memory.txt +0 -69
- package/src/tool/multiedit.ts +0 -54
- package/src/tool/multiedit.txt +0 -41
- package/src/tool/notebook-edit.ts +0 -225
- package/src/tool/notebook-edit.txt +0 -10
- package/src/tool/plan-enter.txt +0 -16
- package/src/tool/plan-exit.txt +0 -14
- package/src/tool/plan.ts +0 -179
- package/src/tool/question.ts +0 -67
- package/src/tool/question.txt +0 -10
- package/src/tool/read-state.ts +0 -44
- package/src/tool/read.ts +0 -327
- package/src/tool/read.txt +0 -14
- package/src/tool/recoverable.ts +0 -35
- package/src/tool/registry.ts +0 -429
- package/src/tool/schema.ts +0 -17
- package/src/tool/session-cwd.ts +0 -35
- package/src/tool/shell-tokenize.ts +0 -374
- package/src/tool/shell-wrap.ts +0 -235
- package/src/tool/skill.ts +0 -76
- package/src/tool/skill.txt +0 -5
- package/src/tool/task.shell.txt +0 -57
- package/src/tool/task.ts +0 -456
- package/src/tool/task.txt +0 -56
- package/src/tool/tool.ts +0 -166
- package/src/tool/truncate.ts +0 -201
- package/src/tool/truncation-dir.ts +0 -4
- package/src/tool/webfetch.ts +0 -208
- package/src/tool/webfetch.txt +0 -13
- package/src/tool/websearch/index.ts +0 -104
- package/src/tool/websearch/sleepy.ts +0 -118
- package/src/tool/websearch/websearch.txt +0 -14
- package/src/tool/workflow.ts +0 -357
- package/src/tool/workflow.txt +0 -25
- package/src/tool/write.ts +0 -88
- package/src/tool/write.txt +0 -10
- package/src/util/abort.ts +0 -35
- package/src/util/archive.ts +0 -15
- package/src/util/color.ts +0 -17
- package/src/util/data-url.ts +0 -9
- package/src/util/defer.ts +0 -10
- package/src/util/effect-http-client.ts +0 -11
- package/src/util/effect-zod.ts +0 -367
- package/src/util/env-info.ts +0 -62
- package/src/util/error.ts +0 -78
- package/src/util/filesystem.ts +0 -243
- package/src/util/fn.ts +0 -21
- package/src/util/format.ts +0 -20
- package/src/util/iife.ts +0 -3
- package/src/util/index.ts +0 -14
- package/src/util/keybind.ts +0 -101
- package/src/util/lazy.ts +0 -18
- package/src/util/local-context.ts +0 -23
- package/src/util/locale.ts +0 -79
- package/src/util/lock.ts +0 -96
- package/src/util/log.ts +0 -234
- package/src/util/media.ts +0 -26
- package/src/util/network.ts +0 -9
- package/src/util/process.ts +0 -174
- package/src/util/provider-priority.ts +0 -48
- package/src/util/queue.ts +0 -60
- package/src/util/record.ts +0 -3
- package/src/util/rpc.ts +0 -64
- package/src/util/schema.ts +0 -53
- package/src/util/scrap.ts +0 -10
- package/src/util/signal.ts +0 -12
- package/src/util/sleepy-process.ts +0 -24
- package/src/util/ssrf.ts +0 -116
- package/src/util/timeout.ts +0 -14
- package/src/util/token.ts +0 -5
- package/src/util/tool-compat.ts +0 -144
- package/src/util/update-schema.ts +0 -13
- package/src/util/which.ts +0 -14
- package/src/util/wildcard.ts +0 -57
- package/src/workflow/builtin/compose.js +0 -749
- package/src/workflow/builtin/deep-research.js +0 -398
- package/src/workflow/builtin.ts +0 -59
- package/src/workflow/events.ts +0 -72
- package/src/workflow/meta.ts +0 -335
- package/src/workflow/persistence.ts +0 -312
- package/src/workflow/resolve.ts +0 -45
- package/src/workflow/runtime-ref.ts +0 -18
- package/src/workflow/runtime.ts +0 -1447
- package/src/workflow/sandbox.ts +0 -286
- package/src/workflow/workflow.sql.ts +0 -31
- package/src/workflow/workspace.ts +0 -69
- package/src/worktree/index.ts +0 -629
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import z from "zod"
|
|
2
|
-
import * as path from "path"
|
|
3
|
-
import { Effect } from "effect"
|
|
4
|
-
import { createTwoFilesPatch } from "diff"
|
|
5
|
-
import * as Tool from "./tool"
|
|
6
|
-
import DESCRIPTION from "./notebook-edit.txt"
|
|
7
|
-
import { AppFileSystem } from "@sleepy-ai/shared/filesystem"
|
|
8
|
-
import { Bus } from "../bus"
|
|
9
|
-
import { File } from "../file"
|
|
10
|
-
import { FileWatcher } from "../file/watcher"
|
|
11
|
-
import { Instance } from "../project/instance"
|
|
12
|
-
import { SessionCwd } from "./session-cwd"
|
|
13
|
-
import { assertWriteAllowed, askEditUnlessMemory } from "./external-directory"
|
|
14
|
-
import { assertFileRead } from "./read-state"
|
|
15
|
-
import { trimDiff } from "./edit"
|
|
16
|
-
|
|
17
|
-
const Parameters = z.object({
|
|
18
|
-
notebook_path: z.string().describe("The absolute path to the .ipynb file to modify"),
|
|
19
|
-
cell_id: z
|
|
20
|
-
.string()
|
|
21
|
-
.optional()
|
|
22
|
-
.describe(
|
|
23
|
-
"Cell id from the Read tool's <cell id=\"...\"> output. Required for replace/delete; for insert, the new cell is added after this cell (or at the beginning if omitted).",
|
|
24
|
-
),
|
|
25
|
-
new_source: z.string().optional().describe("The cell's new content. Required for replace and insert; ignored for delete."),
|
|
26
|
-
cell_type: z
|
|
27
|
-
.enum(["code", "markdown"])
|
|
28
|
-
.optional()
|
|
29
|
-
.describe("Cell type. Required for insert; for replace, defaults to the existing cell's type."),
|
|
30
|
-
edit_mode: z
|
|
31
|
-
.enum(["replace", "insert", "delete"])
|
|
32
|
-
.optional()
|
|
33
|
-
.describe("Operation to perform. Defaults to replace."),
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
type NotebookCell = {
|
|
37
|
-
cell_type: "code" | "markdown" | "raw"
|
|
38
|
-
id?: string
|
|
39
|
-
source: string | string[]
|
|
40
|
-
metadata?: Record<string, unknown>
|
|
41
|
-
outputs?: unknown[]
|
|
42
|
-
execution_count?: number | null
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
type Notebook = {
|
|
46
|
-
cells: NotebookCell[]
|
|
47
|
-
metadata?: Record<string, unknown>
|
|
48
|
-
nbformat?: number
|
|
49
|
-
nbformat_minor?: number
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function stringToCellSource(content: string): string[] {
|
|
53
|
-
if (content === "") return []
|
|
54
|
-
const lines = content.split("\n")
|
|
55
|
-
return lines.map((line, i) => (i < lines.length - 1 ? line + "\n" : line)).filter((line) => line !== "")
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function generateCellId(existing: Set<string>): string {
|
|
59
|
-
for (let i = 0; i < 1000; i++) {
|
|
60
|
-
const id = crypto.randomUUID().slice(0, 8)
|
|
61
|
-
if (!existing.has(id)) return id
|
|
62
|
-
}
|
|
63
|
-
return crypto.randomUUID()
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function buildCell(cellType: "code" | "markdown", source: string, id: string): NotebookCell {
|
|
67
|
-
const sourceLines = stringToCellSource(source)
|
|
68
|
-
if (cellType === "code") {
|
|
69
|
-
return {
|
|
70
|
-
cell_type: "code",
|
|
71
|
-
id,
|
|
72
|
-
source: sourceLines,
|
|
73
|
-
metadata: {},
|
|
74
|
-
outputs: [],
|
|
75
|
-
execution_count: null,
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
cell_type: "markdown",
|
|
80
|
-
id,
|
|
81
|
-
source: sourceLines,
|
|
82
|
-
metadata: {},
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export const NotebookEditTool = Tool.define(
|
|
87
|
-
"notebook_edit",
|
|
88
|
-
Effect.gen(function* () {
|
|
89
|
-
const fs = yield* AppFileSystem.Service
|
|
90
|
-
const bus = yield* Bus.Service
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
description: DESCRIPTION,
|
|
94
|
-
parameters: Parameters,
|
|
95
|
-
execute: (params: z.infer<typeof Parameters>, ctx: Tool.Context) =>
|
|
96
|
-
Effect.gen(function* () {
|
|
97
|
-
const editMode = params.edit_mode ?? "replace"
|
|
98
|
-
|
|
99
|
-
if (!params.notebook_path) throw new Error("notebook_path is required")
|
|
100
|
-
if (path.extname(params.notebook_path) !== ".ipynb") {
|
|
101
|
-
throw new Error("notebook_path must point to a .ipynb file")
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const notebookPath = path.isAbsolute(params.notebook_path)
|
|
105
|
-
? params.notebook_path
|
|
106
|
-
: path.join(SessionCwd.get(ctx.sessionID), params.notebook_path)
|
|
107
|
-
|
|
108
|
-
if (editMode !== "insert" && !params.cell_id) {
|
|
109
|
-
throw new Error(`cell_id is required when edit_mode is "${editMode}"`)
|
|
110
|
-
}
|
|
111
|
-
if ((editMode === "replace" || editMode === "insert") && params.new_source === undefined) {
|
|
112
|
-
throw new Error(`new_source is required when edit_mode is "${editMode}"`)
|
|
113
|
-
}
|
|
114
|
-
if (editMode === "insert" && !params.cell_type) {
|
|
115
|
-
throw new Error('cell_type is required when edit_mode is "insert"')
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
yield* assertWriteAllowed(ctx, notebookPath)
|
|
119
|
-
assertFileRead(ctx, notebookPath, "notebook_edit")
|
|
120
|
-
|
|
121
|
-
const exists = yield* fs.existsSafe(notebookPath)
|
|
122
|
-
if (!exists) throw new Error(`Notebook not found: ${notebookPath}`)
|
|
123
|
-
|
|
124
|
-
const contentOld = yield* fs.readFileString(notebookPath)
|
|
125
|
-
const notebook = ((): Notebook => {
|
|
126
|
-
try {
|
|
127
|
-
return JSON.parse(contentOld) as Notebook
|
|
128
|
-
} catch (err) {
|
|
129
|
-
throw new Error(`Failed to parse notebook JSON: ${(err as Error).message}`)
|
|
130
|
-
}
|
|
131
|
-
})()
|
|
132
|
-
|
|
133
|
-
if (!Array.isArray(notebook.cells)) {
|
|
134
|
-
throw new Error("Notebook is missing a `cells` array — file does not look like a valid Jupyter notebook")
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// Older notebooks (nbformat_minor < 5) have no cell ids. Backfill UUIDs
|
|
138
|
-
// for any cell missing one so cellId lookup is stable, and bump
|
|
139
|
-
// nbformat_minor to 5 to match what Jupyter does on save.
|
|
140
|
-
const existingIds = new Set<string>()
|
|
141
|
-
for (const cell of notebook.cells) if (cell.id) existingIds.add(cell.id)
|
|
142
|
-
let backfilled = false
|
|
143
|
-
for (const cell of notebook.cells) {
|
|
144
|
-
if (cell.id) continue
|
|
145
|
-
const id = generateCellId(existingIds)
|
|
146
|
-
cell.id = id
|
|
147
|
-
existingIds.add(id)
|
|
148
|
-
backfilled = true
|
|
149
|
-
}
|
|
150
|
-
if (backfilled && (notebook.nbformat_minor ?? 0) < 5) {
|
|
151
|
-
notebook.nbformat_minor = 5
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Accept either the real cell id or a positional reference like "#0".
|
|
155
|
-
const findIndex = (ref: string) => {
|
|
156
|
-
if (ref.startsWith("#")) {
|
|
157
|
-
const idx = Number.parseInt(ref.slice(1), 10)
|
|
158
|
-
if (Number.isInteger(idx) && idx >= 0 && idx < notebook.cells.length) return idx
|
|
159
|
-
return -1
|
|
160
|
-
}
|
|
161
|
-
return notebook.cells.findIndex((c) => c.id === ref)
|
|
162
|
-
}
|
|
163
|
-
const cellNotFound = (ref: string) => {
|
|
164
|
-
const ids = notebook.cells.map((c, i) => c.id ?? `#${i}`).join(", ")
|
|
165
|
-
return new Error(`Cell not found: ${ref}. Available cells: ${ids || "(none)"}`)
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
let title = ""
|
|
169
|
-
|
|
170
|
-
if (editMode === "replace") {
|
|
171
|
-
const idx = findIndex(params.cell_id!)
|
|
172
|
-
if (idx === -1) throw cellNotFound(params.cell_id!)
|
|
173
|
-
const target = notebook.cells[idx]
|
|
174
|
-
const nextType = params.cell_type ?? (target.cell_type === "raw" ? "code" : target.cell_type)
|
|
175
|
-
const replaced = buildCell(nextType, params.new_source ?? "", target.id ?? params.cell_id!)
|
|
176
|
-
if (target.cell_type === "code" && nextType === "code") {
|
|
177
|
-
replaced.outputs = target.outputs ?? []
|
|
178
|
-
replaced.execution_count = target.execution_count ?? null
|
|
179
|
-
replaced.metadata = target.metadata ?? {}
|
|
180
|
-
} else {
|
|
181
|
-
replaced.metadata = target.metadata ?? {}
|
|
182
|
-
}
|
|
183
|
-
notebook.cells[idx] = replaced
|
|
184
|
-
title = `replace cell ${target.id ?? `#${idx}`}`
|
|
185
|
-
} else if (editMode === "delete") {
|
|
186
|
-
const idx = findIndex(params.cell_id!)
|
|
187
|
-
if (idx === -1) throw cellNotFound(params.cell_id!)
|
|
188
|
-
notebook.cells.splice(idx, 1)
|
|
189
|
-
title = `delete cell ${params.cell_id}`
|
|
190
|
-
} else {
|
|
191
|
-
// insert
|
|
192
|
-
const newId = generateCellId(existingIds)
|
|
193
|
-
const cell = buildCell(params.cell_type!, params.new_source ?? "", newId)
|
|
194
|
-
if (!params.cell_id) {
|
|
195
|
-
notebook.cells.unshift(cell)
|
|
196
|
-
title = `insert cell at start`
|
|
197
|
-
} else {
|
|
198
|
-
const idx = findIndex(params.cell_id)
|
|
199
|
-
if (idx === -1) throw cellNotFound(params.cell_id)
|
|
200
|
-
notebook.cells.splice(idx + 1, 0, cell)
|
|
201
|
-
title = `insert cell after ${params.cell_id}`
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
const contentNew = JSON.stringify(notebook, null, 1) + (contentOld.endsWith("\n") ? "\n" : "")
|
|
206
|
-
|
|
207
|
-
const diff = trimDiff(createTwoFilesPatch(notebookPath, notebookPath, contentOld, contentNew))
|
|
208
|
-
yield* askEditUnlessMemory(ctx, notebookPath, {
|
|
209
|
-
patterns: [path.relative(Instance.worktree, notebookPath)],
|
|
210
|
-
diff,
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
yield* fs.writeWithDirs(notebookPath, contentNew)
|
|
214
|
-
yield* bus.publish(File.Event.Edited, { file: notebookPath })
|
|
215
|
-
yield* bus.publish(FileWatcher.Event.Updated, { file: notebookPath, event: "change" })
|
|
216
|
-
|
|
217
|
-
return {
|
|
218
|
-
title: `${path.relative(Instance.worktree, notebookPath)} — ${title}`,
|
|
219
|
-
metadata: { diff, edit_mode: editMode, cell_id: params.cell_id },
|
|
220
|
-
output: `Notebook updated: ${editMode} on ${path.relative(Instance.worktree, notebookPath)}.`,
|
|
221
|
-
}
|
|
222
|
-
}).pipe(Effect.orDie),
|
|
223
|
-
}
|
|
224
|
-
}),
|
|
225
|
-
)
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
Replaces, inserts, or deletes a single cell in a Jupyter notebook (.ipynb file).
|
|
2
|
-
|
|
3
|
-
Usage:
|
|
4
|
-
- You must use your `read` tool on the notebook in this conversation before editing — this tool will fail with a recoverable error if the file has not been Read in this session.
|
|
5
|
-
- `notebook_path` should be an absolute path to a `.ipynb` file.
|
|
6
|
-
- `cell_id` is the `id` attribute shown in the `read` tool's `<cell id="...">` output. It is required for `replace` and `delete`. For older notebooks (nbformat_minor < 5) where cells have no real `id`, you can pass a positional reference like `#0`, `#1`, etc. (0-based index). On first edit, missing ids are auto-generated and the notebook is upgraded to nbformat_minor 5.
|
|
7
|
-
- `edit_mode` defaults to `replace`. Use `insert` to add a new cell after the cell with the given `cell_id` (or at the beginning of the notebook if `cell_id` is omitted) — `cell_type` is required when inserting. Use `delete` to remove the cell.
|
|
8
|
-
- For `replace`, the cell type is preserved unless `cell_type` is explicitly provided.
|
|
9
|
-
- `new_source` is the cell's full new content (required for `replace` and `insert`, ignored for `delete`).
|
|
10
|
-
- This tool understands the Jupyter notebook cell structure and modifies cells in place — prefer it over `write`/`edit` for `.ipynb` files so the surrounding JSON, outputs, and metadata stay intact.
|
package/src/tool/plan-enter.txt
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Request to switch into plan mode for structured planning before implementation.
|
|
2
|
-
|
|
3
|
-
This tool is always present regardless of current mode. It is only effective outside of plan mode — calling it while already in plan mode will return an error.
|
|
4
|
-
|
|
5
|
-
If the user explicitly mentions wanting to create a plan, ALWAYS call this tool first.
|
|
6
|
-
|
|
7
|
-
Call this tool when:
|
|
8
|
-
- The user's request is complex and would benefit from planning first
|
|
9
|
-
- You want to research and design before making changes
|
|
10
|
-
- The task involves multiple files or significant architectural decisions
|
|
11
|
-
|
|
12
|
-
Do NOT call this tool:
|
|
13
|
-
- If you are already in plan mode
|
|
14
|
-
- For simple, straightforward tasks
|
|
15
|
-
- When the user explicitly wants immediate implementation
|
|
16
|
-
- If you are in compose mode (use compose:plan skill instead)
|
package/src/tool/plan-exit.txt
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Request to exit plan mode and switch to build agent for implementation.
|
|
2
|
-
|
|
3
|
-
This tool is always present regardless of current mode. It is only effective in plan mode — calling it from any other mode will return an error.
|
|
4
|
-
|
|
5
|
-
Call this tool:
|
|
6
|
-
- After you have written a complete plan to the plan file
|
|
7
|
-
- After you have clarified any questions with the user
|
|
8
|
-
- When you are confident the plan is ready for implementation
|
|
9
|
-
|
|
10
|
-
Do NOT call this tool:
|
|
11
|
-
- If you are not currently in plan mode
|
|
12
|
-
- Before you have created or finalized the plan
|
|
13
|
-
- If you still have unanswered questions about the implementation
|
|
14
|
-
- If the user has indicated they want to continue planning
|
package/src/tool/plan.ts
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import z from "zod"
|
|
2
|
-
import path from "path"
|
|
3
|
-
import { Effect } from "effect"
|
|
4
|
-
import * as Tool from "./tool"
|
|
5
|
-
import { Question } from "../question"
|
|
6
|
-
import { Session } from "../session"
|
|
7
|
-
import { MessageV2 } from "../session/message-v2"
|
|
8
|
-
import { Provider } from "../provider"
|
|
9
|
-
import { Instance } from "../project/instance"
|
|
10
|
-
import { type SessionID, MessageID, PartID } from "../session/schema"
|
|
11
|
-
import ENTER_DESCRIPTION from "./plan-enter.txt"
|
|
12
|
-
import EXIT_DESCRIPTION from "./plan-exit.txt"
|
|
13
|
-
|
|
14
|
-
function getLastModel(sessionID: SessionID) {
|
|
15
|
-
for (const item of MessageV2.stream(sessionID, { agentID: "*" })) {
|
|
16
|
-
if (item.info.role === "user" && item.info.model) return item.info.model
|
|
17
|
-
}
|
|
18
|
-
return undefined
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const PlanEnterTool = Tool.define(
|
|
22
|
-
"plan_enter",
|
|
23
|
-
Effect.gen(function* () {
|
|
24
|
-
const session = yield* Session.Service
|
|
25
|
-
const question = yield* Question.Service
|
|
26
|
-
const provider = yield* Provider.Service
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
description: ENTER_DESCRIPTION,
|
|
30
|
-
parameters: z.object({}),
|
|
31
|
-
execute: (_params: {}, ctx: Tool.Context) =>
|
|
32
|
-
Effect.gen(function* () {
|
|
33
|
-
if (ctx.agent === "plan") {
|
|
34
|
-
return {
|
|
35
|
-
title: "Already in plan mode",
|
|
36
|
-
output: "You are already in plan mode. This tool is only effective outside of plan mode.",
|
|
37
|
-
metadata: { switched: false, feedback: "" },
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const info = yield* session.get(ctx.sessionID)
|
|
42
|
-
const plan = path.relative(Instance.worktree, Session.plan(info))
|
|
43
|
-
const answers = yield* question.ask({
|
|
44
|
-
sessionID: ctx.sessionID,
|
|
45
|
-
questions: [
|
|
46
|
-
{
|
|
47
|
-
key: "plan_enter",
|
|
48
|
-
params: { plan },
|
|
49
|
-
question: `Would you like to switch to plan mode for structured planning?`,
|
|
50
|
-
header: "Plan",
|
|
51
|
-
options: [
|
|
52
|
-
{ label: "Yes", description: "Switch to plan agent for read-only planning" },
|
|
53
|
-
{ label: "No", description: "Stay in current mode" },
|
|
54
|
-
],
|
|
55
|
-
},
|
|
56
|
-
],
|
|
57
|
-
tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined,
|
|
58
|
-
})
|
|
59
|
-
|
|
60
|
-
const answer = answers[0]?.[0]
|
|
61
|
-
if (answer === "No") return yield* new Question.RejectedError()
|
|
62
|
-
|
|
63
|
-
if (answer !== "Yes") {
|
|
64
|
-
return {
|
|
65
|
-
title: "User provided feedback",
|
|
66
|
-
output: `User chose not to switch yet and provided feedback: ${answer}`,
|
|
67
|
-
metadata: { switched: false, feedback: answer },
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const model = getLastModel(ctx.sessionID) ?? (yield* provider.defaultModel())
|
|
72
|
-
|
|
73
|
-
const msg: MessageV2.User = {
|
|
74
|
-
id: MessageID.ascending(),
|
|
75
|
-
sessionID: ctx.sessionID,
|
|
76
|
-
role: "user",
|
|
77
|
-
time: { created: Date.now() },
|
|
78
|
-
agent: "plan",
|
|
79
|
-
model,
|
|
80
|
-
}
|
|
81
|
-
yield* session.updateMessage(msg)
|
|
82
|
-
yield* session.updatePart({
|
|
83
|
-
id: PartID.ascending(),
|
|
84
|
-
messageID: msg.id,
|
|
85
|
-
sessionID: ctx.sessionID,
|
|
86
|
-
type: "text",
|
|
87
|
-
text: `Switched to plan mode. Create a plan at ${plan}`,
|
|
88
|
-
synthetic: true,
|
|
89
|
-
} satisfies MessageV2.TextPart)
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
title: "Switching to plan agent",
|
|
93
|
-
output: "User approved switching to plan agent. Wait for further instructions.",
|
|
94
|
-
metadata: { switched: true, feedback: "" },
|
|
95
|
-
}
|
|
96
|
-
}).pipe(Effect.orDie),
|
|
97
|
-
}
|
|
98
|
-
}),
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
export const PlanExitTool = Tool.define(
|
|
102
|
-
"plan_exit",
|
|
103
|
-
Effect.gen(function* () {
|
|
104
|
-
const session = yield* Session.Service
|
|
105
|
-
const question = yield* Question.Service
|
|
106
|
-
const provider = yield* Provider.Service
|
|
107
|
-
|
|
108
|
-
return {
|
|
109
|
-
description: EXIT_DESCRIPTION,
|
|
110
|
-
parameters: z.object({}),
|
|
111
|
-
execute: (_params: {}, ctx: Tool.Context) =>
|
|
112
|
-
Effect.gen(function* () {
|
|
113
|
-
if (ctx.agent !== "plan") {
|
|
114
|
-
return {
|
|
115
|
-
title: "Not in plan mode",
|
|
116
|
-
output: "You are not in plan mode. This tool is only effective in plan mode.",
|
|
117
|
-
metadata: { switched: false, feedback: "" },
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const info = yield* session.get(ctx.sessionID)
|
|
122
|
-
const plan = path.relative(Instance.worktree, Session.plan(info))
|
|
123
|
-
const answers = yield* question.ask({
|
|
124
|
-
sessionID: ctx.sessionID,
|
|
125
|
-
questions: [
|
|
126
|
-
{
|
|
127
|
-
key: "plan_exit",
|
|
128
|
-
params: { plan },
|
|
129
|
-
question: `Plan at ${plan} is complete. Would you like to switch to the build agent and start implementing?`,
|
|
130
|
-
header: "Plan",
|
|
131
|
-
options: [
|
|
132
|
-
{ label: "Yes", description: "Switch to build agent and start implementing the plan" },
|
|
133
|
-
{ label: "No", description: "Stay with plan agent to continue refining the plan" },
|
|
134
|
-
],
|
|
135
|
-
},
|
|
136
|
-
],
|
|
137
|
-
tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined,
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
const answer = answers[0]?.[0]
|
|
141
|
-
if (answer === "No") return yield* new Question.RejectedError()
|
|
142
|
-
|
|
143
|
-
if (answer !== "Yes") {
|
|
144
|
-
return {
|
|
145
|
-
title: "User provided feedback",
|
|
146
|
-
output: `User chose not to switch yet and provided feedback: ${answer}`,
|
|
147
|
-
metadata: { switched: false, feedback: answer },
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const model = getLastModel(ctx.sessionID) ?? (yield* provider.defaultModel())
|
|
152
|
-
|
|
153
|
-
const msg: MessageV2.User = {
|
|
154
|
-
id: MessageID.ascending(),
|
|
155
|
-
sessionID: ctx.sessionID,
|
|
156
|
-
role: "user",
|
|
157
|
-
time: { created: Date.now() },
|
|
158
|
-
agent: "build",
|
|
159
|
-
model,
|
|
160
|
-
}
|
|
161
|
-
yield* session.updateMessage(msg)
|
|
162
|
-
yield* session.updatePart({
|
|
163
|
-
id: PartID.ascending(),
|
|
164
|
-
messageID: msg.id,
|
|
165
|
-
sessionID: ctx.sessionID,
|
|
166
|
-
type: "text",
|
|
167
|
-
text: `The plan at ${plan} has been approved, you can now edit files. Execute the plan`,
|
|
168
|
-
synthetic: true,
|
|
169
|
-
} satisfies MessageV2.TextPart)
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
title: "Switching to build agent",
|
|
173
|
-
output: "User approved switching to build agent. Wait for further instructions.",
|
|
174
|
-
metadata: { switched: true, feedback: "" },
|
|
175
|
-
}
|
|
176
|
-
}).pipe(Effect.orDie),
|
|
177
|
-
}
|
|
178
|
-
}),
|
|
179
|
-
)
|
package/src/tool/question.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import z from "zod"
|
|
2
|
-
import { Effect } from "effect"
|
|
3
|
-
import * as Tool from "./tool"
|
|
4
|
-
import { Question } from "../question"
|
|
5
|
-
import DESCRIPTION from "./question.txt"
|
|
6
|
-
|
|
7
|
-
const parameters = z.object({
|
|
8
|
-
questions: z.array(Question.Prompt.zod).describe("Questions to ask"),
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
type Metadata = {
|
|
12
|
-
answers: ReadonlyArray<Question.Answer>
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export const QuestionTool = Tool.define<typeof parameters, Metadata, Question.Service>(
|
|
16
|
-
"question",
|
|
17
|
-
Effect.gen(function* () {
|
|
18
|
-
const question = yield* Question.Service
|
|
19
|
-
|
|
20
|
-
return {
|
|
21
|
-
description: DESCRIPTION,
|
|
22
|
-
parameters,
|
|
23
|
-
execute: (params: z.infer<typeof parameters>, ctx: Tool.Context<Metadata>) =>
|
|
24
|
-
Effect.gen(function* () {
|
|
25
|
-
// never-ask mode: the tool stays visible so the model keeps routing
|
|
26
|
-
// every decision through it, but instead of blocking for a human we
|
|
27
|
-
// hand the decision back to the model — it knows which option fits
|
|
28
|
-
// headless execution better than a hardcoded pick would.
|
|
29
|
-
if (yield* question.neverAsk()) {
|
|
30
|
-
const autoAnswer = "[Never-Ask] The model will decide autonomously"
|
|
31
|
-
return {
|
|
32
|
-
title: `Auto-resolved ${params.questions.length} question${params.questions.length > 1 ? "s" : ""}`,
|
|
33
|
-
output:
|
|
34
|
-
"[Never-Ask] No user is available to answer (never-ask mode is on). " +
|
|
35
|
-
"Re-evaluate the options you just proposed for unattended/headless execution — " +
|
|
36
|
-
"prefer text-only, non-interactive, minimal-scope paths and avoid anything that needs a GUI or the user to be present. " +
|
|
37
|
-
"Pick the best option yourself and continue. " +
|
|
38
|
-
"IMPORTANT: You MUST explicitly state which option you chose and why in your response text (not just in thinking) — " +
|
|
39
|
-
"the user will review the conversation history later and needs to see what you decided without expanding thinking blocks. " +
|
|
40
|
-
"This applies only to this question; never-ask may be turned off later, so keep using the question tool at future decision points (the user may have returned).",
|
|
41
|
-
metadata: {
|
|
42
|
-
answers: params.questions.map(() => [autoAnswer]),
|
|
43
|
-
},
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const answers = yield* question.ask({
|
|
48
|
-
sessionID: ctx.sessionID,
|
|
49
|
-
questions: params.questions,
|
|
50
|
-
tool: ctx.callID ? { messageID: ctx.messageID, callID: ctx.callID } : undefined,
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
const formatted = params.questions
|
|
54
|
-
.map((q, i) => `"${q.question}"="${answers[i]?.length ? answers[i].join(", ") : "Unanswered"}"`)
|
|
55
|
-
.join(", ")
|
|
56
|
-
|
|
57
|
-
return {
|
|
58
|
-
title: `Asked ${params.questions.length} question${params.questions.length > 1 ? "s" : ""}`,
|
|
59
|
-
output: `User has answered your questions: ${formatted}. You can now continue with the user's answers in mind.`,
|
|
60
|
-
metadata: {
|
|
61
|
-
answers,
|
|
62
|
-
},
|
|
63
|
-
}
|
|
64
|
-
}).pipe(Effect.orDie),
|
|
65
|
-
}
|
|
66
|
-
}),
|
|
67
|
-
)
|
package/src/tool/question.txt
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
Use this tool when you need to ask the user questions during execution. This allows you to:
|
|
2
|
-
1. Gather user preferences or requirements
|
|
3
|
-
2. Clarify ambiguous instructions
|
|
4
|
-
3. Get decisions on implementation choices as you work
|
|
5
|
-
4. Offer choices to the user about what direction to take.
|
|
6
|
-
|
|
7
|
-
Usage notes:
|
|
8
|
-
- When `custom` is enabled (default), a "Type your own answer" option is added automatically; don't include "Other" or catch-all options
|
|
9
|
-
- Answers are returned as arrays of labels; set `multiple: true` to allow selecting more than one
|
|
10
|
-
- If you recommend a specific option, make that the first option in the list and add "(Recommended)" at the end of the label
|
package/src/tool/read-state.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import path from "path"
|
|
2
|
-
import type * as Tool from "./tool"
|
|
3
|
-
import { SessionCwd } from "./session-cwd"
|
|
4
|
-
import { AppFileSystem } from "@sleepy-ai/shared/filesystem"
|
|
5
|
-
import { RecoverableError } from "./recoverable"
|
|
6
|
-
import type { SessionID } from "../session/schema"
|
|
7
|
-
|
|
8
|
-
// Same normalization both sides of the comparison go through so a Read on
|
|
9
|
-
// a relative path lines up with an Edit on the absolute one.
|
|
10
|
-
function canon(sessionID: SessionID, p: string): string {
|
|
11
|
-
const abs = path.isAbsolute(p) ? p : path.resolve(SessionCwd.get(sessionID), p)
|
|
12
|
-
if (process.platform === "win32") return AppFileSystem.normalizePath(abs).toLowerCase()
|
|
13
|
-
return abs
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Throws RecoverableError if the given file was not previously read by the
|
|
18
|
-
* `read` tool in this conversation. Writes/edits to existing files must be
|
|
19
|
-
* preceded by a Read so the model sees the current contents — this turns the
|
|
20
|
-
* usage note in edit.txt into actual enforcement.
|
|
21
|
-
*
|
|
22
|
-
* RecoverableError is intentional: the failure is surfaced to the agent as a
|
|
23
|
-
* tool result it can act on (call Read, then retry) rather than as a hard
|
|
24
|
-
* system fault.
|
|
25
|
-
*/
|
|
26
|
-
export function assertFileRead(ctx: Tool.Context, targetPath: string, toolId: string): void {
|
|
27
|
-
const target = canon(ctx.sessionID, targetPath)
|
|
28
|
-
|
|
29
|
-
for (const msg of ctx.messages) {
|
|
30
|
-
for (const part of msg.parts) {
|
|
31
|
-
if (part.type !== "tool") continue
|
|
32
|
-
if (part.tool !== "read") continue
|
|
33
|
-
if (part.state.status !== "completed") continue
|
|
34
|
-
const input = part.state.input as { file_path?: unknown } | undefined
|
|
35
|
-
const fp = input?.file_path
|
|
36
|
-
if (typeof fp !== "string") continue
|
|
37
|
-
if (canon(ctx.sessionID, fp) === target) return
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
throw new RecoverableError(
|
|
42
|
-
`${toolId}: ${targetPath} has not been read in this conversation. Call the read tool on this file first, then retry.`,
|
|
43
|
-
)
|
|
44
|
-
}
|