@sleepy-ai/cli 0.1.5 → 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 -323
- 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,104 +0,0 @@
|
|
|
1
|
-
import z from "zod"
|
|
2
|
-
import { Effect } from "effect"
|
|
3
|
-
import { HttpClient } from "effect/unstable/http"
|
|
4
|
-
import * as Tool from "../tool"
|
|
5
|
-
import * as McpExa from "../mcp-exa"
|
|
6
|
-
import * as SleepyWebsearch from "./sleepy"
|
|
7
|
-
import { Auth } from "@/auth"
|
|
8
|
-
import { Provider } from "@/provider"
|
|
9
|
-
import DESCRIPTION from "./websearch.txt"
|
|
10
|
-
|
|
11
|
-
const WEBFETCH_FALLBACK =
|
|
12
|
-
"Web search unavailable. Use `webfetch` with a relevant URL instead, or enable the Web Search plugin at https://www.sleepyai.org/dashboard/admin/providers."
|
|
13
|
-
const MAX_TIMEOUT = 120 * 1000 // 2 minutes
|
|
14
|
-
|
|
15
|
-
const Parameters = z.object({
|
|
16
|
-
query: z.string().describe("Websearch query"),
|
|
17
|
-
numResults: z.number().optional().describe("Number of search results to return (default: 8)"),
|
|
18
|
-
timeout: z.number().describe("Optional timeout in seconds (max 120)").optional(),
|
|
19
|
-
livecrawl: z
|
|
20
|
-
.enum(["fallback", "preferred"])
|
|
21
|
-
.optional()
|
|
22
|
-
.describe(
|
|
23
|
-
"Live crawl mode - 'fallback': use live crawling as backup if cached content unavailable, 'preferred': prioritize live crawling (default: 'fallback')",
|
|
24
|
-
),
|
|
25
|
-
type: z
|
|
26
|
-
.enum(["auto", "fast", "deep"])
|
|
27
|
-
.optional()
|
|
28
|
-
.describe("Search type - 'auto': balanced search (default), 'fast': quick results, 'deep': comprehensive search"),
|
|
29
|
-
contextMaxCharacters: z
|
|
30
|
-
.number()
|
|
31
|
-
.optional()
|
|
32
|
-
.describe("Maximum characters for context string optimized for LLMs (default: 10000)"),
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
export const WebSearchTool = Tool.define(
|
|
36
|
-
"websearch",
|
|
37
|
-
Effect.gen(function* () {
|
|
38
|
-
const http = yield* HttpClient.HttpClient
|
|
39
|
-
const auth = yield* Auth.Service
|
|
40
|
-
|
|
41
|
-
return {
|
|
42
|
-
get description() {
|
|
43
|
-
return DESCRIPTION.replace("{{year}}", new Date().getFullYear().toString())
|
|
44
|
-
},
|
|
45
|
-
parameters: Parameters,
|
|
46
|
-
execute: (params: z.infer<typeof Parameters>, ctx: Tool.Context) =>
|
|
47
|
-
Effect.gen(function* () {
|
|
48
|
-
yield* ctx.ask({
|
|
49
|
-
permission: "websearch",
|
|
50
|
-
patterns: [params.query],
|
|
51
|
-
always: ["*"],
|
|
52
|
-
metadata: {
|
|
53
|
-
query: params.query,
|
|
54
|
-
numResults: params.numResults,
|
|
55
|
-
livecrawl: params.livecrawl,
|
|
56
|
-
type: params.type,
|
|
57
|
-
contextMaxCharacters: params.contextMaxCharacters,
|
|
58
|
-
timeout: params.timeout,
|
|
59
|
-
},
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
const model = (ctx.extra as { model?: Provider.Model })?.model
|
|
63
|
-
const timeout = params.timeout === undefined ? undefined : Math.min(params.timeout * 1000, MAX_TIMEOUT)
|
|
64
|
-
|
|
65
|
-
const result =
|
|
66
|
-
model?.providerID === "sleepy"
|
|
67
|
-
? yield* Effect.catchCause(
|
|
68
|
-
Effect.gen(function* () {
|
|
69
|
-
const info = yield* auth.get("sleepy")
|
|
70
|
-
if (!info || info.type !== "api") return undefined
|
|
71
|
-
return yield* SleepyWebsearch.call(
|
|
72
|
-
http,
|
|
73
|
-
model.api.url,
|
|
74
|
-
info.key,
|
|
75
|
-
params.query,
|
|
76
|
-
"sleepy-v2.5",
|
|
77
|
-
timeout ?? "30 seconds",
|
|
78
|
-
)
|
|
79
|
-
}),
|
|
80
|
-
() => Effect.succeed(undefined),
|
|
81
|
-
)
|
|
82
|
-
: yield* McpExa.call(
|
|
83
|
-
http,
|
|
84
|
-
"web_search_exa",
|
|
85
|
-
McpExa.SearchArgs,
|
|
86
|
-
{
|
|
87
|
-
query: params.query,
|
|
88
|
-
type: params.type || "auto",
|
|
89
|
-
numResults: params.numResults || 8,
|
|
90
|
-
livecrawl: params.livecrawl || "fallback",
|
|
91
|
-
contextMaxCharacters: params.contextMaxCharacters,
|
|
92
|
-
},
|
|
93
|
-
timeout ?? "25 seconds",
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
return {
|
|
97
|
-
output: result ?? WEBFETCH_FALLBACK,
|
|
98
|
-
title: `Web search: ${params.query}`,
|
|
99
|
-
metadata: {},
|
|
100
|
-
}
|
|
101
|
-
}).pipe(Effect.orDie),
|
|
102
|
-
}
|
|
103
|
-
}),
|
|
104
|
-
)
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { Duration, Effect, Schema, Stream } from "effect"
|
|
2
|
-
import { HttpClient, HttpClientRequest, HttpClientResponse } from "effect/unstable/http"
|
|
3
|
-
|
|
4
|
-
const DEFAULT_BASE_URL = "https://www.sleepyai.org/api/v1"
|
|
5
|
-
|
|
6
|
-
export const QUOTA_EXCEEDED =
|
|
7
|
-
"Web search quota exhausted (free tier limit reached). Top up or manage your plan at https://www.sleepyai.org/dashboard/admin/providers, or use `webfetch` with a relevant URL instead."
|
|
8
|
-
|
|
9
|
-
const Annotation = Schema.Struct({
|
|
10
|
-
type: Schema.optional(Schema.NullOr(Schema.String)),
|
|
11
|
-
url: Schema.optional(Schema.NullOr(Schema.String)),
|
|
12
|
-
title: Schema.optional(Schema.NullOr(Schema.String)),
|
|
13
|
-
summary: Schema.optional(Schema.NullOr(Schema.String)),
|
|
14
|
-
site_name: Schema.optional(Schema.NullOr(Schema.String)),
|
|
15
|
-
publish_time: Schema.optional(Schema.NullOr(Schema.String)),
|
|
16
|
-
})
|
|
17
|
-
type Annotation = Schema.Schema.Type<typeof Annotation>
|
|
18
|
-
|
|
19
|
-
const Annotations = Schema.Array(Annotation)
|
|
20
|
-
|
|
21
|
-
const Frame = Schema.Struct({
|
|
22
|
-
choices: Schema.optional(
|
|
23
|
-
Schema.Array(
|
|
24
|
-
Schema.Struct({
|
|
25
|
-
delta: Schema.optional(
|
|
26
|
-
Schema.NullOr(
|
|
27
|
-
Schema.Struct({
|
|
28
|
-
annotations: Schema.optional(Schema.NullOr(Annotations)),
|
|
29
|
-
}),
|
|
30
|
-
),
|
|
31
|
-
),
|
|
32
|
-
message: Schema.optional(
|
|
33
|
-
Schema.NullOr(
|
|
34
|
-
Schema.Struct({
|
|
35
|
-
annotations: Schema.optional(Schema.NullOr(Annotations)),
|
|
36
|
-
}),
|
|
37
|
-
),
|
|
38
|
-
),
|
|
39
|
-
}),
|
|
40
|
-
),
|
|
41
|
-
),
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
const decodeFrame = Schema.decodeUnknownEffect(Schema.fromJsonString(Frame))
|
|
45
|
-
|
|
46
|
-
function buildUrl(baseUrl: string) {
|
|
47
|
-
const base = (baseUrl || DEFAULT_BASE_URL).replace(/\/+$/, "")
|
|
48
|
-
if (base.endsWith("/chat/completions")) return base
|
|
49
|
-
return (base.endsWith("/v1") ? base : `${base}/v1`) + "/chat/completions"
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function formatSources(annotations: ReadonlyArray<Annotation>) {
|
|
53
|
-
const lines = annotations.flatMap((a) => {
|
|
54
|
-
if (!a.url) return []
|
|
55
|
-
const head = [a.title, a.site_name, a.publish_time].filter(Boolean).join(" · ")
|
|
56
|
-
return [`- ${head || a.url}`, ` ${a.url}`, ...(a.summary ? [` ${a.summary}`] : [])]
|
|
57
|
-
})
|
|
58
|
-
return lines.length > 0 ? ["Sources:", ...lines].join("\n") : undefined
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function extractAnnotations(line: string): Effect.Effect<ReadonlyArray<Annotation> | undefined> {
|
|
62
|
-
if (!line.startsWith("data:")) return Effect.succeed(undefined)
|
|
63
|
-
const payload = line.slice(5).trim()
|
|
64
|
-
if (!payload || payload === "[DONE]") return Effect.succeed(undefined)
|
|
65
|
-
return decodeFrame(payload).pipe(
|
|
66
|
-
Effect.map((frame) => {
|
|
67
|
-
const choice = frame.choices?.[0]
|
|
68
|
-
const list = choice?.delta?.annotations ?? choice?.message?.annotations
|
|
69
|
-
return list && list.length > 0 ? list : undefined
|
|
70
|
-
}),
|
|
71
|
-
Effect.orElseSucceed(() => undefined),
|
|
72
|
-
)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export const call = (
|
|
76
|
-
http: HttpClient.HttpClient,
|
|
77
|
-
baseUrl: string,
|
|
78
|
-
apiKey: string,
|
|
79
|
-
query: string,
|
|
80
|
-
modelId: string,
|
|
81
|
-
timeout: Duration.Input,
|
|
82
|
-
) =>
|
|
83
|
-
Effect.gen(function* () {
|
|
84
|
-
const request = HttpClientRequest.post(buildUrl(baseUrl)).pipe(
|
|
85
|
-
HttpClientRequest.setHeader("api-key", apiKey),
|
|
86
|
-
HttpClientRequest.accept("text/event-stream"),
|
|
87
|
-
HttpClientRequest.bodyJsonUnsafe({
|
|
88
|
-
model: modelId,
|
|
89
|
-
messages: [{ role: "user", content: query }],
|
|
90
|
-
tools: [{ type: "web_search", max_keyword: 3, force_search: true, limit: 5 }],
|
|
91
|
-
max_completion_tokens: 256,
|
|
92
|
-
temperature: 1.0,
|
|
93
|
-
top_p: 0.95,
|
|
94
|
-
stream: true,
|
|
95
|
-
thinking: { type: "disabled" },
|
|
96
|
-
}),
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
const annotations = yield* HttpClientResponse.stream(HttpClient.filterStatusOk(http).execute(request)).pipe(
|
|
100
|
-
Stream.decodeText(),
|
|
101
|
-
Stream.splitLines,
|
|
102
|
-
Stream.mapEffect(extractAnnotations),
|
|
103
|
-
Stream.filter((value): value is ReadonlyArray<Annotation> => value !== undefined),
|
|
104
|
-
Stream.runHead,
|
|
105
|
-
Effect.catchIf(
|
|
106
|
-
(err) => err.reason._tag === "StatusCodeError" && err.reason.response.status === 409,
|
|
107
|
-
() => Effect.succeed(QUOTA_EXCEEDED),
|
|
108
|
-
),
|
|
109
|
-
Effect.timeoutOrElse({
|
|
110
|
-
duration: timeout,
|
|
111
|
-
orElse: () => Effect.die(new Error("sleepy web_search request timed out")),
|
|
112
|
-
}),
|
|
113
|
-
)
|
|
114
|
-
|
|
115
|
-
if (typeof annotations === "string") return annotations
|
|
116
|
-
if (annotations._tag === "None") return undefined
|
|
117
|
-
return formatSources(annotations.value)
|
|
118
|
-
})
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
- Search the web - performs real-time web searches and can scrape content from specific URLs
|
|
2
|
-
- Provides up-to-date information for current events and recent data
|
|
3
|
-
- Supports configurable result counts and returns the content from the most relevant websites
|
|
4
|
-
- Use this tool for accessing information beyond knowledge cutoff
|
|
5
|
-
- Searches are performed automatically within a single API call
|
|
6
|
-
|
|
7
|
-
Usage notes:
|
|
8
|
-
- Supports live crawling modes: 'fallback' (backup if cached unavailable) or 'preferred' (prioritize live crawling)
|
|
9
|
-
- Search types: 'auto' (balanced), 'fast' (quick results), 'deep' (comprehensive search)
|
|
10
|
-
- Configurable context length for optimal LLM integration
|
|
11
|
-
- Domain filtering and advanced search options available
|
|
12
|
-
|
|
13
|
-
The current year is {{year}}. You MUST use this year when searching for recent information or current events
|
|
14
|
-
- Example: If the current year is 2026 and the user asks for "latest AI news", search for "AI news 2026", NOT "AI news 2025"
|
package/src/tool/workflow.ts
DELETED
|
@@ -1,357 +0,0 @@
|
|
|
1
|
-
import * as Tool from "./tool"
|
|
2
|
-
import DESCRIPTION from "./workflow.txt"
|
|
3
|
-
import z from "zod"
|
|
4
|
-
import { Effect, Fiber } from "effect"
|
|
5
|
-
import { Config } from "../config"
|
|
6
|
-
import { ConfigCompose } from "../config"
|
|
7
|
-
import { InstanceState } from "@/effect"
|
|
8
|
-
import { workflowRef } from "@/workflow/runtime-ref"
|
|
9
|
-
import { BuiltinWorkflow } from "@/workflow/builtin"
|
|
10
|
-
import type { SessionID } from "../session/schema"
|
|
11
|
-
|
|
12
|
-
const id = "workflow"
|
|
13
|
-
|
|
14
|
-
// Mirror compose.js arg normalization: a bare task string OR a JSON string both
|
|
15
|
-
// collapse to an object. Used so host-side docs-dir injection can merge into args
|
|
16
|
-
// regardless of how the caller serialized them.
|
|
17
|
-
function parseComposeArgString(raw: string): Record<string, unknown> {
|
|
18
|
-
try {
|
|
19
|
-
const parsed = JSON.parse(raw)
|
|
20
|
-
if (typeof parsed === "object" && parsed !== null) return parsed as Record<string, unknown>
|
|
21
|
-
} catch {}
|
|
22
|
-
return { task: raw }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const runSchema = z.strictObject({
|
|
26
|
-
operation: z.literal("run"),
|
|
27
|
-
name: z
|
|
28
|
-
.string()
|
|
29
|
-
.min(1)
|
|
30
|
-
.optional()
|
|
31
|
-
.describe(
|
|
32
|
-
'(optional) Name of a built-in workflow to run (e.g. "deep-research"). Provide EITHER name OR script, not both.',
|
|
33
|
-
),
|
|
34
|
-
script: z
|
|
35
|
-
.string()
|
|
36
|
-
.min(1)
|
|
37
|
-
.optional()
|
|
38
|
-
.describe(
|
|
39
|
-
"(optional) Inline JS workflow script; must begin with `export const meta = {...}`. Provide EITHER name OR script, not both.",
|
|
40
|
-
),
|
|
41
|
-
args: z.any().optional().describe("(optional) JSON value exposed to the script as `args`."),
|
|
42
|
-
workspace: z
|
|
43
|
-
.string()
|
|
44
|
-
.optional()
|
|
45
|
-
.describe(
|
|
46
|
-
"(optional) Absolute dir the script's file primitives (readFile/writeFile/glob/exists) are jailed to. Defaults to the project worktree.",
|
|
47
|
-
),
|
|
48
|
-
async: z
|
|
49
|
-
.boolean()
|
|
50
|
-
.optional()
|
|
51
|
-
.describe(
|
|
52
|
-
"(optional) When true, return a run_id immediately and let the workflow run in the background; the result arrives later as an inbox notification. Default false: block until terminal and return the transcript inline (skill-like semantics, recommended for short workflows).",
|
|
53
|
-
),
|
|
54
|
-
})
|
|
55
|
-
const statusSchema = z.strictObject({ operation: z.literal("status"), run_id: z.string().min(1) })
|
|
56
|
-
const waitSchema = z.strictObject({
|
|
57
|
-
operation: z.literal("wait"),
|
|
58
|
-
run_id: z.string().min(1),
|
|
59
|
-
timeout_ms: z.number().int().positive().optional(),
|
|
60
|
-
})
|
|
61
|
-
const cancelSchema = z.strictObject({ operation: z.literal("cancel"), run_id: z.string().min(1) })
|
|
62
|
-
const resumeSchema = z.strictObject({ operation: z.literal("resume"), run_id: z.string().min(1) })
|
|
63
|
-
|
|
64
|
-
export const parameters = z.discriminatedUnion("operation", [
|
|
65
|
-
runSchema,
|
|
66
|
-
statusSchema,
|
|
67
|
-
waitSchema,
|
|
68
|
-
cancelSchema,
|
|
69
|
-
resumeSchema,
|
|
70
|
-
])
|
|
71
|
-
|
|
72
|
-
type TranscriptEntry = { kind: "phase" | "log"; text: string }
|
|
73
|
-
// `counters` and `currentPhase` are streamed in each flush so the inline
|
|
74
|
-
// conversation panel shows live progress without polling: the bus run row only
|
|
75
|
-
// carries counters via loadWorkflows (which only the /workflows dialog polls), so
|
|
76
|
-
// without this the in-conversation panel would sit at 0✓ 0✗ 0⟳ for the whole run.
|
|
77
|
-
type Metadata = {
|
|
78
|
-
runID?: string
|
|
79
|
-
status?: string
|
|
80
|
-
transcript?: TranscriptEntry[]
|
|
81
|
-
counters?: { running: number; succeeded: number; failed: number }
|
|
82
|
-
currentPhase?: string
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Bound the transcript that gets surfaced to the model (tool output) AND persisted
|
|
86
|
-
// to part-state metadata AND streamed in each flush. A chatty workflow
|
|
87
|
-
// (deep-research emits a phase + log per source) can otherwise feed tens of KB into
|
|
88
|
-
// the model's context, grow the session file without bound, and — because each
|
|
89
|
-
// flush pushes a full snapshot through ctx.metadata — make streaming O(N²) in event
|
|
90
|
-
// count. Capping the snapshot to head + tail keeps every flush O(1) (so total
|
|
91
|
-
// streamed bytes are O(run duration), not O(N²)) and the persisted/displayed view
|
|
92
|
-
// bounded, while still showing the start and the most-recent activity.
|
|
93
|
-
const TRANSCRIPT_HEAD = 40
|
|
94
|
-
const TRANSCRIPT_TAIL = 160
|
|
95
|
-
function capTranscript(t: readonly TranscriptEntry[]): TranscriptEntry[] {
|
|
96
|
-
if (t.length <= TRANSCRIPT_HEAD + TRANSCRIPT_TAIL + 1) return t.slice()
|
|
97
|
-
const omitted = t.length - TRANSCRIPT_HEAD - TRANSCRIPT_TAIL
|
|
98
|
-
return [
|
|
99
|
-
...t.slice(0, TRANSCRIPT_HEAD),
|
|
100
|
-
{ kind: "log", text: `…(${omitted} lines omitted)` },
|
|
101
|
-
...t.slice(t.length - TRANSCRIPT_TAIL),
|
|
102
|
-
]
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export const WorkflowTool = Tool.define<typeof parameters, Metadata, Config.Service>(
|
|
106
|
-
id,
|
|
107
|
-
Effect.gen(function* () {
|
|
108
|
-
const config = yield* Config.Service
|
|
109
|
-
|
|
110
|
-
// Resolve the WorkflowRuntime through the late-bound workflowRef rather than as
|
|
111
|
-
// a Layer dependency: pulling WorkflowRuntime.Service in here would push that
|
|
112
|
-
// requirement onto ToolRegistry.layer, forcing every layer that builds the
|
|
113
|
-
// registry to provide it. The ref is populated by WorkflowRuntime.layer's
|
|
114
|
-
// initialiser (see workflow/runtime-ref.ts) — mirrors the actor tool's spawnRef.
|
|
115
|
-
const requireRuntime = () => {
|
|
116
|
-
const runtime = workflowRef.current
|
|
117
|
-
if (!runtime) {
|
|
118
|
-
return Effect.fail(
|
|
119
|
-
new Error(
|
|
120
|
-
"Workflow runtime unavailable — WorkflowRuntime.defaultLayer must be running for the workflow tool",
|
|
121
|
-
),
|
|
122
|
-
)
|
|
123
|
-
}
|
|
124
|
-
return Effect.succeed(runtime)
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Thread the operator-configured compose docs dir into the `compose` built-in's
|
|
128
|
-
// args, mirroring the `<compose_docs_dir>` block prompt.ts injects for the
|
|
129
|
-
// interactive compose agent. The compose guest reads `args._composeDocsDir` and
|
|
130
|
-
// tells its plan/report subagents where to write specs/plans/reports. We
|
|
131
|
-
// normalize args the same way compose.js does (object | JSON-string | bare task
|
|
132
|
-
// string) so the injection survives the AI-SDK string-serialization boundary.
|
|
133
|
-
const enrichComposeArgs = (raw: unknown) =>
|
|
134
|
-
Effect.gen(function* () {
|
|
135
|
-
const ctx = yield* InstanceState.context
|
|
136
|
-
const docs = ConfigCompose.resolveDocsDir(ctx.worktree, (yield* config.get()).compose)
|
|
137
|
-
const base =
|
|
138
|
-
typeof raw === "object" && raw !== null
|
|
139
|
-
? (raw as Record<string, unknown>)
|
|
140
|
-
: typeof raw === "string"
|
|
141
|
-
? parseComposeArgString(raw)
|
|
142
|
-
: {}
|
|
143
|
-
return { ...base, _composeDocsDir: docs }
|
|
144
|
-
})
|
|
145
|
-
|
|
146
|
-
const run = Effect.fn("WorkflowTool.execute")(function* (
|
|
147
|
-
input: z.infer<typeof parameters>,
|
|
148
|
-
ctx: Tool.Context<Metadata>,
|
|
149
|
-
) {
|
|
150
|
-
const runtime = yield* requireRuntime()
|
|
151
|
-
|
|
152
|
-
if (input.operation === "run") {
|
|
153
|
-
const cfg = yield* config.get()
|
|
154
|
-
// The schema keeps both `name` and `script` optional; enforce the xor
|
|
155
|
-
// here. Both-provided is a caller mistake (the schema docstring says
|
|
156
|
-
// "EITHER name OR script, not both") — fail loudly rather than silently
|
|
157
|
-
// picking one. Effect.orDie surfaces it to the model.
|
|
158
|
-
if (input.name && input.script) {
|
|
159
|
-
return yield* Effect.fail(
|
|
160
|
-
new Error("workflow run: provide either `name` (a built-in) or `script` (inline), not both."),
|
|
161
|
-
)
|
|
162
|
-
}
|
|
163
|
-
const script = input.name ? BuiltinWorkflow.get(input.name)?.script : input.script
|
|
164
|
-
if (!script) {
|
|
165
|
-
const known = BuiltinWorkflow.list()
|
|
166
|
-
.map((w) => w.name)
|
|
167
|
-
.join(", ")
|
|
168
|
-
return yield* Effect.fail(
|
|
169
|
-
new Error(
|
|
170
|
-
input.name
|
|
171
|
-
? `Unknown built-in workflow "${input.name}". Known: ${known || "(none)"}.`
|
|
172
|
-
: "workflow run requires either `name` (a built-in) or `script` (inline).",
|
|
173
|
-
),
|
|
174
|
-
)
|
|
175
|
-
}
|
|
176
|
-
const started = yield* runtime.start({
|
|
177
|
-
script,
|
|
178
|
-
sessionID: ctx.sessionID as SessionID,
|
|
179
|
-
parentActorID: ctx.agent ?? "main",
|
|
180
|
-
args: input.name === "compose" ? yield* enrichComposeArgs(input.args) : input.args,
|
|
181
|
-
workspace: input.workspace,
|
|
182
|
-
maxConcurrentAgents: cfg.workflow?.maxConcurrentAgents,
|
|
183
|
-
scriptDeadlineMs: cfg.workflow?.scriptDeadlineMs,
|
|
184
|
-
// Only the async (background) path relies on the inbox notification; the
|
|
185
|
-
// sync path below returns the result inline, so suppress the duplicate.
|
|
186
|
-
notifyOnTerminal: input.async === true,
|
|
187
|
-
})
|
|
188
|
-
const runID = started.runID
|
|
189
|
-
const label = input.name ?? "inline"
|
|
190
|
-
|
|
191
|
-
// Async opt-out: legacy fire-and-forget semantic. Returns the run_id
|
|
192
|
-
// immediately and lets the workflow keep running in the background; the
|
|
193
|
-
// terminal result arrives later as an inbox notification on the parent's
|
|
194
|
-
// next turn. Use this for very long workflows (deep-research, etc.) where
|
|
195
|
-
// blocking the agent's turn for the full duration is undesirable.
|
|
196
|
-
if (input.async === true) {
|
|
197
|
-
return {
|
|
198
|
-
title: "workflow started",
|
|
199
|
-
output: `Workflow started in background. run_id: ${runID}\nThe result will be delivered as a notification when complete.`,
|
|
200
|
-
metadata: { runID, status: "running" } satisfies Metadata,
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Default sync path: block until terminal so the model + user see phase
|
|
205
|
-
// and log() events as the tool's own message stream (skill-like) instead
|
|
206
|
-
// of a bare run_id followed by silence until the next turn drains the
|
|
207
|
-
// inbox. We read the transcript from the runtime's authoritative per-run
|
|
208
|
-
// buffer (populated synchronously by the guest hooks) rather than
|
|
209
|
-
// subscribing to the bus: that avoids the subscribe-after-start head race,
|
|
210
|
-
// cross-event reordering, the post-wait tail race, and any subscription
|
|
211
|
-
// leak on interrupt. The buffer flushes to part-state metadata as it grows
|
|
212
|
-
// — the TUI re-renders each delta via the existing message.part.delta path.
|
|
213
|
-
yield* ctx.metadata({
|
|
214
|
-
metadata: { runID, status: "running", transcript: [] } satisfies Metadata,
|
|
215
|
-
})
|
|
216
|
-
|
|
217
|
-
// A 250ms flush loop reads the runtime's transcript + live counters and
|
|
218
|
-
// pushes a CAPPED snapshot through ctx.metadata (reusing the per-part-state
|
|
219
|
-
// delta channel, so TUI consumers need no new subscription). The cap keeps
|
|
220
|
-
// each delta bounded regardless of event count. forkScoped binds the fiber to
|
|
221
|
-
// the execute scope below, so it is interrupted on completion OR interrupt.
|
|
222
|
-
// Counters are flushed alongside the transcript so the inline panel shows live
|
|
223
|
-
// ✓/✗/⟳ progress (they can change without a new transcript line — an agent can
|
|
224
|
-
// settle without a log() — so we flush on EITHER changing).
|
|
225
|
-
let lastLen = 0
|
|
226
|
-
let lastCounters = ""
|
|
227
|
-
const flushFiber = yield* Effect.forkScoped(
|
|
228
|
-
Effect.gen(function* () {
|
|
229
|
-
while (true) {
|
|
230
|
-
yield* Effect.sleep("250 millis")
|
|
231
|
-
const t = yield* runtime.transcript({ runID })
|
|
232
|
-
const s = yield* runtime.status({ runID })
|
|
233
|
-
const counters = { running: s.running, succeeded: s.succeeded, failed: s.failed }
|
|
234
|
-
const countersKey = `${counters.running}/${counters.succeeded}/${counters.failed}`
|
|
235
|
-
if (t.length === lastLen && countersKey === lastCounters) continue
|
|
236
|
-
lastLen = t.length
|
|
237
|
-
lastCounters = countersKey
|
|
238
|
-
yield* ctx.metadata({
|
|
239
|
-
metadata: {
|
|
240
|
-
runID,
|
|
241
|
-
status: "running",
|
|
242
|
-
transcript: capTranscript(t),
|
|
243
|
-
counters,
|
|
244
|
-
...(s.currentPhase !== undefined ? { currentPhase: s.currentPhase } : {}),
|
|
245
|
-
} satisfies Metadata,
|
|
246
|
-
})
|
|
247
|
-
}
|
|
248
|
-
}),
|
|
249
|
-
)
|
|
250
|
-
|
|
251
|
-
const outcome = yield* runtime.wait({ runID })
|
|
252
|
-
yield* Fiber.interrupt(flushFiber)
|
|
253
|
-
|
|
254
|
-
// Final counters/phase for the terminal metadata so the inline panel keeps
|
|
255
|
-
// showing the true ✓/✗/⟳ after the run ends (not the last mid-flush value).
|
|
256
|
-
const finalStatus = yield* runtime.status({ runID })
|
|
257
|
-
const finalCounters = {
|
|
258
|
-
running: finalStatus.running,
|
|
259
|
-
succeeded: finalStatus.succeeded,
|
|
260
|
-
failed: finalStatus.failed,
|
|
261
|
-
}
|
|
262
|
-
const finalPhase = finalStatus.currentPhase
|
|
263
|
-
|
|
264
|
-
// The guest hooks append synchronously and complete before the script
|
|
265
|
-
// returns (which resolves wait()), so this snapshot is the full, ordered
|
|
266
|
-
// transcript. Cap it for both the model-facing output and persisted metadata.
|
|
267
|
-
const finalTranscript = capTranscript(yield* runtime.transcript({ runID }))
|
|
268
|
-
const lines = finalTranscript.map((e) => (e.kind === "phase" ? `▸ ${e.text}` : ` ${e.text}`))
|
|
269
|
-
if (outcome.status === "completed") {
|
|
270
|
-
const result = JSON.stringify(outcome.result ?? null)
|
|
271
|
-
const truncated = result.length > 4000 ? result.slice(0, 4000) + " …(truncated)" : result
|
|
272
|
-
return {
|
|
273
|
-
title: `workflow ${label} completed`,
|
|
274
|
-
output:
|
|
275
|
-
(lines.length ? lines.join("\n") + "\n\n" : "") +
|
|
276
|
-
`Result: ${truncated}\nrun_id: ${runID}`,
|
|
277
|
-
metadata: {
|
|
278
|
-
runID,
|
|
279
|
-
status: "completed",
|
|
280
|
-
transcript: finalTranscript,
|
|
281
|
-
counters: finalCounters,
|
|
282
|
-
...(finalPhase !== undefined ? { currentPhase: finalPhase } : {}),
|
|
283
|
-
} satisfies Metadata,
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
if (outcome.status === "failed") {
|
|
287
|
-
return {
|
|
288
|
-
title: `workflow ${label} failed`,
|
|
289
|
-
output:
|
|
290
|
-
(lines.length ? lines.join("\n") + "\n\n" : "") +
|
|
291
|
-
`Error: ${outcome.error}\nrun_id: ${runID}`,
|
|
292
|
-
metadata: {
|
|
293
|
-
runID,
|
|
294
|
-
status: "failed",
|
|
295
|
-
transcript: finalTranscript,
|
|
296
|
-
counters: finalCounters,
|
|
297
|
-
...(finalPhase !== undefined ? { currentPhase: finalPhase } : {}),
|
|
298
|
-
} satisfies Metadata,
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
return {
|
|
302
|
-
title: `workflow ${label} cancelled`,
|
|
303
|
-
output:
|
|
304
|
-
(lines.length ? lines.join("\n") + "\n\n" : "") + `Cancelled.\nrun_id: ${runID}`,
|
|
305
|
-
metadata: {
|
|
306
|
-
runID,
|
|
307
|
-
status: "cancelled",
|
|
308
|
-
transcript: finalTranscript,
|
|
309
|
-
counters: finalCounters,
|
|
310
|
-
...(finalPhase !== undefined ? { currentPhase: finalPhase } : {}),
|
|
311
|
-
} satisfies Metadata,
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
if (input.operation === "status") {
|
|
315
|
-
const snapshot = yield* runtime.status({ runID: input.run_id })
|
|
316
|
-
return {
|
|
317
|
-
title: `workflow ${snapshot.status}`,
|
|
318
|
-
output: JSON.stringify(snapshot),
|
|
319
|
-
metadata: { runID: input.run_id, status: snapshot.status } satisfies Metadata,
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
if (input.operation === "wait") {
|
|
323
|
-
const outcome = yield* runtime.wait({ runID: input.run_id, timeoutMs: input.timeout_ms })
|
|
324
|
-
return {
|
|
325
|
-
title: `workflow ${outcome.status}`,
|
|
326
|
-
output: JSON.stringify(outcome),
|
|
327
|
-
metadata: { runID: input.run_id, status: outcome.status } satisfies Metadata,
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
if (input.operation === "cancel") {
|
|
331
|
-
yield* runtime.cancel({ runID: input.run_id })
|
|
332
|
-
return {
|
|
333
|
-
title: "workflow cancelled",
|
|
334
|
-
output: `Cancelled ${input.run_id}`,
|
|
335
|
-
metadata: { runID: input.run_id, status: "cancelled" } satisfies Metadata,
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
if (input.operation === "resume") {
|
|
339
|
-
const resumed = yield* runtime.resume({ runID: input.run_id })
|
|
340
|
-
return {
|
|
341
|
-
title: resumed.resumed ? "workflow resumed" : "workflow not resumable",
|
|
342
|
-
output: JSON.stringify(resumed),
|
|
343
|
-
metadata: { runID: input.run_id } satisfies Metadata,
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
input satisfies never
|
|
347
|
-
throw new Error(`unhandled workflow operation: ${(input as { operation: string }).operation}`)
|
|
348
|
-
})
|
|
349
|
-
|
|
350
|
-
return {
|
|
351
|
-
description: DESCRIPTION,
|
|
352
|
-
parameters,
|
|
353
|
-
execute: (input: z.infer<typeof parameters>, ctx: Tool.Context<Metadata>) =>
|
|
354
|
-
run(input, ctx).pipe(Effect.scoped, Effect.orDie),
|
|
355
|
-
} satisfies Tool.DefWithoutID<typeof parameters, Metadata>
|
|
356
|
-
}),
|
|
357
|
-
)
|
package/src/tool/workflow.txt
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
Execute a workflow script that orchestrates multiple subagents deterministically. The script is plain JavaScript that runs in a sandbox and fans out subagents via agent(), parallel(), and pipeline(). The "run" operation BLOCKS until the workflow reaches a terminal status (completed/failed/cancelled) and returns the full transcript (phase transitions + log() messages) followed by the script's return value. Phase and log lines stream into the conversation as the workflow runs.
|
|
2
|
-
|
|
3
|
-
operation "run": start a workflow and block until it terminates. Provide either `name` (a built-in workflow, see the catalog below) or `script` (inline JS; must begin with `export const meta = { name, description }`). Returns the transcript + result. Optionally provide `workspace` (a dir the script's file primitives are jailed to; defaults to the worktree). Note: long workflows (e.g. deep-research) hold the agent's turn for the full duration — that is intentional, mirroring skill semantics.
|
|
4
|
-
operation "status": check a run's status by run_id.
|
|
5
|
-
operation "wait": block until a run completes (or times out), returning its result.
|
|
6
|
-
operation "cancel": cancel a running workflow by run_id (best-effort; in-flight subagents stop at their next safe point, not instantly).
|
|
7
|
-
operation "resume": re-launch a persisted workflow by run_id under the same run_id (re-runs its script; a convergent script does less work the second time).
|
|
8
|
-
|
|
9
|
-
Inside the script you can call:
|
|
10
|
-
- agent(prompt, opts?) -> Promise: spawn one subagent; resolves to its result (a validated object if opts.schema given, else its final text) or null on failure. Never throws.
|
|
11
|
-
- parallel(thunks) -> Promise<any[]>: run thunks concurrently; a thunk that throws resolves to null.
|
|
12
|
-
- pipeline(items, ...stages) -> Promise<any[]>: run each item through all stages; no barrier between stages.
|
|
13
|
-
- workflow(nameOrScript, args?, opts?) -> Promise: run a CHILD workflow as its own sub-run and await its result. nameOrScript is either an inline script (starts with `export const meta`) or a saved workflow name resolved from .sleepycode/workflows/ or .claude/workflows/. args is passed to the child as its `args`. opts: { workspace?, maxConcurrentAgents? }. A failed child resolves to null (never throws); an unknown name or a cycle/over-depth throws (fails the run). Children share the process-wide concurrency ceiling and inherit the parent workspace by default.
|
|
14
|
-
- readFile(path) -> Promise<string|null>: read a file in the workspace (null if absent).
|
|
15
|
-
- writeFile(path, content) -> Promise: write a file in the workspace (parent dirs auto-created).
|
|
16
|
-
- glob(pattern) -> Promise<string[]>: list workspace paths matching the glob, sorted, files and dirs. Use this to enumerate work units — do NOT spawn an agent to list files.
|
|
17
|
-
- exists(path) -> Promise<boolean>: whether a workspace path exists.
|
|
18
|
-
- phase(title), log(message): progress reporting.
|
|
19
|
-
- args: the JSON value passed when starting the workflow.
|
|
20
|
-
|
|
21
|
-
Concurrency is capped by the host (default min(16, 2x cores)); excess agent() calls queue automatically.
|
|
22
|
-
|
|
23
|
-
Communicate between workflows by dataflow: return a value from a child and pass it as args to the next (or write a shared file via writeFile and read it in a later phase). Workflows do not message each other directly. File primitives are jailed to the workspace root (the project worktree by default, or the `workspace` you pass to the run op) by a LEXICAL name check — it blocks `..` and absolute escapes, but does not resolve symlinks, so treat it as scoping, not a hard security boundary.
|
|
24
|
-
|
|
25
|
-
workflow() cycle detection is asymmetric: a SAVED name is checked by name (so A calling A is a cycle regardless of args), while an INLINE script is checked by content+args (so an inline body that calls itself with DIFFERENT args is not flagged as a cycle and is bounded only by maxDepth). A cycle, over-maxDepth, or unknown name THROWS at the workflow() call site, which fails the run if uncaught — but a try/catch around workflow() in the guest will silence those throws, so don't wrap workflow() in try/catch unless you intend to ignore configuration bugs.
|