saeeol 1.2.5 → 1.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +15 -12
- package/src/ltm/config.ts +15 -15
- package/src/ltm/events.ts +1 -1
- package/src/ltm/index.ts +1 -1
- package/src/ltm/pipeline.ts +22 -22
- package/src/ltm/scheduler.ts +20 -20
- package/src/ltm/store.ts +9 -7
- package/src/ltm/types.ts +16 -16
- package/src/provider/local/embedder.ts +21 -21
- package/src/provider/models-snapshot.d.ts +2 -0
- package/src/provider/models-snapshot.js +3 -0
- package/src/session/message/message-errors.ts +1 -1
- package/src/session/message/message-parts.ts +1 -1
- package/src/session/message/message-transform.ts +1 -1
- package/src/session/message/message-types.ts +1 -1
- package/src/tool/core/tool.ts +1 -1
- package/AGENTS.md +0 -72
- package/BUN_SHELL_MIGRATION_PLAN.md +0 -136
- package/Dockerfile +0 -18
- package/assets/saeeol.ico +0 -0
- package/bin/saeeol +0 -187
- 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/npm/postinstall.js +0 -162
- 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/tool/apply_patch.txt +0 -33
- package/src/tool/bash.txt +0 -119
- package/src/tool/edit.txt +0 -10
- package/src/tool/glob.txt +0 -6
- package/src/tool/grep.txt +0 -8
- package/src/tool/lsp.txt +0 -24
- package/src/tool/plan-enter.txt +0 -14
- package/src/tool/plan-exit.txt +0 -13
- package/src/tool/question.txt +0 -11
- package/src/tool/read.txt +0 -14
- package/src/tool/recall.txt +0 -12
- package/src/tool/skill.txt +0 -5
- package/src/tool/task.txt +0 -57
- package/src/tool/todowrite.txt +0 -167
- package/src/tool/warpgrep.txt +0 -10
- package/src/tool/webfetch.txt +0 -13
- package/src/tool/websearch.txt +0 -14
- package/src/tool/write.txt +0 -8
- 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/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 -231
- 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 -679
- 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/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/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
|
@@ -1,570 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from "bun:test"
|
|
2
|
-
import fs from "fs/promises"
|
|
3
|
-
import path from "path"
|
|
4
|
-
import { parse as parseJsonc } from "jsonc-parser"
|
|
5
|
-
import { Filesystem } from "@/util/filesystem"
|
|
6
|
-
import { createPlugTask, type PlugCtx, type PlugDeps } from "../../src/cli/cmd/plug"
|
|
7
|
-
import { tmpdir } from "../fixture/fixture"
|
|
8
|
-
|
|
9
|
-
function deps(global: string, target: string | Error): PlugDeps {
|
|
10
|
-
return {
|
|
11
|
-
spinner: () => ({
|
|
12
|
-
start() {},
|
|
13
|
-
stop() {},
|
|
14
|
-
}),
|
|
15
|
-
log: {
|
|
16
|
-
error() {},
|
|
17
|
-
info() {},
|
|
18
|
-
success() {},
|
|
19
|
-
},
|
|
20
|
-
resolve: async () => {
|
|
21
|
-
if (target instanceof Error) throw target
|
|
22
|
-
return target
|
|
23
|
-
},
|
|
24
|
-
readText: (file) => Filesystem.readText(file),
|
|
25
|
-
write: async (file, text) => {
|
|
26
|
-
await Filesystem.write(file, text)
|
|
27
|
-
},
|
|
28
|
-
exists: (file) => Filesystem.exists(file),
|
|
29
|
-
files: (dir, name) => [path.join(dir, `${name}.jsonc`), path.join(dir, `${name}.json`)],
|
|
30
|
-
global,
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function ctx(dir: string): PlugCtx {
|
|
35
|
-
return {
|
|
36
|
-
vcs: "git",
|
|
37
|
-
worktree: dir,
|
|
38
|
-
directory: dir,
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function ctxDir(dir: string, worktree: string): PlugCtx {
|
|
43
|
-
return {
|
|
44
|
-
vcs: "none",
|
|
45
|
-
worktree,
|
|
46
|
-
directory: dir,
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function ctxRoot(dir: string): PlugCtx {
|
|
51
|
-
return {
|
|
52
|
-
vcs: "git",
|
|
53
|
-
worktree: "/",
|
|
54
|
-
directory: dir,
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async function plugin(
|
|
59
|
-
dir: string,
|
|
60
|
-
kinds?: Array<"server" | "tui">,
|
|
61
|
-
opts?: {
|
|
62
|
-
server?: Record<string, unknown>
|
|
63
|
-
tui?: Record<string, unknown>
|
|
64
|
-
},
|
|
65
|
-
themes?: string[],
|
|
66
|
-
) {
|
|
67
|
-
const p = path.join(dir, "plugin")
|
|
68
|
-
const server = kinds?.includes("server") ?? false
|
|
69
|
-
const tui = kinds?.includes("tui") ?? false
|
|
70
|
-
const exports: Record<string, unknown> = {}
|
|
71
|
-
if (server) {
|
|
72
|
-
exports["./server"] = opts?.server
|
|
73
|
-
? {
|
|
74
|
-
import: "./server.js",
|
|
75
|
-
config: opts.server,
|
|
76
|
-
}
|
|
77
|
-
: "./server.js"
|
|
78
|
-
}
|
|
79
|
-
if (tui) {
|
|
80
|
-
exports["./tui"] = opts?.tui
|
|
81
|
-
? {
|
|
82
|
-
import: "./tui.js",
|
|
83
|
-
config: opts.tui,
|
|
84
|
-
}
|
|
85
|
-
: "./tui.js"
|
|
86
|
-
}
|
|
87
|
-
await fs.mkdir(p, { recursive: true })
|
|
88
|
-
await Bun.write(
|
|
89
|
-
path.join(p, "package.json"),
|
|
90
|
-
JSON.stringify(
|
|
91
|
-
{
|
|
92
|
-
name: "acme",
|
|
93
|
-
version: "1.0.0",
|
|
94
|
-
...(server ? { main: "./server.js" } : {}),
|
|
95
|
-
...(Object.keys(exports).length ? { exports } : {}),
|
|
96
|
-
...(themes?.length ? { "oc-themes": themes } : {}),
|
|
97
|
-
},
|
|
98
|
-
null,
|
|
99
|
-
2,
|
|
100
|
-
),
|
|
101
|
-
)
|
|
102
|
-
return p
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
async function read(file: string) {
|
|
106
|
-
return Filesystem.readJson<{
|
|
107
|
-
plugin?: unknown[]
|
|
108
|
-
}>(file)
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
describe("plugin.install.task", () => {
|
|
112
|
-
test("writes both server and tui config entries", async () => {
|
|
113
|
-
await using tmp = await tmpdir()
|
|
114
|
-
const target = await plugin(tmp.path, ["server", "tui"])
|
|
115
|
-
const run = createPlugTask(
|
|
116
|
-
{
|
|
117
|
-
mod: "acme@1.2.3",
|
|
118
|
-
},
|
|
119
|
-
deps(path.join(tmp.path, "global"), target),
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
const ok = await run(ctx(tmp.path))
|
|
123
|
-
expect(ok).toBe(true)
|
|
124
|
-
|
|
125
|
-
const server = await read(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))
|
|
126
|
-
const tui = await read(path.join(tmp.path, ".saeeol", "tui.jsonc"))
|
|
127
|
-
expect(server.plugin).toEqual(["acme@1.2.3"])
|
|
128
|
-
expect(tui.plugin).toEqual(["acme@1.2.3"])
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
test("writes default options from exports config metadata", async () => {
|
|
132
|
-
await using tmp = await tmpdir()
|
|
133
|
-
const target = await plugin(tmp.path, ["server", "tui"], {
|
|
134
|
-
server: { custom: true, other: false },
|
|
135
|
-
tui: { compact: true },
|
|
136
|
-
})
|
|
137
|
-
const run = createPlugTask(
|
|
138
|
-
{
|
|
139
|
-
mod: "acme@1.2.3",
|
|
140
|
-
},
|
|
141
|
-
deps(path.join(tmp.path, "global"), target),
|
|
142
|
-
)
|
|
143
|
-
|
|
144
|
-
const ok = await run(ctx(tmp.path))
|
|
145
|
-
expect(ok).toBe(true)
|
|
146
|
-
|
|
147
|
-
const server = await read(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))
|
|
148
|
-
const tui = await read(path.join(tmp.path, ".saeeol", "tui.jsonc"))
|
|
149
|
-
expect(server.plugin).toEqual([["acme@1.2.3", { custom: true, other: false }]])
|
|
150
|
-
expect(tui.plugin).toEqual([["acme@1.2.3", { compact: true }]])
|
|
151
|
-
})
|
|
152
|
-
|
|
153
|
-
test("preserves JSONC comments when adding plugins to server and tui config", async () => {
|
|
154
|
-
await using tmp = await tmpdir()
|
|
155
|
-
const target = await plugin(tmp.path, ["server", "tui"])
|
|
156
|
-
const cfg = path.join(tmp.path, ".saeeol")
|
|
157
|
-
const server = path.join(cfg, "saeeol.jsonc")
|
|
158
|
-
const tui = path.join(cfg, "tui.jsonc")
|
|
159
|
-
await fs.mkdir(cfg, { recursive: true })
|
|
160
|
-
await Bun.write(
|
|
161
|
-
server,
|
|
162
|
-
`{
|
|
163
|
-
// server head
|
|
164
|
-
"plugin": [
|
|
165
|
-
// server keep
|
|
166
|
-
"seed@1.0.0"
|
|
167
|
-
],
|
|
168
|
-
// server tail
|
|
169
|
-
"model": "x"
|
|
170
|
-
}
|
|
171
|
-
`,
|
|
172
|
-
)
|
|
173
|
-
await Bun.write(
|
|
174
|
-
tui,
|
|
175
|
-
`{
|
|
176
|
-
// tui head
|
|
177
|
-
"plugin": [
|
|
178
|
-
// tui keep
|
|
179
|
-
"seed@1.0.0"
|
|
180
|
-
],
|
|
181
|
-
// tui tail
|
|
182
|
-
"theme": "saeeol"
|
|
183
|
-
}
|
|
184
|
-
`,
|
|
185
|
-
)
|
|
186
|
-
|
|
187
|
-
const run = createPlugTask(
|
|
188
|
-
{
|
|
189
|
-
mod: "acme@1.2.3",
|
|
190
|
-
},
|
|
191
|
-
deps(path.join(tmp.path, "global"), target),
|
|
192
|
-
)
|
|
193
|
-
|
|
194
|
-
const ok = await run(ctx(tmp.path))
|
|
195
|
-
expect(ok).toBe(true)
|
|
196
|
-
|
|
197
|
-
const serverText = await fs.readFile(server, "utf8")
|
|
198
|
-
const tuiText = await fs.readFile(tui, "utf8")
|
|
199
|
-
expect(serverText).toContain("// server head")
|
|
200
|
-
expect(serverText).toContain("// server keep")
|
|
201
|
-
expect(serverText).toContain("// server tail")
|
|
202
|
-
expect(tuiText).toContain("// tui head")
|
|
203
|
-
expect(tuiText).toContain("// tui keep")
|
|
204
|
-
expect(tuiText).toContain("// tui tail")
|
|
205
|
-
|
|
206
|
-
const serverJson = parseJsonc(serverText) as { plugin?: unknown[] }
|
|
207
|
-
const tuiJson = parseJsonc(tuiText) as { plugin?: unknown[] }
|
|
208
|
-
expect(serverJson.plugin).toEqual(["seed@1.0.0", "acme@1.2.3"])
|
|
209
|
-
expect(tuiJson.plugin).toEqual(["seed@1.0.0", "acme@1.2.3"])
|
|
210
|
-
})
|
|
211
|
-
|
|
212
|
-
test("preserves JSONC comments when force replacing plugin version", async () => {
|
|
213
|
-
await using tmp = await tmpdir()
|
|
214
|
-
const target = await plugin(tmp.path, ["server"])
|
|
215
|
-
const cfg = path.join(tmp.path, ".saeeol", "saeeol.jsonc")
|
|
216
|
-
await fs.mkdir(path.dirname(cfg), { recursive: true })
|
|
217
|
-
await Bun.write(
|
|
218
|
-
cfg,
|
|
219
|
-
`{
|
|
220
|
-
"plugin": [
|
|
221
|
-
// keep this note
|
|
222
|
-
"acme@1.0.0"
|
|
223
|
-
]
|
|
224
|
-
}
|
|
225
|
-
`,
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
const run = createPlugTask(
|
|
229
|
-
{
|
|
230
|
-
mod: "acme@2.0.0",
|
|
231
|
-
force: true,
|
|
232
|
-
},
|
|
233
|
-
deps(path.join(tmp.path, "global"), target),
|
|
234
|
-
)
|
|
235
|
-
|
|
236
|
-
const ok = await run(ctx(tmp.path))
|
|
237
|
-
expect(ok).toBe(true)
|
|
238
|
-
|
|
239
|
-
const text = await fs.readFile(cfg, "utf8")
|
|
240
|
-
expect(text).toContain("// keep this note")
|
|
241
|
-
|
|
242
|
-
const json = parseJsonc(text) as { plugin?: unknown[] }
|
|
243
|
-
expect(json.plugin).toEqual(["acme@2.0.0"])
|
|
244
|
-
})
|
|
245
|
-
|
|
246
|
-
test("supports resolver target pointing to a file", async () => {
|
|
247
|
-
await using tmp = await tmpdir()
|
|
248
|
-
const target = await plugin(tmp.path, ["server"])
|
|
249
|
-
const file = path.join(target, "index.js")
|
|
250
|
-
await Bun.write(file, "export {}")
|
|
251
|
-
const run = createPlugTask(
|
|
252
|
-
{
|
|
253
|
-
mod: "acme@1.2.3",
|
|
254
|
-
},
|
|
255
|
-
deps(path.join(tmp.path, "global"), file),
|
|
256
|
-
)
|
|
257
|
-
|
|
258
|
-
const ok = await run(ctx(tmp.path))
|
|
259
|
-
expect(ok).toBe(true)
|
|
260
|
-
const server = await read(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))
|
|
261
|
-
expect(server.plugin).toEqual(["acme@1.2.3"])
|
|
262
|
-
})
|
|
263
|
-
|
|
264
|
-
test("does not change configured package version without force", async () => {
|
|
265
|
-
await using tmp = await tmpdir()
|
|
266
|
-
const target = await plugin(tmp.path, ["server"])
|
|
267
|
-
const cfg = path.join(tmp.path, ".saeeol", "saeeol.json")
|
|
268
|
-
await fs.mkdir(path.dirname(cfg), { recursive: true })
|
|
269
|
-
await Bun.write(cfg, JSON.stringify({ plugin: ["acme@1.0.0"] }, null, 2))
|
|
270
|
-
|
|
271
|
-
const run = createPlugTask(
|
|
272
|
-
{
|
|
273
|
-
mod: "acme@2.0.0",
|
|
274
|
-
},
|
|
275
|
-
deps(path.join(tmp.path, "global"), target),
|
|
276
|
-
)
|
|
277
|
-
|
|
278
|
-
const ok = await run(ctx(tmp.path))
|
|
279
|
-
expect(ok).toBe(true)
|
|
280
|
-
const json = await read(cfg)
|
|
281
|
-
expect(json.plugin).toEqual(["acme@1.0.0"])
|
|
282
|
-
})
|
|
283
|
-
|
|
284
|
-
test("does not change scoped package version without force", async () => {
|
|
285
|
-
await using tmp = await tmpdir()
|
|
286
|
-
const target = await plugin(tmp.path, ["server"])
|
|
287
|
-
const cfg = path.join(tmp.path, ".saeeol", "saeeol.json")
|
|
288
|
-
await fs.mkdir(path.dirname(cfg), { recursive: true })
|
|
289
|
-
await Bun.write(cfg, JSON.stringify({ plugin: ["@scope/acme@1.0.0"] }, null, 2))
|
|
290
|
-
|
|
291
|
-
const run = createPlugTask(
|
|
292
|
-
{
|
|
293
|
-
mod: "@scope/acme@2.0.0",
|
|
294
|
-
},
|
|
295
|
-
deps(path.join(tmp.path, "global"), target),
|
|
296
|
-
)
|
|
297
|
-
|
|
298
|
-
const ok = await run(ctx(tmp.path))
|
|
299
|
-
expect(ok).toBe(true)
|
|
300
|
-
const json = await read(cfg)
|
|
301
|
-
expect(json.plugin).toEqual(["@scope/acme@1.0.0"])
|
|
302
|
-
})
|
|
303
|
-
|
|
304
|
-
test("keeps file plugin entries and still adds npm plugin", async () => {
|
|
305
|
-
await using tmp = await tmpdir()
|
|
306
|
-
const target = await plugin(tmp.path, ["server"])
|
|
307
|
-
const cfg = path.join(tmp.path, ".saeeol", "saeeol.json")
|
|
308
|
-
await fs.mkdir(path.dirname(cfg), { recursive: true })
|
|
309
|
-
await Bun.write(cfg, JSON.stringify({ plugin: ["file:///tmp/acme.ts"] }, null, 2))
|
|
310
|
-
|
|
311
|
-
const run = createPlugTask(
|
|
312
|
-
{
|
|
313
|
-
mod: "acme@1.2.3",
|
|
314
|
-
},
|
|
315
|
-
deps(path.join(tmp.path, "global"), target),
|
|
316
|
-
)
|
|
317
|
-
|
|
318
|
-
const ok = await run(ctx(tmp.path))
|
|
319
|
-
expect(ok).toBe(true)
|
|
320
|
-
const json = await read(cfg)
|
|
321
|
-
expect(json.plugin).toEqual(["file:///tmp/acme.ts", "acme@1.2.3"])
|
|
322
|
-
})
|
|
323
|
-
|
|
324
|
-
test("force replaces configured package version and keeps tuple options", async () => {
|
|
325
|
-
await using tmp = await tmpdir()
|
|
326
|
-
const target = await plugin(tmp.path, ["server"])
|
|
327
|
-
const cfg = path.join(tmp.path, ".saeeol", "saeeol.json")
|
|
328
|
-
await fs.mkdir(path.dirname(cfg), { recursive: true })
|
|
329
|
-
await Bun.write(
|
|
330
|
-
cfg,
|
|
331
|
-
JSON.stringify(
|
|
332
|
-
{
|
|
333
|
-
plugin: [["acme@1.0.0", { mode: "safe" }], "acme@1.1.0", "other@1.0.0"],
|
|
334
|
-
},
|
|
335
|
-
null,
|
|
336
|
-
2,
|
|
337
|
-
),
|
|
338
|
-
)
|
|
339
|
-
|
|
340
|
-
const run = createPlugTask(
|
|
341
|
-
{
|
|
342
|
-
mod: "acme@2.0.0",
|
|
343
|
-
force: true,
|
|
344
|
-
},
|
|
345
|
-
deps(path.join(tmp.path, "global"), target),
|
|
346
|
-
)
|
|
347
|
-
|
|
348
|
-
const ok = await run(ctx(tmp.path))
|
|
349
|
-
expect(ok).toBe(true)
|
|
350
|
-
const json = await read(cfg)
|
|
351
|
-
expect(json.plugin).toEqual([["acme@2.0.0", { mode: "safe" }], "other@1.0.0"])
|
|
352
|
-
})
|
|
353
|
-
|
|
354
|
-
test("writes to global scope when global flag is set", async () => {
|
|
355
|
-
await using tmp = await tmpdir()
|
|
356
|
-
const target = await plugin(tmp.path, ["server"])
|
|
357
|
-
const global = path.join(tmp.path, "global")
|
|
358
|
-
const run = createPlugTask(
|
|
359
|
-
{
|
|
360
|
-
mod: "acme@1.2.3",
|
|
361
|
-
global: true,
|
|
362
|
-
},
|
|
363
|
-
deps(global, target),
|
|
364
|
-
)
|
|
365
|
-
|
|
366
|
-
const ok = await run(ctx(tmp.path))
|
|
367
|
-
expect(ok).toBe(true)
|
|
368
|
-
|
|
369
|
-
expect(await Filesystem.exists(path.join(global, "saeeol.jsonc"))).toBe(true)
|
|
370
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
371
|
-
})
|
|
372
|
-
|
|
373
|
-
test("writes local scope under directory when vcs is not git", async () => {
|
|
374
|
-
await using tmp = await tmpdir()
|
|
375
|
-
const target = await plugin(tmp.path, ["server"])
|
|
376
|
-
const directory = path.join(tmp.path, "dir")
|
|
377
|
-
const worktree = path.join(tmp.path, "worktree")
|
|
378
|
-
await fs.mkdir(directory, { recursive: true })
|
|
379
|
-
await fs.mkdir(worktree, { recursive: true })
|
|
380
|
-
const run = createPlugTask(
|
|
381
|
-
{
|
|
382
|
-
mod: "acme@1.2.3",
|
|
383
|
-
},
|
|
384
|
-
deps(path.join(tmp.path, "global"), target),
|
|
385
|
-
)
|
|
386
|
-
|
|
387
|
-
const ok = await run(ctxDir(directory, worktree))
|
|
388
|
-
expect(ok).toBe(true)
|
|
389
|
-
expect(await Filesystem.exists(path.join(directory, ".saeeol", "saeeol.jsonc"))).toBe(true)
|
|
390
|
-
expect(await Filesystem.exists(path.join(worktree, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
391
|
-
})
|
|
392
|
-
|
|
393
|
-
test("writes local scope under directory when worktree is root slash", async () => {
|
|
394
|
-
await using tmp = await tmpdir()
|
|
395
|
-
const target = await plugin(tmp.path, ["server"])
|
|
396
|
-
const directory = path.join(tmp.path, "dir")
|
|
397
|
-
await fs.mkdir(directory, { recursive: true })
|
|
398
|
-
const run = createPlugTask(
|
|
399
|
-
{
|
|
400
|
-
mod: "acme@1.2.3",
|
|
401
|
-
},
|
|
402
|
-
deps(path.join(tmp.path, "global"), target),
|
|
403
|
-
)
|
|
404
|
-
|
|
405
|
-
const ok = await run(ctxRoot(directory))
|
|
406
|
-
expect(ok).toBe(true)
|
|
407
|
-
expect(await Filesystem.exists(path.join(directory, ".saeeol", "saeeol.jsonc"))).toBe(true)
|
|
408
|
-
})
|
|
409
|
-
|
|
410
|
-
test("writes tui local scope under directory when worktree is root slash", async () => {
|
|
411
|
-
await using tmp = await tmpdir()
|
|
412
|
-
const target = await plugin(tmp.path, ["tui"])
|
|
413
|
-
const directory = path.join(tmp.path, "dir")
|
|
414
|
-
await fs.mkdir(directory, { recursive: true })
|
|
415
|
-
const run = createPlugTask(
|
|
416
|
-
{
|
|
417
|
-
mod: "acme@1.2.3",
|
|
418
|
-
},
|
|
419
|
-
deps(path.join(tmp.path, "global"), target),
|
|
420
|
-
)
|
|
421
|
-
|
|
422
|
-
const ok = await run(ctxRoot(directory))
|
|
423
|
-
expect(ok).toBe(true)
|
|
424
|
-
expect(await Filesystem.exists(path.join(directory, ".saeeol", "tui.jsonc"))).toBe(true)
|
|
425
|
-
})
|
|
426
|
-
|
|
427
|
-
test("writes only tui config for tui-only plugins", async () => {
|
|
428
|
-
await using tmp = await tmpdir()
|
|
429
|
-
const target = await plugin(tmp.path, ["tui"])
|
|
430
|
-
const run = createPlugTask(
|
|
431
|
-
{
|
|
432
|
-
mod: "acme@1.2.3",
|
|
433
|
-
},
|
|
434
|
-
deps(path.join(tmp.path, "global"), target),
|
|
435
|
-
)
|
|
436
|
-
|
|
437
|
-
const ok = await run(ctx(tmp.path))
|
|
438
|
-
expect(ok).toBe(true)
|
|
439
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "tui.jsonc"))).toBe(true)
|
|
440
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
441
|
-
})
|
|
442
|
-
|
|
443
|
-
test("writes tui config for oc-themes-only packages", async () => {
|
|
444
|
-
await using tmp = await tmpdir()
|
|
445
|
-
const target = await plugin(tmp.path, undefined, undefined, ["themes/forest.json"])
|
|
446
|
-
await fs.mkdir(path.join(target, "themes"), { recursive: true })
|
|
447
|
-
await Bun.write(path.join(target, "themes", "forest.json"), JSON.stringify({ theme: { text: "#fff" } }, null, 2))
|
|
448
|
-
const run = createPlugTask(
|
|
449
|
-
{
|
|
450
|
-
mod: "acme@1.2.3",
|
|
451
|
-
},
|
|
452
|
-
deps(path.join(tmp.path, "global"), target),
|
|
453
|
-
)
|
|
454
|
-
|
|
455
|
-
const ok = await run(ctx(tmp.path))
|
|
456
|
-
expect(ok).toBe(true)
|
|
457
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "tui.jsonc"))).toBe(true)
|
|
458
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
459
|
-
|
|
460
|
-
const tui = await read(path.join(tmp.path, ".saeeol", "tui.jsonc"))
|
|
461
|
-
expect(tui.plugin).toEqual(["acme@1.2.3"])
|
|
462
|
-
})
|
|
463
|
-
|
|
464
|
-
test("returns false for oc-themes outside plugin directory", async () => {
|
|
465
|
-
await using tmp = await tmpdir()
|
|
466
|
-
const target = await plugin(tmp.path, undefined, undefined, ["../outside.json"])
|
|
467
|
-
const run = createPlugTask(
|
|
468
|
-
{
|
|
469
|
-
mod: "acme@1.2.3",
|
|
470
|
-
},
|
|
471
|
-
deps(path.join(tmp.path, "global"), target),
|
|
472
|
-
)
|
|
473
|
-
|
|
474
|
-
const ok = await run(ctx(tmp.path))
|
|
475
|
-
expect(ok).toBe(false)
|
|
476
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "tui.jsonc"))).toBe(false)
|
|
477
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
478
|
-
})
|
|
479
|
-
|
|
480
|
-
test("force replaces version in both server and tui configs", async () => {
|
|
481
|
-
await using tmp = await tmpdir()
|
|
482
|
-
const target = await plugin(tmp.path, ["server", "tui"])
|
|
483
|
-
const server = path.join(tmp.path, ".saeeol", "saeeol.json")
|
|
484
|
-
const tui = path.join(tmp.path, ".saeeol", "tui.json")
|
|
485
|
-
await fs.mkdir(path.dirname(server), { recursive: true })
|
|
486
|
-
await Bun.write(server, JSON.stringify({ plugin: ["acme@1.0.0", "other@1.0.0"] }, null, 2))
|
|
487
|
-
await Bun.write(tui, JSON.stringify({ plugin: [["acme@1.0.0", { mode: "safe" }], "other@1.0.0"] }, null, 2))
|
|
488
|
-
|
|
489
|
-
const run = createPlugTask(
|
|
490
|
-
{
|
|
491
|
-
mod: "acme@2.0.0",
|
|
492
|
-
force: true,
|
|
493
|
-
},
|
|
494
|
-
deps(path.join(tmp.path, "global"), target),
|
|
495
|
-
)
|
|
496
|
-
|
|
497
|
-
const ok = await run(ctx(tmp.path))
|
|
498
|
-
expect(ok).toBe(true)
|
|
499
|
-
const serverJson = await read(server)
|
|
500
|
-
const tuiJson = await read(tui)
|
|
501
|
-
expect(serverJson.plugin).toEqual(["acme@2.0.0", "other@1.0.0"])
|
|
502
|
-
expect(tuiJson.plugin).toEqual([["acme@2.0.0", { mode: "safe" }], "other@1.0.0"])
|
|
503
|
-
})
|
|
504
|
-
|
|
505
|
-
test("returns false and keeps config unchanged for invalid JSONC", async () => {
|
|
506
|
-
await using tmp = await tmpdir()
|
|
507
|
-
const target = await plugin(tmp.path, ["server"])
|
|
508
|
-
const cfg = path.join(tmp.path, ".saeeol", "saeeol.jsonc")
|
|
509
|
-
await fs.mkdir(path.dirname(cfg), { recursive: true })
|
|
510
|
-
const bad = '{"plugin": ["acme@1.0.0",}'
|
|
511
|
-
await Bun.write(cfg, bad)
|
|
512
|
-
|
|
513
|
-
const run = createPlugTask(
|
|
514
|
-
{
|
|
515
|
-
mod: "acme@2.0.0",
|
|
516
|
-
},
|
|
517
|
-
deps(path.join(tmp.path, "global"), target),
|
|
518
|
-
)
|
|
519
|
-
|
|
520
|
-
const ok = await run(ctx(tmp.path))
|
|
521
|
-
expect(ok).toBe(false)
|
|
522
|
-
expect(await fs.readFile(cfg, "utf8")).toBe(bad)
|
|
523
|
-
})
|
|
524
|
-
|
|
525
|
-
test("returns false when manifest declares no supported targets", async () => {
|
|
526
|
-
await using tmp = await tmpdir()
|
|
527
|
-
const target = await plugin(tmp.path)
|
|
528
|
-
const run = createPlugTask(
|
|
529
|
-
{
|
|
530
|
-
mod: "acme@1.2.3",
|
|
531
|
-
},
|
|
532
|
-
deps(path.join(tmp.path, "global"), target),
|
|
533
|
-
)
|
|
534
|
-
|
|
535
|
-
const ok = await run(ctx(tmp.path))
|
|
536
|
-
expect(ok).toBe(false)
|
|
537
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
538
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "tui.jsonc"))).toBe(false)
|
|
539
|
-
})
|
|
540
|
-
|
|
541
|
-
test("returns false when manifest cannot be read", async () => {
|
|
542
|
-
await using tmp = await tmpdir()
|
|
543
|
-
const target = path.join(tmp.path, "plugin")
|
|
544
|
-
await fs.mkdir(target, { recursive: true })
|
|
545
|
-
const run = createPlugTask(
|
|
546
|
-
{
|
|
547
|
-
mod: "acme@1.2.3",
|
|
548
|
-
},
|
|
549
|
-
deps(path.join(tmp.path, "global"), target),
|
|
550
|
-
)
|
|
551
|
-
|
|
552
|
-
const ok = await run(ctx(tmp.path))
|
|
553
|
-
expect(ok).toBe(false)
|
|
554
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
555
|
-
})
|
|
556
|
-
|
|
557
|
-
test("returns false when install fails", async () => {
|
|
558
|
-
await using tmp = await tmpdir()
|
|
559
|
-
const run = createPlugTask(
|
|
560
|
-
{
|
|
561
|
-
mod: "acme@9.9.9",
|
|
562
|
-
},
|
|
563
|
-
deps(path.join(tmp.path, "global"), new Error("boom")),
|
|
564
|
-
)
|
|
565
|
-
|
|
566
|
-
const ok = await run(ctx(tmp.path))
|
|
567
|
-
expect(ok).toBe(false)
|
|
568
|
-
expect(await Filesystem.exists(path.join(tmp.path, ".saeeol", "saeeol.jsonc"))).toBe(false)
|
|
569
|
-
})
|
|
570
|
-
})
|