@sleepy-ai/cli 0.1.6 → 0.1.8
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
package/src/permission/arity.ts
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
export function prefix(tokens: string[]) {
|
|
2
|
-
for (let len = tokens.length; len > 0; len--) {
|
|
3
|
-
const prefix = tokens.slice(0, len).join(" ")
|
|
4
|
-
const arity = ARITY[prefix]
|
|
5
|
-
if (arity !== undefined) return tokens.slice(0, arity)
|
|
6
|
-
}
|
|
7
|
-
if (tokens.length === 0) return []
|
|
8
|
-
return tokens.slice(0, 1)
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/* Generated with following prompt:
|
|
12
|
-
You are generating a dictionary of command-prefix arities for bash-style commands.
|
|
13
|
-
This dictionary is used to identify the "human-understandable command" from an input shell command.### **RULES (follow strictly)**1. Each entry maps a **command prefix string → number**, representing how many **tokens** define the command.
|
|
14
|
-
2. **Flags NEVER count as tokens**. Only subcommands count.
|
|
15
|
-
3. **Longest matching prefix wins**.
|
|
16
|
-
4. **Only include a longer prefix if its arity is different from what the shorter prefix already implies**. * Example: If `git` is 2, then do **not** include `git checkout`, `git commit`, etc. unless they require *different* arity.
|
|
17
|
-
5. The output must be a **single JSON object**. Each entry should have a comment with an example real world matching command. DO NOT MAKE ANY OTHER COMMENTS. Should be alphabetical
|
|
18
|
-
6. Include the **most commonly used commands** across many stacks and languages. More is better.### **Semantics examples*** `touch foo.txt` → `touch` (arity 1, explicitly listed)
|
|
19
|
-
* `git checkout main` → `git checkout` (because `git` has arity 2)
|
|
20
|
-
* `npm install` → `npm install` (because `npm` has arity 2)
|
|
21
|
-
* `npm run dev` → `npm run dev` (because `npm run` has arity 3)
|
|
22
|
-
* `python script.py` → `python script.py` (default: whole input, not in dictionary)### **Now generate the dictionary.**
|
|
23
|
-
*/
|
|
24
|
-
const ARITY: Record<string, number> = {
|
|
25
|
-
cat: 1, // cat file.txt
|
|
26
|
-
cd: 1, // cd /path/to/dir
|
|
27
|
-
chmod: 1, // chmod 755 script.sh
|
|
28
|
-
chown: 1, // chown user:group file.txt
|
|
29
|
-
cp: 1, // cp source.txt dest.txt
|
|
30
|
-
echo: 1, // echo "hello world"
|
|
31
|
-
env: 1, // env
|
|
32
|
-
export: 1, // export PATH=/usr/bin
|
|
33
|
-
grep: 1, // grep pattern file.txt
|
|
34
|
-
kill: 1, // kill 1234
|
|
35
|
-
killall: 1, // killall process
|
|
36
|
-
ln: 1, // ln -s source target
|
|
37
|
-
ls: 1, // ls -la
|
|
38
|
-
mkdir: 1, // mkdir new-dir
|
|
39
|
-
mv: 1, // mv old.txt new.txt
|
|
40
|
-
ps: 1, // ps aux
|
|
41
|
-
pwd: 1, // pwd
|
|
42
|
-
rm: 1, // rm file.txt
|
|
43
|
-
rmdir: 1, // rmdir empty-dir
|
|
44
|
-
sleep: 1, // sleep 5
|
|
45
|
-
source: 1, // source ~/.bashrc
|
|
46
|
-
tail: 1, // tail -f log.txt
|
|
47
|
-
touch: 1, // touch file.txt
|
|
48
|
-
unset: 1, // unset VAR
|
|
49
|
-
which: 1, // which node
|
|
50
|
-
aws: 3, // aws s3 ls
|
|
51
|
-
az: 3, // az storage blob list
|
|
52
|
-
bazel: 2, // bazel build
|
|
53
|
-
brew: 2, // brew install node
|
|
54
|
-
bun: 2, // bun install
|
|
55
|
-
"bun run": 3, // bun run dev
|
|
56
|
-
"bun x": 3, // bun x vite
|
|
57
|
-
cargo: 2, // cargo build
|
|
58
|
-
"cargo add": 3, // cargo add tokio
|
|
59
|
-
"cargo run": 3, // cargo run main
|
|
60
|
-
cdk: 2, // cdk deploy
|
|
61
|
-
cf: 2, // cf push app
|
|
62
|
-
cmake: 2, // cmake build
|
|
63
|
-
composer: 2, // composer require laravel
|
|
64
|
-
consul: 2, // consul members
|
|
65
|
-
"consul kv": 3, // consul kv get config/app
|
|
66
|
-
crictl: 2, // crictl ps
|
|
67
|
-
deno: 2, // deno run server.ts
|
|
68
|
-
"deno task": 3, // deno task dev
|
|
69
|
-
doctl: 3, // doctl kubernetes cluster list
|
|
70
|
-
docker: 2, // docker run nginx
|
|
71
|
-
"docker builder": 3, // docker builder prune
|
|
72
|
-
"docker compose": 3, // docker compose up
|
|
73
|
-
"docker container": 3, // docker container ls
|
|
74
|
-
"docker image": 3, // docker image prune
|
|
75
|
-
"docker network": 3, // docker network inspect
|
|
76
|
-
"docker volume": 3, // docker volume ls
|
|
77
|
-
eksctl: 2, // eksctl get clusters
|
|
78
|
-
"eksctl create": 3, // eksctl create cluster
|
|
79
|
-
firebase: 2, // firebase deploy
|
|
80
|
-
flyctl: 2, // flyctl deploy
|
|
81
|
-
gcloud: 3, // gcloud compute instances list
|
|
82
|
-
gh: 3, // gh pr list
|
|
83
|
-
git: 2, // git checkout main
|
|
84
|
-
"git config": 3, // git config user.name
|
|
85
|
-
"git remote": 3, // git remote add origin
|
|
86
|
-
"git stash": 3, // git stash pop
|
|
87
|
-
go: 2, // go build
|
|
88
|
-
gradle: 2, // gradle build
|
|
89
|
-
helm: 2, // helm install mychart
|
|
90
|
-
heroku: 2, // heroku logs
|
|
91
|
-
hugo: 2, // hugo new site blog
|
|
92
|
-
ip: 2, // ip link show
|
|
93
|
-
"ip addr": 3, // ip addr show
|
|
94
|
-
"ip link": 3, // ip link set eth0 up
|
|
95
|
-
"ip netns": 3, // ip netns exec foo bash
|
|
96
|
-
"ip route": 3, // ip route add default via 1.1.1.1
|
|
97
|
-
kind: 2, // kind delete cluster
|
|
98
|
-
"kind create": 3, // kind create cluster
|
|
99
|
-
kubectl: 2, // kubectl get pods
|
|
100
|
-
"kubectl kustomize": 3, // kubectl kustomize overlays/dev
|
|
101
|
-
"kubectl rollout": 3, // kubectl rollout restart deploy/api
|
|
102
|
-
kustomize: 2, // kustomize build .
|
|
103
|
-
make: 2, // make build
|
|
104
|
-
mc: 2, // mc ls myminio
|
|
105
|
-
"mc admin": 3, // mc admin info myminio
|
|
106
|
-
minikube: 2, // minikube start
|
|
107
|
-
mongosh: 2, // mongosh test
|
|
108
|
-
mysql: 2, // mysql -u root
|
|
109
|
-
mvn: 2, // mvn compile
|
|
110
|
-
ng: 2, // ng generate component home
|
|
111
|
-
npm: 2, // npm install
|
|
112
|
-
"npm exec": 3, // npm exec vite
|
|
113
|
-
"npm init": 3, // npm init vue
|
|
114
|
-
"npm run": 3, // npm run dev
|
|
115
|
-
"npm view": 3, // npm view react version
|
|
116
|
-
nvm: 2, // nvm use 18
|
|
117
|
-
nx: 2, // nx build
|
|
118
|
-
openssl: 2, // openssl genrsa 2048
|
|
119
|
-
"openssl req": 3, // openssl req -new -key key.pem
|
|
120
|
-
"openssl x509": 3, // openssl x509 -in cert.pem
|
|
121
|
-
pip: 2, // pip install numpy
|
|
122
|
-
pipenv: 2, // pipenv install flask
|
|
123
|
-
pnpm: 2, // pnpm install
|
|
124
|
-
"pnpm dlx": 3, // pnpm dlx create-next-app
|
|
125
|
-
"pnpm exec": 3, // pnpm exec vite
|
|
126
|
-
"pnpm run": 3, // pnpm run dev
|
|
127
|
-
poetry: 2, // poetry add requests
|
|
128
|
-
podman: 2, // podman run alpine
|
|
129
|
-
"podman container": 3, // podman container ls
|
|
130
|
-
"podman image": 3, // podman image prune
|
|
131
|
-
psql: 2, // psql -d mydb
|
|
132
|
-
pulumi: 2, // pulumi up
|
|
133
|
-
"pulumi stack": 3, // pulumi stack output
|
|
134
|
-
pyenv: 2, // pyenv install 3.11
|
|
135
|
-
python: 2, // python -m venv env
|
|
136
|
-
rake: 2, // rake db:migrate
|
|
137
|
-
rbenv: 2, // rbenv install 3.2.0
|
|
138
|
-
"redis-cli": 2, // redis-cli ping
|
|
139
|
-
rustup: 2, // rustup update
|
|
140
|
-
serverless: 2, // serverless invoke
|
|
141
|
-
sfdx: 3, // sfdx force:org:list
|
|
142
|
-
skaffold: 2, // skaffold dev
|
|
143
|
-
sls: 2, // sls deploy
|
|
144
|
-
sst: 2, // sst deploy
|
|
145
|
-
swift: 2, // swift build
|
|
146
|
-
systemctl: 2, // systemctl restart nginx
|
|
147
|
-
terraform: 2, // terraform apply
|
|
148
|
-
"terraform workspace": 3, // terraform workspace select prod
|
|
149
|
-
tmux: 2, // tmux new -s dev
|
|
150
|
-
turbo: 2, // turbo run build
|
|
151
|
-
ufw: 2, // ufw allow 22
|
|
152
|
-
vault: 2, // vault login
|
|
153
|
-
"vault auth": 3, // vault auth list
|
|
154
|
-
"vault kv": 3, // vault kv get secret/api
|
|
155
|
-
vercel: 2, // vercel deploy
|
|
156
|
-
volta: 2, // volta install node
|
|
157
|
-
wp: 2, // wp plugin install
|
|
158
|
-
yarn: 2, // yarn add react
|
|
159
|
-
"yarn dlx": 3, // yarn dlx create-react-app
|
|
160
|
-
"yarn run": 3, // yarn run dev
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export * as BashArity from "./arity"
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { Wildcard } from "@/util"
|
|
2
|
-
|
|
3
|
-
type Rule = {
|
|
4
|
-
permission: string
|
|
5
|
-
pattern: string
|
|
6
|
-
action: "allow" | "deny" | "ask"
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function evaluate(permission: string, pattern: string, ...rulesets: Rule[][]): Rule {
|
|
10
|
-
const rules = rulesets.flat()
|
|
11
|
-
const match = rules.findLast(
|
|
12
|
-
(rule) => Wildcard.match(permission, rule.permission) && Wildcard.match(pattern, rule.pattern),
|
|
13
|
-
)
|
|
14
|
-
return match ?? { action: "ask", permission, pattern: "*" }
|
|
15
|
-
}
|
package/src/permission/index.ts
DELETED
|
@@ -1,382 +0,0 @@
|
|
|
1
|
-
import { Bus } from "@/bus"
|
|
2
|
-
import { BusEvent } from "@/bus/bus-event"
|
|
3
|
-
import { ConfigPermission } from "@/config/permission"
|
|
4
|
-
import { InstanceState } from "@/effect"
|
|
5
|
-
import { ProjectID } from "@/project/schema"
|
|
6
|
-
import { MessageID, SessionID } from "@/session/schema"
|
|
7
|
-
import { PermissionTable } from "@/session/session.sql"
|
|
8
|
-
import { Database, eq } from "@/storage"
|
|
9
|
-
import { zod } from "@/util/effect-zod"
|
|
10
|
-
import { Log } from "@/util"
|
|
11
|
-
import { withStatics } from "@/util/schema"
|
|
12
|
-
import { Wildcard } from "@/util"
|
|
13
|
-
import { Deferred, Effect, Layer, Schema, Context } from "effect"
|
|
14
|
-
import os from "os"
|
|
15
|
-
import { evaluate as evalRule } from "./evaluate"
|
|
16
|
-
import { PermissionID } from "./schema"
|
|
17
|
-
|
|
18
|
-
const log = Log.create({ service: "permission" })
|
|
19
|
-
|
|
20
|
-
export const Action = Schema.Literals(["allow", "deny", "ask"])
|
|
21
|
-
.annotate({ identifier: "PermissionAction" })
|
|
22
|
-
.pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
23
|
-
export type Action = Schema.Schema.Type<typeof Action>
|
|
24
|
-
|
|
25
|
-
export class Rule extends Schema.Class<Rule>("PermissionRule")({
|
|
26
|
-
permission: Schema.String,
|
|
27
|
-
pattern: Schema.String,
|
|
28
|
-
action: Action,
|
|
29
|
-
}) {
|
|
30
|
-
static readonly zod = zod(this)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export const Ruleset = Schema.mutable(Schema.Array(Rule))
|
|
34
|
-
.annotate({ identifier: "PermissionRuleset" })
|
|
35
|
-
.pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
36
|
-
export type Ruleset = Schema.Schema.Type<typeof Ruleset>
|
|
37
|
-
|
|
38
|
-
export class Request extends Schema.Class<Request>("PermissionRequest")({
|
|
39
|
-
id: PermissionID,
|
|
40
|
-
sessionID: SessionID,
|
|
41
|
-
permission: Schema.String,
|
|
42
|
-
patterns: Schema.Array(Schema.String),
|
|
43
|
-
metadata: Schema.Record(Schema.String, Schema.Unknown),
|
|
44
|
-
always: Schema.Array(Schema.String),
|
|
45
|
-
tool: Schema.optional(
|
|
46
|
-
Schema.Struct({
|
|
47
|
-
messageID: MessageID,
|
|
48
|
-
callID: Schema.String,
|
|
49
|
-
}),
|
|
50
|
-
),
|
|
51
|
-
}) {
|
|
52
|
-
static readonly zod = zod(this)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export const Reply = Schema.Literals(["once", "always", "reject"]).pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
56
|
-
export type Reply = Schema.Schema.Type<typeof Reply>
|
|
57
|
-
|
|
58
|
-
const reply = {
|
|
59
|
-
reply: Reply,
|
|
60
|
-
message: Schema.optional(Schema.String),
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export const ReplyBody = Schema.Struct(reply)
|
|
64
|
-
.annotate({ identifier: "PermissionReplyBody" })
|
|
65
|
-
.pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
66
|
-
export type ReplyBody = Schema.Schema.Type<typeof ReplyBody>
|
|
67
|
-
|
|
68
|
-
export class Approval extends Schema.Class<Approval>("PermissionApproval")({
|
|
69
|
-
projectID: ProjectID,
|
|
70
|
-
patterns: Schema.Array(Schema.String),
|
|
71
|
-
}) {
|
|
72
|
-
static readonly zod = zod(this)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export const Event = {
|
|
76
|
-
Asked: BusEvent.define("permission.asked", Request.zod),
|
|
77
|
-
Replied: BusEvent.define(
|
|
78
|
-
"permission.replied",
|
|
79
|
-
zod(
|
|
80
|
-
Schema.Struct({
|
|
81
|
-
sessionID: SessionID,
|
|
82
|
-
requestID: PermissionID,
|
|
83
|
-
reply: Reply,
|
|
84
|
-
}),
|
|
85
|
-
),
|
|
86
|
-
),
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export class RejectedError extends Schema.TaggedErrorClass<RejectedError>()("PermissionRejectedError", {}) {
|
|
90
|
-
override get message() {
|
|
91
|
-
return "The user rejected permission to use this specific tool call."
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export class CorrectedError extends Schema.TaggedErrorClass<CorrectedError>()("PermissionCorrectedError", {
|
|
96
|
-
feedback: Schema.String,
|
|
97
|
-
}) {
|
|
98
|
-
override get message() {
|
|
99
|
-
return `The user rejected permission to use this specific tool call with the following feedback: ${this.feedback}`
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
export class DeniedError extends Schema.TaggedErrorClass<DeniedError>()("PermissionDeniedError", {
|
|
104
|
-
ruleset: Schema.Any,
|
|
105
|
-
}) {
|
|
106
|
-
override get message() {
|
|
107
|
-
return `The user has specified a rule which prevents you from using this specific tool call. Here are some of the relevant rules ${JSON.stringify(this.ruleset)}`
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export type Error = DeniedError | RejectedError | CorrectedError
|
|
112
|
-
|
|
113
|
-
export const AskInput = Schema.Struct({
|
|
114
|
-
...Request.fields,
|
|
115
|
-
id: Schema.optional(PermissionID),
|
|
116
|
-
ruleset: Ruleset,
|
|
117
|
-
// When false, an ask that would otherwise block on human reply instead fails
|
|
118
|
-
// immediately with DeniedError. Set by callers spawning non-interactive agents
|
|
119
|
-
// (SYSTEM_SPAWNED_AGENT_TYPES) which have no attached human to reply. Default
|
|
120
|
-
// (undefined/true) preserves all existing interactive behavior.
|
|
121
|
-
interactive: Schema.optional(Schema.Boolean),
|
|
122
|
-
})
|
|
123
|
-
.annotate({ identifier: "PermissionAskInput" })
|
|
124
|
-
.pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
125
|
-
export type AskInput = Schema.Schema.Type<typeof AskInput>
|
|
126
|
-
|
|
127
|
-
export const ReplyInput = Schema.Struct({
|
|
128
|
-
requestID: PermissionID,
|
|
129
|
-
...reply,
|
|
130
|
-
})
|
|
131
|
-
.annotate({ identifier: "PermissionReplyInput" })
|
|
132
|
-
.pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
133
|
-
export type ReplyInput = Schema.Schema.Type<typeof ReplyInput>
|
|
134
|
-
|
|
135
|
-
export interface Interface {
|
|
136
|
-
readonly ask: (input: AskInput, abortSignal?: AbortSignal) => Effect.Effect<void, Error>
|
|
137
|
-
readonly reply: (input: ReplyInput) => Effect.Effect<void>
|
|
138
|
-
readonly list: () => Effect.Effect<ReadonlyArray<Request>>
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
interface PendingEntry {
|
|
142
|
-
info: Request
|
|
143
|
-
deferred: Deferred.Deferred<void, RejectedError | CorrectedError>
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
interface State {
|
|
147
|
-
pending: Map<PermissionID, PendingEntry>
|
|
148
|
-
approved: Ruleset
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
export function evaluate(permission: string, pattern: string, ...rulesets: Ruleset[]): Rule {
|
|
152
|
-
return evalRule(permission, pattern, ...rulesets)
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export class Service extends Context.Service<Service, Interface>()("@opencode/Permission") {}
|
|
156
|
-
|
|
157
|
-
export const layer = Layer.effect(
|
|
158
|
-
Service,
|
|
159
|
-
Effect.gen(function* () {
|
|
160
|
-
const bus = yield* Bus.Service
|
|
161
|
-
const state = yield* InstanceState.make<State>(
|
|
162
|
-
Effect.fn("Permission.state")(function* (ctx) {
|
|
163
|
-
const row = Database.use((db) =>
|
|
164
|
-
db.select().from(PermissionTable).where(eq(PermissionTable.project_id, ctx.project.id)).get(),
|
|
165
|
-
)
|
|
166
|
-
const state = {
|
|
167
|
-
pending: new Map<PermissionID, PendingEntry>(),
|
|
168
|
-
approved: row?.data ?? [],
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
yield* Effect.addFinalizer(() =>
|
|
172
|
-
Effect.gen(function* () {
|
|
173
|
-
for (const item of state.pending.values()) {
|
|
174
|
-
yield* Deferred.fail(item.deferred, new RejectedError())
|
|
175
|
-
}
|
|
176
|
-
state.pending.clear()
|
|
177
|
-
}),
|
|
178
|
-
)
|
|
179
|
-
|
|
180
|
-
return state
|
|
181
|
-
}),
|
|
182
|
-
)
|
|
183
|
-
|
|
184
|
-
const ask = Effect.fn("Permission.ask")(function* (input: AskInput, abortSignal?: AbortSignal) {
|
|
185
|
-
const { approved, pending } = yield* InstanceState.get(state)
|
|
186
|
-
const { ruleset, ...request } = input
|
|
187
|
-
let needsAsk = false
|
|
188
|
-
|
|
189
|
-
for (const pattern of request.patterns) {
|
|
190
|
-
// Evaluate the ruleset ALONE first. An explicit deny here must win
|
|
191
|
-
// outright — a persisted approval (e.g. an edit approved "always" in
|
|
192
|
-
// build mode) must NOT be able to out-rank it. Only once the ruleset
|
|
193
|
-
// itself does not deny do we let approvals upgrade an "ask" to "allow".
|
|
194
|
-
const ruleAction = evaluate(request.permission, pattern, ruleset).action
|
|
195
|
-
if (ruleAction === "deny") {
|
|
196
|
-
return yield* new DeniedError({
|
|
197
|
-
ruleset: ruleset.filter((rule) => Wildcard.match(request.permission, rule.permission)),
|
|
198
|
-
})
|
|
199
|
-
}
|
|
200
|
-
if (ruleAction === "allow") continue
|
|
201
|
-
if (evaluate(request.permission, pattern, approved).action === "allow") continue
|
|
202
|
-
needsAsk = true
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// Non-interactive caller (system-spawned background agent): no human is
|
|
206
|
-
// attached to reply, so an ask that would block instead fails clean with
|
|
207
|
-
// the same DeniedError an explicit "deny" rule produces. Emits no
|
|
208
|
-
// Event.Asked and creates no Deferred → provably cannot hang.
|
|
209
|
-
if (needsAsk && input.interactive === false) {
|
|
210
|
-
return yield* new DeniedError({
|
|
211
|
-
ruleset: ruleset.filter((rule) => Wildcard.match(request.permission, rule.permission)),
|
|
212
|
-
})
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if (!needsAsk) return
|
|
216
|
-
|
|
217
|
-
const id = request.id ?? PermissionID.ascending()
|
|
218
|
-
const info = Schema.decodeUnknownSync(Request)({
|
|
219
|
-
id,
|
|
220
|
-
...request,
|
|
221
|
-
})
|
|
222
|
-
log.info("asking", { id, permission: info.permission, patterns: info.patterns })
|
|
223
|
-
|
|
224
|
-
const deferred = yield* Deferred.make<void, RejectedError | CorrectedError>()
|
|
225
|
-
pending.set(id, { info, deferred })
|
|
226
|
-
yield* bus.publish(Event.Asked, info)
|
|
227
|
-
|
|
228
|
-
// Spec ③ P3: race against caller's abortSignal so a stranded ask
|
|
229
|
-
// doesn't block forever when the surrounding scope is interrupted.
|
|
230
|
-
// NOTE: Effect.callback (not Effect.promise) — when Deferred.await
|
|
231
|
-
// wins the race, Effect.race interrupts the callback and runs the
|
|
232
|
-
// cleanup returned from the body, which removes the addEventListener.
|
|
233
|
-
// Effect.promise has no such hook: listener leaks for the lifetime
|
|
234
|
-
// of the AbortSignal + unhandled-rejection when the eventual abort
|
|
235
|
-
// tries to reject the already-dead Promise.
|
|
236
|
-
const deferredAwait = Deferred.await(deferred)
|
|
237
|
-
const main = abortSignal
|
|
238
|
-
? Effect.race(
|
|
239
|
-
deferredAwait,
|
|
240
|
-
Effect.callback<never, RejectedError>((resume) => {
|
|
241
|
-
const onAbort = () => {
|
|
242
|
-
Effect.runPromise(Deferred.fail(deferred, new RejectedError())).catch(() => {})
|
|
243
|
-
resume(Effect.fail(new RejectedError()))
|
|
244
|
-
}
|
|
245
|
-
if (abortSignal.aborted) {
|
|
246
|
-
onAbort()
|
|
247
|
-
return
|
|
248
|
-
}
|
|
249
|
-
abortSignal.addEventListener("abort", onAbort, { once: true })
|
|
250
|
-
return Effect.sync(() => {
|
|
251
|
-
abortSignal.removeEventListener("abort", onAbort)
|
|
252
|
-
})
|
|
253
|
-
}),
|
|
254
|
-
)
|
|
255
|
-
: deferredAwait
|
|
256
|
-
|
|
257
|
-
return yield* Effect.ensuring(
|
|
258
|
-
main,
|
|
259
|
-
Effect.sync(() => {
|
|
260
|
-
pending.delete(id)
|
|
261
|
-
}),
|
|
262
|
-
)
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
const reply = Effect.fn("Permission.reply")(function* (input: ReplyInput) {
|
|
266
|
-
const { approved, pending } = yield* InstanceState.get(state)
|
|
267
|
-
const existing = pending.get(input.requestID)
|
|
268
|
-
if (!existing) return
|
|
269
|
-
|
|
270
|
-
pending.delete(input.requestID)
|
|
271
|
-
yield* bus.publish(Event.Replied, {
|
|
272
|
-
sessionID: existing.info.sessionID,
|
|
273
|
-
requestID: existing.info.id,
|
|
274
|
-
reply: input.reply,
|
|
275
|
-
})
|
|
276
|
-
|
|
277
|
-
if (input.reply === "reject") {
|
|
278
|
-
yield* Deferred.fail(
|
|
279
|
-
existing.deferred,
|
|
280
|
-
input.message ? new CorrectedError({ feedback: input.message }) : new RejectedError(),
|
|
281
|
-
)
|
|
282
|
-
|
|
283
|
-
for (const [id, item] of pending.entries()) {
|
|
284
|
-
if (item.info.sessionID !== existing.info.sessionID) continue
|
|
285
|
-
pending.delete(id)
|
|
286
|
-
yield* bus.publish(Event.Replied, {
|
|
287
|
-
sessionID: item.info.sessionID,
|
|
288
|
-
requestID: item.info.id,
|
|
289
|
-
reply: "reject",
|
|
290
|
-
})
|
|
291
|
-
yield* Deferred.fail(item.deferred, new RejectedError())
|
|
292
|
-
}
|
|
293
|
-
return
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
yield* Deferred.succeed(existing.deferred, undefined)
|
|
297
|
-
if (input.reply === "once") return
|
|
298
|
-
|
|
299
|
-
for (const pattern of existing.info.always) {
|
|
300
|
-
approved.push({
|
|
301
|
-
permission: existing.info.permission,
|
|
302
|
-
pattern,
|
|
303
|
-
action: "allow",
|
|
304
|
-
})
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
for (const [id, item] of pending.entries()) {
|
|
308
|
-
if (item.info.sessionID !== existing.info.sessionID) continue
|
|
309
|
-
const ok = item.info.patterns.every(
|
|
310
|
-
(pattern) => evaluate(item.info.permission, pattern, approved).action === "allow",
|
|
311
|
-
)
|
|
312
|
-
if (!ok) continue
|
|
313
|
-
pending.delete(id)
|
|
314
|
-
yield* bus.publish(Event.Replied, {
|
|
315
|
-
sessionID: item.info.sessionID,
|
|
316
|
-
requestID: item.info.id,
|
|
317
|
-
reply: "always",
|
|
318
|
-
})
|
|
319
|
-
yield* Deferred.succeed(item.deferred, undefined)
|
|
320
|
-
}
|
|
321
|
-
})
|
|
322
|
-
|
|
323
|
-
const list = Effect.fn("Permission.list")(function* () {
|
|
324
|
-
const pending = (yield* InstanceState.get(state)).pending
|
|
325
|
-
return Array.from(pending.values(), (item) => item.info)
|
|
326
|
-
})
|
|
327
|
-
|
|
328
|
-
return Service.of({ ask, reply, list })
|
|
329
|
-
}),
|
|
330
|
-
)
|
|
331
|
-
|
|
332
|
-
function expand(pattern: string): string {
|
|
333
|
-
if (pattern.startsWith("~/")) return os.homedir() + pattern.slice(1)
|
|
334
|
-
if (pattern === "~") return os.homedir()
|
|
335
|
-
if (pattern.startsWith("$HOME/")) return os.homedir() + pattern.slice(5)
|
|
336
|
-
if (pattern.startsWith("$HOME")) return os.homedir() + pattern.slice(5)
|
|
337
|
-
return pattern
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
export function fromConfig(permission: ConfigPermission.Info) {
|
|
341
|
-
const ruleset: Ruleset = []
|
|
342
|
-
for (const [key, value] of Object.entries(permission)) {
|
|
343
|
-
if (typeof value === "string") {
|
|
344
|
-
ruleset.push({ permission: key, action: value, pattern: "*" })
|
|
345
|
-
continue
|
|
346
|
-
}
|
|
347
|
-
ruleset.push(
|
|
348
|
-
...Object.entries(value).map(([pattern, action]) => ({ permission: key, pattern: expand(pattern), action })),
|
|
349
|
-
)
|
|
350
|
-
}
|
|
351
|
-
return ruleset
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
export function merge(...rulesets: Ruleset[]): Ruleset {
|
|
355
|
-
return rulesets.flat()
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
const EDIT_TOOLS = ["edit", "write", "apply_patch", "multiedit"]
|
|
359
|
-
|
|
360
|
-
export function disabled(tools: string[], ruleset: Ruleset): Set<string> {
|
|
361
|
-
const result = new Set<string>()
|
|
362
|
-
for (const tool of tools) {
|
|
363
|
-
// Match rules by the tool's own name, AND — for EDIT_TOOLS — also by
|
|
364
|
-
// the "edit" group alias. findLast returns the last-merged matching
|
|
365
|
-
// rule, so a tool-specific rule placed after a group rule wins
|
|
366
|
-
// naturally. This preserves the convenience of `edit: "deny"` covering
|
|
367
|
-
// all edit-family tools while letting an explicit `write: "allow"` or
|
|
368
|
-
// `write: "deny"` take precedence when present.
|
|
369
|
-
const rule = ruleset.findLast(
|
|
370
|
-
(r) =>
|
|
371
|
-
Wildcard.match(tool, r.permission) ||
|
|
372
|
-
(EDIT_TOOLS.includes(tool) && Wildcard.match("edit", r.permission)),
|
|
373
|
-
)
|
|
374
|
-
if (!rule) continue
|
|
375
|
-
if (rule.pattern === "*" && rule.action === "deny") result.add(tool)
|
|
376
|
-
}
|
|
377
|
-
return result
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
export const defaultLayer = layer.pipe(Layer.provide(Bus.layer))
|
|
381
|
-
|
|
382
|
-
export * as Permission from "."
|
package/src/permission/schema.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Schema } from "effect"
|
|
2
|
-
import z from "zod"
|
|
3
|
-
|
|
4
|
-
import { Identifier } from "@/id/id"
|
|
5
|
-
import { ZodOverride } from "@/util/effect-zod"
|
|
6
|
-
import { Newtype } from "@/util/schema"
|
|
7
|
-
|
|
8
|
-
export class PermissionID extends Newtype<PermissionID>()(
|
|
9
|
-
"PermissionID",
|
|
10
|
-
Schema.String.annotate({ [ZodOverride]: Identifier.schema("permission") }),
|
|
11
|
-
) {
|
|
12
|
-
static ascending(id?: string): PermissionID {
|
|
13
|
-
return this.make(Identifier.ascending("permission", id))
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
static readonly zod = Identifier.schema("permission") as unknown as z.ZodType<PermissionID>
|
|
17
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import type { Hooks, PluginInput } from "@sleepy-ai/plugin"
|
|
2
|
-
import { Log } from "../util"
|
|
3
|
-
import type { ProjectID } from "../project/schema"
|
|
4
|
-
import type { SessionID } from "../session/schema"
|
|
5
|
-
import { runValidatorsForCkpt, buildExtractionReflection, buildReflectionMessage } from "../session/checkpoint-retry"
|
|
6
|
-
import { checkpointPath, memoryPath } from "../session/checkpoint-paths"
|
|
7
|
-
import * as CheckpointContext from "../session/checkpoint-context"
|
|
8
|
-
|
|
9
|
-
const log = Log.create({ service: "plugin.checkpoint-splitover" })
|
|
10
|
-
|
|
11
|
-
const EMPTY_CTX: CheckpointContext.CheckpointContext = {
|
|
12
|
-
priorTitles: new Set<string>(),
|
|
13
|
-
expectedRevisions: [],
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export async function CheckpointSplitoverPlugin(pluginInput: PluginInput): Promise<Hooks> {
|
|
17
|
-
const projectID = pluginInput.project.id as ProjectID
|
|
18
|
-
|
|
19
|
-
return {
|
|
20
|
-
"actor.preStop": {
|
|
21
|
-
matcher: { agentType: { include: ["checkpoint-writer"] } },
|
|
22
|
-
run: async (input, output) => {
|
|
23
|
-
// Bookkeeping (CheckpointContext) and file paths (checkpointPath) are keyed
|
|
24
|
-
// on the PARENT session — the writer runs in a child session post-Axis-A but
|
|
25
|
-
// writes to the parent's artifacts. Fall back to input.sessionID for spawn
|
|
26
|
-
// shapes where parent === sessionID (dream/distill don't get the child redirect).
|
|
27
|
-
const sessionID = (input.parentSessionID ?? input.sessionID) as SessionID
|
|
28
|
-
const ctx = CheckpointContext.get(sessionID, input.actorID) ?? EMPTY_CTX
|
|
29
|
-
try {
|
|
30
|
-
const violations = await runValidatorsForCkpt(sessionID, {
|
|
31
|
-
priorTitles: ctx.priorTitles,
|
|
32
|
-
expectedRevisions: ctx.expectedRevisions,
|
|
33
|
-
projectID,
|
|
34
|
-
})
|
|
35
|
-
if (violations.length === 0) return
|
|
36
|
-
|
|
37
|
-
const extractRequired = violations.filter((v) => v.severity === "extract-required")
|
|
38
|
-
if (extractRequired.length > 0) {
|
|
39
|
-
output.continue = true
|
|
40
|
-
output.reason = buildExtractionReflection(extractRequired)
|
|
41
|
-
return
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const errors = violations.filter((v) => v.severity === "error")
|
|
45
|
-
if (errors.length > 0) {
|
|
46
|
-
output.continue = true
|
|
47
|
-
output.reason = buildReflectionMessage(errors, {
|
|
48
|
-
checkpoint: checkpointPath(sessionID),
|
|
49
|
-
memory: memoryPath(projectID),
|
|
50
|
-
})
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
// warn-only → fall through, leave output untouched
|
|
54
|
-
} catch (err) {
|
|
55
|
-
log.error("checkpoint-splitover hook failed", { err, sessionID, actorID: input.actorID })
|
|
56
|
-
}
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
}
|
|
60
|
-
}
|