saeeol 1.4.2 → 1.4.4
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/cli.js +65 -0
- package/package.json +47 -203
- package/{npm/postinstall.js → postinstall.js} +1 -1
- package/AGENTS.md +0 -72
- package/BUN_SHELL_MIGRATION_PLAN.md +0 -136
- package/Dockerfile +0 -18
- package/README.md +0 -51
- package/assets/saeeol.ico +0 -0
- package/bin/saeeol +0 -187
- package/bin/saeeol.cjs +0 -206
- package/bunfig.toml +0 -7
- package/database.db +0 -0
- 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/20260423070820_add_icon_url_override/migration.sql +0 -2
- package/migration/20260423070820_add_icon_url_override/snapshot.json +0 -1409
- package/migration/20260428004200_add_session_path/migration.sql +0 -1
- package/migration/20260428004200_add_session_path/snapshot.json +0 -1419
- package/npm/bin/saeeol +0 -42
- package/npm/package.json +0 -39
- package/parsers-config.ts +0 -289
- package/script/build.ts +0 -393
- package/script/check-migrations.ts +0 -16
- package/script/fix-node-pty.ts +0 -34
- package/script/generate.ts +0 -23
- package/script/postinstall.mjs +0 -189
- package/script/publish.ts +0 -200
- package/script/run-workspace-server +0 -106
- package/script/schema.ts +0 -63
- package/script/test-runner.ts +0 -420
- package/script/time.ts +0 -6
- package/script/trace-imports.ts +0 -153
- package/script/upgrade-opentui.ts +0 -64
- package/scripts/diff-sdk-types.sh +0 -52
- package/specs/effect/facades.md +0 -221
- package/specs/effect/http-api.md +0 -401
- package/specs/effect/instance-context.md +0 -309
- package/specs/effect/loose-ends.md +0 -34
- package/specs/effect/migration.md +0 -299
- package/specs/effect/routes.md +0 -64
- package/specs/effect/schema.md +0 -399
- package/specs/effect/server-package.md +0 -668
- package/specs/effect/tools.md +0 -90
- package/specs/tui-plugins.md +0 -433
- package/specs/v2/api.ts +0 -67
- package/specs/v2/keymappings.md +0 -10
- package/specs/v2/message-shape.md +0 -136
- 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-events.ts +0 -157
- package/src/acp/agent-message.ts +0 -97
- package/src/acp/agent-prompt.ts +0 -149
- package/src/acp/agent-session.ts +0 -196
- package/src/acp/agent-types.ts +0 -16
- package/src/acp/agent-utils.ts +0 -206
- package/src/acp/agent.ts +0 -89
- package/src/acp/session.ts +0 -116
- package/src/acp/types.ts +0 -24
- package/src/addons/addon-analytics.ts +0 -14
- package/src/addons/addon-core.ts +0 -15
- package/src/addons/addon-data.ts +0 -14
- package/src/addons/addon-dev.ts +0 -13
- package/src/addons/addon-lifecycle.ts +0 -13
- package/src/addons/addon-llm.ts +0 -15
- package/src/addons/addon-remote.ts +0 -12
- package/src/addons/addon-server.ts +0 -14
- package/src/addons/addon-tools.ts +0 -13
- package/src/addons/addon-web.ts +0 -12
- package/src/addons/registry.ts +0 -65
- package/src/addons/types.ts +0 -31
- package/src/agent/agent.ts +0 -426
- package/src/agent/generate.txt +0 -75
- package/src/agent/prompt/ask.txt +0 -13
- package/src/agent/prompt/compaction.txt +0 -9
- package/src/agent/prompt/debug.txt +0 -8
- package/src/agent/prompt/explore.txt +0 -18
- package/src/agent/prompt/orchestrator.txt +0 -24
- package/src/agent/prompt/summary.txt +0 -11
- package/src/agent/prompt/title.txt +0 -44
- package/src/audio.d.ts +0 -4
- package/src/auth/index.ts +0 -109
- package/src/boxes/ansi.ts +0 -17
- package/src/boxes/atomic-write.ts +0 -35
- package/src/boxes/b64.ts +0 -58
- package/src/boxes/bash-security.ts +0 -129
- package/src/boxes/bom.ts +0 -18
- package/src/boxes/cancel.ts +0 -16
- package/src/boxes/chop.ts +0 -12
- package/src/boxes/clamp.ts +0 -3
- package/src/boxes/compact.ts +0 -9
- package/src/boxes/cost-tracker.ts +0 -116
- package/src/boxes/dataurl.ts +0 -29
- package/src/boxes/delay.ts +0 -27
- package/src/boxes/diff-apply.ts +0 -53
- package/src/boxes/disposable.ts +0 -13
- package/src/boxes/err.ts +0 -34
- package/src/boxes/human.ts +0 -47
- package/src/boxes/iife.ts +0 -9
- package/src/boxes/latch.ts +0 -8
- package/src/boxes/memory.ts +0 -198
- package/src/boxes/net.ts +0 -16
- package/src/boxes/plural.ts +0 -4
- package/src/boxes/puny.ts +0 -21
- package/src/boxes/retry.ts +0 -49
- package/src/boxes/rwlock.ts +0 -41
- package/src/boxes/schedule.ts +0 -71
- package/src/boxes/scope.ts +0 -21
- package/src/boxes/tokens.ts +0 -9
- package/src/boxes/ttl-cache.ts +0 -63
- package/src/boxes/typed-event.ts +0 -51
- package/src/boxes/uid.ts +0 -50
- package/src/boxes/wave6.test.ts +0 -296
- package/src/boxes/wildcard.ts +0 -58
- package/src/bus/bus-event.ts +0 -49
- package/src/bus/global.ts +0 -13
- package/src/bus/index.ts +0 -188
- package/src/cli/bootstrap.ts +0 -18
- package/src/cli/cmd/account.ts +0 -258
- package/src/cli/cmd/acp.ts +0 -70
- package/src/cli/cmd/agent.ts +0 -264
- package/src/cli/cmd/cmd.ts +0 -7
- package/src/cli/cmd/config.ts +0 -39
- package/src/cli/cmd/db.ts +0 -121
- 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 -50
- package/src/cli/cmd/debug/lsp.ts +0 -60
- 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/debug/startup.ts +0 -11
- package/src/cli/cmd/export.ts +0 -302
- package/src/cli/cmd/generate.ts +0 -67
- package/src/cli/cmd/github-install.ts +0 -242
- package/src/cli/cmd/github-run-api.ts +0 -207
- package/src/cli/cmd/github-run-auth.ts +0 -104
- package/src/cli/cmd/github-run-fetch.ts +0 -232
- package/src/cli/cmd/github-run-git.ts +0 -192
- package/src/cli/cmd/github-run-prompt.ts +0 -301
- package/src/cli/cmd/github-run.ts +0 -300
- package/src/cli/cmd/github-types.ts +0 -147
- package/src/cli/cmd/github-util.ts +0 -22
- package/src/cli/cmd/github.ts +0 -13
- package/src/cli/cmd/import.ts +0 -234
- package/src/cli/cmd/init.ts +0 -307
- package/src/cli/cmd/mcp-add.ts +0 -215
- package/src/cli/cmd/mcp-auth.ts +0 -178
- package/src/cli/cmd/mcp-debug.ts +0 -198
- package/src/cli/cmd/mcp-list.ts +0 -71
- package/src/cli/cmd/mcp-logout.ts +0 -68
- package/src/cli/cmd/mcp-refresh.ts +0 -47
- package/src/cli/cmd/mcp-shared.ts +0 -80
- package/src/cli/cmd/mcp.ts +0 -24
- package/src/cli/cmd/models.ts +0 -65
- package/src/cli/cmd/plug.ts +0 -233
- package/src/cli/cmd/pr.ts +0 -155
- package/src/cli/cmd/providers-auth.ts +0 -162
- package/src/cli/cmd/providers.ts +0 -302
- package/src/cli/cmd/remote.ts +0 -31
- package/src/cli/cmd/run-display.ts +0 -169
- package/src/cli/cmd/run-events.ts +0 -149
- package/src/cli/cmd/run-session.ts +0 -143
- package/src/cli/cmd/run.ts +0 -135
- package/src/cli/cmd/serve.ts +0 -32
- package/src/cli/cmd/session.ts +0 -216
- package/src/cli/cmd/stats.ts +0 -415
- package/src/cli/cmd/tui/app-commands-core.tsx +0 -218
- package/src/cli/cmd/tui/app-commands-system.tsx +0 -288
- package/src/cli/cmd/tui/app-config.ts +0 -44
- package/src/cli/cmd/tui/app-error.tsx +0 -104
- package/src/cli/cmd/tui/app-events.ts +0 -179
- package/src/cli/cmd/tui/app-setup.ts +0 -174
- package/src/cli/cmd/tui/app.tsx +0 -284
- 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/attach.ts +0 -127
- 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/dialog-agent.tsx +0 -32
- package/src/cli/cmd/tui/component/dialog/dialog-command.tsx +0 -189
- package/src/cli/cmd/tui/component/dialog/dialog-console-org.tsx +0 -103
- package/src/cli/cmd/tui/component/dialog/dialog-go-upsell.tsx +0 -159
- package/src/cli/cmd/tui/component/dialog/dialog-mcp.tsx +0 -84
- package/src/cli/cmd/tui/component/dialog/dialog-model.tsx +0 -238
- package/src/cli/cmd/tui/component/dialog/dialog-provider.tsx +0 -343
- package/src/cli/cmd/tui/component/dialog/dialog-session-delete-failed.tsx +0 -103
- package/src/cli/cmd/tui/component/dialog/dialog-session-list.tsx +0 -301
- package/src/cli/cmd/tui/component/dialog/dialog-session-rename.tsx +0 -35
- package/src/cli/cmd/tui/component/dialog/dialog-skill.tsx +0 -37
- package/src/cli/cmd/tui/component/dialog/dialog-stash.tsx +0 -86
- package/src/cli/cmd/tui/component/dialog/dialog-status.tsx +0 -190
- package/src/cli/cmd/tui/component/dialog/dialog-tag.tsx +0 -44
- package/src/cli/cmd/tui/component/dialog/dialog-theme-list.tsx +0 -50
- package/src/cli/cmd/tui/component/dialog/dialog-variant.tsx +0 -39
- package/src/cli/cmd/tui/component/dialog/dialog-workspace-create.tsx +0 -200
- package/src/cli/cmd/tui/component/dialog/dialog-workspace-unavailable.tsx +0 -81
- package/src/cli/cmd/tui/component/dialog-agent.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-command.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-console-org.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-go-upsell.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-mcp.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-model.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-provider.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-session-delete-failed.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-session-list.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-session-rename.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-skill.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-stash.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-status.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-tag.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-theme-list.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-variant.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-workspace-create.tsx +0 -1
- package/src/cli/cmd/tui/component/dialog-workspace-unavailable.tsx +0 -1
- package/src/cli/cmd/tui/component/error-component.tsx +0 -92
- package/src/cli/cmd/tui/component/logo.tsx +0 -565
- package/src/cli/cmd/tui/component/plugin-route-missing.tsx +0 -14
- package/src/cli/cmd/tui/component/prompt/PromptMeta.tsx +0 -73
- package/src/cli/cmd/tui/component/prompt/PromptStatusBar.tsx +0 -217
- package/src/cli/cmd/tui/component/prompt/autocomplete-options.ts +0 -148
- package/src/cli/cmd/tui/component/prompt/autocomplete-ref.ts +0 -129
- package/src/cli/cmd/tui/component/prompt/autocomplete-types.ts +0 -27
- package/src/cli/cmd/tui/component/prompt/autocomplete-utils.ts +0 -69
- package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +0 -757
- 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 -216
- package/src/cli/cmd/tui/component/prompt/part.ts +0 -16
- package/src/cli/cmd/tui/component/prompt/prompt-textarea.tsx +0 -180
- package/src/cli/cmd/tui/component/prompt/stash.tsx +0 -101
- package/src/cli/cmd/tui/component/prompt/traits.ts +0 -31
- package/src/cli/cmd/tui/component/prompt/use-extmark-sync.ts +0 -93
- package/src/cli/cmd/tui/component/prompt/use-prompt-commands.tsx +0 -234
- package/src/cli/cmd/tui/component/prompt/use-prompt-memos.ts +0 -210
- package/src/cli/cmd/tui/component/prompt/use-prompt-store.ts +0 -183
- package/src/cli/cmd/tui/component/prompt/use-prompt-submit.tsx +0 -179
- package/src/cli/cmd/tui/component/spinner.tsx +0 -24
- package/src/cli/cmd/tui/component/startup-loading.tsx +0 -63
- package/src/cli/cmd/tui/component/textarea-keybindings.ts +0 -69
- package/src/cli/cmd/tui/component/todo-item.tsx +0 -32
- package/src/cli/cmd/tui/component/use-connected.tsx +0 -11
- package/src/cli/cmd/tui/component/worker/worker-cell.tsx +0 -62
- package/src/cli/cmd/tui/component/worker/worker-detail.tsx +0 -73
- package/src/cli/cmd/tui/component/worker/worker-grid.tsx +0 -51
- package/src/cli/cmd/tui/component/worker/worker-status.tsx +0 -15
- package/src/cli/cmd/tui/config/cwd.ts +0 -5
- package/src/cli/cmd/tui/config/tui-migrate.ts +0 -161
- package/src/cli/cmd/tui/config/tui-schema.ts +0 -38
- package/src/cli/cmd/tui/config/tui.ts +0 -225
- package/src/cli/cmd/tui/context/app/args.tsx +0 -15
- package/src/cli/cmd/tui/context/app/directory.ts +0 -15
- package/src/cli/cmd/tui/context/app/editor-zed.ts +0 -281
- package/src/cli/cmd/tui/context/app/editor.ts +0 -425
- package/src/cli/cmd/tui/context/app/helper.tsx +0 -25
- package/src/cli/cmd/tui/context/app/project.tsx +0 -109
- package/src/cli/cmd/tui/context/app/route.tsx +0 -67
- package/src/cli/cmd/tui/context/app/sdk.tsx +0 -140
- package/src/cli/cmd/tui/context/app/sync.tsx +0 -712
- package/src/cli/cmd/tui/context/app/theme.tsx +0 -307
- package/src/cli/cmd/tui/context/app/tui-config.tsx +0 -9
- package/src/cli/cmd/tui/context/args.tsx +0 -1
- package/src/cli/cmd/tui/context/directory.ts +0 -1
- package/src/cli/cmd/tui/context/editor-zed.ts +0 -1
- package/src/cli/cmd/tui/context/editor.ts +0 -1
- package/src/cli/cmd/tui/context/event.ts +0 -1
- package/src/cli/cmd/tui/context/exit.tsx +0 -1
- package/src/cli/cmd/tui/context/helper.tsx +0 -1
- package/src/cli/cmd/tui/context/keybind.tsx +0 -1
- package/src/cli/cmd/tui/context/kv.tsx +0 -1
- package/src/cli/cmd/tui/context/local.tsx +0 -1
- package/src/cli/cmd/tui/context/plugin-keybinds.ts +0 -1
- package/src/cli/cmd/tui/context/project.tsx +0 -1
- package/src/cli/cmd/tui/context/prompt.tsx +0 -1
- package/src/cli/cmd/tui/context/route.tsx +0 -1
- package/src/cli/cmd/tui/context/runtime/event.ts +0 -45
- package/src/cli/cmd/tui/context/runtime/exit.tsx +0 -67
- package/src/cli/cmd/tui/context/runtime/keybind.tsx +0 -105
- package/src/cli/cmd/tui/context/runtime/kv.tsx +0 -76
- package/src/cli/cmd/tui/context/runtime/local.tsx +0 -475
- package/src/cli/cmd/tui/context/runtime/plugin-keybinds.ts +0 -41
- package/src/cli/cmd/tui/context/sdk.tsx +0 -1
- package/src/cli/cmd/tui/context/session/prompt.tsx +0 -18
- package/src/cli/cmd/tui/context/sync.tsx +0 -1
- 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/colorblind.json +0 -229
- 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/saeeol.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/theme-resolve.ts +0 -86
- package/src/cli/cmd/tui/context/theme/theme-syntax-code.ts +0 -47
- package/src/cli/cmd/tui/context/theme/theme-syntax-markup.ts +0 -50
- package/src/cli/cmd/tui/context/theme/theme-syntax.ts +0 -36
- package/src/cli/cmd/tui/context/theme/theme-system.ts +0 -158
- package/src/cli/cmd/tui/context/theme/theme-themes.ts +0 -79
- package/src/cli/cmd/tui/context/theme/theme-types.ts +0 -46
- 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 -1
- package/src/cli/cmd/tui/context/tui-config.tsx +0 -1
- package/src/cli/cmd/tui/event.ts +0 -53
- package/src/cli/cmd/tui/feature-plugins/home/footer.tsx +0 -93
- package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +0 -159
- package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +0 -55
- package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +0 -64
- package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +0 -63
- package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +0 -92
- package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +0 -67
- package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +0 -97
- package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +0 -49
- package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +0 -270
- package/src/cli/cmd/tui/layer.ts +0 -6
- package/src/cli/cmd/tui/opentui-augment.d.ts +0 -7
- package/src/cli/cmd/tui/plugin/api.tsx +0 -395
- package/src/cli/cmd/tui/plugin/internal.ts +0 -39
- package/src/cli/cmd/tui/plugin/runtime.install.ts +0 -187
- package/src/cli/cmd/tui/plugin/runtime.lifecycle.ts +0 -158
- package/src/cli/cmd/tui/plugin/runtime.resolve.ts +0 -213
- package/src/cli/cmd/tui/plugin/runtime.scope.ts +0 -88
- package/src/cli/cmd/tui/plugin/runtime.theme.ts +0 -131
- package/src/cli/cmd/tui/plugin/runtime.ts +0 -129
- package/src/cli/cmd/tui/plugin/runtime.types.ts +0 -181
- package/src/cli/cmd/tui/plugin/slots.tsx +0 -71
- package/src/cli/cmd/tui/preflight.ts +0 -138
- package/src/cli/cmd/tui/routes/home.tsx +0 -90
- package/src/cli/cmd/tui/routes/local-models.tsx +0 -151
- package/src/cli/cmd/tui/routes/session/context.ts +0 -24
- 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 -108
- package/src/cli/cmd/tui/routes/session/dialog-pointing.tsx +0 -103
- package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +0 -26
- package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +0 -47
- package/src/cli/cmd/tui/routes/session/footer.tsx +0 -124
- package/src/cli/cmd/tui/routes/session/index.tsx +0 -188
- package/src/cli/cmd/tui/routes/session/messages/assistant-message.tsx +0 -183
- package/src/cli/cmd/tui/routes/session/messages/message-utils.ts +0 -33
- package/src/cli/cmd/tui/routes/session/messages/tool-parts.tsx +0 -197
- package/src/cli/cmd/tui/routes/session/messages/tool-renderers-2.tsx +0 -251
- package/src/cli/cmd/tui/routes/session/messages/tool-renderers.tsx +0 -303
- package/src/cli/cmd/tui/routes/session/messages/tool-router.tsx +0 -111
- package/src/cli/cmd/tui/routes/session/messages/user-message.tsx +0 -125
- package/src/cli/cmd/tui/routes/session/network.tsx +0 -82
- package/src/cli/cmd/tui/routes/session/permission.tsx +0 -713
- package/src/cli/cmd/tui/routes/session/question.tsx +0 -472
- package/src/cli/cmd/tui/routes/session/scroll-manager.ts +0 -13
- package/src/cli/cmd/tui/routes/session/session-commands.tsx +0 -324
- package/src/cli/cmd/tui/routes/session/session-effects.ts +0 -60
- package/src/cli/cmd/tui/routes/session/session-layout.tsx +0 -229
- package/src/cli/cmd/tui/routes/session/session-revert-banner.tsx +0 -46
- package/src/cli/cmd/tui/routes/session/session-setup.ts +0 -240
- package/src/cli/cmd/tui/routes/session/sidebar.tsx +0 -98
- package/src/cli/cmd/tui/routes/session/subagent-footer.tsx +0 -131
- package/src/cli/cmd/tui/routes/session/suggest.tsx +0 -1
- package/src/cli/cmd/tui/routes/session/usage.ts +0 -25
- package/src/cli/cmd/tui/thread.ts +0 -399
- package/src/cli/cmd/tui/ui/dialog-alert.tsx +0 -61
- package/src/cli/cmd/tui/ui/dialog-confirm.tsx +0 -91
- package/src/cli/cmd/tui/ui/dialog-export-options.tsx +0 -213
- package/src/cli/cmd/tui/ui/dialog-help.tsx +0 -43
- package/src/cli/cmd/tui/ui/dialog-prompt.tsx +0 -117
- package/src/cli/cmd/tui/ui/dialog-select.tsx +0 -449
- package/src/cli/cmd/tui/ui/dialog.tsx +0 -190
- package/src/cli/cmd/tui/ui/link.tsx +0 -28
- package/src/cli/cmd/tui/ui/spinner.ts +0 -368
- package/src/cli/cmd/tui/ui/toast.tsx +0 -111
- package/src/cli/cmd/tui/util/clipboard.ts +0 -205
- package/src/cli/cmd/tui/util/editor.ts +0 -37
- package/src/cli/cmd/tui/util/markdown.ts +0 -211
- package/src/cli/cmd/tui/util/model.ts +0 -23
- package/src/cli/cmd/tui/util/provider-origin.ts +0 -7
- package/src/cli/cmd/tui/util/revert-diff.ts +0 -41
- package/src/cli/cmd/tui/util/scroll.ts +0 -23
- package/src/cli/cmd/tui/util/selection.ts +0 -25
- package/src/cli/cmd/tui/util/signal.ts +0 -41
- package/src/cli/cmd/tui/util/sound.ts +0 -156
- package/src/cli/cmd/tui/util/transcript.ts +0 -112
- package/src/cli/cmd/tui/validate-session.ts +0 -24
- package/src/cli/cmd/tui/win32.ts +0 -130
- package/src/cli/cmd/tui/worker.ts +0 -107
- package/src/cli/cmd/uninstall.ts +0 -350
- package/src/cli/cmd/upgrade.ts +0 -75
- package/src/cli/cmd/web.ts +0 -92
- package/src/cli/effect/prompt.ts +0 -25
- package/src/cli/effect-cmd.ts +0 -50
- package/src/cli/error.ts +0 -89
- package/src/cli/heap.ts +0 -59
- package/src/cli/logo.ts +0 -13
- package/src/cli/network.ts +0 -62
- package/src/cli/ui.ts +0 -91
- package/src/cli/upgrade.ts +0 -33
- package/src/command/index.ts +0 -198
- package/src/command/template/initialize.txt +0 -66
- package/src/command/template/review.txt +0 -101
- package/src/config/agent.ts +0 -217
- package/src/config/command.ts +0 -75
- package/src/config/config-loader.ts +0 -166
- package/src/config/config-schema.ts +0 -287
- package/src/config/config.ts +0 -411
- package/src/config/console-state.ts +0 -17
- 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/keybinds.ts +0 -130
- package/src/config/layout.ts +0 -10
- package/src/config/lsp.ts +0 -45
- package/src/config/managed.ts +0 -71
- package/src/config/markdown.ts +0 -106
- package/src/config/mcp.ts +0 -65
- package/src/config/model-id.ts +0 -14
- package/src/config/parse.ts +0 -88
- package/src/config/paths.ts +0 -55
- package/src/config/permission.ts +0 -71
- package/src/config/plugin.ts +0 -88
- package/src/config/provider.ts +0 -117
- package/src/config/server.ts +0 -22
- package/src/config/skills.ts +0 -16
- package/src/config/variable.ts +0 -92
- package/src/control-plane/adapters/index.ts +0 -45
- package/src/control-plane/adapters/worktree.ts +0 -54
- package/src/control-plane/dev/README.md +0 -19
- package/src/control-plane/dev/debug-workspace-plugin.ts +0 -73
- package/src/control-plane/schema.ts +0 -18
- package/src/control-plane/types.ts +0 -45
- package/src/control-plane/util.ts +0 -39
- package/src/control-plane/workspace-context.ts +0 -26
- package/src/control-plane/workspace-types.ts +0 -90
- package/src/control-plane/workspace.sql.ts +0 -17
- package/src/control-plane/workspace.ts +0 -876
- package/src/effect/app-runtime.ts +0 -148
- package/src/effect/bootstrap-runtime.ts +0 -29
- package/src/effect/bridge.ts +0 -78
- package/src/effect/config-service.ts +0 -67
- package/src/effect/instance-ref.ts +0 -11
- package/src/effect/instance-registry.ts +0 -12
- package/src/effect/instance-state.ts +0 -83
- package/src/effect/run-service.ts +0 -57
- package/src/effect/runner.ts +0 -222
- package/src/effect/service-use.ts +0 -38
- package/src/env/index.ts +0 -37
- package/src/file/file-search.ts +0 -60
- package/src/file/file-status.ts +0 -174
- package/src/file/ignore.ts +0 -81
- package/src/file/index.ts +0 -311
- package/src/file/protected.ts +0 -59
- package/src/file/ripgrep.ts +0 -482
- package/src/file/watcher.ts +0 -159
- package/src/format/formatter.ts +0 -403
- package/src/format/index.ts +0 -207
- package/src/git/index.ts +0 -263
- package/src/id/id.ts +0 -87
- package/src/ide/index.ts +0 -49
- package/src/index.ts +0 -286
- package/src/installation/index.ts +0 -339
- package/src/lsp/client-diagnostics.ts +0 -260
- package/src/lsp/client-types.ts +0 -97
- package/src/lsp/client.ts +0 -205
- package/src/lsp/diagnostic.ts +0 -29
- package/src/lsp/language.ts +0 -121
- package/src/lsp/launch.ts +0 -21
- package/src/lsp/lsp.ts +0 -530
- package/src/lsp/server-devops.ts +0 -161
- package/src/lsp/server-dotnet-swift.ts +0 -221
- package/src/lsp/server-elixir-zig.ts +0 -185
- package/src/lsp/server-jvm.ts +0 -221
- package/src/lsp/server-lint.ts +0 -231
- package/src/lsp/server-lua-php-tex.ts +0 -264
- package/src/lsp/server-misc.ts +0 -238
- package/src/lsp/server-python-ruby.ts +0 -153
- package/src/lsp/server-shared.ts +0 -60
- package/src/lsp/server-system.ts +0 -239
- package/src/lsp/server-web.ts +0 -150
- package/src/lsp/server.ts +0 -21
- package/src/ltm/config.ts +0 -114
- package/src/ltm/events.ts +0 -50
- package/src/ltm/index.ts +0 -12
- package/src/ltm/memory/episodic.ts +0 -83
- package/src/ltm/memory/procedural.ts +0 -92
- package/src/ltm/memory/semantic.ts +0 -80
- package/src/ltm/pipeline.ts +0 -241
- package/src/ltm/retrieval.ts +0 -62
- package/src/ltm/scheduler.ts +0 -117
- package/src/ltm/store.ts +0 -143
- package/src/ltm/types.ts +0 -102
- package/src/mcp/auth.ts +0 -144
- package/src/mcp/index.ts +0 -444
- package/src/mcp/mcp-types.ts +0 -110
- package/src/mcp/oauth-callback.ts +0 -263
- package/src/mcp/oauth-provider.ts +0 -214
- package/src/md.d.ts +0 -4
- package/src/node.ts +0 -6
- package/src/overlay/agent/agent-remove.ts +0 -74
- package/src/overlay/agent/index.ts +0 -53
- package/src/overlay/agent/patch-agents.ts +0 -164
- package/src/overlay/agent/permissions.ts +0 -197
- package/src/overlay/agent-manager/event.ts +0 -25
- package/src/overlay/bash-hierarchy.ts +0 -28
- package/src/overlay/bell.ts +0 -5
- package/src/overlay/bootstrap.ts +0 -13
- package/src/overlay/claw/autocomplete-popup.tsx +0 -70
- package/src/overlay/claw/autocomplete-ref.ts +0 -106
- package/src/overlay/claw/autocomplete-types.ts +0 -16
- package/src/overlay/claw/autocomplete.tsx +0 -191
- package/src/overlay/claw/chat-client.ts +0 -260
- package/src/overlay/claw/chat.tsx +0 -286
- package/src/overlay/claw/client-events.ts +0 -136
- package/src/overlay/claw/client-helpers.ts +0 -182
- package/src/overlay/claw/client.ts +0 -225
- package/src/overlay/claw/dialog-conversation-list.tsx +0 -129
- package/src/overlay/claw/event-service-client-core.ts +0 -104
- package/src/overlay/claw/event-service-client-impl.ts +0 -193
- package/src/overlay/claw/event-service-client.ts +0 -3
- package/src/overlay/claw/hooks.ts +0 -299
- package/src/overlay/claw/sidebar.tsx +0 -215
- package/src/overlay/claw/types.ts +0 -214
- package/src/overlay/claw/view.tsx +0 -152
- package/src/overlay/cli/cmd/roll-call-call.ts +0 -82
- package/src/overlay/cli/cmd/roll-call-format.ts +0 -55
- package/src/overlay/cli/cmd/roll-call.ts +0 -218
- package/src/overlay/cli/cmd/tui/app.tsx +0 -190
- package/src/overlay/cli/cmd/tui/component/dialog-provider.tsx +0 -126
- package/src/overlay/cli/cmd/tui/feedback.ts +0 -57
- package/src/overlay/cli/cmd/tui/util/terminal.ts +0 -21
- package/src/overlay/cli/dev-setup-utils.ts +0 -171
- package/src/overlay/cli/dev-setup.ts +0 -148
- package/src/overlay/cli/heap-snapshot.ts +0 -13
- package/src/overlay/cli/logo.ts +0 -3
- package/src/overlay/cli/run-auto.ts +0 -46
- package/src/overlay/cli/saeeol-logo.ts +0 -106
- package/src/overlay/cloud-session.ts +0 -36
- package/src/overlay/commands-index.ts +0 -5
- package/src/overlay/commands.ts +0 -74
- package/src/overlay/commands.tsx +0 -256
- package/src/overlay/commit-message/generate.ts +0 -204
- package/src/overlay/commit-message/git-context.ts +0 -231
- package/src/overlay/commit-message/index.ts +0 -2
- package/src/overlay/commit-message/types.ts +0 -31
- package/src/overlay/components/dialog-auto-method.tsx +0 -158
- package/src/overlay/components/dialog-claw-setup.tsx +0 -67
- package/src/overlay/components/dialog-claw-upgrade.tsx +0 -55
- package/src/overlay/components/dialog-indexing-helpers.ts +0 -159
- package/src/overlay/components/dialog-indexing.tsx +0 -169
- package/src/overlay/components/dialog-notifications.tsx +0 -91
- package/src/overlay/components/dialog-organization.tsx +0 -73
- package/src/overlay/components/dialog-profile.tsx +0 -77
- package/src/overlay/components/dialog-provider-settings.tsx +0 -95
- package/src/overlay/components/dialog-team-select.tsx +0 -32
- package/src/overlay/components/dialog-tuning.tsx +0 -55
- package/src/overlay/components/dialog-vector-store.tsx +0 -104
- package/src/overlay/components/error-display.tsx +0 -49
- package/src/overlay/components/model-info-panel-utils.ts +0 -39
- package/src/overlay/components/model-info-panel.tsx +0 -149
- package/src/overlay/components/news.tsx +0 -64
- package/src/overlay/components/notification-banner.tsx +0 -58
- package/src/overlay/components/session-indexing.tsx +0 -30
- package/src/overlay/components/tips.tsx +0 -119
- package/src/overlay/config/config-core.ts +0 -130
- package/src/overlay/config/config-helpers.ts +0 -71
- package/src/overlay/config/config-legacy.ts +0 -158
- package/src/overlay/config/config.ts +0 -30
- package/src/overlay/config/default-plugins.ts +0 -29
- package/src/overlay/config/markdown.ts +0 -38
- package/src/overlay/config-injector.ts +0 -116
- package/src/overlay/config-validation.ts +0 -168
- package/src/overlay/const.ts +0 -7
- package/src/overlay/cost-tracker/format.ts +0 -1
- package/src/overlay/cost-tracker/index.ts +0 -22
- package/src/overlay/cost-tracker/state.ts +0 -5
- package/src/overlay/cost-tracker/types.ts +0 -9
- package/src/overlay/docs/migration.md +0 -398
- package/src/overlay/docs/rules-migration.md +0 -137
- package/src/overlay/editor-context.ts +0 -65
- package/src/overlay/encoding.ts +0 -187
- package/src/overlay/enhance-prompt.ts +0 -52
- package/src/overlay/errors.ts +0 -84
- package/src/overlay/generate-cli-docs.ts +0 -41
- package/src/overlay/help-command.ts +0 -45
- package/src/overlay/help.ts +0 -240
- package/src/overlay/i18n/index.ts +0 -163
- package/src/overlay/ignore-migrator.ts +0 -226
- package/src/overlay/index.ts +0 -7
- package/src/overlay/indexing-auth.ts +0 -114
- package/src/overlay/indexing-feature.ts +0 -43
- package/src/overlay/indexing-helpers.ts +0 -180
- package/src/overlay/indexing-label.ts +0 -18
- package/src/overlay/indexing-state.ts +0 -200
- package/src/overlay/indexing-types.ts +0 -49
- package/src/overlay/indexing.ts +0 -54
- package/src/overlay/lancedb.ts +0 -40
- package/src/overlay/mcp-migrator.ts +0 -181
- package/src/overlay/mcp-oauth-callback.ts +0 -93
- package/src/overlay/memory/age.ts +0 -1
- package/src/overlay/memory/index.ts +0 -37
- package/src/overlay/memory/paths.ts +0 -4
- package/src/overlay/memory/scan.ts +0 -1
- package/src/overlay/memory/types.ts +0 -2
- package/src/overlay/model-match.ts +0 -6
- package/src/overlay/modes-migrator.ts +0 -211
- package/src/overlay/paths.ts +0 -94
- package/src/overlay/permission/config-paths.ts +0 -168
- package/src/overlay/permission/drain.ts +0 -58
- package/src/overlay/permission/external-directory.ts +0 -14
- package/src/overlay/permission/read.ts +0 -19
- package/src/overlay/permission/routes.ts +0 -87
- package/src/overlay/permission/rule.ts +0 -17
- package/src/overlay/plan-followup-handover.ts +0 -64
- package/src/overlay/plan-followup-runtime.ts +0 -86
- package/src/overlay/plan-followup-session.ts +0 -111
- package/src/overlay/plan-followup.ts +0 -173
- package/src/overlay/plugins/home-footer.tsx +0 -168
- package/src/overlay/plugins/home-news.tsx +0 -44
- package/src/overlay/plugins/home-onboarding.tsx +0 -40
- package/src/overlay/plugins/sidebar-footer.tsx +0 -95
- package/src/overlay/plugins/sidebar-pr.tsx +0 -285
- package/src/overlay/plugins/sidebar-usage.tsx +0 -81
- package/src/overlay/project-id.ts +0 -129
- package/src/overlay/provider/codex-refresh.ts +0 -102
- package/src/overlay/provider/provider.ts +0 -220
- package/src/overlay/provider-options.ts +0 -33
- package/src/overlay/question/index.ts +0 -62
- package/src/overlay/remote-tui.tsx +0 -47
- package/src/overlay/review/command.ts +0 -30
- package/src/overlay/review/diff.ts +0 -128
- package/src/overlay/review/prompt.ts +0 -161
- package/src/overlay/review/review.ts +0 -168
- package/src/overlay/review/types.ts +0 -24
- package/src/overlay/review/worktree-diff.ts +0 -310
- package/src/overlay/rules-migrator.ts +0 -153
- package/src/overlay/server/instance.ts +0 -62
- package/src/overlay/server/router.ts +0 -5
- package/src/overlay/server/routes/commit-message.ts +0 -47
- package/src/overlay/server/routes/indexing.ts +0 -11
- package/src/overlay/server/server.ts +0 -27
- package/src/overlay/session/compaction-chunks-core.ts +0 -202
- package/src/overlay/session/compaction-chunks-utils.ts +0 -229
- package/src/overlay/session/compaction-chunks.ts +0 -125
- package/src/overlay/session/compaction-payload-recovery.ts +0 -108
- package/src/overlay/session/cost-propagation.ts +0 -68
- package/src/overlay/session/digest-storage.ts +0 -57
- package/src/overlay/session/fork.ts +0 -66
- package/src/overlay/session/index.ts +0 -70
- package/src/overlay/session/instruction.ts +0 -7
- package/src/overlay/session/kg-compaction.ts +0 -138
- package/src/overlay/session/llm.ts +0 -53
- package/src/overlay/session/overflow.ts +0 -15
- package/src/overlay/session/platform.ts +0 -97
- package/src/overlay/session/processor.ts +0 -200
- package/src/overlay/session/prompt-context.ts +0 -110
- package/src/overlay/session/prompt-plan.ts +0 -149
- package/src/overlay/session/prompt-queue.ts +0 -154
- package/src/overlay/session/prompt.ts +0 -71
- package/src/overlay/session/queries.ts +0 -199
- package/src/overlay/session/tui-sync.ts +0 -7
- package/src/overlay/session-import/routes.ts +0 -94
- package/src/overlay/session-import/service.ts +0 -145
- package/src/overlay/session-import/types.ts +0 -222
- package/src/overlay/skills/builtin.ts +0 -20
- package/src/overlay/skills/config.md +0 -376
- package/src/overlay/snapshot/diff-full.ts +0 -150
- package/src/overlay/snapshot/index.ts +0 -2
- package/src/overlay/snapshot/track-hooks.ts +0 -182
- package/src/overlay/snapshot/track-types.ts +0 -86
- package/src/overlay/snapshot/track.ts +0 -175
- package/src/overlay/soul.txt +0 -28
- package/src/overlay/suggestion/index.ts +0 -231
- package/src/overlay/suggestion/routes.ts +0 -100
- package/src/overlay/suggestion/tool.ts +0 -131
- package/src/overlay/suggestion/tool.txt +0 -30
- package/src/overlay/suggestion/tui/bar.tsx +0 -76
- package/src/overlay/suggestion/tui/prompt.tsx +0 -169
- package/src/overlay/suggestion/tui/render.tsx +0 -79
- package/src/overlay/suggestion/tui/sync.ts +0 -58
- package/src/overlay/system-prompt.ts +0 -24
- package/src/overlay/text-stream.ts +0 -70
- package/src/overlay/todo-view.ts +0 -73
- package/src/overlay/tool/agent-manager.ts +0 -74
- package/src/overlay/tool/agent-manager.txt +0 -13
- package/src/overlay/tool/bash-security-patterns.ts +0 -123
- package/src/overlay/tool/bash-security.ts +0 -6
- package/src/overlay/tool/encoded-io.ts +0 -19
- package/src/overlay/tool/question.ts +0 -27
- package/src/overlay/tool/registry.ts +0 -97
- package/src/overlay/tool/semantic-search.ts +0 -128
- package/src/overlay/tool/semantic-search.txt +0 -28
- package/src/overlay/tool/task.ts +0 -77
- package/src/overlay/ts-check.ts +0 -170
- package/src/overlay/ts-client.ts +0 -95
- package/src/overlay/tui/diff.ts +0 -79
- package/src/overlay/util/url.ts +0 -1
- package/src/overlay/worker/index.ts +0 -21
- package/src/overlay/worker/pool.ts +0 -145
- package/src/overlay/worker/store.ts +0 -144
- package/src/overlay/worker/types.ts +0 -58
- package/src/overlay/workflows-migrator.ts +0 -135
- package/src/overlay/worktree-cleanup.ts +0 -67
- package/src/overlay/worktree-family.ts +0 -34
- package/src/patch/index.ts +0 -4
- package/src/patch/patch-apply.ts +0 -340
- package/src/patch/patch-parse.ts +0 -198
- package/src/patch/patch-types.ts +0 -63
- package/src/permission/arity.ts +0 -163
- package/src/permission/evaluate.ts +0 -15
- package/src/permission/index.ts +0 -528
- package/src/permission/schema.ts +0 -16
- package/src/plugin/azure.ts +0 -53
- package/src/plugin/cloudflare.ts +0 -76
- package/src/plugin/codex-auth.ts +0 -361
- package/src/plugin/codex.ts +0 -260
- package/src/plugin/github-copilot/copilot.ts +0 -394
- package/src/plugin/github-copilot/models.ts +0 -195
- package/src/plugin/index.ts +0 -298
- package/src/plugin/install.ts +0 -439
- package/src/plugin/loader.ts +0 -217
- package/src/plugin/meta.ts +0 -188
- package/src/plugin/shared.ts +0 -323
- package/src/project/bootstrap.ts +0 -80
- package/src/project/instance-context.ts +0 -24
- package/src/project/instance-store.ts +0 -211
- package/src/project/instance.ts +0 -45
- package/src/project/project.sql.ts +0 -17
- package/src/project/project.ts +0 -519
- package/src/project/schema.ts +0 -15
- package/src/project/vcs.ts +0 -230
- package/src/provider/auth.ts +0 -243
- package/src/provider/bundled-providers.ts +0 -41
- package/src/provider/custom-loaders.ts +0 -175
- package/src/provider/error.ts +0 -206
- package/src/provider/loader-cloud.ts +0 -260
- package/src/provider/loader-local.ts +0 -185
- package/src/provider/loader-platform.ts +0 -266
- package/src/provider/local/embedder.ts +0 -204
- package/src/provider/local/events.ts +0 -74
- package/src/provider/local/gpu.ts +0 -93
- package/src/provider/local/hub.ts +0 -174
- package/src/provider/local/index.ts +0 -10
- package/src/provider/local/model-manager.ts +0 -113
- package/src/provider/local/orchestrator.ts +0 -301
- package/src/provider/local/rag.ts +0 -112
- package/src/provider/local/types.ts +0 -142
- package/src/provider/model-cache.ts +0 -302
- package/src/provider/models-snapshot.ts +0 -3
- package/src/provider/models.ts +0 -292
- package/src/provider/provider-conversion.ts +0 -274
- package/src/provider/provider-events.ts +0 -29
- package/src/provider/provider-layer.ts +0 -257
- package/src/provider/provider-resolve.ts +0 -230
- package/src/provider/provider-schema.ts +0 -124
- package/src/provider/provider-schemas.ts +0 -96
- package/src/provider/provider-state.ts +0 -228
- package/src/provider/provider-types.ts +0 -62
- package/src/provider/provider.ts +0 -37
- package/src/provider/schema.ts +0 -36
- package/src/provider/sdk/copilot/AGENTS.md +0 -1
- 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/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/tiers/code.ts +0 -20
- package/src/provider/tiers/light.ts +0 -10
- package/src/provider/tiers/master.ts +0 -17
- package/src/provider/transform-message.ts +0 -143
- package/src/provider/transform-options.ts +0 -65
- package/src/provider/transform-params.ts +0 -37
- package/src/provider/transform-schema.ts +0 -54
- package/src/provider/transform-variants.ts +0 -86
- package/src/provider/transform.ts +0 -6
- package/src/pty/index.ts +0 -376
- package/src/pty/input.ts +0 -24
- 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 -16
- package/src/question/index.ts +0 -269
- package/src/question/schema.ts +0 -16
- package/src/saeeol-web-ui.gen.ts +0 -33
- package/src/server/adapter.bun.ts +0 -44
- package/src/server/adapter.node.ts +0 -73
- package/src/server/adapter.ts +0 -26
- package/src/server/backend.ts +0 -32
- package/src/server/cors.ts +0 -17
- package/src/server/error.ts +0 -36
- package/src/server/event.ts +0 -8
- package/src/server/fence.ts +0 -90
- package/src/server/mdns.ts +0 -60
- package/src/server/middleware.ts +0 -87
- package/src/server/ports.ts +0 -17
- package/src/server/projectors.ts +0 -28
- package/src/server/proxy-util.ts +0 -48
- package/src/server/proxy.ts +0 -153
- package/src/server/routes/control/index.ts +0 -163
- package/src/server/routes/control/workspace.ts +0 -210
- package/src/server/routes/game.ts +0 -284
- package/src/server/routes/global.ts +0 -297
- package/src/server/routes/instance/AGENTS.md +0 -8
- package/src/server/routes/instance/config.ts +0 -129
- package/src/server/routes/instance/enhance-prompt.ts +0 -39
- package/src/server/routes/instance/event.ts +0 -100
- package/src/server/routes/instance/experimental-console.ts +0 -125
- package/src/server/routes/instance/experimental-mcp.ts +0 -215
- package/src/server/routes/instance/experimental-review.ts +0 -232
- package/src/server/routes/instance/experimental.ts +0 -12
- package/src/server/routes/instance/file.ts +0 -190
- package/src/server/routes/instance/httpapi/AGENTS.md +0 -35
- package/src/server/routes/instance/httpapi/api.ts +0 -58
- package/src/server/routes/instance/httpapi/event.ts +0 -77
- package/src/server/routes/instance/httpapi/groups/config.ts +0 -61
- package/src/server/routes/instance/httpapi/groups/control.ts +0 -75
- package/src/server/routes/instance/httpapi/groups/experimental.ts +0 -214
- package/src/server/routes/instance/httpapi/groups/file.ts +0 -121
- package/src/server/routes/instance/httpapi/groups/global.ts +0 -106
- package/src/server/routes/instance/httpapi/groups/instance.ts +0 -143
- package/src/server/routes/instance/httpapi/groups/local.ts +0 -87
- package/src/server/routes/instance/httpapi/groups/ltm.ts +0 -93
- package/src/server/routes/instance/httpapi/groups/mcp.ts +0 -155
- package/src/server/routes/instance/httpapi/groups/metadata.ts +0 -18
- package/src/server/routes/instance/httpapi/groups/permission.ts +0 -70
- package/src/server/routes/instance/httpapi/groups/project.ts +0 -77
- package/src/server/routes/instance/httpapi/groups/provider.ts +0 -76
- package/src/server/routes/instance/httpapi/groups/pty.ts +0 -127
- package/src/server/routes/instance/httpapi/groups/question.ts +0 -70
- package/src/server/routes/instance/httpapi/groups/session-schemas.ts +0 -77
- package/src/server/routes/instance/httpapi/groups/session.ts +0 -179
- package/src/server/routes/instance/httpapi/groups/sync.ts +0 -92
- package/src/server/routes/instance/httpapi/groups/tui.ts +0 -197
- package/src/server/routes/instance/httpapi/groups/workspace.ts +0 -106
- package/src/server/routes/instance/httpapi/handlers/config.ts +0 -34
- package/src/server/routes/instance/httpapi/handlers/control.ts +0 -34
- package/src/server/routes/instance/httpapi/handlers/experimental.ts +0 -155
- package/src/server/routes/instance/httpapi/handlers/file.ts +0 -54
- package/src/server/routes/instance/httpapi/handlers/global.ts +0 -157
- package/src/server/routes/instance/httpapi/handlers/instance.ts +0 -79
- package/src/server/routes/instance/httpapi/handlers/local.ts +0 -95
- package/src/server/routes/instance/httpapi/handlers/ltm.ts +0 -118
- package/src/server/routes/instance/httpapi/handlers/mcp.ts +0 -73
- package/src/server/routes/instance/httpapi/handlers/permission.ts +0 -43
- package/src/server/routes/instance/httpapi/handlers/project.ts +0 -44
- package/src/server/routes/instance/httpapi/handlers/provider.ts +0 -100
- package/src/server/routes/instance/httpapi/handlers/pty.ts +0 -121
- package/src/server/routes/instance/httpapi/handlers/question.ts +0 -33
- package/src/server/routes/instance/httpapi/handlers/session.ts +0 -387
- package/src/server/routes/instance/httpapi/handlers/sync.ts +0 -77
- package/src/server/routes/instance/httpapi/handlers/tui.ts +0 -135
- package/src/server/routes/instance/httpapi/handlers/workspace.ts +0 -62
- package/src/server/routes/instance/httpapi/lifecycle.ts +0 -52
- package/src/server/routes/instance/httpapi/middleware/authorization.ts +0 -128
- package/src/server/routes/instance/httpapi/middleware/instance-context.ts +0 -53
- package/src/server/routes/instance/httpapi/middleware/proxy.ts +0 -86
- package/src/server/routes/instance/httpapi/middleware/workspace-routing.ts +0 -218
- package/src/server/routes/instance/httpapi/public-schema.ts +0 -118
- package/src/server/routes/instance/httpapi/public-types.ts +0 -80
- package/src/server/routes/instance/httpapi/public.ts +0 -215
- package/src/server/routes/instance/httpapi/server.ts +0 -216
- package/src/server/routes/instance/index.ts +0 -378
- package/src/server/routes/instance/mcp.ts +0 -277
- package/src/server/routes/instance/middleware.ts +0 -34
- package/src/server/routes/instance/network.ts +0 -93
- package/src/server/routes/instance/permission.ts +0 -131
- package/src/server/routes/instance/project.ts +0 -122
- package/src/server/routes/instance/provider.ts +0 -170
- package/src/server/routes/instance/pty.ts +0 -276
- package/src/server/routes/instance/question.ts +0 -111
- package/src/server/routes/instance/remote.ts +0 -83
- package/src/server/routes/instance/saeeol.ts +0 -98
- package/src/server/routes/instance/session/_shared.ts +0 -72
- package/src/server/routes/instance/session/action.ts +0 -201
- package/src/server/routes/instance/session/crud.ts +0 -294
- package/src/server/routes/instance/session/message.ts +0 -247
- package/src/server/routes/instance/session/prompt.ts +0 -163
- package/src/server/routes/instance/session/share.ts +0 -216
- package/src/server/routes/instance/session.ts +0 -16
- package/src/server/routes/instance/suggestion.ts +0 -1
- package/src/server/routes/instance/sync.ts +0 -152
- package/src/server/routes/instance/telemetry.ts +0 -73
- package/src/server/routes/instance/trace.ts +0 -59
- package/src/server/routes/instance/tui.ts +0 -399
- package/src/server/routes/ui.ts +0 -63
- package/src/server/server.ts +0 -198
- package/src/server/workspace.ts +0 -130
- package/src/session/compaction-helpers.ts +0 -1
- package/src/session/compaction.ts +0 -1
- package/src/session/core/compaction/compaction-helpers.ts +0 -169
- package/src/session/core/compaction/compaction.ts +0 -712
- package/src/session/core/compaction/overflow.ts +0 -28
- package/src/session/core/instruction.ts +0 -234
- package/src/session/core/llm.ts +0 -500
- package/src/session/core/network.ts +0 -392
- package/src/session/core/processor.ts +0 -731
- package/src/session/core/projectors.ts +0 -139
- package/src/session/core/resolve-tools.ts +0 -241
- package/src/session/core/retry.ts +0 -145
- package/src/session/core/revert.ts +0 -173
- package/src/session/core/run-state.ts +0 -110
- package/src/session/core/schema.ts +0 -35
- package/src/session/core/session-events.ts +0 -143
- package/src/session/core/session-types.ts +0 -158
- package/src/session/core/session.sql.ts +0 -124
- package/src/session/core/session.ts +0 -912
- package/src/session/core/shell-exec.ts +0 -205
- package/src/session/core/status.ts +0 -100
- package/src/session/core/subtask.ts +0 -268
- package/src/session/core/summary.ts +0 -173
- package/src/session/core/system.ts +0 -114
- package/src/session/core/todo.ts +0 -86
- package/src/session/core/user-part.ts +0 -293
- package/src/session/instruction.ts +0 -1
- package/src/session/llm.ts +0 -1
- package/src/session/message/message-errors.ts +0 -79
- package/src/session/message/message-parts.ts +0 -87
- package/src/session/message/message-query.ts +0 -107
- package/src/session/message/message-transform.ts +0 -156
- package/src/session/message/message-types.ts +0 -68
- package/src/session/message/message-v2.ts +0 -73
- package/src/session/message/message.ts +0 -192
- package/src/session/message-errors.ts +0 -1
- package/src/session/message-parts.ts +0 -1
- package/src/session/message-query.ts +0 -1
- package/src/session/message-transform.ts +0 -1
- package/src/session/message-types.ts +0 -1
- package/src/session/message-v2.ts +0 -1
- package/src/session/message.ts +0 -1
- package/src/session/network.ts +0 -1
- package/src/session/overflow.ts +0 -1
- package/src/session/processor.ts +0 -1
- package/src/session/projectors.ts +0 -2
- package/src/session/prompt/anthropic.txt +0 -105
- package/src/session/prompt/beast.txt +0 -147
- package/src/session/prompt/code-switch.txt +0 -5
- package/src/session/prompt/codex.txt +0 -80
- package/src/session/prompt/copilot-gpt-5.txt +0 -143
- package/src/session/prompt/default.txt +0 -105
- package/src/session/prompt/gemini.txt +0 -155
- package/src/session/prompt/gpt.txt +0 -108
- package/src/session/prompt/kimi.txt +0 -95
- package/src/session/prompt/ling.txt +0 -129
- package/src/session/prompt/max-steps.txt +0 -16
- package/src/session/prompt/plan-reminder-anthropic.txt +0 -67
- package/src/session/prompt/plan.txt +0 -25
- package/src/session/prompt/prompt-command.ts +0 -93
- package/src/session/prompt/prompt-loop.ts +0 -299
- package/src/session/prompt/prompt-model.ts +0 -44
- package/src/session/prompt/prompt-reminders.ts +0 -120
- package/src/session/prompt/prompt-resolve.ts +0 -42
- package/src/session/prompt/prompt-schemas.ts +0 -128
- package/src/session/prompt/prompt-title.ts +0 -55
- package/src/session/prompt/prompt-types.ts +0 -47
- package/src/session/prompt/prompt-user-msg.ts +0 -80
- package/src/session/prompt/prompt.ts +0 -210
- package/src/session/prompt/saeeol-gpt-5.5.txt +0 -95
- package/src/session/prompt/trinity.txt +0 -97
- package/src/session/prompt-command.ts +0 -1
- package/src/session/prompt-loop.ts +0 -1
- package/src/session/prompt-model.ts +0 -1
- package/src/session/prompt-reminders.ts +0 -1
- package/src/session/prompt-resolve.ts +0 -1
- package/src/session/prompt-schemas.ts +0 -1
- package/src/session/prompt-title.ts +0 -1
- package/src/session/prompt-types.ts +0 -1
- package/src/session/prompt-user-msg.ts +0 -1
- package/src/session/prompt.ts +0 -1
- package/src/session/resolve-tools.ts +0 -1
- package/src/session/retry.ts +0 -1
- package/src/session/revert.ts +0 -1
- package/src/session/run-state.ts +0 -1
- package/src/session/schema.ts +0 -1
- package/src/session/session-types.ts +0 -1
- package/src/session/session.sql.ts +0 -1
- package/src/session/session.ts +0 -1
- package/src/session/shell-exec.ts +0 -1
- package/src/session/status.ts +0 -1
- package/src/session/subtask.ts +0 -1
- package/src/session/summary.ts +0 -1
- package/src/session/system.ts +0 -1
- package/src/session/todo.ts +0 -1
- package/src/session/user-part.ts +0 -1
- package/src/sessions/inflight-cache.ts +0 -72
- package/src/sessions/ingest-queue.ts +0 -318
- package/src/sessions/remote-protocol.ts +0 -86
- package/src/sessions/remote-sender.ts +0 -422
- package/src/sessions/remote-ws.ts +0 -189
- package/src/sessions/sessions.ts +0 -720
- package/src/share/session.ts +0 -59
- package/src/share/share-next.ts +0 -376
- package/src/share/share.sql.ts +0 -13
- package/src/shell/shell.ts +0 -215
- package/src/skill/discovery.ts +0 -116
- package/src/skill/index.ts +0 -322
- package/src/snapshot/index.ts +0 -125
- package/src/snapshot/snapshot-core.ts +0 -279
- package/src/snapshot/snapshot-diff.ts +0 -85
- package/src/snapshot/snapshot-git.ts +0 -60
- package/src/snapshot/snapshot-types.ts +0 -43
- 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 -177
- package/src/storage/json-migration-entities.ts +0 -214
- package/src/storage/json-migration-helpers.ts +0 -76
- package/src/storage/json-migration.ts +0 -88
- package/src/storage/schema.sql.ts +0 -10
- package/src/storage/schema.ts +0 -5
- package/src/storage/storage.ts +0 -341
- package/src/suggestion/index.ts +0 -1
- package/src/sync/README.md +0 -179
- package/src/sync/event.sql.ts +0 -16
- package/src/sync/index.ts +0 -387
- package/src/sync/schema.ts +0 -13
- package/src/temporary.ts +0 -33
- package/src/tool/apply_patch.ts +0 -1
- package/src/tool/bash.ts +0 -1
- package/src/tool/core/external-directory.ts +0 -55
- package/src/tool/core/invalid.ts +0 -21
- package/src/tool/core/recall.ts +0 -164
- package/src/tool/core/recall.txt +0 -12
- package/src/tool/core/schema.ts +0 -16
- package/src/tool/core/tool.ts +0 -162
- package/src/tool/core/truncate.ts +0 -160
- package/src/tool/core/truncation-dir.ts +0 -4
- package/src/tool/diagnostics.ts +0 -1
- package/src/tool/edit-replacers.ts +0 -1
- package/src/tool/edit-utils.ts +0 -1
- package/src/tool/edit.ts +0 -1
- package/src/tool/external-directory.ts +0 -1
- package/src/tool/file/apply_patch.ts +0 -313
- package/src/tool/file/apply_patch.txt +0 -33
- package/src/tool/file/bash.ts +0 -656
- package/src/tool/file/bash.txt +0 -119
- package/src/tool/file/edit-replacers.ts +0 -287
- package/src/tool/file/edit-utils.ts +0 -86
- package/src/tool/file/edit.ts +0 -262
- package/src/tool/file/edit.txt +0 -10
- package/src/tool/file/read.ts +0 -389
- package/src/tool/file/read.txt +0 -14
- package/src/tool/file/write.ts +0 -114
- package/src/tool/file/write.txt +0 -8
- package/src/tool/glob.ts +0 -1
- package/src/tool/grep.ts +0 -1
- package/src/tool/integration/diagnostics.ts +0 -20
- package/src/tool/integration/lsp.ts +0 -113
- package/src/tool/integration/lsp.txt +0 -24
- package/src/tool/integration/mcp-exa.ts +0 -73
- package/src/tool/integration/package.ts +0 -166
- package/src/tool/integration/registry.ts +0 -375
- package/src/tool/invalid.ts +0 -1
- package/src/tool/lsp.ts +0 -1
- package/src/tool/mcp-exa.ts +0 -1
- package/src/tool/package.ts +0 -1
- package/src/tool/plan.ts +0 -1
- package/src/tool/question.ts +0 -1
- package/src/tool/read.ts +0 -1
- package/src/tool/recall.ts +0 -1
- package/src/tool/registry.ts +0 -1
- package/src/tool/schema.ts +0 -1
- package/src/tool/search/glob.ts +0 -115
- package/src/tool/search/glob.txt +0 -6
- package/src/tool/search/grep.ts +0 -151
- package/src/tool/search/grep.txt +0 -8
- package/src/tool/search/warpgrep.ts +0 -99
- package/src/tool/search/warpgrep.txt +0 -10
- package/src/tool/search/webfetch.ts +0 -194
- package/src/tool/search/webfetch.txt +0 -13
- package/src/tool/search/websearch.ts +0 -71
- package/src/tool/search/websearch.txt +0 -14
- package/src/tool/skill.ts +0 -1
- package/src/tool/suggest.ts +0 -1
- package/src/tool/task.ts +0 -1
- package/src/tool/todo.ts +0 -1
- package/src/tool/tool.ts +0 -1
- package/src/tool/truncate.ts +0 -1
- package/src/tool/truncation-dir.ts +0 -1
- package/src/tool/warpgrep.ts +0 -1
- package/src/tool/webfetch.ts +0 -1
- package/src/tool/websearch.ts +0 -1
- package/src/tool/workflow/plan-enter.txt +0 -14
- package/src/tool/workflow/plan-exit.txt +0 -13
- package/src/tool/workflow/plan.ts +0 -30
- package/src/tool/workflow/question.ts +0 -52
- package/src/tool/workflow/question.txt +0 -11
- package/src/tool/workflow/skill.ts +0 -91
- package/src/tool/workflow/skill.txt +0 -5
- package/src/tool/workflow/task.ts +0 -197
- package/src/tool/workflow/task.txt +0 -57
- package/src/tool/workflow/todo.ts +0 -62
- package/src/tool/workflow/todowrite.txt +0 -167
- package/src/tool/write.ts +0 -1
- package/src/util/abort.ts +0 -1
- package/src/util/archive.ts +0 -17
- package/src/util/bom.ts +0 -19
- package/src/util/color.ts +0 -3
- package/src/util/data-url.ts +0 -1
- package/src/util/defer.ts +0 -1
- package/src/util/effect-http-client.ts +0 -11
- package/src/util/effect-zod.ts +0 -370
- package/src/util/error.ts +0 -46
- package/src/util/filesystem.ts +0 -230
- package/src/util/fn.ts +0 -21
- package/src/util/format.ts +0 -1
- package/src/util/i18n.ts +0 -104
- package/src/util/iife.ts +0 -1
- package/src/util/keybind.ts +0 -103
- package/src/util/lazy.ts +0 -18
- package/src/util/local-context.ts +0 -3
- package/src/util/locale.ts +0 -13
- package/src/util/lock.ts +0 -3
- package/src/util/media.ts +0 -26
- package/src/util/named-schema-error.ts +0 -61
- package/src/util/network.ts +0 -1
- package/src/util/process.ts +0 -176
- package/src/util/queue.ts +0 -32
- package/src/util/record.ts +0 -3
- package/src/util/rpc.ts +0 -66
- package/src/util/schema.ts +0 -108
- package/src/util/scrap.ts +0 -10
- package/src/util/signal.ts +0 -10
- package/src/util/timeout.ts +0 -13
- package/src/util/token.ts +0 -3
- package/src/util/update-schema.ts +0 -13
- package/src/util/which.ts +0 -14
- package/src/util/wildcard.ts +0 -20
- package/src/v2/session-entry-stepper.ts +0 -262
- package/src/v2/session-entry.ts +0 -219
- package/src/v2/session-event-base.ts +0 -102
- package/src/v2/session-event-step.ts +0 -51
- package/src/v2/session-event-stream.ts +0 -65
- package/src/v2/session-event-tool.ts +0 -88
- package/src/v2/session-event.ts +0 -92
- package/src/v2/session.ts +0 -69
- package/src/web-static/assets/index--nIB0GG1.js +0 -1
- package/src/web-static/assets/index-BAFkjvN0.css +0 -1
- package/src/web-static/index.html +0 -23
- package/src/worktree/index.ts +0 -19
- package/src/worktree/worktree-layer.ts +0 -450
- package/src/worktree/worktree-types.ts +0 -131
- package/sst-env.d.ts +0 -10
- package/test/AGENTS.md +0 -133
- package/test/account/repo.test.ts +0 -352
- package/test/account/service.test.ts +0 -456
- package/test/acp/agent-interface.test.ts +0 -51
- package/test/acp/event-subscription.test.ts +0 -725
- package/test/agent/agent.test.ts +0 -890
- package/test/auth/auth.test.ts +0 -86
- package/test/bun/registry.test.ts +0 -75
- package/test/bus/bus-effect.test.ts +0 -161
- package/test/bus/bus-integration.test.ts +0 -87
- package/test/bus/bus.test.ts +0 -219
- package/test/cli/account.test.ts +0 -26
- package/test/cli/auto-mode.test.ts +0 -75
- package/test/cli/bin-saeeol.test.ts +0 -8
- package/test/cli/cmd/tui/prompt-part.test.ts +0 -47
- package/test/cli/cmd/tui/prompt-traits.test.ts +0 -38
- package/test/cli/cmd/tui/sync.test.tsx +0 -159
- package/test/cli/error.test.ts +0 -18
- package/test/cli/github-action.test.ts +0 -198
- package/test/cli/github-remote.test.ts +0 -85
- package/test/cli/import.test.ts +0 -97
- package/test/cli/install-artifact.test.ts +0 -72
- package/test/cli/plugin-auth-picker.test.ts +0 -120
- package/test/cli/pr.test.ts +0 -59
- package/test/cli/tui/editor-context-zed.test.ts +0 -356
- package/test/cli/tui/editor-context.test.tsx +0 -228
- package/test/cli/tui/keybind-plugin.test.ts +0 -90
- package/test/cli/tui/markdown.test.ts +0 -161
- package/test/cli/tui/plugin-add.test.ts +0 -111
- package/test/cli/tui/plugin-install.test.ts +0 -87
- package/test/cli/tui/plugin-lifecycle.test.ts +0 -224
- package/test/cli/tui/plugin-loader-entrypoint.test.ts +0 -484
- package/test/cli/tui/plugin-loader-pure.test.ts +0 -71
- package/test/cli/tui/plugin-loader.test.ts +0 -816
- package/test/cli/tui/plugin-toggle.test.ts +0 -157
- package/test/cli/tui/revert-diff.test.ts +0 -35
- package/test/cli/tui/slot-replace.test.tsx +0 -47
- package/test/cli/tui/theme-store.test.ts +0 -54
- package/test/cli/tui/thread.test.ts +0 -28
- package/test/cli/tui/transcript.test.ts +0 -426
- package/test/cli/tui/usage.test.ts +0 -60
- package/test/cli/tui/use-event.test.tsx +0 -175
- package/test/config/agent-color.test.ts +0 -67
- package/test/config/config.test.ts +0 -2544
- package/test/config/fixtures/empty-frontmatter.md +0 -4
- package/test/config/fixtures/frontmatter.md +0 -28
- package/test/config/fixtures/markdown-header.md +0 -11
- package/test/config/fixtures/no-frontmatter.md +0 -1
- package/test/config/fixtures/weird-model-id.md +0 -13
- package/test/config/lsp.test.ts +0 -87
- package/test/config/markdown.test.ts +0 -228
- package/test/config/plugin.test.ts +0 -0
- package/test/config/tui.test.ts +0 -624
- package/test/control-plane/adapters.test.ts +0 -71
- package/test/control-plane/workspace.test.ts +0 -1526
- package/test/effect/app-runtime-logger.test.ts +0 -98
- package/test/effect/config-service.test.ts +0 -65
- package/test/effect/instance-state.test.ts +0 -394
- package/test/effect/run-service.test.ts +0 -89
- package/test/effect/runner.test.ts +0 -523
- package/test/fake/provider.ts +0 -82
- package/test/file/fsmonitor.test.ts +0 -68
- package/test/file/ignore.test.ts +0 -10
- package/test/file/index.test.ts +0 -954
- package/test/file/path-traversal.test.ts +0 -205
- package/test/file/ripgrep.test.ts +0 -226
- package/test/file/watcher.test.ts +0 -249
- package/test/filesystem/filesystem.test.ts +0 -319
- package/test/fixture/db.ts +0 -11
- package/test/fixture/fixture.test.ts +0 -26
- package/test/fixture/fixture.ts +0 -175
- package/test/fixture/flock-worker.ts +0 -72
- package/test/fixture/log-init-worker.ts +0 -62
- package/test/fixture/lsp/fake-lsp-server.js +0 -249
- package/test/fixture/plug-worker.ts +0 -93
- package/test/fixture/plugin-meta-worker.ts +0 -19
- package/test/fixture/skills/agents-sdk/SKILL.md +0 -152
- package/test/fixture/skills/cloudflare/SKILL.md +0 -211
- package/test/fixture/skills/index.json +0 -6
- package/test/fixture/tui-plugin.ts +0 -323
- package/test/fixture/tui-runtime.ts +0 -31
- package/test/format/format.test.ts +0 -272
- package/test/git/git.test.ts +0 -128
- package/test/ide/ide.test.ts +0 -82
- package/test/installation/installation.test.ts +0 -168
- package/test/keybind.test.ts +0 -421
- package/test/lib/effect.ts +0 -53
- package/test/lib/filesystem.ts +0 -10
- package/test/lib/llm-server.ts +0 -778
- package/test/lib/websocket.ts +0 -46
- package/test/lsp/client.test.ts +0 -482
- package/test/lsp/index.test.ts +0 -160
- package/test/lsp/launch.test.ts +0 -22
- package/test/lsp/lifecycle.test.ts +0 -184
- package/test/ltm/ltm.test.ts +0 -230
- package/test/mcp/headers.test.ts +0 -178
- package/test/mcp/lifecycle.test.ts +0 -787
- package/test/mcp/oauth-auto-connect.test.ts +0 -311
- package/test/mcp/oauth-browser.test.ts +0 -276
- package/test/mcp/oauth-callback.test.ts +0 -34
- package/test/memory/abort-leak-webfetch.ts +0 -49
- package/test/memory/abort-leak.test.ts +0 -128
- package/test/patch/patch.test.ts +0 -348
- package/test/permission/arity.test.ts +0 -33
- package/test/permission/next.test.ts +0 -1227
- package/test/permission/next.toConfig.test.ts +0 -110
- package/test/permission-task.test.ts +0 -326
- package/test/plugin/auth-override.test.ts +0 -79
- package/test/plugin/cloudflare.test.ts +0 -68
- package/test/plugin/codex.test.ts +0 -123
- package/test/plugin/github-copilot-models.test.ts +0 -261
- package/test/plugin/install-concurrency.test.ts +0 -140
- package/test/plugin/install.test.ts +0 -570
- package/test/plugin/loader-shared.test.ts +0 -1169
- package/test/plugin/meta.test.ts +0 -137
- package/test/plugin/plugin-contract.test.ts +0 -291
- package/test/plugin/shared.test.ts +0 -88
- package/test/plugin/trigger.test.ts +0 -102
- package/test/plugin/workspace-adapter.test.ts +0 -109
- package/test/preload.ts +0 -77
- package/test/project/instance.test.ts +0 -276
- package/test/project/migrate-global.test.ts +0 -152
- package/test/project/project.test.ts +0 -600
- package/test/project/vcs.test.ts +0 -286
- package/test/project/worktree-remove.test.ts +0 -126
- package/test/project/worktree.test.ts +0 -223
- package/test/provider/amazon-bedrock.test.ts +0 -462
- package/test/provider/copilot/convert-to-copilot-messages.test.ts +0 -523
- package/test/provider/copilot/copilot-chat-model.test.ts +0 -592
- package/test/provider/gitlab-duo.test.ts +0 -413
- package/test/provider/local.test.ts +0 -208
- package/test/provider/models.test.ts +0 -261
- package/test/provider/provider-category.test.ts +0 -190
- package/test/provider/provider.test.ts +0 -2758
- package/test/provider/transform.test.ts +0 -3681
- package/test/pty/pty-output-isolation.test.ts +0 -147
- package/test/pty/pty-session.test.ts +0 -102
- package/test/pty/pty-shell.test.ts +0 -104
- package/test/question/question.test.ts +0 -490
- package/test/saeeol/agent-global-config-dirs.test.ts +0 -24
- package/test/saeeol/agent-manager-tool.test.ts +0 -71
- package/test/saeeol/agent-permission-overrides.test.ts +0 -75
- package/test/saeeol/agent-skill-permissions.test.ts +0 -37
- package/test/saeeol/ask-agent-permissions.test.ts +0 -303
- package/test/saeeol/bash-hierarchy.test.ts +0 -64
- package/test/saeeol/bash-permission-metadata.test.ts +0 -66
- package/test/saeeol/bash-security-extended.test.ts +0 -243
- package/test/saeeol/bedrock-claude-empty-content.test.ts +0 -138
- package/test/saeeol/boxes-integration.test.ts +0 -415
- package/test/saeeol/builtin-skills.test.ts +0 -75
- package/test/saeeol/cleanup.ts +0 -28
- package/test/saeeol/cli/dev-setup.test.ts +0 -74
- package/test/saeeol/cli/roll-call.test.ts +0 -161
- package/test/saeeol/cli-run-auto-helper.test.ts +0 -58
- package/test/saeeol/codex-auth-refresh.test.ts +0 -124
- package/test/saeeol/commit-message/generate.test.ts +0 -188
- package/test/saeeol/commit-message/git-context.test.ts +0 -303
- package/test/saeeol/commit-message-windows.test.ts +0 -38
- package/test/saeeol/compaction-payload-recovery.test.ts +0 -406
- package/test/saeeol/compaction-preservation-audit.test.ts +0 -122
- package/test/saeeol/compaction-skip-guard.test.ts +0 -224
- package/test/saeeol/compaction-smart-select.test.ts +0 -100
- package/test/saeeol/config/config.test.ts +0 -166
- package/test/saeeol/config/indexing-default-plugin.test.ts +0 -82
- package/test/saeeol/config/opentelemetry-default.test.ts +0 -29
- package/test/saeeol/config-gitignore.test.ts +0 -70
- package/test/saeeol/config-injector.test.ts +0 -305
- package/test/saeeol/config-resilience.test.ts +0 -234
- package/test/saeeol/config-validation.test.ts +0 -183
- package/test/saeeol/cost-propagation.test.ts +0 -94
- package/test/saeeol/cost-tracker-extended.test.ts +0 -141
- package/test/saeeol/cost-tracker.test.ts +0 -64
- package/test/saeeol/custom-provider-delete.test.ts +0 -149
- package/test/saeeol/diff-full.test.ts +0 -226
- package/test/saeeol/edit-permission-filediff.test.ts +0 -223
- package/test/saeeol/encoding.test.ts +0 -364
- package/test/saeeol/enhance-prompt.test.ts +0 -61
- package/test/saeeol/ensure-plan-dir.test.ts +0 -32
- package/test/saeeol/errors.test.ts +0 -144
- package/test/saeeol/external-directory-boundary.test.ts +0 -96
- package/test/saeeol/gateway-headers.test.ts +0 -88
- package/test/saeeol/help.test.ts +0 -191
- package/test/saeeol/ignore-migrator.test.ts +0 -308
- package/test/saeeol/indexing-auth.test.ts +0 -45
- package/test/saeeol/indexing-feature.test.ts +0 -44
- package/test/saeeol/indexing-label.test.ts +0 -70
- package/test/saeeol/indexing-startup.test.ts +0 -381
- package/test/saeeol/indexing-worktree.test.ts +0 -73
- package/test/saeeol/instruction.test.ts +0 -136
- package/test/saeeol/lancedb-runtime.test.ts +0 -116
- package/test/saeeol/loader-auth.test.ts +0 -168
- package/test/saeeol/local-model.test.ts +0 -621
- package/test/saeeol/logo.test.ts +0 -31
- package/test/saeeol/lsp-typescript-lightweight.test.ts +0 -89
- package/test/saeeol/mcp-branding.test.ts +0 -33
- package/test/saeeol/mcp-docker-rm.test.ts +0 -32
- package/test/saeeol/mcp-migrator.test.ts +0 -736
- package/test/saeeol/mcp-oauth-callback.test.ts +0 -33
- package/test/saeeol/memory-io.test.ts +0 -198
- package/test/saeeol/memory-paths.test.ts +0 -87
- package/test/saeeol/memory-security.test.ts +0 -166
- package/test/saeeol/model-cache-org.test.ts +0 -164
- package/test/saeeol/model-info-panel-utils.test.ts +0 -52
- package/test/saeeol/model-info-panel.types.test.ts +0 -7
- package/test/saeeol/models-401-fallback.test.ts +0 -52
- package/test/saeeol/modes-migrator.test.ts +0 -320
- package/test/saeeol/nvidia-headers.test.ts +0 -74
- package/test/saeeol/patch-jsonc.test.ts +0 -73
- package/test/saeeol/patch.test.ts +0 -172
- package/test/saeeol/paths.test.ts +0 -265
- package/test/saeeol/permission/config-paths.test.ts +0 -174
- package/test/saeeol/permission/env-read.test.ts +0 -149
- package/test/saeeol/permission/external-directory-allow.test.ts +0 -327
- package/test/saeeol/permission/next.always-rules.test.ts +0 -882
- package/test/saeeol/permission/next.reply-http.test.ts +0 -205
- package/test/saeeol/permission/next.reply-routing.test.ts +0 -184
- package/test/saeeol/plan-exit-detection.test.ts +0 -494
- package/test/saeeol/plan-followup.test.ts +0 -1376
- package/test/saeeol/project-config-update.test.ts +0 -120
- package/test/saeeol/project-id.test.ts +0 -455
- package/test/saeeol/provider-cost.test.ts +0 -171
- package/test/saeeol/provider-list-failed-state.test.ts +0 -100
- package/test/saeeol/question-dismiss-all.test.ts +0 -174
- package/test/saeeol/read-directory.test.ts +0 -116
- package/test/saeeol/rules-migrator.test.ts +0 -257
- package/test/saeeol/run-auto.test.ts +0 -176
- package/test/saeeol/run-network.test.ts +0 -224
- package/test/saeeol/semantic-search.test.ts +0 -186
- package/test/saeeol/server/permission-allow-everything.test.ts +0 -125
- package/test/saeeol/session/instruction-substitution.test.ts +0 -72
- package/test/saeeol/session/platform-attribution.test.ts +0 -118
- package/test/saeeol/session/session.test.ts +0 -105
- package/test/saeeol/session-compaction-cap.test.ts +0 -399
- package/test/saeeol/session-compaction-chunks.test.ts +0 -501
- package/test/saeeol/session-compaction-safety.test.ts +0 -481
- package/test/saeeol/session-fork-remap.test.ts +0 -251
- package/test/saeeol/session-import-service.test.ts +0 -114
- package/test/saeeol/session-list.test.ts +0 -47
- package/test/saeeol/session-message-metadata.test.ts +0 -128
- package/test/saeeol/session-overflow.test.ts +0 -78
- package/test/saeeol/session-processor-empty-tool-calls.test.ts +0 -571
- package/test/saeeol/session-processor-network-offline.test.ts +0 -204
- package/test/saeeol/session-processor-retry-limit.test.ts +0 -238
- package/test/saeeol/session-processor-review-telemetry.test.ts +0 -82
- package/test/saeeol/session-prompt-compaction-safety.test.ts +0 -517
- package/test/saeeol/session-prompt-queue.test.ts +0 -815
- package/test/saeeol/sessions/inflight-cache.test.ts +0 -157
- package/test/saeeol/sessions/ingest-queue.test.ts +0 -402
- package/test/saeeol/sessions/remote-protocol.test.ts +0 -258
- package/test/saeeol/sessions/remote-sender.test.ts +0 -1036
- package/test/saeeol/sessions/remote-ws.test.ts +0 -367
- package/test/saeeol/sessions/sessions-enable-remote.test.disable +0 -181
- package/test/saeeol/slot-prop-reactivity.test.ts +0 -142
- package/test/saeeol/snapshot-cache.test.ts +0 -84
- package/test/saeeol/snapshot-freeze-repro.test.ts +0 -100
- package/test/saeeol/snapshot-track-timeout.test.ts +0 -519
- package/test/saeeol/stats-subagent-cost.test.ts +0 -123
- package/test/saeeol/suggestion/auto-dismiss.test.ts +0 -65
- package/test/saeeol/suggestion/suggestion.test.ts +0 -145
- package/test/saeeol/suggestion/tool.test.ts +0 -298
- package/test/saeeol/summary-file-diff.test.ts +0 -28
- package/test/saeeol/system-prompt.test.ts +0 -142
- package/test/saeeol/task-nesting.test.ts +0 -193
- package/test/saeeol/telemetry/feedback.test.ts +0 -8
- package/test/saeeol/todo-view.test.ts +0 -57
- package/test/saeeol/tool-encoding.test.ts +0 -455
- package/test/saeeol/tool-registry-indexing-import-failure.test.ts +0 -49
- package/test/saeeol/tool-registry-indexing.test.ts +0 -236
- package/test/saeeol/tool-registry-semantic-import-failure.test.ts +0 -55
- package/test/saeeol/tool-task-model.test.ts +0 -352
- package/test/saeeol/transform-opus-4.7.test.ts +0 -89
- package/test/saeeol/tui-diff.test.ts +0 -91
- package/test/saeeol/tui-sync.test.ts +0 -80
- package/test/saeeol/util/url.test.ts +0 -141
- package/test/saeeol/workflows-migrator.test.ts +0 -261
- package/test/saeeol/worktree-diff-summary.test.ts +0 -64
- package/test/saeeol/worktree-diff.test.ts +0 -223
- package/test/saeeol/worktree-remove-lock.test.ts +0 -82
- package/test/server/AGENTS.md +0 -15
- package/test/server/contract.test.ts +0 -357
- package/test/server/experimental-session-list.test.ts +0 -157
- package/test/server/global-session-list.test.ts +0 -155
- package/test/server/httpapi-authorization.test.ts +0 -103
- package/test/server/httpapi-bridge.test.ts +0 -440
- package/test/server/httpapi-config.test.ts +0 -67
- package/test/server/httpapi-cors.test.ts +0 -89
- package/test/server/httpapi-event.test.ts +0 -57
- package/test/server/httpapi-experimental.test.ts +0 -219
- package/test/server/httpapi-file.test.ts +0 -79
- package/test/server/httpapi-instance-context.test.ts +0 -237
- package/test/server/httpapi-instance.legacy.test.ts +0 -140
- package/test/server/httpapi-instance.test.ts +0 -83
- package/test/server/httpapi-json-parity.test.ts +0 -263
- package/test/server/httpapi-mcp-oauth.test.ts +0 -76
- package/test/server/httpapi-mcp.test.ts +0 -189
- package/test/server/httpapi-provider.test.ts +0 -153
- package/test/server/httpapi-pty-websocket.test.ts +0 -16
- package/test/server/httpapi-pty.test.ts +0 -175
- package/test/server/httpapi-raw-route-auth.test.ts +0 -89
- package/test/server/httpapi-sdk.test.ts +0 -681
- package/test/server/httpapi-session.test.ts +0 -464
- package/test/server/httpapi-sync.test.ts +0 -130
- package/test/server/httpapi-tui.test.ts +0 -121
- package/test/server/httpapi-workspace-routing.test.ts +0 -471
- package/test/server/httpapi-workspace.test.ts +0 -427
- package/test/server/lib/conformance.ts +0 -88
- package/test/server/lib/stateful.ts +0 -112
- package/test/server/project-init-git.test.ts +0 -113
- package/test/server/proxy-util.test.ts +0 -113
- package/test/server/session-actions.test.ts +0 -49
- package/test/server/session-list.test.ts +0 -238
- package/test/server/session-messages.test.ts +0 -167
- package/test/server/session-select.test.ts +0 -100
- package/test/server/trace-attributes.test.ts +0 -76
- package/test/server/workspace-proxy.test.ts +0 -165
- package/test/server/workspace-routing.test.ts +0 -85
- package/test/session/compaction.test.ts +0 -2420
- package/test/session/instruction.test.ts +0 -247
- package/test/session/llm.test.ts +0 -1273
- package/test/session/message-v2.test.ts +0 -1291
- package/test/session/messages-pagination.test.ts +0 -1173
- package/test/session/network.test.ts +0 -249
- package/test/session/processor-effect.test.ts +0 -847
- package/test/session/prompt.test.ts +0 -2131
- package/test/session/retry.test.ts +0 -340
- package/test/session/revert-compact.test.ts +0 -639
- package/test/session/schema-decoding.test.ts +0 -311
- package/test/session/session-entry-stepper.test.ts +0 -917
- package/test/session/session-schema.test.ts +0 -76
- package/test/session/snapshot-tool-race.test.ts +0 -257
- package/test/session/structured-output-integration.test.ts +0 -265
- package/test/session/structured-output.test.ts +0 -381
- package/test/session/system.test.ts +0 -73
- package/test/share/share-next.test.ts +0 -333
- package/test/shell/shell.test.ts +0 -99
- package/test/skill/discovery.test.ts +0 -116
- package/test/skill/skill.test.ts +0 -393
- package/test/smoke/smoke-tui-pty.test.ts +0 -123
- package/test/smoke/smoke-tui.mjs +0 -83
- package/test/smoke/tui-walkthrough-driver.ts +0 -234
- package/test/smoke/tui-walkthrough-input.test.ts +0 -285
- package/test/smoke/tui-walkthrough-leader.test.ts +0 -175
- package/test/smoke/tui-walkthrough-scroll.test.ts +0 -177
- package/test/smoke/tui-walkthrough-slash.test.ts +0 -302
- package/test/smoke/tui-walkthrough-system.test.ts +0 -208
- package/test/snapshot/snapshot.test.ts +0 -1531
- package/test/storage/db.test.ts +0 -23
- package/test/storage/json-migration.test.ts +0 -832
- package/test/storage/storage.test.ts +0 -293
- package/test/suggestion/suggestion.test.ts +0 -1
- package/test/sync/index.test.ts +0 -256
- package/test/tool/__snapshots__/parameters.test.ts.snap +0 -500
- package/test/tool/__snapshots__/tool.test.ts.snap +0 -9
- package/test/tool/apply_patch.test.ts +0 -614
- package/test/tool/bash.test.ts +0 -1225
- package/test/tool/diagnostics-filter.test.ts +0 -55
- package/test/tool/edit.test.ts +0 -754
- package/test/tool/external-directory.test.ts +0 -169
- package/test/tool/fixtures/large-image.png +0 -0
- package/test/tool/fixtures/models-api.json +0 -65179
- package/test/tool/glob.test.ts +0 -107
- package/test/tool/grep.test.ts +0 -114
- package/test/tool/lsp.test.ts +0 -187
- package/test/tool/parameters.test.ts +0 -243
- package/test/tool/question.test.ts +0 -129
- package/test/tool/read.test.ts +0 -500
- package/test/tool/recall.test.ts +0 -151
- package/test/tool/registry.test.ts +0 -203
- package/test/tool/skill.test.ts +0 -135
- package/test/tool/suggest.test.ts +0 -1
- package/test/tool/task.test.ts +0 -612
- package/test/tool/tool-define.test.ts +0 -99
- package/test/tool/truncation.test.ts +0 -260
- package/test/tool/webfetch.test.ts +0 -103
- package/test/tool/write.test.ts +0 -291
- package/test/util/data-url.test.ts +0 -14
- package/test/util/effect-zod.test.ts +0 -754
- package/test/util/error.test.ts +0 -38
- package/test/util/filesystem.test.ts +0 -656
- package/test/util/format.test.ts +0 -59
- package/test/util/glob.test.ts +0 -164
- package/test/util/iife.test.ts +0 -36
- package/test/util/lazy.test.ts +0 -50
- package/test/util/lock.test.ts +0 -72
- package/test/util/log.test.ts +0 -86
- package/test/util/module.test.ts +0 -59
- package/test/util/process.test.ts +0 -128
- package/test/util/timeout.test.ts +0 -21
- package/test/util/which.test.ts +0 -100
- package/test/util/wildcard.test.ts +0 -90
- package/test/workspace/workspace-restore.test.ts +0 -296
- package/tsconfig.json +0 -19
package/src/question/index.ts
DELETED
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
import { Deferred, Effect, Layer, Schema, Context } from "effect"
|
|
2
|
-
import { Bus } from "@/bus"
|
|
3
|
-
import { BusEvent } from "@/bus/bus-event"
|
|
4
|
-
import { InstanceState } from "@/effect/instance-state"
|
|
5
|
-
import { SessionID, MessageID } from "@/session/schema"
|
|
6
|
-
import { zod } from "@/util/effect-zod"
|
|
7
|
-
import * as Log from "@saeeol/core/util/log"
|
|
8
|
-
import { withStatics } from "@/util/schema"
|
|
9
|
-
import { QuestionID } from "./schema"
|
|
10
|
-
import { makeRuntime } from "@/effect/run-service"
|
|
11
|
-
import { SaeeolQuestion } from "@/saeeol/question"
|
|
12
|
-
|
|
13
|
-
const log = Log.create({ service: "question" })
|
|
14
|
-
|
|
15
|
-
// Schemas
|
|
16
|
-
|
|
17
|
-
export class Option extends Schema.Class<Option>("QuestionOption")({
|
|
18
|
-
label: Schema.String.annotate({
|
|
19
|
-
description: "Display text (1-5 words, concise)",
|
|
20
|
-
}),
|
|
21
|
-
description: Schema.String.annotate({
|
|
22
|
-
description: "Explanation of choice",
|
|
23
|
-
}),
|
|
24
|
-
// replying with the canonical English label (backend matches on `label`).
|
|
25
|
-
labelKey: Schema.optional(Schema.String).annotate({
|
|
26
|
-
description: "Optional i18n key for the label; clients translate and still reply with `label`",
|
|
27
|
-
}),
|
|
28
|
-
descriptionKey: Schema.optional(Schema.String).annotate({
|
|
29
|
-
description: "Optional i18n key for the description",
|
|
30
|
-
}),
|
|
31
|
-
// when this option is selected (before the reply is confirmed by the server).
|
|
32
|
-
mode: Schema.optional(Schema.String).annotate({
|
|
33
|
-
description: "Optional agent/mode name to pre-select in the UI when this option is picked",
|
|
34
|
-
}),
|
|
35
|
-
}) {
|
|
36
|
-
static readonly zod = zod(this)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const base = {
|
|
40
|
-
question: Schema.String.annotate({
|
|
41
|
-
description: "Complete question",
|
|
42
|
-
}),
|
|
43
|
-
header: Schema.String.annotate({
|
|
44
|
-
description: "Very short label (max 30 chars)",
|
|
45
|
-
}),
|
|
46
|
-
options: Schema.Array(Option).annotate({
|
|
47
|
-
description: "Available choices",
|
|
48
|
-
}),
|
|
49
|
-
multiple: Schema.optional(Schema.Boolean).annotate({
|
|
50
|
-
description: "Allow selecting multiple choices",
|
|
51
|
-
}),
|
|
52
|
-
questionKey: Schema.optional(Schema.String).annotate({
|
|
53
|
-
description: "Optional i18n key for the question text; clients fall back to `question` when missing",
|
|
54
|
-
}),
|
|
55
|
-
headerKey: Schema.optional(Schema.String).annotate({
|
|
56
|
-
description: "Optional i18n key for the header; clients fall back to `header` when missing",
|
|
57
|
-
}),
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export class Info extends Schema.Class<Info>("QuestionInfo")({
|
|
61
|
-
...base,
|
|
62
|
-
custom: Schema.optional(Schema.Boolean).annotate({
|
|
63
|
-
description: "Allow typing a custom answer (default: true)",
|
|
64
|
-
}),
|
|
65
|
-
}) {
|
|
66
|
-
static readonly zod = zod(this)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export class Prompt extends Schema.Class<Prompt>("QuestionPrompt")(base) {
|
|
70
|
-
static readonly zod = zod(this)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export class Tool extends Schema.Class<Tool>("QuestionTool")({
|
|
74
|
-
messageID: MessageID,
|
|
75
|
-
callID: Schema.String,
|
|
76
|
-
}) {
|
|
77
|
-
static readonly zod = zod(this)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export class Request extends Schema.Class<Request>("QuestionRequest")({
|
|
81
|
-
id: QuestionID,
|
|
82
|
-
sessionID: SessionID,
|
|
83
|
-
questions: Schema.Array(Info).annotate({
|
|
84
|
-
description: "Questions to ask",
|
|
85
|
-
}),
|
|
86
|
-
blocking: Schema.optional(Schema.Boolean).annotate({
|
|
87
|
-
description: "Whether this question blocks prompt input (default: true)",
|
|
88
|
-
}),
|
|
89
|
-
tool: Schema.optional(Tool),
|
|
90
|
-
}) {
|
|
91
|
-
static readonly zod = zod(this)
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export const Answer = Schema.Array(Schema.String)
|
|
95
|
-
.annotate({ identifier: "QuestionAnswer" })
|
|
96
|
-
.pipe(withStatics((s) => ({ zod: zod(s) })))
|
|
97
|
-
export type Answer = Schema.Schema.Type<typeof Answer>
|
|
98
|
-
|
|
99
|
-
export class Reply extends Schema.Class<Reply>("QuestionReply")({
|
|
100
|
-
answers: Schema.Array(Answer).annotate({
|
|
101
|
-
description: "User answers in order of questions (each answer is an array of selected labels)",
|
|
102
|
-
}),
|
|
103
|
-
}) {
|
|
104
|
-
static readonly zod = zod(this)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
class Replied extends Schema.Class<Replied>("QuestionReplied")({
|
|
108
|
-
sessionID: SessionID,
|
|
109
|
-
requestID: QuestionID,
|
|
110
|
-
answers: Schema.Array(Answer),
|
|
111
|
-
}) {}
|
|
112
|
-
|
|
113
|
-
class Rejected extends Schema.Class<Rejected>("QuestionRejected")({
|
|
114
|
-
sessionID: SessionID,
|
|
115
|
-
requestID: QuestionID,
|
|
116
|
-
}) {}
|
|
117
|
-
|
|
118
|
-
export const Event = {
|
|
119
|
-
Asked: BusEvent.define("question.asked", Request),
|
|
120
|
-
Replied: BusEvent.define("question.replied", Replied),
|
|
121
|
-
Rejected: BusEvent.define("question.rejected", Rejected),
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export class RejectedError extends Schema.TaggedErrorClass<RejectedError>()("QuestionRejectedError", {}) {
|
|
125
|
-
override get message() {
|
|
126
|
-
return "The user dismissed this question"
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
interface PendingEntry {
|
|
131
|
-
info: Request
|
|
132
|
-
deferred: Deferred.Deferred<ReadonlyArray<Answer>, RejectedError>
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
interface State {
|
|
136
|
-
pending: Map<QuestionID, PendingEntry>
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Service
|
|
140
|
-
|
|
141
|
-
export interface Interface {
|
|
142
|
-
readonly ask: (input: {
|
|
143
|
-
sessionID: SessionID
|
|
144
|
-
questions: ReadonlyArray<Info>
|
|
145
|
-
blocking?: boolean
|
|
146
|
-
tool?: Tool
|
|
147
|
-
}) => Effect.Effect<ReadonlyArray<Answer>, RejectedError>
|
|
148
|
-
readonly reply: (input: { requestID: QuestionID; answers: ReadonlyArray<Answer> }) => Effect.Effect<void>
|
|
149
|
-
readonly reject: (requestID: QuestionID) => Effect.Effect<void>
|
|
150
|
-
readonly list: () => Effect.Effect<ReadonlyArray<Request>>
|
|
151
|
-
readonly dismissAll: (sessionID: SessionID) => Effect.Effect<void>
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
export class Service extends Context.Service<Service, Interface>()("@saeeol/Question") {}
|
|
155
|
-
|
|
156
|
-
export const layer = Layer.effect(
|
|
157
|
-
Service,
|
|
158
|
-
Effect.gen(function* () {
|
|
159
|
-
const bus = yield* Bus.Service
|
|
160
|
-
const state = yield* InstanceState.make<State>(
|
|
161
|
-
Effect.fn("Question.state")(function* () {
|
|
162
|
-
const state = {
|
|
163
|
-
pending: new Map<QuestionID, PendingEntry>(),
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
yield* Effect.addFinalizer(() =>
|
|
167
|
-
Effect.gen(function* () {
|
|
168
|
-
for (const item of state.pending.values()) {
|
|
169
|
-
yield* Deferred.fail(item.deferred, new RejectedError())
|
|
170
|
-
}
|
|
171
|
-
state.pending.clear()
|
|
172
|
-
}),
|
|
173
|
-
)
|
|
174
|
-
|
|
175
|
-
return state
|
|
176
|
-
}),
|
|
177
|
-
)
|
|
178
|
-
|
|
179
|
-
const ask = Effect.fn("Question.ask")(function* (input: {
|
|
180
|
-
sessionID: SessionID
|
|
181
|
-
questions: ReadonlyArray<Info>
|
|
182
|
-
blocking?: boolean
|
|
183
|
-
tool?: Tool
|
|
184
|
-
}) {
|
|
185
|
-
const pending = (yield* InstanceState.get(state)).pending
|
|
186
|
-
const id = QuestionID.ascending()
|
|
187
|
-
log.info("asking", { id, questions: input.questions.length })
|
|
188
|
-
|
|
189
|
-
const deferred = yield* Deferred.make<ReadonlyArray<Answer>, RejectedError>()
|
|
190
|
-
const info = Schema.decodeUnknownSync(Request)({
|
|
191
|
-
id,
|
|
192
|
-
sessionID: input.sessionID,
|
|
193
|
-
questions: input.questions,
|
|
194
|
-
blocking: input.blocking,
|
|
195
|
-
tool: input.tool,
|
|
196
|
-
})
|
|
197
|
-
yield* SaeeolQuestion.guardFollowup(input.sessionID, () => new RejectedError())
|
|
198
|
-
|
|
199
|
-
pending.set(id, { info, deferred })
|
|
200
|
-
yield* bus.publish(Event.Asked, info)
|
|
201
|
-
|
|
202
|
-
return yield* Effect.ensuring(
|
|
203
|
-
Deferred.await(deferred),
|
|
204
|
-
Effect.sync(() => {
|
|
205
|
-
pending.delete(id)
|
|
206
|
-
}),
|
|
207
|
-
)
|
|
208
|
-
})
|
|
209
|
-
|
|
210
|
-
const reply = Effect.fn("Question.reply")(function* (input: {
|
|
211
|
-
requestID: QuestionID
|
|
212
|
-
answers: ReadonlyArray<Answer>
|
|
213
|
-
}) {
|
|
214
|
-
const pending = (yield* InstanceState.get(state)).pending
|
|
215
|
-
const existing = pending.get(input.requestID)
|
|
216
|
-
if (!existing) {
|
|
217
|
-
log.warn("reply for unknown request", { requestID: input.requestID })
|
|
218
|
-
return
|
|
219
|
-
}
|
|
220
|
-
pending.delete(input.requestID)
|
|
221
|
-
log.info("replied", { requestID: input.requestID, answers: input.answers })
|
|
222
|
-
yield* bus.publish(Event.Replied, {
|
|
223
|
-
sessionID: existing.info.sessionID,
|
|
224
|
-
requestID: existing.info.id,
|
|
225
|
-
answers: input.answers.map((a) => [...a]),
|
|
226
|
-
})
|
|
227
|
-
yield* Deferred.succeed(existing.deferred, input.answers)
|
|
228
|
-
})
|
|
229
|
-
|
|
230
|
-
const reject = Effect.fn("Question.reject")(function* (requestID: QuestionID) {
|
|
231
|
-
const pending = (yield* InstanceState.get(state)).pending
|
|
232
|
-
const existing = pending.get(requestID)
|
|
233
|
-
if (!existing) {
|
|
234
|
-
log.warn("reject for unknown request", { requestID })
|
|
235
|
-
return
|
|
236
|
-
}
|
|
237
|
-
pending.delete(requestID)
|
|
238
|
-
log.info("rejected", { requestID })
|
|
239
|
-
yield* bus.publish(Event.Rejected, {
|
|
240
|
-
sessionID: existing.info.sessionID,
|
|
241
|
-
requestID: existing.info.id,
|
|
242
|
-
})
|
|
243
|
-
yield* Deferred.fail(existing.deferred, new RejectedError())
|
|
244
|
-
})
|
|
245
|
-
|
|
246
|
-
const list = Effect.fn("Question.list")(function* () {
|
|
247
|
-
const pending = (yield* InstanceState.get(state)).pending
|
|
248
|
-
return Array.from(pending.values(), (x) => x.info)
|
|
249
|
-
})
|
|
250
|
-
const dismissAll = SaeeolQuestion.makeDismissAll({
|
|
251
|
-
state,
|
|
252
|
-
publishRejected: (entry) =>
|
|
253
|
-
bus.publish(Event.Rejected, { sessionID: entry.info.sessionID, requestID: entry.info.id }),
|
|
254
|
-
makeError: () => new RejectedError(),
|
|
255
|
-
})
|
|
256
|
-
|
|
257
|
-
return Service.of({ ask, reply, reject, list, dismissAll })
|
|
258
|
-
}),
|
|
259
|
-
)
|
|
260
|
-
|
|
261
|
-
export const defaultLayer = layer.pipe(Layer.provide(Bus.layer))
|
|
262
|
-
const { runPromise } = makeRuntime(Service, defaultLayer)
|
|
263
|
-
export const list = () => runPromise((svc) => svc.list())
|
|
264
|
-
export const ask = (input: Parameters<Interface["ask"]>[0]) => runPromise((svc) => svc.ask(input))
|
|
265
|
-
export const reply = (input: Parameters<Interface["reply"]>[0]) => runPromise((svc) => svc.reply(input))
|
|
266
|
-
export const reject = (requestID: QuestionID) => runPromise((svc) => svc.reject(requestID))
|
|
267
|
-
export const dismissAll = (sessionID: string) => runPromise((svc) => svc.dismissAll(SessionID.make(sessionID)))
|
|
268
|
-
|
|
269
|
-
export * as Question from "."
|
package/src/question/schema.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Schema } from "effect"
|
|
2
|
-
|
|
3
|
-
import { Identifier } from "@/id/id"
|
|
4
|
-
import { zod, ZodOverride } from "@/util/effect-zod"
|
|
5
|
-
import { Newtype } from "@/util/schema"
|
|
6
|
-
|
|
7
|
-
export class QuestionID extends Newtype<QuestionID>()(
|
|
8
|
-
"QuestionID",
|
|
9
|
-
Schema.String.annotate({ [ZodOverride]: Identifier.schema("question") }),
|
|
10
|
-
) {
|
|
11
|
-
static ascending(id?: string): QuestionID {
|
|
12
|
-
return this.make(Identifier.ascending("question", id))
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
static readonly zod = zod(this)
|
|
16
|
-
}
|
package/src/saeeol-web-ui.gen.ts
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// Auto-generated by packages/web/generate.ts — DO NOT EDIT
|
|
2
|
-
import { writeFileSync, mkdirSync, existsSync } from "node:fs"
|
|
3
|
-
import { join, dirname } from "node:path"
|
|
4
|
-
import { tmpdir } from "node:os"
|
|
5
|
-
import { Buffer } from "node:buffer"
|
|
6
|
-
|
|
7
|
-
const encoded: Record<string, string> = {
|
|
8
|
-
"assets/index--nIB0GG1.js": "KGZ1bmN0aW9uKCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtpZih0JiZ0LnN1cHBvcnRzJiZ0LnN1cHBvcnRzKCJtb2R1bGVwcmVsb2FkIikpcmV0dXJuO2Zvcihjb25zdCBpIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpbmtbcmVsPSJtb2R1bGVwcmVsb2FkIl0nKSlzKGkpO25ldyBNdXRhdGlvbk9ic2VydmVyKGk9Pntmb3IoY29uc3QgbCBvZiBpKWlmKGwudHlwZT09PSJjaGlsZExpc3QiKWZvcihjb25zdCBvIG9mIGwuYWRkZWROb2RlcylvLnRhZ05hbWU9PT0iTElOSyImJm8ucmVsPT09Im1vZHVsZXByZWxvYWQiJiZzKG8pfSkub2JzZXJ2ZShkb2N1bWVudCx7Y2hpbGRMaXN0OiEwLHN1YnRyZWU6ITB9KTtmdW5jdGlvbiBuKGkpe2NvbnN0IGw9e307cmV0dXJuIGkuaW50ZWdyaXR5JiYobC5pbnRlZ3JpdHk9aS5pbnRlZ3JpdHkpLGkucmVmZXJyZXJQb2xpY3kmJihsLnJlZmVycmVyUG9saWN5PWkucmVmZXJyZXJQb2xpY3kpLGkuY3Jvc3NPcmlnaW49PT0idXNlLWNyZWRlbnRpYWxzIj9sLmNyZWRlbnRpYWxzPSJpbmNsdWRlIjppLmNyb3NzT3JpZ2luPT09ImFub255bW91cyI/bC5jcmVkZW50aWFscz0ib21pdCI6bC5jcmVkZW50aWFscz0ic2FtZS1vcmlnaW4iLGx9ZnVuY3Rpb24gcyhpKXtpZihpLmVwKXJldHVybjtpLmVwPSEwO2NvbnN0IGw9bihpKTtmZXRjaChpLmhyZWYsbCl9fSkoKTtjb25zdCBrZT0hMSxPZT0oZSx0KT0+ZT09PXQsTmU9U3ltYm9sKCJzb2xpZC10cmFjayIpLFk9e2VxdWFsczpPZX07bGV0IEY9bnVsbCxiZT14ZTtjb25zdCBJPTEsWj0yLHZlPXtvd25lZDpudWxsLGNsZWFudXBzOm51bGwsY29udGV4dDpudWxsLG93bmVyOm51bGx9O3ZhciBoPW51bGw7bGV0IG9lPW51bGwsSWU9bnVsbCxwPW51bGwseT1udWxsLEE9bnVsbCxuZT0wO2Z1bmN0aW9uIFgoZSx0KXtjb25zdCBuPXAscz1oLGk9ZS5sZW5ndGg9PT0wLGw9dD09PXZvaWQgMD9zOnQsbz1pP3ZlOntvd25lZDpudWxsLGNsZWFudXBzOm51bGwsY29udGV4dDpsP2wuY29udGV4dDpudWxsLG93bmVyOmx9LHI9aT9lOigpPT5lKCgpPT5OKCgpPT5HKG8pKSk7aD1vLHA9bnVsbDt0cnl7cmV0dXJuIEgociwhMCl9ZmluYWxseXtwPW4saD1zfX1mdW5jdGlvbiBPKGUsdCl7dD10P09iamVjdC5hc3NpZ24oe30sWSx0KTpZO2NvbnN0IG49e3ZhbHVlOmUsb2JzZXJ2ZXJzOm51bGwsb2JzZXJ2ZXJTbG90czpudWxsLGNvbXBhcmF0b3I6dC5lcXVhbHN8fHZvaWQgMH0scz1pPT4odHlwZW9mIGk9PSJmdW5jdGlvbiImJihpPWkobi52YWx1ZSkpLEVlKG4saSkpO3JldHVybltTZS5iaW5kKG4pLHNdfWZ1bmN0aW9uIEsoZSx0LG4pe2NvbnN0IHM9c2UoZSx0LCExLEkpO0oocyl9ZnVuY3Rpb24gTGUoZSx0LG4pe2JlPVJlO2NvbnN0IHM9c2UoZSx0LCExLEkpO3MudXNlcj0hMCxBP0EucHVzaChzKTpKKHMpfWZ1bmN0aW9uIHEoZSx0LG4pe249bj9PYmplY3QuYXNzaWduKHt9LFksbik6WTtjb25zdCBzPXNlKGUsdCwhMCwwKTtyZXR1cm4gcy5vYnNlcnZlcnM9bnVsbCxzLm9ic2VydmVyU2xvdHM9bnVsbCxzLmNvbXBhcmF0b3I9bi5lcXVhbHN8fHZvaWQgMCxKKHMpLFNlLmJpbmQocyl9ZnVuY3Rpb24gTihlKXtpZihwPT09bnVsbClyZXR1cm4gZSgpO2NvbnN0IHQ9cDtwPW51bGw7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtwPXR9fWZ1bmN0aW9uIERlKGUpe0xlKCgpPT5OKGUpKX1mdW5jdGlvbiBmZShlKXtyZXR1cm4gaD09PW51bGx8fChoLmNsZWFudXBzPT09bnVsbD9oLmNsZWFudXBzPVtlXTpoLmNsZWFudXBzLnB1c2goZSkpLGV9ZnVuY3Rpb24gQmUoZSx0KXtGfHwoRj1TeW1ib2woImVycm9yIikpLGg9c2Uodm9pZCAwLHZvaWQgMCwhMCksaC5jb250ZXh0PXsuLi5oLmNvbnRleHQsW0ZdOlt0XX07dHJ5e3JldHVybiBlKCl9Y2F0Y2gobil7aWUobil9ZmluYWxseXtoPWgub3duZXJ9fWZ1bmN0aW9uIFNlKCl7aWYodGhpcy5zb3VyY2VzJiZ0aGlzLnN0YXRlKWlmKHRoaXMuc3RhdGU9PT1JKUoodGhpcyk7ZWxzZXtjb25zdCBlPXk7eT1udWxsLEgoKCk9PmVlKHRoaXMpLCExKSx5PWV9aWYocCl7Y29uc3QgZT10aGlzLm9ic2VydmVycz90aGlzLm9ic2VydmVycy5sZW5ndGg6MDtwLnNvdXJjZXM/KHAuc291cmNlcy5wdXNoKHRoaXMpLHAuc291cmNlU2xvdHMucHVzaChlKSk6KHAuc291cmNlcz1bdGhpc10scC5zb3VyY2VTbG90cz1bZV0pLHRoaXMub2JzZXJ2ZXJzPyh0aGlzLm9ic2VydmVycy5wdXNoKHApLHRoaXMub2JzZXJ2ZXJTbG90cy5wdXNoKHAuc291cmNlcy5sZW5ndGgtMSkpOih0aGlzLm9ic2VydmVycz1bcF0sdGhpcy5vYnNlcnZlclNsb3RzPVtwLnNvdXJjZXMubGVuZ3RoLTFdKX1yZXR1cm4gdGhpcy52YWx1ZX1mdW5jdGlvbiBFZShlLHQsbil7bGV0IHM9ZS52YWx1ZTtyZXR1cm4oIWUuY29tcGFyYXRvcnx8IWUuY29tcGFyYXRvcihzLHQpKSYmKGUudmFsdWU9dCxlLm9ic2VydmVycyYmZS5vYnNlcnZlcnMubGVuZ3RoJiZIKCgpPT57Zm9yKGxldCBpPTA7aTxlLm9ic2VydmVycy5sZW5ndGg7aSs9MSl7Y29uc3QgbD1lLm9ic2VydmVyc1tpXSxvPW9lJiZvZS5ydW5uaW5nO28mJm9lLmRpc3Bvc2VkLmhhcyhsKSwobz8hbC50U3RhdGU6IWwuc3RhdGUpJiYobC5wdXJlP3kucHVzaChsKTpBLnB1c2gobCksbC5vYnNlcnZlcnMmJl9lKGwpKSxvfHwobC5zdGF0ZT1JKX1pZih5Lmxlbmd0aD4xZTYpdGhyb3cgeT1bXSxuZXcgRXJyb3J9LCExKSksdH1mdW5jdGlvbiBKKGUpe2lmKCFlLmZuKXJldHVybjtHKGUpO2NvbnN0IHQ9bmU7TWUoZSxlLnZhbHVlLHQpfWZ1bmN0aW9uIE1lKGUsdCxuKXtsZXQgcztjb25zdCBpPWgsbD1wO3A9aD1lO3RyeXtzPWUuZm4odCl9Y2F0Y2gobyl7cmV0dXJuIGUucHVyZSYmKGUuc3RhdGU9SSxlLm93bmVkJiZlLm93bmVkLmZvckVhY2goRyksZS5vd25lZD1udWxsKSxlLnVwZGF0ZWRBdD1uKzEsaWUobyl9ZmluYWxseXtwPWwsaD1pfSghZS51cGRhdGVkQXR8fGUudXBkYXRlZEF0PD1uKSYmKGUudXBkYXRlZEF0IT1udWxsJiYib2JzZXJ2ZXJzImluIGU/RWUoZSxzKTplLnZhbHVlPXMsZS51cGRhdGVkQXQ9bil9ZnVuY3Rpb24gc2UoZSx0LG4scz1JLGkpe2NvbnN0IGw9e2ZuOmUsc3RhdGU6cyx1cGRhdGVkQXQ6bnVsbCxvd25lZDpudWxsLHNvdXJjZXM6bnVsbCxzb3VyY2VTbG90czpudWxsLGNsZWFudXBzOm51bGwsdmFsdWU6dCxvd25lcjpoLGNvbnRleHQ6aD9oLmNvbnRleHQ6bnVsbCxwdXJlOm59O3JldHVybiBoPT09bnVsbHx8aCE9PXZlJiYoaC5vd25lZD9oLm93bmVkLnB1c2gobCk6aC5vd25lZD1bbF0pLGx9ZnVuY3Rpb24geihlKXtpZihlLnN0YXRlPT09MClyZXR1cm47aWYoZS5zdGF0ZT09PVopcmV0dXJuIGVlKGUpO2lmKGUuc3VzcGVuc2UmJk4oZS5zdXNwZW5zZS5pbkZhbGxiYWNrKSlyZXR1cm4gZS5zdXNwZW5zZS5lZmZlY3RzLnB1c2goZSk7Y29uc3QgdD1bZV07Zm9yKDsoZT1lLm93bmVyKSYmKCFlLnVwZGF0ZWRBdHx8ZS51cGRhdGVkQXQ8bmUpOyllLnN0YXRlJiZ0LnB1c2goZSk7Zm9yKGxldCBuPXQubGVuZ3RoLTE7bj49MDtuLS0paWYoZT10W25dLGUuc3RhdGU9PT1JKUooZSk7ZWxzZSBpZihlLnN0YXRlPT09Wil7Y29uc3Qgcz15O3k9bnVsbCxIKCgpPT5lZShlLHRbMF0pLCExKSx5PXN9fWZ1bmN0aW9uIEgoZSx0KXtpZih5KXJldHVybiBlKCk7bGV0IG49ITE7dHx8KHk9W10pLEE/bj0hMDpBPVtdLG5lKys7dHJ5e2NvbnN0IHM9ZSgpO3JldHVybiBQZShuKSxzfWNhdGNoKHMpe258fChBPW51bGwpLHk9bnVsbCxpZShzKX19ZnVuY3Rpb24gUGUoZSl7aWYoeSYmKHhlKHkpLHk9bnVsbCksZSlyZXR1cm47Y29uc3QgdD1BO0E9bnVsbCx0Lmxlbmd0aCYmSCgoKT0+YmUodCksITEpfWZ1bmN0aW9uIHhlKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXooZVt0XSl9ZnVuY3Rpb24gUmUoZSl7bGV0IHQsbj0wO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspe2NvbnN0IHM9ZVt0XTtzLnVzZXI/ZVtuKytdPXM6eihzKX1mb3IodD0wO3Q8bjt0KyspeihlW3RdKX1mdW5jdGlvbiBlZShlLHQpe2Uuc3RhdGU9MDtmb3IobGV0IG49MDtuPGUuc291cmNlcy5sZW5ndGg7bis9MSl7Y29uc3Qgcz1lLnNvdXJjZXNbbl07aWYocy5zb3VyY2VzKXtjb25zdCBpPXMuc3RhdGU7aT09PUk/cyE9PXQmJighcy51cGRhdGVkQXR8fHMudXBkYXRlZEF0PG5lKSYmeihzKTppPT09WiYmZWUocyx0KX19fWZ1bmN0aW9uIF9lKGUpe2ZvcihsZXQgdD0wO3Q8ZS5vYnNlcnZlcnMubGVuZ3RoO3QrPTEpe2NvbnN0IG49ZS5vYnNlcnZlcnNbdF07bi5zdGF0ZXx8KG4uc3RhdGU9WixuLnB1cmU/eS5wdXNoKG4pOkEucHVzaChuKSxuLm9ic2VydmVycyYmX2UobikpfX1mdW5jdGlvbiBHKGUpe2xldCB0O2lmKGUuc291cmNlcylmb3IoO2Uuc291cmNlcy5sZW5ndGg7KXtjb25zdCBuPWUuc291cmNlcy5wb3AoKSxzPWUuc291cmNlU2xvdHMucG9wKCksaT1uLm9ic2VydmVycztpZihpJiZpLmxlbmd0aCl7Y29uc3QgbD1pLnBvcCgpLG89bi5vYnNlcnZlclNsb3RzLnBvcCgpO3M8aS5sZW5ndGgmJihsLnNvdXJjZVNsb3RzW29dPXMsaVtzXT1sLG4ub2JzZXJ2ZXJTbG90c1tzXT1vKX19aWYoZS50T3duZWQpe2Zvcih0PWUudE93bmVkLmxlbmd0aC0xO3Q+PTA7dC0tKUcoZS50T3duZWRbdF0pO2RlbGV0ZSBlLnRPd25lZH1pZihlLm93bmVkKXtmb3IodD1lLm93bmVkLmxlbmd0aC0xO3Q+PTA7dC0tKUcoZS5vd25lZFt0XSk7ZS5vd25lZD1udWxsfWlmKGUuY2xlYW51cHMpe2Zvcih0PWUuY2xlYW51cHMubGVuZ3RoLTE7dD49MDt0LS0pZS5jbGVhbnVwc1t0XSgpO2UuY2xlYW51cHM9bnVsbH1lLnN0YXRlPTB9ZnVuY3Rpb24gamUoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9lOm5ldyBFcnJvcih0eXBlb2YgZT09InN0cmluZyI/ZToiVW5rbm93biBlcnJvciIse2NhdXNlOmV9KX1mdW5jdGlvbiBwZShlLHQsbil7dHJ5e2Zvcihjb25zdCBzIG9mIHQpcyhlKX1jYXRjaChzKXtpZShzLG4mJm4ub3duZXJ8fG51bGwpfX1mdW5jdGlvbiBpZShlLHQ9aCl7Y29uc3Qgbj1GJiZ0JiZ0LmNvbnRleHQmJnQuY29udGV4dFtGXSxzPWplKGUpO2lmKCFuKXRocm93IHM7QT9BLnB1c2goe2ZuKCl7cGUocyxuLHQpfSxzdGF0ZTpJfSk6cGUocyxuLHQpfWNvbnN0IFVlPVN5bWJvbCgiZmFsbGJhY2siKTtmdW5jdGlvbiBnZShlKXtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdKCl9ZnVuY3Rpb24gS2UoZSx0LG49e30pe2xldCBzPVtdLGk9W10sbD1bXSxvPTAscj10Lmxlbmd0aD4xP1tdOm51bGw7cmV0dXJuIGZlKCgpPT5nZShsKSksKCk9PntsZXQgYT1lKCl8fFtdLGY9YS5sZW5ndGgsZCxjO3JldHVybiBhW05lXSxOKCgpPT57bGV0ICQsVCxFLGosUCxiLHYsdSxtO2lmKGY9PT0wKW8hPT0wJiYoZ2UobCksbD1bXSxzPVtdLGk9W10sbz0wLHImJihyPVtdKSksbi5mYWxsYmFjayYmKHM9W1VlXSxpWzBdPVgodz0+KGxbMF09dyxuLmZhbGxiYWNrKCkpKSxvPTEpO2Vsc2UgaWYobz09PTApe2ZvcihpPW5ldyBBcnJheShmKSxjPTA7YzxmO2MrKylzW2NdPWFbY10saVtjXT1YKEMpO289Zn1lbHNle2ZvcihFPW5ldyBBcnJheShmKSxqPW5ldyBBcnJheShmKSxyJiYoUD1uZXcgQXJyYXkoZikpLGI9MCx2PU1hdGgubWluKG8sZik7Yjx2JiZzW2JdPT09YVtiXTtiKyspO2Zvcih2PW8tMSx1PWYtMTt2Pj1iJiZ1Pj1iJiZzW3ZdPT09YVt1XTt2LS0sdS0tKUVbdV09aVt2XSxqW3VdPWxbdl0sciYmKFBbdV09clt2XSk7Zm9yKCQ9bmV3IE1hcCxUPW5ldyBBcnJheSh1KzEpLGM9dTtjPj1iO2MtLSltPWFbY10sZD0kLmdldChtKSxUW2NdPWQ9PT12b2lkIDA/LTE6ZCwkLnNldChtLGMpO2ZvcihkPWI7ZDw9djtkKyspbT1zW2RdLGM9JC5nZXQobSksYyE9PXZvaWQgMCYmYyE9PS0xPyhFW2NdPWlbZF0saltjXT1sW2RdLHImJihQW2NdPXJbZF0pLGM9VFtjXSwkLnNldChtLGMpKTpsW2RdKCk7Zm9yKGM9YjtjPGY7YysrKWMgaW4gRT8oaVtjXT1FW2NdLGxbY109altjXSxyJiYocltjXT1QW2NdLHJbY10oYykpKTppW2NdPVgoQyk7aT1pLnNsaWNlKDAsbz1mKSxzPWEuc2xpY2UoMCl9cmV0dXJuIGl9KTtmdW5jdGlvbiBDKCQpe2lmKGxbY109JCxyKXtjb25zdFtULEVdPU8oYyk7cmV0dXJuIHJbY109RSx0KGFbY10sVCl9cmV0dXJuIHQoYVtjXSl9fX1mdW5jdGlvbiBCKGUsdCl7cmV0dXJuIE4oKCk9PmUodHx8e30pKX1jb25zdCBWZT1lPT5gU3RhbGUgcmVhZCBmcm9tIDwke2V9Pi5gO2Z1bmN0aW9uIG1lKGUpe2NvbnN0IHQ9ImZhbGxiYWNrImluIGUmJntmYWxsYmFjazooKT0+ZS5mYWxsYmFja307cmV0dXJuIHEoS2UoKCk9PmUuZWFjaCxlLmNoaWxkcmVuLHR8fHZvaWQgMCkpfWZ1bmN0aW9uIGNlKGUpe2NvbnN0IHQ9ZS5rZXllZCxuPXEoKCk9PmUud2hlbix2b2lkIDAsdm9pZCAwKSxzPXQ/bjpxKG4sdm9pZCAwLHtlcXVhbHM6KGksbCk9PiFpPT0hbH0pO3JldHVybiBxKCgpPT57Y29uc3QgaT1zKCk7aWYoaSl7Y29uc3QgbD1lLmNoaWxkcmVuO3JldHVybiB0eXBlb2YgbD09ImZ1bmN0aW9uIiYmbC5sZW5ndGg+MD9OKCgpPT5sKHQ/aTooKT0+e2lmKCFOKHMpKXRocm93IFZlKCJTaG93Iik7cmV0dXJuIG4oKX0pKTpsfXJldHVybiBlLmZhbGxiYWNrfSx2b2lkIDAsdm9pZCAwKX1sZXQgVztmdW5jdGlvbiBGZShlKXtsZXQgdDtjb25zdFtuLHNdPU8odCx2b2lkIDApO3JldHVybiBXfHwoVz1uZXcgU2V0KSxXLmFkZChzKSxmZSgoKT0+Vy5kZWxldGUocykpLHEoKCk9PntsZXQgaTtpZihpPW4oKSl7Y29uc3QgbD1lLmZhbGxiYWNrO3JldHVybiB0eXBlb2YgbD09ImZ1bmN0aW9uIiYmbC5sZW5ndGg/TigoKT0+bChpLCgpPT5zKCkpKTpsfXJldHVybiBCZSgoKT0+ZS5jaGlsZHJlbixzKX0sdm9pZCAwLHZvaWQgMCl9ZnVuY3Rpb24gcWUoZSx0LG4pe2xldCBzPW4ubGVuZ3RoLGk9dC5sZW5ndGgsbD1zLG89MCxyPTAsYT10W2ktMV0ubmV4dFNpYmxpbmcsZj1udWxsO2Zvcig7bzxpfHxyPGw7KXtpZih0W29dPT09bltyXSl7bysrLHIrKztjb250aW51ZX1mb3IoO3RbaS0xXT09PW5bbC0xXTspaS0tLGwtLTtpZihpPT09byl7Y29uc3QgZD1sPHM/cj9uW3ItMV0ubmV4dFNpYmxpbmc6bltsLXJdOmE7Zm9yKDtyPGw7KWUuaW5zZXJ0QmVmb3JlKG5bcisrXSxkKX1lbHNlIGlmKGw9PT1yKWZvcig7bzxpOykoIWZ8fCFmLmhhcyh0W29dKSkmJnRbb10ucmVtb3ZlKCksbysrO2Vsc2UgaWYodFtvXT09PW5bbC0xXSYmbltyXT09PXRbaS0xXSl7Y29uc3QgZD10Wy0taV0ubmV4dFNpYmxpbmc7ZS5pbnNlcnRCZWZvcmUobltyKytdLHRbbysrXS5uZXh0U2libGluZyksZS5pbnNlcnRCZWZvcmUoblstLWxdLGQpLHRbaV09bltsXX1lbHNle2lmKCFmKXtmPW5ldyBNYXA7bGV0IGM9cjtmb3IoO2M8bDspZi5zZXQobltjXSxjKyspfWNvbnN0IGQ9Zi5nZXQodFtvXSk7aWYoZCE9bnVsbClpZihyPGQmJmQ8bCl7bGV0IGM9byxDPTEsJDtmb3IoOysrYzxpJiZjPGwmJiEoKCQ9Zi5nZXQodFtjXSkpPT1udWxsfHwkIT09ZCtDKTspQysrO2lmKEM+ZC1yKXtjb25zdCBUPXRbb107Zm9yKDtyPGQ7KWUuaW5zZXJ0QmVmb3JlKG5bcisrXSxUKX1lbHNlIGUucmVwbGFjZUNoaWxkKG5bcisrXSx0W28rK10pfWVsc2UgbysrO2Vsc2UgdFtvKytdLnJlbW92ZSgpfX19Y29uc3QgeWU9Il8kRFhfREVMRUdBVEUiO2Z1bmN0aW9uIEdlKGUsdCxuLHM9e30pe2xldCBpO3JldHVybiBYKGw9PntpPWwsdD09PWRvY3VtZW50P2UoKTpTKHQsZSgpLHQuZmlyc3RDaGlsZD9udWxsOnZvaWQgMCxuKX0scy5vd25lciksKCk9PntpKCksdC50ZXh0Q29udGVudD0iIn19ZnVuY3Rpb24gTShlLHQsbixzKXtsZXQgaTtjb25zdCBsPSgpPT57Y29uc3Qgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3JldHVybiByLmlubmVySFRNTD1lLHIuY29udGVudC5maXJzdENoaWxkfSxvPSgpPT4oaXx8KGk9bCgpKSkuY2xvbmVOb2RlKCEwKTtyZXR1cm4gby5jbG9uZU5vZGU9byxvfWZ1bmN0aW9uIEFlKGUsdD13aW5kb3cuZG9jdW1lbnQpe2NvbnN0IG49dFt5ZV18fCh0W3llXT1uZXcgU2V0KTtmb3IobGV0IHM9MCxpPWUubGVuZ3RoO3M8aTtzKyspe2NvbnN0IGw9ZVtzXTtuLmhhcyhsKXx8KG4uYWRkKGwpLHQuYWRkRXZlbnRMaXN0ZW5lcihsLEhlKSl9fWZ1bmN0aW9uIEplKGUsdCl7dD09bnVsbD9lLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKTplLmNsYXNzTmFtZT10fWZ1bmN0aW9uIHdlKGUsdCxuKXtyZXR1cm4gTigoKT0+ZSh0LG4pKX1mdW5jdGlvbiBTKGUsdCxuLHMpe2lmKG4hPT12b2lkIDAmJiFzJiYocz1bXSksdHlwZW9mIHQhPSJmdW5jdGlvbiIpcmV0dXJuIHRlKGUsdCxzLG4pO0soaT0+dGUoZSx0KCksaSxuKSxzKX1mdW5jdGlvbiBIZShlKXtsZXQgdD1lLnRhcmdldDtjb25zdCBuPWAkJCR7ZS50eXBlfWAscz1lLnRhcmdldCxpPWUuY3VycmVudFRhcmdldCxsPWE9Pk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ0YXJnZXQiLHtjb25maWd1cmFibGU6ITAsdmFsdWU6YX0pLG89KCk9Pntjb25zdCBhPXRbbl07aWYoYSYmIXQuZGlzYWJsZWQpe2NvbnN0IGY9dFtgJHtufURhdGFgXTtpZihmIT09dm9pZCAwP2EuY2FsbCh0LGYsZSk6YS5jYWxsKHQsZSksZS5jYW5jZWxCdWJibGUpcmV0dXJufXJldHVybiB0Lmhvc3QmJnR5cGVvZiB0Lmhvc3QhPSJzdHJpbmciJiYhdC5ob3N0Ll8kaG9zdCYmdC5jb250YWlucyhlLnRhcmdldCkmJmwodC5ob3N0KSwhMH0scj0oKT0+e2Zvcig7bygpJiYodD10Ll8kaG9zdHx8dC5wYXJlbnROb2RlfHx0Lmhvc3QpOyk7fTtpZihPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiY3VycmVudFRhcmdldCIse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtyZXR1cm4gdHx8ZG9jdW1lbnR9fSksZS5jb21wb3NlZFBhdGgpe2NvbnN0IGE9ZS5jb21wb3NlZFBhdGgoKTtsKGFbMF0pO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGgtMiYmKHQ9YVtmXSwhIW8oKSk7ZisrKXtpZih0Ll8kaG9zdCl7dD10Ll8kaG9zdCxyKCk7YnJlYWt9aWYodC5wYXJlbnROb2RlPT09aSlicmVha319ZWxzZSByKCk7bChzKX1mdW5jdGlvbiB0ZShlLHQsbixzLGkpe2Zvcig7dHlwZW9mIG49PSJmdW5jdGlvbiI7KW49bigpO2lmKHQ9PT1uKXJldHVybiBuO2NvbnN0IGw9dHlwZW9mIHQsbz1zIT09dm9pZCAwO2lmKGU9byYmblswXSYmblswXS5wYXJlbnROb2RlfHxlLGw9PT0ic3RyaW5nInx8bD09PSJudW1iZXIiKXtpZihsPT09Im51bWJlciImJih0PXQudG9TdHJpbmcoKSx0PT09bikpcmV0dXJuIG47aWYobyl7bGV0IHI9blswXTtyJiZyLm5vZGVUeXBlPT09Mz9yLmRhdGEhPT10JiYoci5kYXRhPXQpOnI9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodCksbj1VKGUsbixzLHIpfWVsc2UgbiE9PSIiJiZ0eXBlb2Ygbj09InN0cmluZyI/bj1lLmZpcnN0Q2hpbGQuZGF0YT10Om49ZS50ZXh0Q29udGVudD10fWVsc2UgaWYodD09bnVsbHx8bD09PSJib29sZWFuIiluPVUoZSxuLHMpO2Vsc2V7aWYobD09PSJmdW5jdGlvbiIpcmV0dXJuIEsoKCk9PntsZXQgcj10KCk7Zm9yKDt0eXBlb2Ygcj09ImZ1bmN0aW9uIjspcj1yKCk7bj10ZShlLHIsbixzKX0pLCgpPT5uO2lmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IHI9W10sYT1uJiZBcnJheS5pc0FycmF5KG4pO2lmKGFlKHIsdCxuLGkpKXJldHVybiBLKCgpPT5uPXRlKGUscixuLHMsITApKSwoKT0+bjtpZihyLmxlbmd0aD09PTApe2lmKG49VShlLG4scyksbylyZXR1cm4gbn1lbHNlIGE/bi5sZW5ndGg9PT0wPyRlKGUscixzKTpxZShlLG4scik6KG4mJlUoZSksJGUoZSxyKSk7bj1yfWVsc2UgaWYodC5ub2RlVHlwZSl7aWYoQXJyYXkuaXNBcnJheShuKSl7aWYobylyZXR1cm4gbj1VKGUsbixzLHQpO1UoZSxuLG51bGwsdCl9ZWxzZSBuPT1udWxsfHxuPT09IiJ8fCFlLmZpcnN0Q2hpbGQ/ZS5hcHBlbmRDaGlsZCh0KTplLnJlcGxhY2VDaGlsZCh0LGUuZmlyc3RDaGlsZCk7bj10fX1yZXR1cm4gbn1mdW5jdGlvbiBhZShlLHQsbixzKXtsZXQgaT0hMTtmb3IobGV0IGw9MCxvPXQubGVuZ3RoO2w8bztsKyspe2xldCByPXRbbF0sYT1uJiZuW2UubGVuZ3RoXSxmO2lmKCEocj09bnVsbHx8cj09PSEwfHxyPT09ITEpKWlmKChmPXR5cGVvZiByKT09Im9iamVjdCImJnIubm9kZVR5cGUpZS5wdXNoKHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSlpPWFlKGUscixhKXx8aTtlbHNlIGlmKGY9PT0iZnVuY3Rpb24iKWlmKHMpe2Zvcig7dHlwZW9mIHI9PSJmdW5jdGlvbiI7KXI9cigpO2k9YWUoZSxBcnJheS5pc0FycmF5KHIpP3I6W3JdLEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pfHxpfWVsc2UgZS5wdXNoKHIpLGk9ITA7ZWxzZXtjb25zdCBkPVN0cmluZyhyKTthJiZhLm5vZGVUeXBlPT09MyYmYS5kYXRhPT09ZD9lLnB1c2goYSk6ZS5wdXNoKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGQpKX19cmV0dXJuIGl9ZnVuY3Rpb24gJGUoZSx0LG49bnVsbCl7Zm9yKGxldCBzPTAsaT10Lmxlbmd0aDtzPGk7cysrKWUuaW5zZXJ0QmVmb3JlKHRbc10sbil9ZnVuY3Rpb24gVShlLHQsbixzKXtpZihuPT09dm9pZCAwKXJldHVybiBlLnRleHRDb250ZW50PSIiO2NvbnN0IGk9c3x8ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO2lmKHQubGVuZ3RoKXtsZXQgbD0hMTtmb3IobGV0IG89dC5sZW5ndGgtMTtvPj0wO28tLSl7Y29uc3Qgcj10W29dO2lmKGkhPT1yKXtjb25zdCBhPXIucGFyZW50Tm9kZT09PWU7IWwmJiFvP2E/ZS5yZXBsYWNlQ2hpbGQoaSxyKTplLmluc2VydEJlZm9yZShpLG4pOmEmJnIucmVtb3ZlKCl9ZWxzZSBsPSEwfX1lbHNlIGUuaW5zZXJ0QmVmb3JlKGksbik7cmV0dXJuW2ldfWZ1bmN0aW9uIFFlKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9cLyskLywiIik7YXN5bmMgZnVuY3Rpb24gbihzLGkpe3JldHVybiBhd2FpdCBmZXRjaChgJHt0fSR7c31gLHsuLi5pLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwuLi5pPy5oZWFkZXJzfX0pfXJldHVybnt1cmw6dCxmZXRjaDpuLGFzeW5jIGdldFNlc3Npb25zKCl7cmV0dXJuKGF3YWl0IG4oIi9pbnN0YW5jZS9zZXNzaW9ucyIpKS5qc29uKCl9LGFzeW5jIHByb21wdChzLGkpe3JldHVybiBuKCIvaW5zdGFuY2UvcHJvbXB0Iix7bWV0aG9kOiJQT1NUIixib2R5OkpTT04uc3RyaW5naWZ5KHttZXNzYWdlOnMsc2Vzc2lvbklkOml9KX0pfSxldmVudHM6e3N1YnNjcmliZShzKXtjb25zdCBpPW5ldyBFdmVudFNvdXJjZShgJHt0fS9nbG9iYWwvZXZlbnRgKTtyZXR1cm4gaS5vbm1lc3NhZ2U9bD0+e3RyeXtzKEpTT04ucGFyc2UobC5kYXRhKSl9Y2F0Y2h7fX0saX19fX12YXIgV2U9TSgiPGFzaWRlIGNsYXNzPXNpZGViYXI+PGRpdiBjbGFzcz1zaWRlYmFyLWhlYWRlcj48YnV0dG9uIGNsYXNzPW5ldy1jaGF0LWJ0bj4rIOyDiCDrjIDtmZQ8L2J1dHRvbj48L2Rpdj48ZGl2IGNsYXNzPXNpZGViYXItc2Vzc2lvbnM+IiksWGU9TSgiPGRpdiBjbGFzcz1lbXB0eS1zdGF0ZT48ZGl2IGNsYXNzPWVtcHR5LWxvZ28+4qyhPC9kaXY+PGgyPlNBRUVPTDwvaDI+PHA+QUkg7L2U65SpIOyXkOydtOyghO2KuDwvcD48ZGl2IGNsYXNzPWVtcHR5LWhpbnRzPjxkaXYgY2xhc3M9aGludD7tmITsnqwg7ZSE66Gc7KCd7Yq4IOq1rOyhsOulvCDshKTrqoXtlbTspJg8L2Rpdj48ZGl2IGNsYXNzPWhpbnQ+UkVBRE1FLm1k66W8IOyekeyEse2VtOykmDwvZGl2PjxkaXYgY2xhc3M9aGludD7rsoTqt7jrpbwg7LC+7JWE7IScIOyImOygle2VtOykmCIpLFllPU0oJzxkaXYgY2xhc3M9Im1lc3NhZ2UgbWVzc2FnZS1hc3Npc3RhbnQiPjxkaXYgY2xhc3M9bWVzc2FnZS1hdmF0YXI+4qyhPC9kaXY+PGRpdiBjbGFzcz1tZXNzYWdlLWNvbnRlbnQ+PGRpdiBjbGFzcz10eXBpbmctaW5kaWNhdG9yPjxzcGFuPjwvc3Bhbj48c3Bhbj48L3NwYW4+PHNwYW4+JyksWmU9TSgnPGRpdiBjbGFzcz1jaGF0LWxheW91dD48ZGl2IGNsYXNzPWNoYXQtbWFpbj48ZGl2IGNsYXNzPW1lc3NhZ2VzPjxkaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz1pbnB1dC1hcmVhPjxkaXYgY2xhc3M9aW5wdXQtd3JhcHBlcj48dGV4dGFyZWEgcGxhY2Vob2xkZXI9IuuplOyLnOyngOulvCDsnoXroKXtlZjshLjsmpQuLi4icm93cz0xPjwvdGV4dGFyZWE+PGJ1dHRvbiBjbGFzcz1zZW5kLWJ0bj7soITshqEnKSx6ZT1NKCI8ZGl2IGNsYXNzPXNlc3Npb24taXRlbT48c3BhbiBjbGFzcz1zZXNzaW9uLXRpdGxlPiIpLGV0PU0oIjxkaXY+PGRpdiBjbGFzcz1tZXNzYWdlLWF2YXRhcj48L2Rpdj48ZGl2IGNsYXNzPW1lc3NhZ2UtY29udGVudD48ZGl2IGNsYXNzPW1lc3NhZ2UtdGV4dD48L2Rpdj48ZGl2IGNsYXNzPW1lc3NhZ2UtdGltZT4iKTtmdW5jdGlvbiB0dCgpe2NvbnN0W2UsdF09TyhbXSksW24sc109TygiIiksW2ksbF09TyghMSksW29dPU8oW10pLFtyLGFdPU8obnVsbCksW2YsZF09TyghMSksW2NdPU8oITApO2xldCBDLCQsVDtjb25zdCBFPSgpPT5gJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdH1gO0RlKGFzeW5jKCk9Pnt0cnl7VD1RZShFKCkpO2NvbnN0IHU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbm5lY3Rpb24tc3RhdHVzIik7dSYmKHUudGV4dENvbnRlbnQ9IuyXsOqysOuQqCIpLGQoITApLGF3YWl0IGooKX1jYXRjaHtjb25zdCBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25uZWN0aW9uLXN0YXR1cyIpO20mJihtLnRleHRDb250ZW50PSLsl7DqsrAg7Iuk7YyoIil9fSksZmUoKCk9Pnt9KTthc3luYyBmdW5jdGlvbiBqKCl7dHJ5e2NvbnN0IHU9YXdhaXQgZmV0Y2goYCR7RSgpfS93b3Jrc3BhY2UvbGlzdGApO2lmKHUub2spe2NvbnN0IG09YXdhaXQgdS5qc29uKCksdz1tLmRpcmVjdG9yaWVzfHxtLndvcmtzcGFjZXN8fFtdfX1jYXRjaHt9fWFzeW5jIGZ1bmN0aW9uIFAoKXtjb25zdCB1PW4oKS50cmltKCk7aWYoIXV8fGkoKSlyZXR1cm47Y29uc3QgbT17aWQ6YHUtJHtEYXRlLm5vdygpfWAscm9sZToidXNlciIsY29udGVudDp1LHRpbWVzdGFtcDpEYXRlLm5vdygpfTt0KHc9PlsuLi53LG1dKSxzKCIiKSxsKCEwKTt0cnl7Y29uc3Qgdz17bWVzc2FnZTp1fTtyKCkmJih3LnNlc3Npb25JZD1yKCkpO2NvbnN0IHg9YXdhaXQgZmV0Y2goYCR7RSgpfS9pbnN0YW5jZS9wcm9tcHRgLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh3KX0pO2lmKCF4Lm9rKXtjb25zdCBsZT1hd2FpdCB4LnRleHQoKTt0KHJlPT5bLi4ucmUse2lkOmBlLSR7RGF0ZS5ub3coKX1gLHJvbGU6ImFzc2lzdGFudCIsY29udGVudDpg7Jik66WYOiAke3guc3RhdHVzfSAke2xlfWAsdGltZXN0YW1wOkRhdGUubm93KCl9XSl9fWNhdGNoKHcpe3QoeD0+Wy4uLngse2lkOmBlLSR7RGF0ZS5ub3coKX1gLHJvbGU6ImFzc2lzdGFudCIsY29udGVudDpg64Sk7Yq47JuM7YGsIOyYpOulmDogJHt3Lm1lc3NhZ2V9YCx0aW1lc3RhbXA6RGF0ZS5ub3coKX1dKX1maW5hbGx5e2woITEpLGIoKX19ZnVuY3Rpb24gYigpe3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+Qz8uc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgifSkpfWZ1bmN0aW9uIHYodSl7dS5rZXk9PT0iRW50ZXIiJiYhdS5zaGlmdEtleSYmKHUucHJldmVudERlZmF1bHQoKSxQKCkpfXJldHVybigoKT0+e3ZhciB1PVplKCksbT11LmZpcnN0Q2hpbGQsdz1tLmZpcnN0Q2hpbGQseD13LmZpcnN0Q2hpbGQsbGU9dy5uZXh0U2libGluZyxyZT1sZS5maXJzdENoaWxkLFI9cmUuZmlyc3RDaGlsZCx1ZT1SLm5leHRTaWJsaW5nO1ModSxCKGNlLHtnZXQgd2hlbigpe3JldHVybiBjKCl9LGdldCBjaGlsZHJlbigpe3ZhciBnPVdlKCksXz1nLmZpcnN0Q2hpbGQsaz1fLmZpcnN0Q2hpbGQsVj1fLm5leHRTaWJsaW5nO3JldHVybiBrLiQkY2xpY2s9KCk9Pnt0KFtdKSxhKG51bGwpfSxTKFYsQihtZSx7Z2V0IGVhY2goKXtyZXR1cm4gbygpfSxjaGlsZHJlbjpMPT4oKCk9Pnt2YXIgRD16ZSgpLFE9RC5maXJzdENoaWxkO3JldHVybiBELiQkY2xpY2s9KCk9PnthKEwuaWQpLG5hdmlnYXRlKGAvcy8ke0wuaWR9YCl9LFMoUSwoKT0+TC50aXRsZXx8IuyDiCDrjIDtmZQiKSxEfSkoKX0pKSxnfX0pLG0pLFModyxCKGNlLHtnZXQgd2hlbigpe3JldHVybiBlKCkubGVuZ3RoPT09MH0sZ2V0IGNoaWxkcmVuKCl7dmFyIGc9WGUoKSxfPWcuZmlyc3RDaGlsZCxrPV8ubmV4dFNpYmxpbmcsVj1rLm5leHRTaWJsaW5nLEw9Vi5uZXh0U2libGluZyxEPUwuZmlyc3RDaGlsZCxRPUQubmV4dFNpYmxpbmcsVGU9US5uZXh0U2libGluZztyZXR1cm4gRC4kJGNsaWNrPSgpPT5zKCLtmITsnqwg7ZSE66Gc7KCd7Yq4IOq1rOyhsOulvCDshKTrqoXtlbTspJgiKSxRLiQkY2xpY2s9KCk9PnMoIlJFQURNRS5tZOulvCDsnpHshLHtlbTspJgiKSxUZS4kJGNsaWNrPSgpPT5zKCLrsoTqt7jrpbwg7LC+7JWE7IScIOyImOygle2VtOykmCIpLGd9fSkseCksUyh3LEIobWUse2dldCBlYWNoKCl7cmV0dXJuIGUoKX0sY2hpbGRyZW46Zz0+KCgpPT57dmFyIF89ZXQoKSxrPV8uZmlyc3RDaGlsZCxWPWsubmV4dFNpYmxpbmcsTD1WLmZpcnN0Q2hpbGQsRD1MLm5leHRTaWJsaW5nO3JldHVybiBTKGssKCk9Pmcucm9sZT09PSJ1c2VyIj8i8J+RpCI6IuKsoSIpLFMoTCwoKT0+Zy5jb250ZW50KSxTKEQsKCk9Pm5ldyBEYXRlKGcudGltZXN0YW1wKS50b0xvY2FsZVRpbWVTdHJpbmcoImtvLUtSIikpLEsoKCk9PkplKF8sYG1lc3NhZ2UgbWVzc2FnZS0ke2cucm9sZX1gKSksX30pKCl9KSx4KSxTKHcsQihjZSx7Z2V0IHdoZW4oKXtyZXR1cm4gaSgpfSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4gWWUoKX19KSx4KTt2YXIgZGU9Qzt0eXBlb2YgZGU9PSJmdW5jdGlvbiI/d2UoZGUseCk6Qz14LFIuJCRrZXlkb3duPXYsUi4kJGlucHV0PWc9PnMoZy5jdXJyZW50VGFyZ2V0LnZhbHVlKTt2YXIgaGU9JDtyZXR1cm4gdHlwZW9mIGhlPT0iZnVuY3Rpb24iP3dlKGhlLFIpOiQ9Uix1ZS4kJGNsaWNrPVAsSyhnPT57dmFyIF89IWYoKSxrPSFuKCkudHJpbSgpfHxpKCl8fCFmKCk7cmV0dXJuIF8hPT1nLmUmJihSLmRpc2FibGVkPWcuZT1fKSxrIT09Zy50JiYodWUuZGlzYWJsZWQ9Zy50PWspLGd9LHtlOnZvaWQgMCx0OnZvaWQgMH0pLEsoKCk9PlIudmFsdWU9bigpKSx1fSkoKX1BZShbImNsaWNrIiwiaW5wdXQiLCJrZXlkb3duIl0pO3ZhciBudD1NKCI8ZGl2IGNsYXNzPWFwcD48bmF2IGNsYXNzPXRvcGJhcj48ZGl2IGNsYXNzPXRvcGJhci1sZWZ0PjxzcGFuIGNsYXNzPWxvZ28+4qyhIFNBRUVPTDwvc3Bhbj48L2Rpdj48ZGl2IGNsYXNzPXRvcGJhci1yaWdodD48c3BhbiBjbGFzcz1zdGF0dXMgaWQ9Y29ubmVjdGlvbi1zdGF0dXM+7Jew6rKwIOykkS4uLjwvc3Bhbj48L2Rpdj48L25hdj48bWFpbiBjbGFzcz1tYWluPiIpLHN0PU0oIjxkaXYgY2xhc3M9ZXJyb3Itc2NyZWVuPjxoMj7smKTrpZgg67Cc7IOdPC9oMj48cHJlPjwvcHJlPjxidXR0b24+7IOI66Gc6rOg7LmoIik7ZnVuY3Rpb24gaXQoKXtyZXR1cm4gQihGZSx7ZmFsbGJhY2s6ZT0+KCgpPT57dmFyIHQ9c3QoKSxuPXQuZmlyc3RDaGlsZCxzPW4ubmV4dFNpYmxpbmcsaT1zLm5leHRTaWJsaW5nO3JldHVybiBTKHMsKCk9PlN0cmluZyhlKSksaS4kJGNsaWNrPSgpPT5sb2NhdGlvbi5yZWxvYWQoKSx0fSkoKSxnZXQgY2hpbGRyZW4oKXt2YXIgZT1udCgpLHQ9ZS5maXJzdENoaWxkLG49dC5uZXh0U2libGluZztyZXR1cm4gUyhuLEIodHQse30pKSxlfX0pfUFlKFsiY2xpY2siXSk7Y29uc3QgQ2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKTtpZighQ2UpdGhyb3cgbmV3IEVycm9yKCJSb290IGVsZW1lbnQgbm90IGZvdW5kIik7R2UoKCk9PkIoaXQse30pLENlKTsK",
|
|
9
|
-
"assets/index-BAFkjvN0.css": "OnJvb3R7LS1iZzogIzBhMGEwYTstLWJnLXNlY29uZGFyeTogIzE0MTQxNDstLWJnLXRlcnRpYXJ5OiAjMWUxZTFlOy0tdGV4dDogI2UwZTBlMDstLXRleHQtZGltOiAjODg4Oy0tYWNjZW50OiAjZjk3MzE2Oy0tYWNjZW50LWhvdmVyOiAjZmI5MjNjOy0tYm9yZGVyOiAjMmEyYTJhOy0tdXNlci1iZzogIzFhMWEyZTstLWFzc2lzdGFudC1iZzogIzE0MTQxNDstLXJhZGl1czogOHB4fS5hcHB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwdmg7b3ZlcmZsb3c6aGlkZGVufS50b3BiYXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjAgMTZweDtoZWlnaHQ6NDRweDttaW4taGVpZ2h0OjQ0cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zZWNvbmRhcnkpO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHZhcigtLWJvcmRlcil9LnRvcGJhci1sZWZ0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEycHh9LmxvZ297Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOnZhcigtLWFjY2VudCk7Y3Vyc29yOnBvaW50ZXJ9LnRvcGJhci1yaWdodHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHh9LnN0YXR1c3tmb250LXNpemU6Ljc1cmVtO2NvbG9yOnZhcigtLXRleHQtZGltKX0ubWFpbntmbGV4OjE7b3ZlcmZsb3c6aGlkZGVufS5jaGF0LWxheW91dHtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCV9LnNpZGViYXJ7d2lkdGg6MjQwcHg7bWluLXdpZHRoOjI0MHB4O2JhY2tncm91bmQ6dmFyKC0tYmctc2Vjb25kYXJ5KTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkIHZhcigtLWJvcmRlcik7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uc2lkZWJhci1oZWFkZXJ7cGFkZGluZzoxMnB4fS5uZXctY2hhdC1idG57d2lkdGg6MTAwJTtwYWRkaW5nOjhweCAxMnB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjojZmZmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6Ljg1cmVtO2ZvbnQtd2VpZ2h0OjYwMH0ubmV3LWNoYXQtYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tYWNjZW50LWhvdmVyKX0uc2lkZWJhci1zZXNzaW9uc3tmbGV4OjE7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6NHB4IDhweH0uc2Vzc2lvbi1pdGVte3BhZGRpbmc6OHB4IDEycHg7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWJvdHRvbToycHg7Zm9udC1zaXplOi44NXJlbTtjb2xvcjp2YXIoLS10ZXh0LWRpbSk7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5zZXNzaW9uLWl0ZW06aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1iZy10ZXJ0aWFyeSk7Y29sb3I6dmFyKC0tdGV4dCl9LnNlc3Npb24tdGl0bGV7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uY2hhdC1tYWlue2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDowfS5tZXNzYWdlc3tmbGV4OjE7b3ZlcmZsb3cteTphdXRvO3BhZGRpbmc6MjBweCAyNHB4fS5lbXB0eS1zdGF0ZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2dhcDo4cHh9LmVtcHR5LWxvZ297Zm9udC1zaXplOjNyZW07Y29sb3I6dmFyKC0tYWNjZW50KX0uZW1wdHktc3RhdGUgaDJ7Zm9udC1zaXplOjEuNXJlbTtjb2xvcjp2YXIoLS10ZXh0KTttYXJnaW46MH0uZW1wdHktc3RhdGUgcHtjb2xvcjp2YXIoLS10ZXh0LWRpbSk7bWFyZ2luOjAgMCAyMHB4fS5lbXB0eS1oaW50c3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9LmhpbnR7cGFkZGluZzoxMnB4IDE2cHg7YmFja2dyb3VuZDp2YXIoLS1iZy10ZXJ0aWFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6Ljg1cmVtO2NvbG9yOnZhcigtLXRleHQtZGltKTt0ZXh0LWFsaWduOmxlZnR9LmhpbnQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tdGV4dCl9Lm1lc3NhZ2V7ZGlzcGxheTpmbGV4O2dhcDoxMnB4O21hcmdpbi1ib3R0b206MjBweDttYXgtd2lkdGg6ODAwcHh9Lm1lc3NhZ2UtdXNlciwubWVzc2FnZS1hc3Npc3RhbnR7ZmxleC1kaXJlY3Rpb246cm93fS5tZXNzYWdlLWF2YXRhcnt3aWR0aDozMnB4O2hlaWdodDozMnB4O21pbi13aWR0aDozMnB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmb250LXNpemU6MXJlbTtiYWNrZ3JvdW5kOnZhcigtLWJnLXRlcnRpYXJ5KX0ubWVzc2FnZS1jb250ZW50e2ZsZXg6MTttaW4td2lkdGg6MH0ubWVzc2FnZS11c2VyIC5tZXNzYWdlLWNvbnRlbnR7YmFja2dyb3VuZDp2YXIoLS11c2VyLWJnKTtwYWRkaW5nOjEwcHggMTRweDtib3JkZXItcmFkaXVzOjEycHggMTJweCAxMnB4IDRweH0ubWVzc2FnZS1hc3Npc3RhbnQgLm1lc3NhZ2UtY29udGVudHtiYWNrZ3JvdW5kOnZhcigtLWFzc2lzdGFudC1iZyk7cGFkZGluZzoxMHB4IDE0cHg7Ym9yZGVyLXJhZGl1czoxMnB4IDEycHggNHB4fS5tZXNzYWdlLXRleHR7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay13b3JkO2xpbmUtaGVpZ2h0OjEuNjtmb250LXNpemU6LjlyZW19Lm1lc3NhZ2UtdGltZXtmb250LXNpemU6LjdyZW07Y29sb3I6dmFyKC0tdGV4dC1kaW0pO21hcmdpbi10b3A6NHB4O3RleHQtYWxpZ246cmlnaHR9LnR5cGluZy1pbmRpY2F0b3J7ZGlzcGxheTpmbGV4O2dhcDo0cHg7cGFkZGluZzo0cHggMH0udHlwaW5nLWluZGljYXRvciBzcGFue3dpZHRoOjhweDtoZWlnaHQ6OHB4O2JhY2tncm91bmQ6dmFyKC0tdGV4dC1kaW0pO2JvcmRlci1yYWRpdXM6NTAlO2FuaW1hdGlvbjp0eXBpbmcgMS40cyBpbmZpbml0ZX0udHlwaW5nLWluZGljYXRvciBzcGFuOm50aC1jaGlsZCgyKXthbmltYXRpb24tZGVsYXk6LjJzfS50eXBpbmctaW5kaWNhdG9yIHNwYW46bnRoLWNoaWxkKDMpe2FuaW1hdGlvbi1kZWxheTouNHN9QGtleWZyYW1lcyB0eXBpbmd7MCUsODAlLHRve29wYWNpdHk6LjM7dHJhbnNmb3JtOnNjYWxlKC44KX00MCV7b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19LmlucHV0LWFyZWF7cGFkZGluZzoxMnB4IDI0cHggMTZweDtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1lbmQ7Z2FwOjhweDtiYWNrZ3JvdW5kOnZhcigtLWJnLXNlY29uZGFyeSk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO2JvcmRlci1yYWRpdXM6MTJweDtwYWRkaW5nOjhweCAxMnB4fS5pbnB1dC13cmFwcGVyIHRleHRhcmVhe2ZsZXg6MTtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Y29sb3I6dmFyKC0tdGV4dCk7Zm9udC1zaXplOi45cmVtO3Jlc2l6ZTpub25lO291dGxpbmU6bm9uZTttaW4taGVpZ2h0OjI0cHg7bWF4LWhlaWdodDoxMjBweDtsaW5lLWhlaWdodDoxLjU7Zm9udC1mYW1pbHk6aW5oZXJpdH0uaW5wdXQtd3JhcHBlciB0ZXh0YXJlYTo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tdGV4dC1kaW0pfS5pbnB1dC13cmFwcGVyIHRleHRhcmVhOmRpc2FibGVke29wYWNpdHk6LjV9LnNlbmQtYnRue3BhZGRpbmc6NnB4IDE2cHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmU7Ym9yZGVyLXJhZGl1czo2cHg7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi44NXJlbTtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5zZW5kLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKXtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudC1ob3Zlcil9LnNlbmQtYnRuOmRpc2FibGVke29wYWNpdHk6LjQ7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lcnJvci1zY3JlZW57ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6MTAwJTtnYXA6MTZweDtwYWRkaW5nOjIwcHh9LmVycm9yLXNjcmVlbiBwcmV7YmFja2dyb3VuZDp2YXIoLS1iZy10ZXJ0aWFyeSk7cGFkZGluZzoxNnB4O2JvcmRlci1yYWRpdXM6dmFyKC0tcmFkaXVzKTttYXgtd2lkdGg6NjAwcHg7b3ZlcmZsb3c6YXV0bztjb2xvcjojZjg3MTcxO2ZvbnQtc2l6ZTouODVyZW19LmVycm9yLXNjcmVlbiBidXR0b257cGFkZGluZzo4cHggMjRweDtiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6I2ZmZjtib3JkZXI6bm9uZTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOi45cmVtfQo=",
|
|
10
|
-
"index.html": "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImtvIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CiAgICA8dGl0bGU+U0FFRU9MPC90aXRsZT4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uvc3ZnK3htbCIgaHJlZj0iL2Zhdmljb24uc3ZnIiAvPgogICAgPHN0eWxlPgogICAgICAqIHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3gtc2l6aW5nOiBib3JkZXItYm94OyB9CiAgICAgIGh0bWwsIGJvZHksICNyb290IHsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgb3ZlcmZsb3c6IGhpZGRlbjsgfQogICAgICBib2R5IHsgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCBzYW5zLXNlcmlmOyBiYWNrZ3JvdW5kOiAjMGEwYTBhOyBjb2xvcjogI2UwZTBlMDsgfQogICAgICAjbG9hZGluZyB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBoZWlnaHQ6IDEwMCU7IH0KICAgICAgI2xvYWRpbmcgc3BhbiB7IGNvbG9yOiAjZjk3MzE2OyBmb250LXNpemU6IDEuMnJlbTsgfQogICAgPC9zdHlsZT4KICAgIDxzY3JpcHQgdHlwZT0ibW9kdWxlIiBjcm9zc29yaWdpbiBzcmM9Ii9hc3NldHMvaW5kZXgtLW5JQjBHRzEuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBjcm9zc29yaWdpbiBocmVmPSIvYXNzZXRzL2luZGV4LUJBRmtqdk4wLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBpZD0icm9vdCI+CiAgICAgIDxkaXYgaWQ9ImxvYWRpbmciPjxzcGFuPlNBRUVPTCDroZzrk5wg7KSRLi4uPC9zcGFuPjwvZGl2PgogICAgPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg=="
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const _dir = join(tmpdir(), "saeeol-web-ui")
|
|
14
|
-
const _cache: Record<string, string> = {}
|
|
15
|
-
|
|
16
|
-
const files: Record<string, string> = {}
|
|
17
|
-
for (const key of Object.keys(encoded)) {
|
|
18
|
-
Object.defineProperty(files, key, {
|
|
19
|
-
get() {
|
|
20
|
-
if (_cache[key]) return _cache[key]
|
|
21
|
-
const p = join(_dir, key)
|
|
22
|
-
const d = dirname(p)
|
|
23
|
-
if (!existsSync(d)) mkdirSync(d, { recursive: true })
|
|
24
|
-
writeFileSync(p, Buffer.from(encoded[key], "base64"))
|
|
25
|
-
_cache[key] = p
|
|
26
|
-
return p
|
|
27
|
-
},
|
|
28
|
-
enumerable: true,
|
|
29
|
-
configurable: true,
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export default files
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { Hono } from "hono"
|
|
2
|
-
import { createBunWebSocket } from "hono/bun"
|
|
3
|
-
import type { Adapter, FetchApp, Opts } from "./adapter"
|
|
4
|
-
|
|
5
|
-
function listen(app: FetchApp, opts: Opts, websocket?: ReturnType<typeof createBunWebSocket>["websocket"]) {
|
|
6
|
-
const start = (port: number) => {
|
|
7
|
-
try {
|
|
8
|
-
if (websocket) {
|
|
9
|
-
return Bun.serve({ fetch: app.fetch, hostname: opts.hostname, idleTimeout: 0, websocket, port })
|
|
10
|
-
}
|
|
11
|
-
return Bun.serve({ fetch: app.fetch, hostname: opts.hostname, idleTimeout: 0, port })
|
|
12
|
-
} catch {
|
|
13
|
-
return
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
const server = opts.port === 0 ? (start(4096) ?? start(0)) : start(opts.port)
|
|
17
|
-
if (!server) {
|
|
18
|
-
throw new Error(`Failed to start server on port ${opts.port}`)
|
|
19
|
-
}
|
|
20
|
-
if (!server.port) {
|
|
21
|
-
throw new Error(`Failed to resolve server address for port ${opts.port}`)
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
port: server.port,
|
|
25
|
-
stop(close?: boolean) {
|
|
26
|
-
return Promise.resolve(server.stop(close))
|
|
27
|
-
},
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const adapter: Adapter = {
|
|
32
|
-
create(app: Hono) {
|
|
33
|
-
const ws = createBunWebSocket()
|
|
34
|
-
return {
|
|
35
|
-
upgradeWebSocket: ws.upgradeWebSocket,
|
|
36
|
-
listen: (opts) => Promise.resolve(listen(app, opts, ws.websocket)),
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
createFetch(app) {
|
|
40
|
-
return {
|
|
41
|
-
listen: (opts) => Promise.resolve(listen(app, opts)),
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { createAdaptorServer, type ServerType } from "@hono/node-server"
|
|
2
|
-
import { createNodeWebSocket } from "@hono/node-ws"
|
|
3
|
-
import type { Hono } from "hono"
|
|
4
|
-
import type { Adapter, FetchApp, Opts } from "./adapter"
|
|
5
|
-
|
|
6
|
-
async function listen(app: FetchApp, opts: Opts, inject?: (server: ServerType) => void) {
|
|
7
|
-
const start = (port: number) =>
|
|
8
|
-
new Promise<ServerType>((resolve, reject) => {
|
|
9
|
-
const server = createAdaptorServer({ fetch: app.fetch })
|
|
10
|
-
inject?.(server)
|
|
11
|
-
const fail = (err: Error) => {
|
|
12
|
-
cleanup()
|
|
13
|
-
reject(err)
|
|
14
|
-
}
|
|
15
|
-
const ready = () => {
|
|
16
|
-
cleanup()
|
|
17
|
-
resolve(server)
|
|
18
|
-
}
|
|
19
|
-
const cleanup = () => {
|
|
20
|
-
server.off("error", fail)
|
|
21
|
-
server.off("listening", ready)
|
|
22
|
-
}
|
|
23
|
-
server.once("error", fail)
|
|
24
|
-
server.once("listening", ready)
|
|
25
|
-
server.listen(port, opts.hostname)
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
const server = opts.port === 0 ? await start(4096).catch(() => start(0)) : await start(opts.port)
|
|
29
|
-
const addr = server.address()
|
|
30
|
-
if (!addr || typeof addr === "string") {
|
|
31
|
-
throw new Error(`Failed to resolve server address for port ${opts.port}`)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
let closing: Promise<void> | undefined
|
|
35
|
-
return {
|
|
36
|
-
port: addr.port,
|
|
37
|
-
stop(close?: boolean) {
|
|
38
|
-
closing ??= new Promise<void>((resolve, reject) => {
|
|
39
|
-
server.close((err) => {
|
|
40
|
-
if (err) {
|
|
41
|
-
reject(err)
|
|
42
|
-
return
|
|
43
|
-
}
|
|
44
|
-
resolve()
|
|
45
|
-
})
|
|
46
|
-
if (close) {
|
|
47
|
-
if ("closeAllConnections" in server && typeof server.closeAllConnections === "function") {
|
|
48
|
-
server.closeAllConnections()
|
|
49
|
-
}
|
|
50
|
-
if ("closeIdleConnections" in server && typeof server.closeIdleConnections === "function") {
|
|
51
|
-
server.closeIdleConnections()
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
return closing
|
|
56
|
-
},
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export const adapter: Adapter = {
|
|
61
|
-
create(app: Hono) {
|
|
62
|
-
const ws = createNodeWebSocket({ app })
|
|
63
|
-
return {
|
|
64
|
-
upgradeWebSocket: ws.upgradeWebSocket,
|
|
65
|
-
listen: (opts) => listen(app, opts, ws.injectWebSocket),
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
createFetch(app) {
|
|
69
|
-
return {
|
|
70
|
-
listen: (opts) => listen(app, opts),
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
}
|
package/src/server/adapter.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { Hono } from "hono"
|
|
2
|
-
import type { UpgradeWebSocket } from "hono/ws"
|
|
3
|
-
|
|
4
|
-
export type FetchApp = {
|
|
5
|
-
fetch(request: Request): Response | Promise<Response>
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export type Opts = {
|
|
9
|
-
port: number
|
|
10
|
-
hostname: string
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export type Listener = {
|
|
14
|
-
port: number
|
|
15
|
-
stop: (close?: boolean) => Promise<void>
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface Runtime {
|
|
19
|
-
upgradeWebSocket: UpgradeWebSocket
|
|
20
|
-
listen(opts: Opts): Promise<Listener>
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface Adapter {
|
|
24
|
-
create(app: Hono): Runtime
|
|
25
|
-
createFetch(app: FetchApp): Omit<Runtime, "upgradeWebSocket">
|
|
26
|
-
}
|
package/src/server/backend.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { Flag } from "@saeeol/core/flag/flag"
|
|
2
|
-
import { InstallationChannel, InstallationVersion } from "@saeeol/core/installation/version"
|
|
3
|
-
|
|
4
|
-
export type Backend = "effect-httpapi" | "hono"
|
|
5
|
-
|
|
6
|
-
export type Selection = {
|
|
7
|
-
backend: Backend
|
|
8
|
-
reason: "env" | "stable" | "explicit"
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export type Attributes = ReturnType<typeof attributes>
|
|
12
|
-
|
|
13
|
-
export function select(): Selection {
|
|
14
|
-
if (Flag.SAEEOL_EXPERIMENTAL_HTTPAPI) return { backend: "effect-httpapi", reason: "env" }
|
|
15
|
-
return { backend: "hono", reason: "stable" }
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function attributes(selection: Selection): Record<string, string> {
|
|
19
|
-
return {
|
|
20
|
-
"saeeol.server.backend": selection.backend,
|
|
21
|
-
"saeeol.server.backend.reason": selection.reason,
|
|
22
|
-
"saeeol.installation.channel": InstallationChannel,
|
|
23
|
-
"saeeol.installation.version": InstallationVersion,
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function force(selection: Selection, backend: Backend): Selection {
|
|
28
|
-
return {
|
|
29
|
-
backend,
|
|
30
|
-
reason: selection.backend === backend ? selection.reason : "explicit",
|
|
31
|
-
}
|
|
32
|
-
}
|
package/src/server/cors.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import * as SaeeolServer from "@/saeeol/server/server"
|
|
2
|
-
|
|
3
|
-
const saeeolOrigin = /^https:\/\/([a-z0-9-]+\.)*saeeol\.ai$/
|
|
4
|
-
|
|
5
|
-
export type CorsOptions = { readonly cors?: ReadonlyArray<string> }
|
|
6
|
-
|
|
7
|
-
export function isAllowedCorsOrigin(input: string | undefined, opts?: CorsOptions) {
|
|
8
|
-
if (!input) return true
|
|
9
|
-
if (input.startsWith("http://localhost:")) return true
|
|
10
|
-
if (input.startsWith("http://127.0.0.1:")) return true
|
|
11
|
-
if (input.startsWith("oc://renderer")) return true
|
|
12
|
-
if (input === "tauri://localhost" || input === "http://tauri.localhost" || input === "https://tauri.localhost")
|
|
13
|
-
return true
|
|
14
|
-
if (saeeolOrigin.test(input)) return true
|
|
15
|
-
if (SaeeolServer.corsOrigin(input)) return true
|
|
16
|
-
return opts?.cors?.includes(input) ?? false
|
|
17
|
-
}
|
package/src/server/error.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { resolver } from "hono-openapi"
|
|
2
|
-
import z from "zod"
|
|
3
|
-
import { NotFoundError } from "@/storage/storage"
|
|
4
|
-
|
|
5
|
-
export const ERRORS = {
|
|
6
|
-
400: {
|
|
7
|
-
description: "Bad request",
|
|
8
|
-
content: {
|
|
9
|
-
"application/json": {
|
|
10
|
-
schema: resolver(
|
|
11
|
-
z
|
|
12
|
-
.object({
|
|
13
|
-
data: z.any(),
|
|
14
|
-
errors: z.array(z.record(z.string(), z.any())),
|
|
15
|
-
success: z.literal(false),
|
|
16
|
-
})
|
|
17
|
-
.meta({
|
|
18
|
-
ref: "BadRequestError",
|
|
19
|
-
}),
|
|
20
|
-
),
|
|
21
|
-
},
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
404: {
|
|
25
|
-
description: "Not found",
|
|
26
|
-
content: {
|
|
27
|
-
"application/json": {
|
|
28
|
-
schema: resolver(NotFoundError.Schema),
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
} as const
|
|
33
|
-
|
|
34
|
-
export function errors(...codes: number[]) {
|
|
35
|
-
return Object.fromEntries(codes.map((code) => [code, ERRORS[code as keyof typeof ERRORS]]))
|
|
36
|
-
}
|
package/src/server/event.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { BusEvent } from "@/bus/bus-event"
|
|
2
|
-
import { Schema } from "effect"
|
|
3
|
-
|
|
4
|
-
export const Event = {
|
|
5
|
-
Connected: BusEvent.define("server.connected", Schema.Struct({})),
|
|
6
|
-
Disposed: BusEvent.define("global.disposed", Schema.Struct({})),
|
|
7
|
-
ConfigUpdated: BusEvent.define("global.config.updated", Schema.Struct({})),
|
|
8
|
-
}
|