From b928bf22a5d60db4a3d94d1704e15302cc610461 Mon Sep 17 00:00:00 2001
From: deepagent-ai
Date: Sun, 20 Sep 2026 19:54:31 +0800
Subject: [PATCH] Core-v2 && DeepAgent Code 2.0 (#121)
### Issue for this PR
Closes #
### Type of change
- [ ] Bug fix
- [ ] New feature
- [ ] Refactor / code improvement
- [ ] Documentation
### What does this PR do?
Please provide a description of the issue, the changes you made to fix
it, and why they work. It is expected that you understand why your
changes work and if you do not understand why at least say as much so a
maintainer knows how much to value the PR.
**If you paste a large clearly AI generated description here your PR may
be IGNORED or CLOSED!**
### How did you verify your code works?
### Screenshots / recordings
_If this is a UI change, please include a screenshot or recording._
### Checklist
- [ ] I have tested my changes locally
- [ ] I have not included unrelated changes in this PR
_If you do not follow this template your PR will be automatically
rejected._
---
.deepagent-code/command/ai-deps.md | 24 -
.deepagent-code/command/changelog.md | 49 -
.deepagent-code/command/commit.md | 37 -
.deepagent-code/command/issues.md | 23 -
.deepagent-code/command/learn.md | 42 -
.deepagent-code/command/rmslop.md | 15 -
.deepagent-code/command/spellcheck.md | 5 -
.deepagent-code/command/translate.md | 14 -
.deepagent-code/deepagent-code.jsonc | 9 -
.deepagent-code/env.d.ts | 4 -
.deepagent-code/glossary/README.md | 63 -
.deepagent-code/glossary/ar.md | 28 -
.deepagent-code/glossary/br.md | 34 -
.deepagent-code/glossary/bs.md | 33 -
.deepagent-code/glossary/da.md | 27 -
.deepagent-code/glossary/de.md | 27 -
.deepagent-code/glossary/es.md | 27 -
.deepagent-code/glossary/fr.md | 27 -
.deepagent-code/glossary/ja.md | 33 -
.deepagent-code/glossary/ko.md | 27 -
.deepagent-code/glossary/no.md | 38 -
.deepagent-code/glossary/pl.md | 27 -
.deepagent-code/glossary/ru.md | 27 -
.deepagent-code/glossary/th.md | 34 -
.deepagent-code/glossary/tr.md | 38 -
.deepagent-code/glossary/zh-cn.md | 42 -
.deepagent-code/glossary/zh-tw.md | 42 -
.deepagent-code/plugins/smoke-theme.json | 223 -
.deepagent-code/plugins/tui-smoke.tsx | 1019 -
.deepagent-code/skills/effect/SKILL.md | 38 -
.deepagent-code/themes/mytheme.json | 223 -
.deepagent-code/tui.json | 19 -
.github/workflows/beta.yml | 3 +
.github/workflows/branding-check.yml | 40 +
.github/workflows/deploy.yml | 2 +-
.github/workflows/desktop-build.yml | 22 +
.github/workflows/docs-locale-sync.yml | 2 +-
.github/workflows/docs-update.yml | 2 +-
.github/workflows/duplicate-issues.yml | 4 +-
.github/workflows/publish.yml | 82 +-
.github/workflows/review.yml | 2 +-
.github/workflows/stats.yml | 2 +-
.github/workflows/test.yml | 2 +-
.gitignore | 4 +
CHANGELOG.md | 10 +-
README.md | 95 +-
README.zh.md | 97 +-
bun.lock | 44 +-
design/README.md | 1 +
github/README.md | 2 +-
github/action.yml | 4 +-
github/index.ts | 6 +-
infra/app.ts | 4 +-
infra/stage.ts | 6 +-
install | 126 +-
nix/deepagent-code.nix | 2 +-
packages/app/AGENTS.md | 2 +-
.../e2e/pixel-matrix/cn-desktop-1920x1080.png | Bin 110141 -> 110600 bytes
.../e2e/pixel-matrix/cn-laptop-1280x720.png | Bin 100095 -> 100746 bytes
.../app/e2e/pixel-matrix/cn-small-390x844.png | Bin 69027 -> 69015 bytes
.../e2e/pixel-matrix/en-desktop-1920x1080.png | Bin 80905 -> 81914 bytes
.../e2e/pixel-matrix/en-laptop-1280x720.png | Bin 73625 -> 74588 bytes
.../app/e2e/pixel-matrix/en-small-390x844.png | Bin 43003 -> 43857 bytes
.../pixel-matrix/error-desktop-1920x1080.png | Bin 109975 -> 110347 bytes
.../pixel-matrix/error-laptop-1280x720.png | Bin 79283 -> 79030 bytes
.../e2e/pixel-matrix/error-small-390x844.png | Bin 38123 -> 38642 bytes
.../recovery-desktop-1920x1080.png | Bin 98109 -> 102173 bytes
.../e2e/regression/pixel-matrix.fixture.ts | 15 +
.../app/e2e/regression/pixel-matrix.spec.ts | 34 +
packages/app/package.json | 2 +-
packages/app/polyfills/buffer.ts | 23 +
packages/app/polyfills/crypto.ts | 17 +
.../src/components/dialog-prompt-stash.tsx | 80 +
.../src/components/dialog-select-skill.tsx | 59 +
.../app/src/components/im/capabilities.ts | 4 -
.../components/im/message-metadata-card.tsx | 7 +
packages/app/src/components/im/types.ts | 13 +
.../prompt-input/scenario-override.ts | 3 +
.../components/prompt-input/submit.test.ts | 14 +-
.../app/src/components/prompt-input/submit.ts | 18 +-
.../app/src/components/settings-v2/about.tsx | 4 +-
.../settings-v2/capabilities-ux.test.ts | 68 +
.../components/settings-v2/capabilities.tsx | 187 +
.../capability-panel-model.test.ts | 115 +
.../settings-v2/capability-panel-model.ts | 78 +
.../settings-v2/dialog-settings-v2.tsx | 8 +
.../components/settings-v2/settings-v2.css | 71 +
packages/app/src/context/directory-sync.ts | 42 +-
packages/app/src/context/gateway.tsx | 58 +-
.../src/context/global-sync/bootstrap.test.ts | 83 +
.../app/src/context/global-sync/bootstrap.ts | 21 +-
.../src/context/global-sync/child-store.ts | 1 +
.../context/global-sync/event-reducer.test.ts | 99 +
.../src/context/global-sync/event-reducer.ts | 30 +-
.../context/global-sync/permission-v2.test.ts | 99 +
.../src/context/global-sync/permission-v2.ts | 53 +
.../context/global-sync/session-cache.test.ts | 8 +-
.../src/context/global-sync/session-cache.ts | 6 +-
.../global-sync/session-prefetch.test.ts | 18 +
.../context/global-sync/session-prefetch.ts | 47 +-
packages/app/src/context/global-sync/types.ts | 12 +-
.../app/src/context/global-sync/utils.test.ts | 4 +-
packages/app/src/context/local.tsx | 5 +-
packages/app/src/context/permission.tsx | 49 +-
packages/app/src/context/terminal.test.ts | 38 +
packages/app/src/context/terminal.tsx | 65 +-
.../context/v2-notification-mapping.test.ts | 15 +
.../src/context/v2-notification-mapping.ts | 11 +-
.../app/src/context/v2-session-projector.ts | 7 +-
packages/app/src/desktop-menu.ts | 4 +-
packages/app/src/i18n/ar.ts | 19 +
packages/app/src/i18n/br.ts | 19 +
packages/app/src/i18n/bs.ts | 19 +
packages/app/src/i18n/da.ts | 19 +
packages/app/src/i18n/de.ts | 19 +
packages/app/src/i18n/en.ts | 47 +
packages/app/src/i18n/es.ts | 19 +
packages/app/src/i18n/fr.ts | 19 +
packages/app/src/i18n/ja.ts | 19 +
packages/app/src/i18n/ko.ts | 19 +
packages/app/src/i18n/no.ts | 19 +
packages/app/src/i18n/pl.ts | 19 +
packages/app/src/i18n/ru.ts | 19 +
packages/app/src/i18n/th.ts | 19 +
packages/app/src/i18n/tr.ts | 19 +
packages/app/src/i18n/uk.ts | 19 +
packages/app/src/i18n/zh.ts | 37 +
packages/app/src/i18n/zht.ts | 38 +
packages/app/src/pages/layout.tsx | 101 +-
packages/app/src/pages/session.tsx | 42 +-
.../composer/session-composer-state-model.ts | 4 +-
.../composer/session-composer-state.ts | 23 +-
.../composer/session-question-dock.tsx | 2 +
.../session/composer/session-todo-dock.tsx | 8 +-
.../pages/session/followup-submission.test.ts | 58 +-
.../src/pages/session/followup-submission.ts | 42 +-
.../app/src/pages/session/helpers.test.ts | 24 +
packages/app/src/pages/session/helpers.ts | 76 +-
.../src/pages/session/message-timeline.tsx | 24 +-
.../app/src/pages/session/prompt-stash.ts | 69 +
.../src/pages/session/side-panel-context.tsx | 34 +-
.../pages/session/side-panel-subagents.tsx | 48 +-
.../pages/session/use-session-commands.tsx | 143 +-
packages/app/src/recovery/RecoveryDock.tsx | 35 +-
.../recovery/lifecycle-execution-pump.test.ts | 658 +
.../src/recovery/lifecycle-execution-pump.ts | 341 +
.../recovery/recovery-lifecycle-state.test.ts | 93 +
.../src/recovery/recovery-lifecycle-state.ts | 134 +-
.../recovery/session-lifecycle-wiring.test.ts | 75 +
.../app/src/recovery/session-lifecycle.tsx | 82 +
.../src/recovery/ux-matrix-invariants.test.ts | 20 +-
packages/app/src/utils/event-type.ts | 8 +
packages/app/src/utils/gateway-client.test.ts | 24 +-
packages/app/src/utils/gateway-client.ts | 40 +-
packages/app/src/utils/server-health.ts | 2 +
packages/app/src/utils/transcript.ts | 121 +
packages/app/src/utils/worktree.test.ts | 11 +
packages/app/src/utils/worktree.ts | 23 +-
packages/app/vite.js | 7 +
packages/cli/package.json | 3 +-
packages/cli/script/build.ts | 2 +-
packages/cli/script/publish.ts | 2 +-
packages/cli/src/commands/handlers/login.ts | 2 +-
packages/cli/src/commands/handlers/serve.ts | 29 +-
packages/cli/src/services/daemon.ts | 343 +-
packages/cli/src/services/server-mode.ts | 12 +-
packages/cli/test/daemon.test.ts | 98 +-
packages/cli/test/fixtures/legacy-entry.ts | 62 -
packages/cli/test/fixtures/v2-entry.ts | 52 +
packages/cli/test/handlers.test.ts | 4 +-
packages/core/bunfig.toml | 10 +
.../migration.sql | 35 +
.../schema-checkpoint | 1 +
.../migration.sql | 2 +
.../schema-checkpoint | 1 +
.../migration.sql | 33 +
.../migration.sql | 9 +
.../migration.sql | 14 +
.../migration.sql | 2 +
.../migration.sql | 1 +
.../migration.sql | 7 +
.../migration.sql | 1 +
.../migration.sql | 2 +
.../migration.sql | 1 +
.../migration.sql | 14 +
.../migration.sql | 16 +
.../migration.sql | 1 +
.../migration.sql | 17 +
.../snapshot.json | 18433 ++++++++++++++++
packages/core/package.json | 23 +-
.../core/script/caller-inventory/authority.ts | 44 +-
.../core/script/caller-inventory/build.ts | 8 +-
.../script/caller-inventory/declarations.ts | 24 -
.../script/caller-inventory/delegation.ts | 20 +-
.../script/caller-inventory/extractors.ts | 550 +-
.../core/script/caller-inventory/graph.ts | 313 +-
.../core/script/caller-inventory/rules.ts | 944 +-
.../script/caller-inventory/run-inventory.ts | 2 +-
.../core/script/caller-inventory/types.ts | 22 +-
.../script/context-federation-baseline.ts | 10 +-
.../fixture-child-runtime-lock-holder.ts | 28 +
packages/core/script/diag/stall-repro.ts | 193 +
.../generate-candidate-ledger.ts | 126 +
.../script/evidence-ledger/generate-ledger.ts | 164 +
.../generate-packaged-report.ts | 68 +
.../evidence-ledger/probe-packaged-runs.ts | 220 +
.../script/evidence-ledger/release-gate.ts | 165 +
.../core/script/legacy-zero-gate/counter.ts | 4 +-
packages/core/script/legacy-zero-gate/gate.ts | 69 +-
.../core/script/legacy-zero-gate/run-gate.ts | 2 +-
packages/core/script/live-llm/file-tools.ts | 7 +-
packages/core/script/live-llm/runtime.ts | 114 +-
.../core/script/live-llm/v2-provider-loop.ts | 32 +-
packages/core/script/migration.ts | 32 +-
.../core/script/runtime-state-inventory.ts | 2279 ++
packages/core/src/agent-gateway.ts | 518 +-
packages/core/src/agent.ts | 44 +-
packages/core/src/agent/id.ts | 8 +
packages/core/src/config.ts | 182 +-
packages/core/src/config/compaction.ts | 17 +
packages/core/src/config/learning.ts | 13 +
packages/core/src/config/lsp.ts | 18 -
packages/core/src/config/mcp.ts | 36 -
.../src/context-federation/adapters-v2.ts | 72 +-
.../core/src/context-federation/adapters.ts | 2 +-
.../src/context-federation/artifact-store.ts | 430 +-
.../src/context-federation/parity-shadow.ts | 38 +-
.../context-federation/production-adapters.ts | 489 +
.../context-federation/provider-attempt.ts | 70 +-
.../context-federation/query-authorization.ts | 33 +-
.../src/context-federation/resolver-v2.ts | 54 +-
.../core/src/context-federation/resolver.ts | 144 +-
.../context-federation/selection-writer.ts | 52 +-
.../src/context-federation/session-context.ts | 5 +-
.../src/context-federation/session-sql.ts | 7 +
.../src/context-federation/tool-runtime.ts | 39 +
packages/core/src/contract/error-code.ts | 6 +-
packages/core/src/contract/evidence-ledger.ts | 152 +
.../core/src/contract/evidence-manifest.ts | 75 +
.../src/contract/packaged-runtime-report.ts | 119 +
.../contract/runtime-integrity-evidence.ts | 259 +
packages/core/src/database/bootstrap.ts | 31 +-
packages/core/src/database/database.ts | 201 +-
packages/core/src/database/migration-lease.ts | 57 +
packages/core/src/database/migration.gen.ts | 226 +-
packages/core/src/database/migration.ts | 38 +-
...0260830000000_session_provider_recovery.ts | 100 +
.../20260901181952_session_capability_load.ts | 44 +
...0000_v2_owner_authorization_renew_guard.ts | 54 +
...2_provider_prepared_turn_canonical_hash.ts | 165 +
.../20260904171154_mighty_fallen_one.ts | 21 +
...20260906125300_v2_tool_effect_admission.ts | 82 +
...190036_capability_load_catalog_identity.ts | 12 +
...0260907020000_session_interrupt_barrier.ts | 11 +
...20260907120000_provider_attempt_version.ts | 14 +
...07130000_migration_journal_content_hash.ts | 40 +
...20260909041049_session_delete_tombstone.ts | 19 +
...ession_delete_tombstone_retention_index.ts | 11 +
...909053722_v2_runtime_integrity_evidence.ts | 53 +
...v2_runtime_integrity_evidence_signature.ts | 42 +
..._v2_runtime_integrity_evidence_artifact.ts | 58 +
...10000000_event_admission_refusal_reason.ts | 14 +
.../20260910012502_v2_compaction_request.ts | 27 +
...918101443_v2_task_run_execution_runtime.ts | 15 +
.../20260918120000_im_reply_outbox.ts | 58 +
...60918130000_command_side_effect_receipt.ts | 88 +
...918143000_task_run_v1_recovery_required.ts | 20 +
...919073750_v2_structured_output_evidence.ts | 98 +
packages/core/src/database/preflight.ts | 136 +-
.../core/src/database/recovery-binding.ts | 24 +-
packages/core/src/database/restore.ts | 28 +-
packages/core/src/database/sqlite.bun.ts | 93 +-
packages/core/src/database/sqlite.worker.ts | 252 +
packages/core/src/database/upgrade-run.ts | 5 +-
.../core/src/deepagent/activity-authority.ts | 23 +-
packages/core/src/deepagent/atomic-write.ts | 4 +-
.../core/src/deepagent/background-learning.ts | 4 +-
.../core/src/deepagent/capability-mode.ts | 189 +
packages/core/src/deepagent/command-intent.ts | 28 +-
.../core/src/deepagent/consumer-receipts.ts | 19 +
packages/core/src/deepagent/context/ledger.ts | 4 +-
.../core/src/deepagent/deepagent-event-bus.ts | 17 +-
packages/core/src/deepagent/document-store.ts | 52 +-
.../core/src/deepagent/domain-pack-load.ts | 7 +-
.../src/deepagent/domain-pack-registry.ts | 28 +-
.../src/deepagent/durable-knowledge-store.ts | 5 +-
.../core/src/deepagent/durable-learning.ts | 83 +-
.../core/src/deepagent/event-admission-sql.ts | 22 +
.../src/deepagent/event-admission-wiring.ts | 2 +
.../core/src/deepagent/event-admission.ts | 308 +-
packages/core/src/deepagent/event-consumer.ts | 44 +-
packages/core/src/deepagent/event-outbox.ts | 19 +-
packages/core/src/deepagent/event-registry.ts | 8 +-
packages/core/src/deepagent/event-router.ts | 7 +-
packages/core/src/deepagent/event-spool.ts | 14 +-
packages/core/src/deepagent/flip-flag.ts | 14 +
packages/core/src/deepagent/goal-loop.ts | 81 +-
packages/core/src/deepagent/hooks.ts | 14 +-
.../core/src/deepagent/im-single-write.ts | 36 +-
packages/core/src/deepagent/index.ts | 1 +
.../core/src/deepagent/knowledge-source.ts | 83 +-
.../deepagent/learning-lifecycle-trigger.ts | 30 +-
packages/core/src/deepagent/learning.ts | 59 +-
packages/core/src/deepagent/lmn-events.ts | 8 +-
.../core/src/deepagent/mechanism-beacon.ts | 136 +
.../src/deepagent/model-prompt-profile.ts | 131 +
packages/core/src/deepagent/orchestration.ts | 87 +-
packages/core/src/deepagent/orchestrator.ts | 16 +-
.../core/src/deepagent/plan-controller.ts | 129 +-
packages/core/src/deepagent/plan-store.ts | 55 +-
.../core/src/deepagent/project-docs-sync.ts | 483 +
packages/core/src/deepagent/promotion.ts | 80 +-
packages/core/src/deepagent/prompt-policy.ts | 63 +-
packages/core/src/deepagent/rate-limiter.ts | 19 +-
.../core/src/deepagent/retention-sweeper.ts | 7 +
packages/core/src/deepagent/session-state.ts | 343 +-
.../core/src/deepagent/turn-observability.ts | 442 +
packages/core/src/deepagent/validation.ts | 102 +-
.../src/deepagent/workspace-concurrency.ts | 4 +
packages/core/src/effect/memo-map.ts | 5 +-
packages/core/src/effect/process-lifecycle.ts | 38 +
packages/core/src/effect/runtime.ts | 26 +-
packages/core/src/effect/service-use.ts | 4 +-
packages/core/src/event.ts | 550 +-
packages/core/src/event/define.ts | 144 +
packages/core/src/event/sql.ts | 13 +
packages/core/src/file-lock.ts | 2 +
packages/core/src/filesystem.ts | 7 +-
packages/core/src/filesystem/ripgrep.ts | 7 +-
packages/core/src/filesystem/search.ts | 2 +-
packages/core/src/filesystem/watcher.ts | 66 +-
packages/core/src/flag/flag.ts | 1 -
packages/core/src/flag/runtime-features.ts | 60 +-
packages/core/src/id/id.ts | 37 +-
packages/core/src/im/agent-executor.ts | 146 -
packages/core/src/im/agent-orchestrator.ts | 285 -
packages/core/src/im/agent-reply-sink.ts | 71 -
packages/core/src/im/broadcaster.ts | 21 +-
packages/core/src/im/builtin-agents.ts | 3 +-
packages/core/src/im/context-builder.ts | 59 -
packages/core/src/im/index.ts | 8 +-
packages/core/src/im/sql.ts | 13 +
packages/core/src/im/websocket.ts | 2 +-
packages/core/src/instruction-context.ts | 2 +-
packages/core/src/location-layer.ts | 133 +-
packages/core/src/location/ref.ts | 13 +
packages/core/src/model-protocol.ts | 62 +-
packages/core/src/model.ts | 13 +-
packages/core/src/model/ref.ts | 20 +
packages/core/src/models-dev.ts | 140 +-
packages/core/src/npm.ts | 2 +-
packages/core/src/permission.ts | 60 +-
packages/core/src/permission/mutating.ts | 6 +-
packages/core/src/plugin/agent.ts | 216 +-
.../plugin/skill/customize-deepagent-code.md | 10 +-
packages/core/src/process.ts | 2 +-
packages/core/src/project.ts | 9 +-
packages/core/src/project/copy.ts | 4 +-
packages/core/src/project/id.ts | 15 +
packages/core/src/provider-id.ts | 26 +
packages/core/src/provider-official.ts | 8 +-
packages/core/src/provider.ts | 20 +-
packages/core/src/pty.ts | 48 +-
packages/core/src/question.ts | 9 +-
packages/core/src/schema.ts | 10 +-
packages/core/src/schema/external-id.ts | 13 +
packages/core/src/session.ts | 400 +-
.../src/session/compaction-request.sql.ts | 30 +
.../core/src/session/compaction-request.ts | 144 +
packages/core/src/session/compaction.ts | 169 +-
packages/core/src/session/context-epoch.ts | 2 +-
packages/core/src/session/event.ts | 222 +-
packages/core/src/session/execution.ts | 21 +-
packages/core/src/session/execution/local.ts | 101 +-
.../core/src/session/execution/restart.ts | 204 +-
packages/core/src/session/history.ts | 2 +-
packages/core/src/session/info.ts | 21 +
packages/core/src/session/input.ts | 127 +-
packages/core/src/session/legacy-wire.ts | 168 +
packages/core/src/session/message-updater.ts | 13 +
packages/core/src/session/message.ts | 15 +-
packages/core/src/session/projector.ts | 662 +-
packages/core/src/session/prompt.ts | 14 +-
packages/core/src/session/run-coordinator.ts | 49 +-
.../core/src/session/runner/attachments.ts | 165 +
.../core/src/session/runner/canonical-turn.ts | 637 +-
.../src/session/runner/deepagent-prompt.ts | 131 +
packages/core/src/session/runner/index.ts | 88 +-
packages/core/src/session/runner/llm.ts | 1632 +-
packages/core/src/session/runner/model.ts | 43 +-
.../session/runner/prepared-provider-turn.ts | 81 +-
.../src/session/runner/publish-llm-event.ts | 40 +-
.../session/runner/recovery-durable-store.ts | 1008 +
.../src/session/runner/recovery-store.sql.ts | 61 +
packages/core/src/session/runner/recovery.ts | 980 +-
.../runner/session-history-projection.ts | 377 +
.../src/session/runner/startup-inventory.ts | 697 +-
.../session/runner/v2-owner-authorization.ts | 23 +-
.../src/session/runner/v2-owner-dev-mint.ts | 253 +
.../core/src/session/runner/v2-owner-seed.ts | 390 +
.../session/runner/v2-provider-turn.sql.ts | 30 +
.../src/session/runner/v2-provider-turn.ts | 1019 +-
.../v2-structured-output-evidence.sql.ts | 29 +
.../src/session/runner/v2-task-run-receipt.ts | 8 -
.../src/session/runner/v2-tool-effect.sql.ts | 23 +-
.../core/src/session/runner/v2-tool-effect.ts | 166 +-
packages/core/src/session/runtime-status.ts | 59 +
packages/core/src/session/runtime.ts | 77 +
packages/core/src/session/schema.ts | 97 +-
packages/core/src/session/sql.ts | 33 +-
packages/core/src/session/store.ts | 79 +-
packages/core/src/session/task-outbox.ts | 341 +
packages/core/src/session/task-pr-review.ts | 950 +
.../core/src/session/task-run-dispatcher.ts | 168 +
packages/core/src/session/task-run.ts | 1122 +
packages/core/src/session/task-workspace.ts | 740 +
packages/core/src/skill.ts | 21 +-
.../src/system-context/capability-bodies.ts | 16 +-
.../src/system-context/capability-catalog.ts | 70 +-
.../system-context/capability-load-adapter.ts | 416 +-
.../system-context/capability-load-tool.ts | 302 +
.../src/system-context/capability-load.sql.ts | 58 +
.../capability-loader-memory.ts | 146 +
.../src/system-context/capability-loader.ts | 204 +-
.../src/system-context/capability-manifest.ts | 118 +-
.../capability-runtime-search.ts | 62 +-
.../src/system-context/capability-search.ts | 14 +-
packages/core/src/system-context/index.ts | 2 +-
.../core/src/system-context/project-docs.ts | 366 +
packages/core/src/system-context/registry.ts | 19 +-
packages/core/src/tool-output.ts | 2 +-
packages/core/src/tool/application-tools.ts | 64 +-
packages/core/src/tool/apply-patch-chunk.ts | 180 +
packages/core/src/tool/apply-patch.ts | 79 +-
packages/core/src/tool/bash.ts | 41 +-
packages/core/src/tool/builtins.ts | 47 +-
packages/core/src/tool/code-intel.txt | 5 +
packages/core/src/tool/context-query-tools.ts | 77 +
packages/core/src/tool/context-query.txt | 3 +
packages/core/src/tool/delegation.ts | 23 +
packages/core/src/tool/edit-replace.ts | 498 +
packages/core/src/tool/edit.ts | 66 +-
packages/core/src/tool/git-read.ts | 244 +
packages/core/src/tool/plan.ts | 472 +
packages/core/src/tool/plan.txt | 34 +
packages/core/src/tool/question.ts | 11 +-
packages/core/src/tool/read.ts | 21 +-
packages/core/src/tool/registry.ts | 60 +-
packages/core/src/tool/task-policy.ts | 124 +
packages/core/src/tool/task.ts | 452 +
packages/core/src/tool/task.txt | 18 +
packages/core/src/tool/todowrite.ts | 62 -
packages/core/src/tool/tool.ts | 54 +
packages/core/src/tool/write.ts | 74 +-
packages/core/src/util/effect-flock.ts | 33 +-
packages/core/src/util/identifier.ts | 2 +
packages/core/src/util/log.ts | 52 +-
.../core/src/util/readonly-collections.ts | 51 +
packages/core/src/v1/config/migrate.ts | 44 -
packages/core/src/v1/permission.ts | 4 +-
packages/core/src/v1/session.ts | 42 +-
packages/core/test/agent-gateway.test.ts | 146 +-
packages/core/test/agent.test.ts | 41 +-
packages/core/test/application-tools.test.ts | 23 +
packages/core/test/caller-inventory.test.ts | 53 +-
packages/core/test/capability-probe.test.ts | 59 +-
.../test/compaction-receipt-replay.test.ts | 11 +-
packages/core/test/config/config.test.ts | 316 +-
.../context-federation/adapters-v2.test.ts | 26 +
.../advance-selection.test.ts | 9 +-
.../c3-dynamic-matrix.test.ts | 9 +-
.../context-federation/frame-identity.test.ts | 314 +
.../context-federation/parity-shadow.test.ts | 203 +-
.../production-adapters.test.ts | 793 +
.../query-authorization.test.ts | 41 +
.../selection-budget.test.ts | 8 +-
.../selection-writer.test.ts | 19 +-
.../session-context.test.ts | 1 +
.../core/test/contract/error-code.test.ts | 2 +-
.../contract/evidence-ledger-script.test.ts | 213 +
.../test/contract/evidence-ledger.test.ts | 149 +
.../test/contract/evidence-manifest.test.ts | 34 +
.../contract/packaged-runtime-report.test.ts | 102 +
.../runtime-integrity-evidence.test.ts | 92 +
.../test/database-bootstrap-layer.test.ts | 111 +-
packages/core/test/database-bootstrap.test.ts | 8 +
.../test/database-c7-migration-matrix.test.ts | 48 +-
.../core/test/database-capability.test.ts | 27 +-
.../core/test/database-dynamic-matrix.test.ts | 40 +
.../test/database-migration-lease.test.ts | 111 +
packages/core/test/database-migration.test.ts | 138 +-
.../core/test/database-post-verify.test.ts | 34 +-
packages/core/test/database-preflight.test.ts | 100 +
packages/core/test/database-restore.test.ts | 25 +
.../core/test/database-upgrade-run.test.ts | 7 +
.../test/deepagent/activity-authority.test.ts | 38 +
.../test/deepagent/approval-status.test.ts | 3 +-
.../deepagent/background-learning.test.ts | 63 +-
.../test/deepagent/capability-mode.test.ts | 110 +
.../test/deepagent/command-intent.test.ts | 35 +
packages/core/test/deepagent/context.test.ts | 89 +-
.../deepagent/document-governance.test.ts | 3 +-
.../test/deepagent/document-store.test.ts | 59 +-
.../domain-pack-detector-competition.test.ts | 3 +-
.../deepagent/domain-pack-quality.test.ts | 3 +-
.../deepagent/domain-pack-registry.test.ts | 3 +-
.../domain-pack-retrieval-isolation.test.ts | 3 +-
.../core/test/deepagent/domain-pack.test.ts | 3 +-
.../deepagent/durable-knowledge-store.test.ts | 3 +-
.../test/deepagent/durable-learning.test.ts | 169 +-
.../environment-fact-adoption.test.ts | 3 +-
.../test/deepagent/environment-fact.test.ts | 25 +-
.../deepagent/event-admission-wiring.test.ts | 44 +-
.../test/deepagent/event-admission.test.ts | 444 +-
.../test/deepagent/event-delivery.test.ts | 9 +
.../core/test/deepagent/event-outbox.test.ts | 11 +
.../test/deepagent/event-registry.test.ts | 12 +
.../core/test/deepagent/flip-flag.test.ts | 26 +
.../deepagent/gateway-passthrough.test.ts | 3 +-
.../core/test/deepagent/goal-loop.test.ts | 176 +-
.../core/test/deepagent/hard-gate.test.ts | 16 +
.../test/deepagent/hooks-reviewer.test.ts | 10 +-
.../test/deepagent/im-single-write.test.ts | 43 +-
.../deepagent/knowledge-contract-v3-2.test.ts | 3 +-
.../deepagent/knowledge-retriever-v3.test.ts | 3 +-
.../test/deepagent/knowledge-seed.test.ts | 3 +-
.../deepagent/knowledge-source-cache.test.ts | 3 +-
.../learning-governance-recovery.test.ts | 3 +-
.../learning-lifecycle-trigger.test.ts | 37 +-
.../test/deepagent/llm-client-wrapper.test.ts | 116 +-
.../deepagent/model-prompt-profile.test.ts | 71 +
.../deepagent/no-write-to-real-home.test.ts | 5 +-
.../core/test/deepagent/orchestration.test.ts | 27 +
.../pack-activation-authority.test.ts | 3 +-
.../core/test/deepagent/pinned-packs.test.ts | 3 +-
.../test/deepagent/plan-controller.test.ts | 21 +
.../test/deepagent/plan-edit-protocol.test.ts | 3 +-
.../test/deepagent/plan-gate-loop.test.ts | 5 +-
.../core/test/deepagent/plan-store.test.ts | 89 +-
.../core/test/deepagent/promotion.test.ts | 16 +-
.../test/deepagent/prompt-pipeline.test.ts | 3 +-
.../provider-executed-tool-gate.test.ts | 3 +-
.../core/test/deepagent/run-graph.test.ts | 3 +-
.../deepagent/session-state-activity.test.ts | 3 +-
.../deepagent/session-state-dismissal.test.ts | 7 +-
.../session-state-panel-goal.test.ts | 7 +-
.../session-state-plan-latch.test.ts | 7 +-
.../deepagent/ship-gate-enforcement.test.ts | 3 +-
.../test/deepagent/v2-flip-contract.test.ts | 93 +-
.../core/test/deepagent/validation.test.ts | 80 +
.../workspace-isolation-read-path.test.ts | 3 +-
.../core/test/deepagent/workspace.test.ts | 3 +-
.../core/test/deepagent/world-state.test.ts | 3 +-
packages/core/test/domain-pack-load.test.ts | 2 +-
.../test/effect/cross-spawn-spawner.test.ts | 3 +-
.../core/test/effect/observability.test.ts | 10 +-
packages/core/test/event-durable-type.test.ts | 69 +
packages/core/test/event.test.ts | 329 +-
packages/core/test/file-lock-capacity.test.ts | 17 +
packages/core/test/filesystem/ripgrep.test.ts | 3 +-
packages/core/test/filesystem/search.test.ts | 3 +-
.../test/filesystem/watcher-delivery-probe.ts | 78 +
packages/core/test/filesystem/watcher.test.ts | 254 +-
packages/core/test/fixture/install-version.ts | 17 +
.../core/test/fixture/ledger-id-worker.ts | 9 +
packages/core/test/fixture/tmpdir.ts | 91 +
.../test/fixture/v2-owner-dev-mint-worker.ts | 23 +
.../test/fixture/v2-provider-owner-process.ts | 140 +-
.../openai-chat-streams-text.json | 52 +-
packages/core/test/im-agent-executor.test.ts | 47 -
.../core/test/im-agent-reply-sink.test.ts | 258 -
packages/core/test/im-broadcaster.test.ts | 54 +
packages/core/test/im-context-builder.test.ts | 55 -
packages/core/test/im-e2e.test.ts | 25 +-
packages/core/test/im-integration.test.ts | 61 -
packages/core/test/im-orchestrator.test.ts | 365 -
packages/core/test/legacy-zero-gate.test.ts | 164 +-
packages/core/test/location-layer.test.ts | 157 +-
packages/core/test/manifest-digest.test.ts | 45 +-
.../core/test/migration-registry-gate.test.ts | 45 +-
packages/core/test/model-protocol.test.ts | 2 +-
.../core/test/models-dev-vendored.test.ts | 42 +-
packages/core/test/models.test.ts | 80 +-
.../core/test/perf-baseline-fixtures.test.ts | 13 +-
.../core/test/perf-baseline-manifest.test.ts | 7 +-
packages/core/test/permission.test.ts | 47 +
.../core/test/plugin/provider-dynamic.test.ts | 3 +-
.../test/prepared-attempt-identity.test.ts | 109 +-
packages/core/test/process/process.test.ts | 5 +-
.../test/production-runtime-integrity.test.ts | 774 +
.../core/test/prompt-stage-slimming.test.ts | 69 +
.../test/pty/pty-output-isolation.test.ts | 17 +
packages/core/test/question.test.ts | 21 +
packages/core/test/rate-limiter.test.ts | 14 +
.../core/test/recovery-binding-audit.test.ts | 8 +
.../core/test/recovery-durable-store.test.ts | 687 +
packages/core/test/retention-sweeper.test.ts | 35 +-
packages/core/test/runtime-features.test.ts | 22 +
packages/core/test/session-compaction.test.ts | 27 +
packages/core/test/session-create.test.ts | 294 +-
packages/core/test/session-execution.test.ts | 468 +-
.../test/session-history-projection.test.ts | 387 +
packages/core/test/session-projector.test.ts | 114 +
packages/core/test/session-prompt.test.ts | 5 +-
...ession-provider-attempt-resolution.test.ts | 8 +-
.../core/test/session-run-coordinator.test.ts | 31 +-
.../test/session-runner-attachments.test.ts | 288 +
.../test/session-runner-canonical.test.ts | 488 +-
.../core/test/session-runner-identity.test.ts | 133 +-
.../core/test/session-runner-message.test.ts | 37 +
.../session-runner-model-location.test.ts | 296 +
.../core/test/session-runner-model.test.ts | 78 +-
.../core/test/session-runner-recorded.test.ts | 94 +-
.../session-runner-startup-inventory.test.ts | 570 +-
.../test/session-runner-tool-registry.test.ts | 41 +
packages/core/test/session-runner.test.ts | 1871 +-
.../core/test/session-runtime-status.test.ts | 65 +
packages/core/test/session-update.test.ts | 353 +
.../test/session-v2-provider-turn.test.ts | 469 +-
.../core/test/session-v2-tool-effect.test.ts | 81 +-
.../core/test/session-wire-egress.test.ts | 264 +
packages/core/test/skill.test.ts | 3 +
.../capability-adversarial.test.ts | 64 +-
.../system-context/capability-bodies.test.ts | 85 +-
.../system-context/capability-catalog.test.ts | 55 +-
.../capability-dead-code.test.ts | 15 +-
.../system-context/capability-eval.test.ts | 6 +-
.../capability-l2-production.test.ts | 739 +
.../capability-load-adapter.test.ts | 264 +-
.../system-context/capability-load.test.ts | 4 +-
.../system-context/capability-loader.test.ts | 63 +-
.../capability-manifest.test.ts | 70 +-
.../capability-runtime-search.test.ts | 29 +-
.../system-context/capability-search.test.ts | 7 +
.../capability-snapshot.test.ts | 19 +-
.../test/system-context/project-docs.test.ts | 745 +
.../core/test/system-context/registry.test.ts | 15 +
.../test/task-dispatcher-recovery-process.ts | 144 +
packages/core/test/task-pr-review.test.ts | 400 +
packages/core/test/task-run-authority.test.ts | 528 +
packages/core/test/task-run-crash-process.ts | 120 +
.../core/test/task-run-dispatcher.test.ts | 883 +
packages/core/test/task-workspace.test.ts | 484 +
.../tool-classification-consistency.test.ts | 48 +
packages/core/test/tool-context-query.test.ts | 107 +
packages/core/test/tool-edit-replace.test.ts | 93 +
packages/core/test/tool-edit.test.ts | 3 +-
packages/core/test/tool-plan.test.ts | 109 +
packages/core/test/tool-question.test.ts | 12 +-
packages/core/test/tool-read.test.ts | 8 +-
packages/core/test/tool-surface-v2.test.ts | 110 +
packages/core/test/tool-task-policy.test.ts | 148 +
packages/core/test/tool-write.test.ts | 105 +-
packages/core/test/turn-observability.test.ts | 164 +
packages/core/test/util/effect-flock.test.ts | 66 +-
packages/core/test/util/flock.test.ts | 3 +-
packages/core/test/util/identifier.test.ts | 10 +
packages/core/test/util/log.test.ts | 44 +
.../core/test/v2-owner-authorization.test.ts | 145 +-
packages/core/test/v2-owner-dev-mint.test.ts | 200 +
.../test/v2-owner-production-mint.test.ts | 452 +
.../core/test/v2-owner-renew-guard.test.ts | 370 +
packages/core/test/v2-owner-seed.test.ts | 492 +
.../test/v2-provider-cutover-release.test.ts | 18 +-
.../test/v2-provider-owner-rotation.test.ts | 137 +
.../v2-structured-output-evidence.test.ts | 519 +
.../core/test/workspace-concurrency.test.ts | 14 +
packages/deepagent-code/package.json | 20 +-
.../script/ablation/battery-tasks.ts | 367 +
.../script/ablation/run-eval-battery.ts | 307 +
.../script/assert-capability-inventory.ts | 38 +
.../deepagent-code/script/audit-branding.ts | 290 +
packages/deepagent-code/script/build-node.ts | 6 +
packages/deepagent-code/script/build.ts | 26 +-
.../script/core-v2-caller-inventory.ts | 2 -
.../live-llm/activity-progress-lifecycle.ts | 9 +-
.../live-llm/activity-progress-oracle.ts | 146 +-
.../script/live-llm/autonomous-eval.ts | 6 +-
.../script/live-llm/cli-goal-loop.ts | 8 +-
.../script/live-llm/cli-headless.ts | 8 +-
.../live-llm/continuation-repetition.ts | 24 +-
.../script/live-llm/expert-panel.ts | 4 +-
.../script/live-llm/file-tools.ts | 7 +-
.../script/live-llm/finalizer-isolation.ts | 4 +-
.../script/live-llm/long-session.ts | 2 +-
.../script/live-llm/mcp-marker.ts | 2 +-
.../script/live-llm/multi-agent-dag.ts | 4 +-
.../multi-agent-parallel-worktrees.ts | 4 +-
.../live-llm/multi-agent-pr-collaboration.ts | 4 +-
.../script/live-llm/packaged-v2-owner.ts | 4 +-
.../script/live-llm/plan-advance-contract.ts | 6 +-
.../script/live-llm/plan-advance-oracle.ts | 67 +-
.../live-llm/plan-create-replan-contract.ts | 5 +-
.../script/live-llm/recovery.ts | 37 +-
.../deepagent-code/script/live-llm/routes.ts | 67 +-
.../deepagent-code/script/live-llm/runtime.ts | 172 +-
.../script/live-llm/stale-validation.ts | 20 +-
.../live-llm/structured-output-legacy.ts | 46 +-
.../script/live-llm/subagent-background.ts | 16 +-
.../script/live-llm/subagent-intensity.ts | 2 +-
.../script/live-llm/subagent-interrupted.ts | 4 +-
.../script/live-llm/subagent-resume.ts | 4 +-
.../script/live-llm/subagent-takeover.ts | 4 +-
.../script/live-llm/subagent-worktree.ts | 20 +-
.../script/live-llm/subagents.ts | 4 +-
.../script/live-llm/tool-ecosystem.ts | 8 +-
.../script/live-llm/v4-multi-agent-runtime.ts | 2 +-
.../script/mint-owner-campaign.ts | 646 +
packages/deepagent-code/script/publish.ts | 2 +-
.../script/replay-history/extract.ts | 170 +
.../script/replay-history/replay-worker.ts | 175 +
.../script/replay-history/replay.ts | 73 +
.../deepagent-code/script/trace-imports.ts | 2 +-
packages/deepagent-code/src/acp/agent.ts | 14 +-
packages/deepagent-code/src/acp/directory.ts | 125 +-
packages/deepagent-code/src/acp/event.ts | 37 +-
packages/deepagent-code/src/acp/permission.ts | 30 +-
packages/deepagent-code/src/acp/service.ts | 30 +-
packages/deepagent-code/src/acp/session.ts | 217 +-
packages/deepagent-code/src/agent/agent.ts | 27 +
packages/deepagent-code/src/bus/global.ts | 10 +-
packages/deepagent-code/src/cli/cmd/acp.ts | 103 +-
packages/deepagent-code/src/cli/cmd/agent.ts | 7 +-
.../src/cli/cmd/debug/agent.handler.ts | 21 +-
.../deepagent-code/src/cli/cmd/debug/scrap.ts | 7 +-
.../deepagent-code/src/cli/cmd/debug/v2.ts | 2 +-
packages/deepagent-code/src/cli/cmd/docs.ts | 116 +
.../deepagent-code/src/cli/cmd/generate.ts | 2 +-
.../src/cli/cmd/github.handler.ts | 239 +-
.../src/cli/cmd/github.shared.ts | 17 -
packages/deepagent-code/src/cli/cmd/github.ts | 2 +-
packages/deepagent-code/src/cli/cmd/mcp.ts | 4 +-
packages/deepagent-code/src/cli/cmd/run.ts | 297 +-
.../deepagent-code/src/cli/cmd/run/otel.ts | 6 +-
.../src/cli/cmd/run/runtime.boot.ts | 2 +-
.../src/cli/cmd/run/stream.transport.ts | 22 +-
.../src/cli/cmd/run/variant.shared.ts | 8 +-
packages/deepagent-code/src/cli/cmd/serve.ts | 55 +-
packages/deepagent-code/src/cli/cmd/tui.ts | 6 +-
packages/deepagent-code/src/cli/cmd/web.ts | 151 +-
packages/deepagent-code/src/cli/effect-cmd.ts | 23 +
packages/deepagent-code/src/cli/heap.ts | 5 +
packages/deepagent-code/src/cli/tui/worker.ts | 8 +-
packages/deepagent-code/src/config/config.ts | 37 +-
packages/deepagent-code/src/config/tui.ts | 6 +-
.../context-federation/artifact-service.ts | 71 +-
.../src/context-federation/diagnostics.ts | 35 +-
.../federated-query-service.ts | 409 +-
.../src/context-federation/observability.ts | 159 -
.../context-federation/production-sources.ts | 188 +
.../context-federation/query-authorization.ts | 29 +-
.../session-context-runtime.ts | 212 +-
.../src/context-federation/v2-tool-runtime.ts | 54 +
.../src/control-plane/workspace.ts | 2 +-
packages/deepagent-code/src/debug/client.ts | 62 +-
packages/deepagent-code/src/debug/service.ts | 183 +-
.../deepagent-code/src/deepagent/config.ts | 14 +-
.../src/deepagent/learning-reviewer-runner.ts | 152 +
.../src/deepagent/learning-runtime.ts | 916 +-
.../src/deepagent/session-finalizer.ts | 348 +
.../src/deepagent/workspace-context.ts | 96 +-
.../deepagent-code/src/effect/app-runtime.ts | 174 +-
.../src/effect/bootstrap-runtime.ts | 23 -
packages/deepagent-code/src/effect/bridge.ts | 17 +-
.../src/effect/composition-digest.ts | 192 +
.../src/effect/dev-campaign-mint.ts | 13 +-
.../src/effect/instance-registry.ts | 103 +-
.../src/effect/instance-state.ts | 42 +-
.../src/effect/process-lifecycle.ts | 2 +
.../deepagent-code/src/effect/run-service.ts | 21 +-
packages/deepagent-code/src/effect/runner.ts | 32 +-
.../src/effect/runtime-flags.ts | 77 +-
.../src/effect/runtime-integrity-identity.ts | 156 +
.../deepagent-code/src/event-v2-bridge.ts | 320 +-
.../src/event/v2-outbox-runtime.ts | 224 +
.../src/event/v2-outbox-writer.ts | 215 +
.../src/github/github-agent-execution.ts | 157 +
.../src/im/agent-executor-server.ts | 224 +-
.../src/im/agent-progress-stream.ts | 167 -
.../src/im/agent-reply-sink-server.ts | 152 -
.../src/im/im-agent-execution.ts | 111 +
.../deepagent-code/src/im/im-reply-outbox.ts | 464 +
.../deepagent-code/src/import/util/secrets.ts | 6 +-
packages/deepagent-code/src/index.ts | 92 +-
.../deepagent-code/src/installation/index.ts | 44 +-
.../src/location-index/runtime.ts | 68 +-
packages/deepagent-code/src/mcp/index.ts | 15 +-
.../deepagent-code/src/mcp/oauth-callback.ts | 90 +-
packages/deepagent-code/src/node.ts | 14 +
.../deepagent-code/src/panel/orchestrator.ts | 9 +-
.../src/panel/panel-convene-consumer.ts | 128 +-
.../deepagent-code/src/plugin/digitalocean.ts | 61 +-
packages/deepagent-code/src/plugin/index.ts | 7 +-
.../deepagent-code/src/plugin/openai/codex.ts | 84 +-
packages/deepagent-code/src/plugin/shared.ts | 10 +
packages/deepagent-code/src/plugin/xai.ts | 46 +-
.../deepagent-code/src/project/bootstrap.ts | 39 +-
.../src/project/instance-layer.ts | 8 +-
.../src/project/instance-store.ts | 46 +-
.../deepagent-code/src/project/project.ts | 4 +-
.../src/provider/compatibility.ts | 7 +-
.../src/provider/discovery-cache.ts | 8 +
.../deepagent-code/src/provider/provider.ts | 11 +-
.../deepagent-code/src/reference/reference.ts | 2 +-
.../deepagent-code/src/runtime-defaults.ts | 87 +
.../src/server/recovery-executor.ts | 229 +
.../src/server/routes/instance/httpapi/api.ts | 20 +-
.../instance/httpapi/groups/capability.ts | 15 +-
.../routes/instance/httpapi/groups/context.ts | 14 +-
.../instance/httpapi/groups/deepagent.ts | 27 +
.../routes/instance/httpapi/groups/global.ts | 47 +-
.../instance/httpapi/groups/maintenance.ts | 61 +-
.../routes/instance/httpapi/groups/session.ts | 49 +-
.../instance/httpapi/groups/system-context.ts | 9 +-
.../routes/instance/httpapi/groups/tui.ts | 24 -
.../instance/httpapi/handlers/capability.ts | 35 +-
.../instance/httpapi/handlers/context.ts | 106 +-
.../routes/instance/httpapi/handlers/debug.ts | 25 +-
.../instance/httpapi/handlers/deepagent.ts | 191 +-
.../routes/instance/httpapi/handlers/event.ts | 58 +-
.../instance/httpapi/handlers/experimental.ts | 6 +-
.../routes/instance/httpapi/handlers/file.ts | 2 +-
.../instance/httpapi/handlers/global.ts | 59 +-
.../instance/httpapi/handlers/im-config.ts | 6 +
.../instance/httpapi/handlers/im-websocket.ts | 145 +-
.../routes/instance/httpapi/handlers/im.ts | 224 +-
.../instance/httpapi/handlers/instance.ts | 19 +-
.../instance/httpapi/handlers/maintenance.ts | 543 +-
.../instance/httpapi/handlers/profile.ts | 56 +-
.../routes/instance/httpapi/handlers/pty.ts | 67 +-
.../instance/httpapi/handlers/session.ts | 238 +-
.../routes/instance/httpapi/handlers/sync.ts | 95 +-
.../httpapi/handlers/system-context.ts | 22 +-
.../routes/instance/httpapi/handlers/tui.ts | 12 -
.../instance/httpapi/maintenance-registry.ts | 280 +-
.../instance/httpapi/middleware/proxy.ts | 4 +-
.../server/routes/instance/httpapi/public.ts | 9 +-
.../server/routes/instance/httpapi/server.ts | 216 +-
.../routes/instance/httpapi/typed-error.ts | 6 +-
.../instance/httpapi/websocket-tracker.ts | 4 +-
packages/deepagent-code/src/server/server.ts | 161 +-
.../src/server/shared/public-ui.ts | 6 +-
.../src/server/shared/tui-control.ts | 28 -
.../deepagent-code/src/server/shared/ui.ts | 5 +-
.../src/session/agent-handoff-consumer.ts | 9 +
.../src/session/branch-provisioner.ts | 415 -
.../src/session/command-effect-receipt.ts | 287 +
.../deepagent-code/src/session/command-v2.ts | 528 +
.../src/session/deepagent-multiround.ts | 10 +-
.../src/session/durable-executor-lock.ts | 242 -
.../src/session/event-dispatcher.ts | 357 +-
.../src/session/facade-activity.ts | 380 +-
.../deepagent-code/src/session/goal-driver.ts | 30 +-
.../src/session/goal-loop-wiring.ts | 322 +-
.../src/session/goal-manager.ts | 25 +-
.../src/session/goal-tick-consumer.ts | 85 +-
.../src/session/goal-tick-port.ts | 14 +-
.../legacy-provider-receipt-recovery.ts | 614 +
packages/deepagent-code/src/session/llm.ts | 7 +-
.../src/session/llm/native-runtime.ts | 22 +-
.../deepagent-code/src/session/llm/request.ts | 8 -
.../src/session/multi-agent-runtime.ts | 127 +-
.../deepagent-code/src/session/overflow.ts | 3 +-
.../deepagent-code/src/session/processor.ts | 90 +-
.../deepagent-code/src/session/prompt-v2.ts | 1780 ++
packages/deepagent-code/src/session/prompt.ts | 7338 ------
.../src/session/prompt/deepseek.txt | 33 +
.../src/session/prompt/max-steps.txt | 16 -
.../session/prompt/workflow-discipline.txt | 11 +
packages/deepagent-code/src/session/revert.ts | 12 +-
.../deepagent-code/src/session/run-state.ts | 35 +-
.../deepagent-code/src/session/session.ts | 365 +-
packages/deepagent-code/src/session/status.ts | 4 +
.../src/session/structured-output-prompt.ts | 123 +
.../deepagent-code/src/session/summary.ts | 14 +-
.../src/session/supervisor-notifier.ts | 104 +-
packages/deepagent-code/src/session/system.ts | 24 +-
.../src/session/task-delivery.ts | 698 -
.../src/session/task-dispatcher.ts | 396 -
.../src/session/task-executor.ts | 1418 --
.../deepagent-code/src/session/task-input.ts | 572 -
.../src/session/task-pr-submission.ts | 98 -
.../src/session/task-worktree.ts | 449 -
packages/deepagent-code/src/session/todo.ts | 24 +-
.../src/session/tool-capability.ts | 276 -
packages/deepagent-code/src/session/tools.ts | 152 +-
.../src/session/v2-agent-roster.ts | 67 +
.../src/session/v2-mcp-bridge.ts | 116 +
.../src/session/v2-plan-gate.ts | 218 +
.../src/session/v2-plugin-tools-bridge.ts | 258 +
.../src/session/v2-runner-frame.ts | 292 +
.../src/session/v2-turn-evidence.ts | 51 +-
.../src/session/v4-event-runtime.ts | 566 +-
.../src/session/workspace-preflight.ts | 589 -
packages/deepagent-code/src/settings/store.ts | 81 +-
.../deepagent-code/src/share/share-next.ts | 8 +-
packages/deepagent-code/src/skill/index.ts | 2 +-
packages/deepagent-code/src/snapshot/index.ts | 16 +-
.../src/tool/activity_facade.ts | 5 +-
.../deepagent-code/src/tool/code_intel.ts | 2 +-
packages/deepagent-code/src/tool/edit.ts | 27 +-
.../deepagent-code/src/tool/plan-write.ts | 275 +-
.../deepagent-code/src/tool/plan-write.txt | 41 +-
.../deepagent-code/src/tool/pr_finalize.ts | 654 +-
packages/deepagent-code/src/tool/read.ts | 2 +-
packages/deepagent-code/src/tool/registry.ts | 25 +-
packages/deepagent-code/src/tool/spec.ts | 74 +
packages/deepagent-code/src/tool/spec.txt | 7 +
packages/deepagent-code/src/tool/task-run.ts | 2191 +-
.../tool/task-structured-output-evidence.ts | 593 +-
packages/deepagent-code/src/tool/task.ts | 3202 +--
packages/deepagent-code/src/util/queue.ts | 32 -
packages/deepagent-code/src/util/rpc.ts | 166 +-
.../src/wiki/event-driven-archiver.ts | 47 +-
.../src/wiki/session-archive.ts | 9 +-
.../deepagent-code/src/wiki/wiki-service.ts | 5 +-
packages/deepagent-code/src/worktree/index.ts | 2 +-
.../deepagent-code/test/acp/directory.test.ts | 15 +
.../test/acp/permission.test.ts | 41 +-
.../deepagent-code/test/acp/session.test.ts | 38 +
.../test/agent/pr-queue-process.test.ts | 8 +-
.../test/agent/pr-queue.test.ts | 3 +-
.../test/audit-branding.test.ts | 105 +
packages/deepagent-code/test/cli/docs.test.ts | 131 +
.../test/cli/github-action.test.ts | 304 +-
.../test/cli/github-remote.test.ts | 36 +-
.../test/cli/goal-worktree.test.ts | 8 +-
.../test/cli/no-process-exit.test.ts | 40 +
.../test/cli/query-commands.test.ts | 32 +-
.../test/cli/run/run-process.test.ts | 39 +-
.../test/cli/run/run-timeout.test.ts | 47 +
.../test/cli/serve/kill9-redrive.test.ts | 418 +
.../serve/packaged-composition-digest.test.ts | 83 +
.../test/cli/serve/packaged-fork.test.ts | 139 +-
.../test/cli/serve/serve-file-db.test.ts | 82 +
.../test/cli/serve/serve-process.test.ts | 29 +
.../deepagent-code/test/config/tui.test.ts | 15 +-
.../context-federation/diagnostics.test.ts | 24 +-
.../learning-release-run-ab.test.ts | 6 +-
.../production-sources.test.ts | 499 +
.../session-context-runtime.test.ts | 3 +
.../v2-runner-frame.test.ts | 503 +
.../test/control-plane/admission.test.ts | 457 -
.../test/control-plane/delivery.test.ts | 299 -
.../test/control-plane/dispatcher.test.ts | 237 -
.../test/control-plane/executor.test.ts | 1619 --
.../test/control-plane/invariants.test.ts | 373 -
.../test/control-plane/mode.test.ts | 49 -
.../test/control-plane/recovery.test.ts | 395 -
.../structured-response-recovery.test.ts | 191 -
.../test/control-plane/two-connection.test.ts | 99 -
.../control-plane/wave3-durability.test.ts | 393 -
.../test/control-plane/workspace.test.ts | 109 +-
.../deepagent-code/test/deepagent/_gateway.ts | 16 +-
.../deepagent/activity-attribution.test.ts | 636 +
.../test/deepagent/config.test.ts | 28 +-
.../dap-client-initialize-launch-stop.test.ts | 51 +
.../deepagent/debug-tool-d3-execute.test.ts | 9 +-
.../deepagent/finalizer-delivery-v2.test.ts | 554 +
.../deepagent/knowledge-import-cache.test.ts | 5 +-
.../deepagent/learning-lifecycle-e2e.test.ts | 137 +-
.../deepagent/learning-reviewer-port.test.ts | 226 +-
.../test/deepagent/learning-runtime.test.ts | 214 +
.../test/deepagent/learning-v2-settle.test.ts | 702 +
.../deepagent/learning-writeback-gate.test.ts | 42 +-
.../mcp-secret-no-keyring-fallback.test.ts | 3 +-
.../test/deepagent/multiround.test.ts | 6 +-
.../test/deepagent/profile-detector.test.ts | 3 +-
.../deepagent/profile-tool-d3-execute.test.ts | 4 +-
.../test/deepagent/request-prep.test.ts | 25 +-
.../test/deepagent/run-review.test.ts | 3 +-
.../test/deepagent/session-finalizer.test.ts | 238 +
.../deepagent/tool-success-resources.test.ts | 61 +
.../test/deepagent/workspace-context.test.ts | 64 +
.../test/effect/app-runtime-logger.test.ts | 22 +-
.../app-runtime-v1-assembly-lock.test.ts | 100 +
.../test/effect/composition-digest.test.ts | 215 +
.../test/effect/instance-registry.test.ts | 54 +
.../test/effect/process-lifecycle.test.ts | 23 +
.../test/effect/run-service.test.ts | 20 +-
.../deepagent-code/test/effect/runner.test.ts | 40 +
.../test/effect/runtime-flags.test.ts | 86 +-
.../test/event-v2-bridge.test.ts | 233 +-
.../test/event/spool-drain.test.ts | 309 +
.../test/event/v2-outbox-writer.test.ts | 319 +
.../test/fixture/debug/fake-dap-adapter.js | 7 +
.../fixture/durable-executor-lock-worker.ts | 28 -
.../deepagent-code/test/fixture/fixture.ts | 72 +
.../test/fixture/provider-recovery.ts | 163 +
.../deepagent-code/test/fixture/workspace.ts | 4 +-
.../session/native-zen-tool-loop.json | 4 +-
.../test/im-single-write-gate.test.ts | 39 -
.../test/im/agent-executor-server.test.ts | 188 -
.../test/im/agent-reply-sink-steered.test.ts | 80 -
.../test/im/im-agent-execution.test.ts | 109 +
.../test/im/im-reply-outbox.test.ts | 327 +
.../test/installation/installation.test.ts | 26 +-
.../deepagent-code/test/lib/cli-process.ts | 83 +-
packages/deepagent-code/test/lib/effect.ts | 8 +-
.../deepagent-code/test/lib/llm-server.ts | 4 +-
packages/deepagent-code/test/lib/v2-owner.ts | 48 +
.../test/mcp/oauth-callback.test.ts | 48 +
.../test/panel/panel-convene-consumer.test.ts | 12 +
.../deepagent-code/test/patch/patch.test.ts | 3 +-
.../test/plugin/workspace-adapter.test.ts | 4 +-
packages/deepagent-code/test/preload.ts | 11 +
.../test/project/instance-bootstrap.test.ts | 6 +-
.../test/project/instance.test.ts | 53 +-
.../test/provider/discovery-cache.test.ts | 22 +-
.../test/provider/provider.test.ts | 15 +
.../test/runtime-defaults.test.ts | 157 +
.../script/ablation-battery-tasks.test.ts | 71 +
.../script/core-v2-caller-inventory.test.ts | 44 +-
.../live-llm-activity-progress-oracle.test.ts | 2 +-
.../script/live-llm-goal-cli-oracle.test.ts | 9 +-
.../test/script/live-llm-routes.test.ts | 6 +-
.../test/script/models-data.test.ts | 3 +-
.../test/script/run-live-llm-all.test.ts | 64 +
.../server/httpapi-c6-union-split.test.ts | 17 +-
.../server/httpapi-capability-domain.test.ts | 6 +-
.../test/server/httpapi-context.test.ts | 7 +-
.../test/server/httpapi-cors.test.ts | 50 +-
.../server/httpapi-deepagent-release.test.ts | 142 +-
.../test/server/httpapi-exercise/index.ts | 18 -
.../test/server/httpapi-exercise/runner.ts | 1 -
.../test/server/httpapi-exercise/runtime.ts | 3 -
.../test/server/httpapi-exercise/types.ts | 1 -
.../test/server/httpapi-im-agent.test.ts | 168 +-
.../test/server/httpapi-im-websocket.test.ts | 665 +
.../test/server/httpapi-instance.test.ts | 96 +-
.../test/server/httpapi-layer.ts | 32 +-
.../server/httpapi-listen-fallback.test.ts | 77 +
.../test/server/httpapi-listen.test.ts | 51 +-
.../server/httpapi-maintenance-boot.test.ts | 306 +
.../httpapi-maintenance-registry.test.ts | 131 +-
.../test/server/httpapi-packs-events.test.ts | 22 +-
.../server/httpapi-provider-recovery.test.ts | 184 +-
.../server/httpapi-public-openapi.test.ts | 38 +-
.../test/server/httpapi-sdk.test.ts | 110 +-
.../test/server/httpapi-session.test.ts | 507 +-
.../test/server/httpapi-sync.test.ts | 140 +
.../httpapi-typed-error-dynamic.test.ts | 276 +
.../test/server/im-config.test.ts | 14 +
.../recovery-executor-production.test.ts | 598 +
.../test/server/websocket-tracker.test.ts | 17 +
.../session/activity-progress-runtime.test.ts | 1745 --
.../test/session/agent-worktree.test.ts | 5 +-
.../session/bug-008-activity-leak.test.ts | 565 -
.../test/session/context-ledger.test.ts | 13 +-
.../session/conversation-log-writer.test.ts | 19 +-
.../session/durable-executor-lock.test.ts | 139 -
.../test/session/event-dispatcher.test.ts | 7 +-
.../test/session/facade-activity-task.test.ts | 396 +
.../test/session/facade-activity.test.ts | 120 +-
.../test/session/flag-independence.test.ts | 30 +-
.../test/session/goal-driver.test.ts | 24 +-
.../session/goal-loop-bcd-integration.test.ts | 32 +-
.../test/session/goal-loop-wiring.test.ts | 463 +-
.../test/session/goal-steer.test.ts | 147 +-
.../session/goal-tick-cold-recovery.test.ts | 33 +-
.../test/session/goal-tick-consumer.test.ts | 62 +
.../test/session/incident-regression.test.ts | 147 +-
.../learning-lifecycle-callers.test.ts | 21 +-
.../legacy-provider-resolution.test.ts | 2 +-
.../test/session/llm-native.test.ts | 35 +
.../test/session/mention-router.test.ts | 607 +
.../multi-agent-runtime-v2-admission.test.ts | 75 +-
.../test/session/multi-agent-runtime.test.ts | 18 +-
.../session/multi-process-takeover.test.ts | 359 -
.../test/session/plan-protocol-budget.test.ts | 461 +
.../test/session/processor-effect.test.ts | 7 +-
.../test/session/prompt.test.ts | 5737 +++--
.../session/provider-receipt-recovery.test.ts | 5 +-
.../test/session/schema-decoding.test.ts | 13 +-
.../test/session/session-update-v2.test.ts | 237 +
.../test/session/session.test.ts | 29 +-
.../test/session/snapshot-tool-race.test.ts | 139 +-
.../deepagent-code/test/session/steer.test.ts | 601 +-
.../test/session/strict-plan-gate.test.ts | 361 +
.../structured-output-integration.test.ts | 12 +-
.../test/session/structured-output.test.ts | 44 +-
.../test/session/supervisor-notifier.test.ts | 10 +-
.../test/session/system.test.ts | 31 +-
.../test/session/task-worktree.test.ts | 490 -
.../test/session/tool-capability.test.ts | 82 -
.../session/tool-sequence-tracker.test.ts | 38 +-
.../test/session/v2-admission-bridge.test.ts | 4 +-
.../test/session/v2-mcp-bridge.test.ts | 163 +
.../session/v2-plan-gate-unseeded.test.ts | 203 +
.../session/v2-plugin-tools-bridge.test.ts | 318 +
.../test/session/v4-event-runtime.test.ts | 550 +-
.../test/session/v4-integration.test.ts | 179 +-
.../test/settings/store.test.ts | 49 +-
.../test/share/share-next.test.ts | 92 +-
.../test/tool/degraded-text-recovery.test.ts | 312 -
.../test/tool/fixtures/models-api.json | 8 +-
.../deepagent-code/test/tool/grep.test.ts | 4 +-
.../test/tool/no-dual-owner.test.ts | 79 +
.../test/tool/parameters.test.ts | 20 +-
.../test/tool/plan-write.test.ts | 223 +-
.../test/tool/pr-finalize.test.ts | 1158 +-
.../deepagent-code/test/tool/registry.test.ts | 4 +
.../test/tool/task-finalizer.test.ts | 595 -
.../deepagent-code/test/tool/task-run.test.ts | 1073 -
.../test/tool/task-takeover.test.ts | 532 -
.../test/tool/task-v2-authority.test.ts | 546 +
.../deepagent-code/test/tool/task.test.ts | 2757 +--
packages/deepagent-code/test/util/log.test.ts | 17 +
packages/deepagent-code/test/util/rpc.test.ts | 67 +
.../test/wiki/event-driven-archiver.test.ts | 10 +
packages/deepagent-code/test/wiki/helpers.ts | 3 +-
.../test/wiki/session-archive-wiring.test.ts | 3 +-
.../test/worktree/safe-git-hardening.test.ts | 5 +-
packages/desktop/package.json | 7 +-
packages/desktop/scripts/copy-metainfo.ts | 6 +-
.../live-llm/activity-progress-package.ts | 8 +-
.../live-llm/activity-progress-restart.ts | 10 +-
.../scripts/live-llm/packaged-sidecar.ts | 16 +-
packages/desktop/scripts/live-llm/runtime.ts | 77 +-
.../desktop/scripts/sidecar-health-smoke.ts | 144 +
packages/desktop/scripts/subagents-smoke.ts | 4 +-
packages/desktop/scripts/tsconfig.json | 22 +
.../src/main/attachment-picker.test.ts | 26 +
.../desktop/src/main/attachment-picker.ts | 35 +-
packages/desktop/src/main/index.ts | 68 +-
packages/desktop/src/main/ipc.ts | 11 +-
packages/desktop/src/main/server.ts | 27 +-
.../desktop/src/main/sidecar-routing.test.ts | 402 +
packages/desktop/src/main/sidecar-routing.ts | 232 +
packages/desktop/src/main/store.ts | 22 +-
packages/desktop/src/main/wsl/servers.ts | 15 +-
packages/desktop/src/preload/index.ts | 12 +-
packages/desktop/src/renderer/index.tsx | 8 +-
packages/desktop/tsconfig.json | 2 +-
packages/docs/docs.json | 2 +-
packages/function/package.json | 7 +-
packages/function/src/api.ts | 559 +-
packages/function/src/server.ts | 20 +-
packages/function/src/store.ts | 299 +-
packages/function/src/subscribers.ts | 46 +-
packages/function/test/share-store-writer.ts | 16 +
packages/function/test/store.test.ts | 331 +
packages/function/tsconfig.json | 2 +-
packages/http-recorder/package.json | 6 +-
packages/llm/package.json | 1 +
packages/llm/script/live-llm/assertions.ts | 35 +-
packages/llm/script/live-llm/config.ts | 77 +-
.../llm/script/live-llm/provider-abort.ts | 12 +-
.../llm/script/live-llm/provider-smoke.ts | 26 +-
.../live-llm/structured-output-adapter.ts | 21 +-
packages/llm/src/index.ts | 2 +-
packages/llm/src/protocols/openai-chat.ts | 17 +-
.../llm/src/protocols/utils/openai-options.ts | 11 +-
packages/llm/src/route/client.ts | 45 +-
packages/llm/src/schema/messages.ts | 7 +-
packages/llm/test/adapter.test.ts | 40 +-
.../llm/test/provider/openai-chat.test.ts | 47 +
.../provider/openai-compatible-chat.test.ts | 1 +
packages/plugin/package.json | 2 +-
packages/plugin/src/tui.ts | 4 +-
packages/sdk/js/src/gen/sdk.gen.ts | 889 +-
packages/sdk/js/src/gen/types.gen.ts | 12933 +++++------
packages/server/package.json | 2 +-
packages/server/src/groups/session.ts | 26 +-
packages/server/src/handlers.ts | 4 -
packages/server/src/handlers/session.ts | 104 +-
packages/server/src/routes.ts | 29 +-
packages/slack/src/index.ts | 234 +-
packages/tui/src/app.tsx | 331 +-
packages/tui/src/audio.ts | 5 +
.../tui/src/component/dialog-agent-system.tsx | 44 +
.../component/dialog-archived-sessions.tsx | 121 +
packages/tui/src/component/dialog-backup.tsx | 81 +
.../tui/src/component/dialog-console-org.tsx | 6 +-
packages/tui/src/component/dialog-debug.tsx | 81 +
.../component/dialog-deepagent-settings.tsx | 138 +
.../tui/src/component/dialog-git-timeline.tsx | 114 +
packages/tui/src/component/dialog-im.tsx | 198 +
.../src/component/dialog-knowledge-review.tsx | 138 +
packages/tui/src/component/dialog-model.tsx | 4 +-
.../tui/src/component/dialog-move-session.tsx | 20 +-
.../tui/src/component/dialog-oversight.tsx | 274 +
packages/tui/src/component/dialog-packs.tsx | 73 +
packages/tui/src/component/dialog-profile.tsx | 91 +
.../tui/src/component/dialog-provider.tsx | 22 +-
.../tui/src/component/dialog-retry-action.tsx | 18 +-
.../tui/src/component/dialog-review-list.tsx | 309 +
.../dialog-session-delete-failed.tsx | 45 +-
.../tui/src/component/dialog-session-list.tsx | 14 +-
packages/tui/src/component/dialog-stats.tsx | 86 +
packages/tui/src/component/dialog-tag.tsx | 47 -
.../tui/src/component/dialog-terminal.tsx | 105 +
packages/tui/src/component/dialog-variant.tsx | 4 +-
.../tui/src/component/dialog-wiki-pages.tsx | 135 +
.../src/component/dialog-workspace-create.tsx | 21 +-
.../src/component/dialog-workspace-list.tsx | 4 +-
.../dialog-workspace-unavailable.tsx | 23 +-
.../tui/src/component/dialog-worktree.tsx | 113 +
.../tui/src/component/error-component.tsx | 2 +-
packages/tui/src/component/im-client.ts | 127 +
.../tui/src/component/prompt/autocomplete.tsx | 12 +-
packages/tui/src/component/prompt/index.tsx | 398 +-
packages/tui/src/component/prompt/move.tsx | 4 +-
.../tui/src/component/prompt/workspace.tsx | 9 +-
packages/tui/src/config/keybind.ts | 2 +
packages/tui/src/context/i18n.tsx | 75 +
packages/tui/src/context/local.tsx | 4 +-
packages/tui/src/context/sync.tsx | 161 +-
.../tui/src/context/v2-wire-projection.ts | 78 +
.../src/feature-plugins/home/tips-view.tsx | 2 +-
.../src/feature-plugins/session/dialog.tsx | 10 +-
.../tui/src/feature-plugins/session/index.tsx | 6 +-
.../feature-plugins/session/preview-pane.tsx | 12 +-
.../feature-plugins/system/diff-viewer.tsx | 153 +-
.../feature-plugins/system/notifications.ts | 15 +
.../src/feature-plugins/system/plugins.tsx | 30 +-
.../src/feature-plugins/system/session-v2.tsx | 8 +-
.../src/feature-plugins/system/which-key.tsx | 64 +-
packages/tui/src/i18n/en.ts | 489 +
packages/tui/src/i18n/i18n.test.ts | 29 +
packages/tui/src/i18n/standalone.ts | 35 +
packages/tui/src/i18n/zh.ts | 489 +
packages/tui/src/i18n/zht.ts | 489 +
packages/tui/src/keymap.tsx | 2 +-
.../session/dialog-fork-from-timeline.tsx | 18 +-
.../tui/src/routes/session/dialog-message.tsx | 10 +-
.../src/routes/session/dialog-subagent.tsx | 4 +-
packages/tui/src/routes/session/footer.tsx | 25 +
packages/tui/src/routes/session/index.tsx | 419 +-
.../tui/src/routes/session/permission.tsx | 110 +-
packages/tui/src/routes/session/question.tsx | 98 +-
.../src/routes/session/subagent-footer.tsx | 6 +-
packages/tui/src/theme/assets/aura.json | 2 +-
packages/tui/src/theme/assets/ayu.json | 2 +-
packages/tui/src/theme/assets/carbonfox.json | 2 +-
.../src/theme/assets/catppuccin-frappe.json | 2 +-
.../theme/assets/catppuccin-macchiato.json | 2 +-
packages/tui/src/theme/assets/catppuccin.json | 2 +-
packages/tui/src/theme/assets/cobalt2.json | 2 +-
packages/tui/src/theme/assets/cursor.json | 2 +-
.../tui/src/theme/assets/deepagent-code.json | 2 +-
packages/tui/src/theme/assets/dracula.json | 2 +-
packages/tui/src/theme/assets/everforest.json | 2 +-
packages/tui/src/theme/assets/flexoki.json | 2 +-
packages/tui/src/theme/assets/github.json | 2 +-
packages/tui/src/theme/assets/gruvbox.json | 2 +-
packages/tui/src/theme/assets/kanagawa.json | 2 +-
.../tui/src/theme/assets/lucent-orng.json | 2 +-
packages/tui/src/theme/assets/material.json | 2 +-
packages/tui/src/theme/assets/matrix.json | 2 +-
packages/tui/src/theme/assets/mercury.json | 2 +-
packages/tui/src/theme/assets/monokai.json | 2 +-
packages/tui/src/theme/assets/nightowl.json | 2 +-
packages/tui/src/theme/assets/nord.json | 2 +-
packages/tui/src/theme/assets/one-dark.json | 2 +-
packages/tui/src/theme/assets/orng.json | 2 +-
packages/tui/src/theme/assets/osaka-jade.json | 2 +-
packages/tui/src/theme/assets/palenight.json | 2 +-
packages/tui/src/theme/assets/rosepine.json | 2 +-
packages/tui/src/theme/assets/solarized.json | 2 +-
.../tui/src/theme/assets/synthwave84.json | 2 +-
packages/tui/src/theme/assets/tokyonight.json | 2 +-
packages/tui/src/theme/assets/vercel.json | 2 +-
packages/tui/src/theme/assets/vesper.json | 2 +-
packages/tui/src/theme/assets/zenburn.json | 2 +-
packages/tui/src/theme/index.ts | 6 +-
packages/tui/src/ui/dialog-alert.tsx | 4 +-
packages/tui/src/ui/dialog-confirm.tsx | 8 +-
packages/tui/src/ui/dialog-export-options.tsx | 6 +-
packages/tui/src/ui/dialog-help.tsx | 6 +-
packages/tui/src/ui/dialog-prompt.tsx | 4 +-
packages/tui/src/ui/dialog-select.tsx | 20 +-
packages/tui/src/ui/dialog.tsx | 9 +-
packages/tui/src/ui/toast.tsx | 4 +-
packages/tui/src/util/selection.ts | 9 +-
packages/tui/src/util/session.ts | 16 +-
packages/tui/test/theme.test.ts | 12 +-
packages/tui/test/util/session.test.ts | 10 +
packages/ui/package.json | 2 +-
packages/ui/src/components/basic-tool.tsx | 5 +
packages/ui/src/components/message-part.tsx | 37 +-
.../components/todo-panel-motion.stories.tsx | 4 +-
.../ui/src/theme/desktop-theme.schema.json | 2 +-
packages/ui/src/theme/themes/amoled.json | 2 +-
packages/ui/src/theme/themes/aura.json | 2 +-
packages/ui/src/theme/themes/ayu.json | 2 +-
packages/ui/src/theme/themes/carbonfox.json | 2 +-
.../src/theme/themes/catppuccin-frappe.json | 2 +-
.../theme/themes/catppuccin-macchiato.json | 2 +-
packages/ui/src/theme/themes/catppuccin.json | 2 +-
packages/ui/src/theme/themes/cobalt2.json | 2 +-
packages/ui/src/theme/themes/cursor.json | 2 +-
.../ui/src/theme/themes/deepagent-code.json | 2 +-
packages/ui/src/theme/themes/dracula.json | 2 +-
packages/ui/src/theme/themes/everforest.json | 2 +-
packages/ui/src/theme/themes/flexoki.json | 2 +-
packages/ui/src/theme/themes/github.json | 2 +-
packages/ui/src/theme/themes/gruvbox.json | 2 +-
packages/ui/src/theme/themes/kanagawa.json | 2 +-
packages/ui/src/theme/themes/lucent-orng.json | 2 +-
packages/ui/src/theme/themes/material.json | 2 +-
packages/ui/src/theme/themes/matrix.json | 2 +-
packages/ui/src/theme/themes/mercury.json | 2 +-
packages/ui/src/theme/themes/monokai.json | 2 +-
packages/ui/src/theme/themes/nightowl.json | 2 +-
packages/ui/src/theme/themes/nord.json | 2 +-
packages/ui/src/theme/themes/oc-2.json | 2 +-
packages/ui/src/theme/themes/one-dark.json | 2 +-
packages/ui/src/theme/themes/onedarkpro.json | 2 +-
packages/ui/src/theme/themes/orng.json | 2 +-
packages/ui/src/theme/themes/osaka-jade.json | 2 +-
packages/ui/src/theme/themes/palenight.json | 2 +-
packages/ui/src/theme/themes/rosepine.json | 2 +-
.../ui/src/theme/themes/shadesofpurple.json | 2 +-
packages/ui/src/theme/themes/solarized.json | 2 +-
packages/ui/src/theme/themes/synthwave84.json | 2 +-
packages/ui/src/theme/themes/tokyonight.json | 2 +-
packages/ui/src/theme/themes/vercel.json | 2 +-
packages/ui/src/theme/themes/vesper.json | 2 +-
packages/ui/src/theme/themes/zenburn.json | 2 +-
packages/web/config.mjs | 8 +-
packages/web/package.json | 4 +-
packages/web/src/components/Lander.astro | 6 +-
packages/web/src/content/docs/agents.mdx | 18 +-
packages/web/src/content/docs/ar/agents.mdx | 18 +-
packages/web/src/content/docs/ar/cli.mdx | 1 -
packages/web/src/content/docs/ar/commands.mdx | 2 +-
packages/web/src/content/docs/ar/config.mdx | 54 +-
.../web/src/content/docs/ar/enterprise.mdx | 4 +-
.../web/src/content/docs/ar/formatters.mdx | 8 +-
packages/web/src/content/docs/ar/go.mdx | 30 +-
packages/web/src/content/docs/ar/index.mdx | 18 +-
packages/web/src/content/docs/ar/keybinds.mdx | 4 +-
packages/web/src/content/docs/ar/lsp.mdx | 14 +-
.../web/src/content/docs/ar/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/ar/models.mdx | 10 +-
.../web/src/content/docs/ar/permissions.mdx | 12 +-
packages/web/src/content/docs/ar/plugins.mdx | 4 +-
.../web/src/content/docs/ar/providers.mdx | 46 +-
packages/web/src/content/docs/ar/rules.mdx | 6 +-
packages/web/src/content/docs/ar/sdk.mdx | 16 +-
packages/web/src/content/docs/ar/share.mdx | 6 +-
packages/web/src/content/docs/ar/themes.mdx | 4 +-
packages/web/src/content/docs/ar/tools.mdx | 30 +-
.../src/content/docs/ar/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/ar/tui.mdx | 2 +-
.../web/src/content/docs/ar/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/ar/zen.mdx | 94 +-
packages/web/src/content/docs/bs/agents.mdx | 18 +-
packages/web/src/content/docs/bs/cli.mdx | 1 -
packages/web/src/content/docs/bs/commands.mdx | 2 +-
packages/web/src/content/docs/bs/config.mdx | 56 +-
.../web/src/content/docs/bs/enterprise.mdx | 4 +-
.../web/src/content/docs/bs/formatters.mdx | 8 +-
packages/web/src/content/docs/bs/github.mdx | 2 +-
packages/web/src/content/docs/bs/go.mdx | 30 +-
packages/web/src/content/docs/bs/index.mdx | 18 +-
packages/web/src/content/docs/bs/keybinds.mdx | 4 +-
packages/web/src/content/docs/bs/lsp.mdx | 14 +-
.../web/src/content/docs/bs/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/bs/models.mdx | 10 +-
.../web/src/content/docs/bs/permissions.mdx | 12 +-
packages/web/src/content/docs/bs/plugins.mdx | 6 +-
.../web/src/content/docs/bs/providers.mdx | 48 +-
packages/web/src/content/docs/bs/rules.mdx | 6 +-
packages/web/src/content/docs/bs/sdk.mdx | 16 +-
packages/web/src/content/docs/bs/share.mdx | 6 +-
packages/web/src/content/docs/bs/themes.mdx | 4 +-
packages/web/src/content/docs/bs/tools.mdx | 30 +-
.../src/content/docs/bs/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/bs/tui.mdx | 2 +-
.../web/src/content/docs/bs/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/bs/zen.mdx | 94 +-
packages/web/src/content/docs/cli.mdx | 1 -
packages/web/src/content/docs/commands.mdx | 2 +-
packages/web/src/content/docs/config.mdx | 70 +-
packages/web/src/content/docs/da/agents.mdx | 18 +-
packages/web/src/content/docs/da/cli.mdx | 1 -
packages/web/src/content/docs/da/commands.mdx | 2 +-
packages/web/src/content/docs/da/config.mdx | 54 +-
.../web/src/content/docs/da/custom-tools.mdx | 2 +-
.../web/src/content/docs/da/enterprise.mdx | 4 +-
.../web/src/content/docs/da/formatters.mdx | 8 +-
packages/web/src/content/docs/da/go.mdx | 30 +-
packages/web/src/content/docs/da/index.mdx | 18 +-
packages/web/src/content/docs/da/keybinds.mdx | 4 +-
packages/web/src/content/docs/da/lsp.mdx | 14 +-
.../web/src/content/docs/da/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/da/models.mdx | 10 +-
.../web/src/content/docs/da/permissions.mdx | 12 +-
packages/web/src/content/docs/da/plugins.mdx | 4 +-
.../web/src/content/docs/da/providers.mdx | 44 +-
packages/web/src/content/docs/da/rules.mdx | 6 +-
packages/web/src/content/docs/da/sdk.mdx | 16 +-
packages/web/src/content/docs/da/share.mdx | 6 +-
packages/web/src/content/docs/da/themes.mdx | 4 +-
packages/web/src/content/docs/da/tools.mdx | 30 +-
.../src/content/docs/da/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/da/tui.mdx | 2 +-
.../web/src/content/docs/da/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/da/zen.mdx | 94 +-
packages/web/src/content/docs/de/agents.mdx | 18 +-
packages/web/src/content/docs/de/cli.mdx | 1 -
packages/web/src/content/docs/de/commands.mdx | 2 +-
packages/web/src/content/docs/de/config.mdx | 54 +-
.../web/src/content/docs/de/enterprise.mdx | 4 +-
.../web/src/content/docs/de/formatters.mdx | 8 +-
packages/web/src/content/docs/de/go.mdx | 30 +-
packages/web/src/content/docs/de/index.mdx | 18 +-
packages/web/src/content/docs/de/keybinds.mdx | 4 +-
packages/web/src/content/docs/de/lsp.mdx | 14 +-
.../web/src/content/docs/de/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/de/models.mdx | 10 +-
.../web/src/content/docs/de/permissions.mdx | 12 +-
packages/web/src/content/docs/de/plugins.mdx | 4 +-
.../web/src/content/docs/de/providers.mdx | 44 +-
packages/web/src/content/docs/de/rules.mdx | 6 +-
packages/web/src/content/docs/de/sdk.mdx | 16 +-
packages/web/src/content/docs/de/share.mdx | 6 +-
packages/web/src/content/docs/de/themes.mdx | 4 +-
packages/web/src/content/docs/de/tools.mdx | 30 +-
.../src/content/docs/de/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/de/tui.mdx | 2 +-
.../web/src/content/docs/de/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/de/zen.mdx | 94 +-
packages/web/src/content/docs/ecosystem.mdx | 2 +-
packages/web/src/content/docs/enterprise.mdx | 4 +-
packages/web/src/content/docs/es/agents.mdx | 18 +-
packages/web/src/content/docs/es/cli.mdx | 1 -
packages/web/src/content/docs/es/commands.mdx | 2 +-
packages/web/src/content/docs/es/config.mdx | 54 +-
.../web/src/content/docs/es/enterprise.mdx | 4 +-
.../web/src/content/docs/es/formatters.mdx | 8 +-
packages/web/src/content/docs/es/go.mdx | 30 +-
packages/web/src/content/docs/es/index.mdx | 18 +-
packages/web/src/content/docs/es/keybinds.mdx | 4 +-
packages/web/src/content/docs/es/lsp.mdx | 14 +-
.../web/src/content/docs/es/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/es/models.mdx | 10 +-
.../web/src/content/docs/es/permissions.mdx | 12 +-
packages/web/src/content/docs/es/plugins.mdx | 4 +-
.../web/src/content/docs/es/providers.mdx | 44 +-
packages/web/src/content/docs/es/rules.mdx | 6 +-
packages/web/src/content/docs/es/sdk.mdx | 16 +-
packages/web/src/content/docs/es/share.mdx | 6 +-
packages/web/src/content/docs/es/themes.mdx | 4 +-
packages/web/src/content/docs/es/tools.mdx | 30 +-
.../src/content/docs/es/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/es/tui.mdx | 2 +-
.../web/src/content/docs/es/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/es/zen.mdx | 94 +-
packages/web/src/content/docs/formatters.mdx | 10 +-
packages/web/src/content/docs/fr/agents.mdx | 18 +-
packages/web/src/content/docs/fr/cli.mdx | 1 -
packages/web/src/content/docs/fr/commands.mdx | 2 +-
packages/web/src/content/docs/fr/config.mdx | 56 +-
.../web/src/content/docs/fr/enterprise.mdx | 4 +-
.../web/src/content/docs/fr/formatters.mdx | 8 +-
packages/web/src/content/docs/fr/go.mdx | 30 +-
packages/web/src/content/docs/fr/index.mdx | 18 +-
packages/web/src/content/docs/fr/keybinds.mdx | 4 +-
packages/web/src/content/docs/fr/lsp.mdx | 14 +-
.../web/src/content/docs/fr/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/fr/models.mdx | 10 +-
.../web/src/content/docs/fr/permissions.mdx | 12 +-
packages/web/src/content/docs/fr/plugins.mdx | 4 +-
.../web/src/content/docs/fr/providers.mdx | 46 +-
packages/web/src/content/docs/fr/rules.mdx | 6 +-
packages/web/src/content/docs/fr/sdk.mdx | 16 +-
packages/web/src/content/docs/fr/share.mdx | 6 +-
packages/web/src/content/docs/fr/themes.mdx | 4 +-
packages/web/src/content/docs/fr/tools.mdx | 30 +-
.../src/content/docs/fr/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/fr/tui.mdx | 2 +-
.../web/src/content/docs/fr/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/fr/zen.mdx | 94 +-
packages/web/src/content/docs/go.mdx | 30 +-
packages/web/src/content/docs/index.mdx | 18 +-
packages/web/src/content/docs/it/agents.mdx | 18 +-
packages/web/src/content/docs/it/cli.mdx | 1 -
packages/web/src/content/docs/it/commands.mdx | 2 +-
packages/web/src/content/docs/it/config.mdx | 56 +-
.../web/src/content/docs/it/enterprise.mdx | 4 +-
.../web/src/content/docs/it/formatters.mdx | 8 +-
packages/web/src/content/docs/it/go.mdx | 30 +-
packages/web/src/content/docs/it/index.mdx | 18 +-
packages/web/src/content/docs/it/keybinds.mdx | 4 +-
packages/web/src/content/docs/it/lsp.mdx | 14 +-
.../web/src/content/docs/it/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/it/models.mdx | 10 +-
.../web/src/content/docs/it/permissions.mdx | 12 +-
packages/web/src/content/docs/it/plugins.mdx | 4 +-
.../web/src/content/docs/it/providers.mdx | 44 +-
packages/web/src/content/docs/it/rules.mdx | 6 +-
packages/web/src/content/docs/it/sdk.mdx | 16 +-
packages/web/src/content/docs/it/share.mdx | 6 +-
packages/web/src/content/docs/it/themes.mdx | 4 +-
packages/web/src/content/docs/it/tools.mdx | 30 +-
.../src/content/docs/it/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/it/tui.mdx | 2 +-
.../web/src/content/docs/it/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/it/zen.mdx | 94 +-
packages/web/src/content/docs/ja/agents.mdx | 18 +-
packages/web/src/content/docs/ja/cli.mdx | 1 -
packages/web/src/content/docs/ja/commands.mdx | 2 +-
packages/web/src/content/docs/ja/config.mdx | 56 +-
.../web/src/content/docs/ja/enterprise.mdx | 4 +-
.../web/src/content/docs/ja/formatters.mdx | 8 +-
packages/web/src/content/docs/ja/go.mdx | 30 +-
packages/web/src/content/docs/ja/index.mdx | 18 +-
packages/web/src/content/docs/ja/keybinds.mdx | 4 +-
packages/web/src/content/docs/ja/lsp.mdx | 14 +-
.../web/src/content/docs/ja/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/ja/models.mdx | 10 +-
.../web/src/content/docs/ja/permissions.mdx | 14 +-
packages/web/src/content/docs/ja/plugins.mdx | 6 +-
.../web/src/content/docs/ja/providers.mdx | 44 +-
packages/web/src/content/docs/ja/rules.mdx | 6 +-
packages/web/src/content/docs/ja/sdk.mdx | 16 +-
packages/web/src/content/docs/ja/share.mdx | 6 +-
packages/web/src/content/docs/ja/themes.mdx | 6 +-
packages/web/src/content/docs/ja/tools.mdx | 30 +-
.../src/content/docs/ja/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/ja/tui.mdx | 2 +-
.../web/src/content/docs/ja/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/ja/zen.mdx | 94 +-
packages/web/src/content/docs/keybinds.mdx | 6 +-
packages/web/src/content/docs/ko/agents.mdx | 18 +-
packages/web/src/content/docs/ko/cli.mdx | 1 -
packages/web/src/content/docs/ko/commands.mdx | 2 +-
packages/web/src/content/docs/ko/config.mdx | 56 +-
.../web/src/content/docs/ko/enterprise.mdx | 4 +-
.../web/src/content/docs/ko/formatters.mdx | 8 +-
packages/web/src/content/docs/ko/go.mdx | 30 +-
packages/web/src/content/docs/ko/index.mdx | 18 +-
packages/web/src/content/docs/ko/keybinds.mdx | 4 +-
packages/web/src/content/docs/ko/lsp.mdx | 14 +-
.../web/src/content/docs/ko/mcp-servers.mdx | 30 +-
packages/web/src/content/docs/ko/models.mdx | 10 +-
.../web/src/content/docs/ko/permissions.mdx | 12 +-
packages/web/src/content/docs/ko/plugins.mdx | 4 +-
.../web/src/content/docs/ko/providers.mdx | 44 +-
packages/web/src/content/docs/ko/rules.mdx | 6 +-
packages/web/src/content/docs/ko/sdk.mdx | 16 +-
packages/web/src/content/docs/ko/share.mdx | 6 +-
packages/web/src/content/docs/ko/themes.mdx | 4 +-
packages/web/src/content/docs/ko/tools.mdx | 30 +-
.../src/content/docs/ko/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/ko/tui.mdx | 2 +-
.../web/src/content/docs/ko/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/ko/zen.mdx | 94 +-
packages/web/src/content/docs/lsp.mdx | 14 +-
packages/web/src/content/docs/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/models.mdx | 10 +-
packages/web/src/content/docs/nb/agents.mdx | 18 +-
packages/web/src/content/docs/nb/cli.mdx | 1 -
packages/web/src/content/docs/nb/commands.mdx | 2 +-
packages/web/src/content/docs/nb/config.mdx | 54 +-
.../web/src/content/docs/nb/enterprise.mdx | 4 +-
.../web/src/content/docs/nb/formatters.mdx | 8 +-
packages/web/src/content/docs/nb/go.mdx | 30 +-
packages/web/src/content/docs/nb/index.mdx | 18 +-
packages/web/src/content/docs/nb/keybinds.mdx | 4 +-
packages/web/src/content/docs/nb/lsp.mdx | 14 +-
.../web/src/content/docs/nb/mcp-servers.mdx | 36 +-
packages/web/src/content/docs/nb/models.mdx | 10 +-
.../web/src/content/docs/nb/permissions.mdx | 12 +-
packages/web/src/content/docs/nb/plugins.mdx | 4 +-
.../web/src/content/docs/nb/providers.mdx | 44 +-
packages/web/src/content/docs/nb/rules.mdx | 6 +-
packages/web/src/content/docs/nb/sdk.mdx | 16 +-
packages/web/src/content/docs/nb/share.mdx | 6 +-
packages/web/src/content/docs/nb/themes.mdx | 4 +-
packages/web/src/content/docs/nb/tools.mdx | 30 +-
.../src/content/docs/nb/troubleshooting.mdx | 2 +-
packages/web/src/content/docs/nb/tui.mdx | 2 +-
.../web/src/content/docs/nb/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/nb/zen.mdx | 94 +-
packages/web/src/content/docs/permissions.mdx | 12 +-
packages/web/src/content/docs/pl/agents.mdx | 18 +-
packages/web/src/content/docs/pl/cli.mdx | 1 -
packages/web/src/content/docs/pl/commands.mdx | 2 +-
packages/web/src/content/docs/pl/config.mdx | 54 +-
.../web/src/content/docs/pl/enterprise.mdx | 4 +-
.../web/src/content/docs/pl/formatters.mdx | 8 +-
packages/web/src/content/docs/pl/go.mdx | 30 +-
packages/web/src/content/docs/pl/index.mdx | 18 +-
packages/web/src/content/docs/pl/keybinds.mdx | 4 +-
packages/web/src/content/docs/pl/lsp.mdx | 14 +-
.../web/src/content/docs/pl/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/pl/models.mdx | 10 +-
.../web/src/content/docs/pl/permissions.mdx | 12 +-
packages/web/src/content/docs/pl/plugins.mdx | 4 +-
.../web/src/content/docs/pl/providers.mdx | 44 +-
packages/web/src/content/docs/pl/rules.mdx | 6 +-
packages/web/src/content/docs/pl/sdk.mdx | 16 +-
packages/web/src/content/docs/pl/share.mdx | 6 +-
packages/web/src/content/docs/pl/themes.mdx | 4 +-
packages/web/src/content/docs/pl/tools.mdx | 30 +-
.../src/content/docs/pl/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/pl/tui.mdx | 2 +-
.../web/src/content/docs/pl/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/pl/zen.mdx | 94 +-
packages/web/src/content/docs/plugins.mdx | 4 +-
packages/web/src/content/docs/policies.mdx | 6 +-
packages/web/src/content/docs/providers.mdx | 54 +-
.../web/src/content/docs/pt-br/agents.mdx | 18 +-
packages/web/src/content/docs/pt-br/cli.mdx | 1 -
.../web/src/content/docs/pt-br/commands.mdx | 2 +-
.../web/src/content/docs/pt-br/config.mdx | 56 +-
.../web/src/content/docs/pt-br/enterprise.mdx | 4 +-
.../web/src/content/docs/pt-br/formatters.mdx | 8 +-
packages/web/src/content/docs/pt-br/go.mdx | 30 +-
packages/web/src/content/docs/pt-br/index.mdx | 18 +-
.../web/src/content/docs/pt-br/keybinds.mdx | 4 +-
packages/web/src/content/docs/pt-br/lsp.mdx | 14 +-
.../src/content/docs/pt-br/mcp-servers.mdx | 32 +-
.../web/src/content/docs/pt-br/models.mdx | 10 +-
.../src/content/docs/pt-br/permissions.mdx | 12 +-
.../web/src/content/docs/pt-br/plugins.mdx | 4 +-
.../web/src/content/docs/pt-br/providers.mdx | 44 +-
packages/web/src/content/docs/pt-br/rules.mdx | 6 +-
packages/web/src/content/docs/pt-br/sdk.mdx | 16 +-
packages/web/src/content/docs/pt-br/share.mdx | 6 +-
.../web/src/content/docs/pt-br/themes.mdx | 4 +-
packages/web/src/content/docs/pt-br/tools.mdx | 30 +-
.../content/docs/pt-br/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/pt-br/tui.mdx | 2 +-
.../src/content/docs/pt-br/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/pt-br/zen.mdx | 94 +-
packages/web/src/content/docs/ru/agents.mdx | 18 +-
packages/web/src/content/docs/ru/cli.mdx | 1 -
packages/web/src/content/docs/ru/commands.mdx | 2 +-
packages/web/src/content/docs/ru/config.mdx | 56 +-
.../web/src/content/docs/ru/enterprise.mdx | 4 +-
.../web/src/content/docs/ru/formatters.mdx | 8 +-
packages/web/src/content/docs/ru/go.mdx | 30 +-
packages/web/src/content/docs/ru/index.mdx | 18 +-
packages/web/src/content/docs/ru/keybinds.mdx | 4 +-
packages/web/src/content/docs/ru/lsp.mdx | 14 +-
.../web/src/content/docs/ru/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/ru/models.mdx | 10 +-
.../web/src/content/docs/ru/permissions.mdx | 12 +-
packages/web/src/content/docs/ru/plugins.mdx | 4 +-
.../web/src/content/docs/ru/providers.mdx | 44 +-
packages/web/src/content/docs/ru/rules.mdx | 6 +-
packages/web/src/content/docs/ru/sdk.mdx | 16 +-
packages/web/src/content/docs/ru/share.mdx | 6 +-
packages/web/src/content/docs/ru/themes.mdx | 4 +-
packages/web/src/content/docs/ru/tools.mdx | 30 +-
.../src/content/docs/ru/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/ru/tui.mdx | 2 +-
.../web/src/content/docs/ru/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/ru/zen.mdx | 94 +-
packages/web/src/content/docs/rules.mdx | 6 +-
packages/web/src/content/docs/share.mdx | 6 +-
packages/web/src/content/docs/th/agents.mdx | 18 +-
packages/web/src/content/docs/th/cli.mdx | 1 -
packages/web/src/content/docs/th/commands.mdx | 2 +-
packages/web/src/content/docs/th/config.mdx | 56 +-
.../web/src/content/docs/th/enterprise.mdx | 4 +-
.../web/src/content/docs/th/formatters.mdx | 8 +-
packages/web/src/content/docs/th/go.mdx | 30 +-
packages/web/src/content/docs/th/index.mdx | 18 +-
packages/web/src/content/docs/th/keybinds.mdx | 4 +-
packages/web/src/content/docs/th/lsp.mdx | 14 +-
.../web/src/content/docs/th/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/th/models.mdx | 10 +-
.../web/src/content/docs/th/permissions.mdx | 12 +-
packages/web/src/content/docs/th/plugins.mdx | 4 +-
.../web/src/content/docs/th/providers.mdx | 60 +-
packages/web/src/content/docs/th/rules.mdx | 6 +-
packages/web/src/content/docs/th/sdk.mdx | 16 +-
packages/web/src/content/docs/th/share.mdx | 6 +-
packages/web/src/content/docs/th/themes.mdx | 4 +-
packages/web/src/content/docs/th/tools.mdx | 30 +-
.../src/content/docs/th/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/th/tui.mdx | 2 +-
.../web/src/content/docs/th/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/th/zen.mdx | 94 +-
packages/web/src/content/docs/themes.mdx | 4 +-
packages/web/src/content/docs/tools.mdx | 30 +-
packages/web/src/content/docs/tr/agents.mdx | 18 +-
packages/web/src/content/docs/tr/cli.mdx | 1 -
packages/web/src/content/docs/tr/commands.mdx | 2 +-
packages/web/src/content/docs/tr/config.mdx | 54 +-
.../web/src/content/docs/tr/enterprise.mdx | 4 +-
.../web/src/content/docs/tr/formatters.mdx | 8 +-
packages/web/src/content/docs/tr/go.mdx | 30 +-
packages/web/src/content/docs/tr/index.mdx | 18 +-
packages/web/src/content/docs/tr/keybinds.mdx | 4 +-
packages/web/src/content/docs/tr/lsp.mdx | 14 +-
.../web/src/content/docs/tr/mcp-servers.mdx | 32 +-
packages/web/src/content/docs/tr/models.mdx | 10 +-
.../web/src/content/docs/tr/permissions.mdx | 12 +-
packages/web/src/content/docs/tr/plugins.mdx | 4 +-
.../web/src/content/docs/tr/providers.mdx | 48 +-
packages/web/src/content/docs/tr/rules.mdx | 10 +-
packages/web/src/content/docs/tr/sdk.mdx | 16 +-
packages/web/src/content/docs/tr/share.mdx | 6 +-
packages/web/src/content/docs/tr/themes.mdx | 4 +-
packages/web/src/content/docs/tr/tools.mdx | 30 +-
.../src/content/docs/tr/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/tr/tui.mdx | 2 +-
.../web/src/content/docs/tr/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/tr/zen.mdx | 94 +-
.../web/src/content/docs/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/tui.mdx | 2 +-
packages/web/src/content/docs/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/zen.mdx | 94 +-
.../web/src/content/docs/zh-cn/agents.mdx | 18 +-
packages/web/src/content/docs/zh-cn/cli.mdx | 1 -
.../web/src/content/docs/zh-cn/commands.mdx | 2 +-
.../web/src/content/docs/zh-cn/config.mdx | 54 +-
.../web/src/content/docs/zh-cn/enterprise.mdx | 4 +-
.../web/src/content/docs/zh-cn/formatters.mdx | 8 +-
packages/web/src/content/docs/zh-cn/go.mdx | 30 +-
packages/web/src/content/docs/zh-cn/index.mdx | 18 +-
.../web/src/content/docs/zh-cn/keybinds.mdx | 4 +-
packages/web/src/content/docs/zh-cn/lsp.mdx | 14 +-
.../src/content/docs/zh-cn/mcp-servers.mdx | 32 +-
.../web/src/content/docs/zh-cn/models.mdx | 10 +-
.../src/content/docs/zh-cn/permissions.mdx | 12 +-
.../web/src/content/docs/zh-cn/plugins.mdx | 4 +-
.../web/src/content/docs/zh-cn/providers.mdx | 42 +-
packages/web/src/content/docs/zh-cn/rules.mdx | 6 +-
packages/web/src/content/docs/zh-cn/sdk.mdx | 16 +-
packages/web/src/content/docs/zh-cn/share.mdx | 6 +-
.../web/src/content/docs/zh-cn/themes.mdx | 4 +-
packages/web/src/content/docs/zh-cn/tools.mdx | 30 +-
.../content/docs/zh-cn/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/zh-cn/tui.mdx | 2 +-
.../src/content/docs/zh-cn/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/zh-cn/zen.mdx | 94 +-
.../web/src/content/docs/zh-tw/agents.mdx | 18 +-
packages/web/src/content/docs/zh-tw/cli.mdx | 1 -
.../web/src/content/docs/zh-tw/commands.mdx | 2 +-
.../web/src/content/docs/zh-tw/config.mdx | 54 +-
.../web/src/content/docs/zh-tw/enterprise.mdx | 4 +-
.../web/src/content/docs/zh-tw/formatters.mdx | 8 +-
packages/web/src/content/docs/zh-tw/go.mdx | 30 +-
packages/web/src/content/docs/zh-tw/index.mdx | 18 +-
.../web/src/content/docs/zh-tw/keybinds.mdx | 4 +-
packages/web/src/content/docs/zh-tw/lsp.mdx | 14 +-
.../src/content/docs/zh-tw/mcp-servers.mdx | 32 +-
.../web/src/content/docs/zh-tw/models.mdx | 10 +-
.../src/content/docs/zh-tw/permissions.mdx | 12 +-
.../web/src/content/docs/zh-tw/plugins.mdx | 4 +-
.../web/src/content/docs/zh-tw/providers.mdx | 44 +-
packages/web/src/content/docs/zh-tw/rules.mdx | 6 +-
packages/web/src/content/docs/zh-tw/sdk.mdx | 16 +-
packages/web/src/content/docs/zh-tw/share.mdx | 6 +-
.../web/src/content/docs/zh-tw/themes.mdx | 4 +-
packages/web/src/content/docs/zh-tw/tools.mdx | 30 +-
.../content/docs/zh-tw/troubleshooting.mdx | 6 +-
packages/web/src/content/docs/zh-tw/tui.mdx | 2 +-
.../src/content/docs/zh-tw/windows-wsl.mdx | 2 +-
packages/web/src/content/docs/zh-tw/zen.mdx | 94 +-
patches/install-korean-ime-fix.sh | 4 +-
script/ablation/extract-metrics.ts | 200 +
script/ablation/turn-report.ts | 130 +
script/publish-mirror.ts | 108 +
script/raw-changelog.ts | 2 +-
script/run-live-llm-all.ts | 19 +-
script/stats.ts | 4 +-
sdks/vscode/README.md | 6 +-
sdks/vscode/bun.lock | 2 +-
sdks/vscode/package.json | 2 +-
1768 files changed, 134001 insertions(+), 63616 deletions(-)
delete mode 100644 .deepagent-code/command/ai-deps.md
delete mode 100644 .deepagent-code/command/changelog.md
delete mode 100644 .deepagent-code/command/commit.md
delete mode 100644 .deepagent-code/command/issues.md
delete mode 100644 .deepagent-code/command/learn.md
delete mode 100644 .deepagent-code/command/rmslop.md
delete mode 100644 .deepagent-code/command/spellcheck.md
delete mode 100644 .deepagent-code/command/translate.md
delete mode 100644 .deepagent-code/deepagent-code.jsonc
delete mode 100644 .deepagent-code/env.d.ts
delete mode 100644 .deepagent-code/glossary/README.md
delete mode 100644 .deepagent-code/glossary/ar.md
delete mode 100644 .deepagent-code/glossary/br.md
delete mode 100644 .deepagent-code/glossary/bs.md
delete mode 100644 .deepagent-code/glossary/da.md
delete mode 100644 .deepagent-code/glossary/de.md
delete mode 100644 .deepagent-code/glossary/es.md
delete mode 100644 .deepagent-code/glossary/fr.md
delete mode 100644 .deepagent-code/glossary/ja.md
delete mode 100644 .deepagent-code/glossary/ko.md
delete mode 100644 .deepagent-code/glossary/no.md
delete mode 100644 .deepagent-code/glossary/pl.md
delete mode 100644 .deepagent-code/glossary/ru.md
delete mode 100644 .deepagent-code/glossary/th.md
delete mode 100644 .deepagent-code/glossary/tr.md
delete mode 100644 .deepagent-code/glossary/zh-cn.md
delete mode 100644 .deepagent-code/glossary/zh-tw.md
delete mode 100644 .deepagent-code/plugins/smoke-theme.json
delete mode 100644 .deepagent-code/plugins/tui-smoke.tsx
delete mode 100644 .deepagent-code/skills/effect/SKILL.md
delete mode 100644 .deepagent-code/themes/mytheme.json
delete mode 100644 .deepagent-code/tui.json
create mode 100644 .github/workflows/branding-check.yml
create mode 100644 packages/app/polyfills/buffer.ts
create mode 100644 packages/app/polyfills/crypto.ts
create mode 100644 packages/app/src/components/dialog-prompt-stash.tsx
create mode 100644 packages/app/src/components/dialog-select-skill.tsx
create mode 100644 packages/app/src/components/settings-v2/capabilities-ux.test.ts
create mode 100644 packages/app/src/components/settings-v2/capabilities.tsx
create mode 100644 packages/app/src/components/settings-v2/capability-panel-model.test.ts
create mode 100644 packages/app/src/components/settings-v2/capability-panel-model.ts
create mode 100644 packages/app/src/context/global-sync/permission-v2.test.ts
create mode 100644 packages/app/src/context/global-sync/permission-v2.ts
create mode 100644 packages/app/src/pages/session/prompt-stash.ts
create mode 100644 packages/app/src/recovery/lifecycle-execution-pump.test.ts
create mode 100644 packages/app/src/recovery/lifecycle-execution-pump.ts
create mode 100644 packages/app/src/recovery/session-lifecycle-wiring.test.ts
create mode 100644 packages/app/src/recovery/session-lifecycle.tsx
create mode 100644 packages/app/src/utils/event-type.ts
create mode 100644 packages/app/src/utils/transcript.ts
delete mode 100644 packages/cli/test/fixtures/legacy-entry.ts
create mode 100644 packages/cli/test/fixtures/v2-entry.ts
create mode 100644 packages/core/bunfig.toml
create mode 100644 packages/core/migration/20260901164943_session_provider_recovery/migration.sql
create mode 100644 packages/core/migration/20260901164943_session_provider_recovery/schema-checkpoint
create mode 100644 packages/core/migration/20260901165659_session_provider_recovery_actor/migration.sql
create mode 100644 packages/core/migration/20260901165659_session_provider_recovery_actor/schema-checkpoint
create mode 100644 packages/core/migration/20260901181952_session_capability_load/migration.sql
create mode 100644 packages/core/migration/20260904171154_mighty_fallen_one/migration.sql
create mode 100644 packages/core/migration/20260906125300_v2_tool_effect_admission/migration.sql
create mode 100644 packages/core/migration/20260906190036_capability_load_catalog_identity/migration.sql
create mode 100644 packages/core/migration/20260907020000_session_interrupt_barrier/migration.sql
create mode 100644 packages/core/migration/20260909041049_session_delete_tombstone/migration.sql
create mode 100644 packages/core/migration/20260909044401_session_delete_tombstone_retention_index/migration.sql
create mode 100644 packages/core/migration/20260909053722_v2_runtime_integrity_evidence/migration.sql
create mode 100644 packages/core/migration/20260909060001_v2_runtime_integrity_evidence_signature/migration.sql
create mode 100644 packages/core/migration/20260909070514_v2_runtime_integrity_evidence_artifact/migration.sql
create mode 100644 packages/core/migration/20260910012502_v2_compaction_request/migration.sql
create mode 100644 packages/core/migration/20260918101443_v2_task_run_execution_runtime/migration.sql
create mode 100644 packages/core/migration/20260919073750_v2_structured_output_evidence/migration.sql
create mode 100644 packages/core/migration/20260919073750_v2_structured_output_evidence/snapshot.json
create mode 100644 packages/core/script/crash-harness/fixture-child-runtime-lock-holder.ts
create mode 100644 packages/core/script/diag/stall-repro.ts
create mode 100644 packages/core/script/evidence-ledger/generate-candidate-ledger.ts
create mode 100644 packages/core/script/evidence-ledger/generate-ledger.ts
create mode 100644 packages/core/script/evidence-ledger/generate-packaged-report.ts
create mode 100644 packages/core/script/evidence-ledger/probe-packaged-runs.ts
create mode 100644 packages/core/script/evidence-ledger/release-gate.ts
create mode 100644 packages/core/script/runtime-state-inventory.ts
create mode 100644 packages/core/src/agent/id.ts
create mode 100644 packages/core/src/config/learning.ts
delete mode 100644 packages/core/src/config/lsp.ts
delete mode 100644 packages/core/src/config/mcp.ts
create mode 100644 packages/core/src/context-federation/production-adapters.ts
create mode 100644 packages/core/src/context-federation/tool-runtime.ts
create mode 100644 packages/core/src/contract/evidence-ledger.ts
create mode 100644 packages/core/src/contract/packaged-runtime-report.ts
create mode 100644 packages/core/src/contract/runtime-integrity-evidence.ts
create mode 100644 packages/core/src/database/migration/20260830000000_session_provider_recovery.ts
create mode 100644 packages/core/src/database/migration/20260901181952_session_capability_load.ts
create mode 100644 packages/core/src/database/migration/20260902100000_v2_owner_authorization_renew_guard.ts
create mode 100644 packages/core/src/database/migration/20260904120000_v2_provider_prepared_turn_canonical_hash.ts
create mode 100644 packages/core/src/database/migration/20260904171154_mighty_fallen_one.ts
create mode 100644 packages/core/src/database/migration/20260906125300_v2_tool_effect_admission.ts
create mode 100644 packages/core/src/database/migration/20260906190036_capability_load_catalog_identity.ts
create mode 100644 packages/core/src/database/migration/20260907020000_session_interrupt_barrier.ts
create mode 100644 packages/core/src/database/migration/20260907120000_provider_attempt_version.ts
create mode 100644 packages/core/src/database/migration/20260907130000_migration_journal_content_hash.ts
create mode 100644 packages/core/src/database/migration/20260909041049_session_delete_tombstone.ts
create mode 100644 packages/core/src/database/migration/20260909044401_session_delete_tombstone_retention_index.ts
create mode 100644 packages/core/src/database/migration/20260909053722_v2_runtime_integrity_evidence.ts
create mode 100644 packages/core/src/database/migration/20260909060001_v2_runtime_integrity_evidence_signature.ts
create mode 100644 packages/core/src/database/migration/20260909070514_v2_runtime_integrity_evidence_artifact.ts
create mode 100644 packages/core/src/database/migration/20260910000000_event_admission_refusal_reason.ts
create mode 100644 packages/core/src/database/migration/20260910012502_v2_compaction_request.ts
create mode 100644 packages/core/src/database/migration/20260918101443_v2_task_run_execution_runtime.ts
create mode 100644 packages/core/src/database/migration/20260918120000_im_reply_outbox.ts
create mode 100644 packages/core/src/database/migration/20260918130000_command_side_effect_receipt.ts
create mode 100644 packages/core/src/database/migration/20260918143000_task_run_v1_recovery_required.ts
create mode 100644 packages/core/src/database/migration/20260919073750_v2_structured_output_evidence.ts
create mode 100644 packages/core/src/database/sqlite.worker.ts
create mode 100644 packages/core/src/deepagent/capability-mode.ts
create mode 100644 packages/core/src/deepagent/flip-flag.ts
create mode 100644 packages/core/src/deepagent/mechanism-beacon.ts
create mode 100644 packages/core/src/deepagent/model-prompt-profile.ts
create mode 100644 packages/core/src/deepagent/project-docs-sync.ts
create mode 100644 packages/core/src/deepagent/turn-observability.ts
create mode 100644 packages/core/src/effect/process-lifecycle.ts
create mode 100644 packages/core/src/event/define.ts
delete mode 100644 packages/core/src/im/agent-executor.ts
delete mode 100644 packages/core/src/im/agent-orchestrator.ts
delete mode 100644 packages/core/src/im/agent-reply-sink.ts
delete mode 100644 packages/core/src/im/context-builder.ts
create mode 100644 packages/core/src/location/ref.ts
create mode 100644 packages/core/src/model/ref.ts
create mode 100644 packages/core/src/project/id.ts
create mode 100644 packages/core/src/provider-id.ts
create mode 100644 packages/core/src/schema/external-id.ts
create mode 100644 packages/core/src/session/compaction-request.sql.ts
create mode 100644 packages/core/src/session/compaction-request.ts
create mode 100644 packages/core/src/session/legacy-wire.ts
create mode 100644 packages/core/src/session/runner/attachments.ts
create mode 100644 packages/core/src/session/runner/deepagent-prompt.ts
create mode 100644 packages/core/src/session/runner/recovery-durable-store.ts
create mode 100644 packages/core/src/session/runner/recovery-store.sql.ts
create mode 100644 packages/core/src/session/runner/session-history-projection.ts
create mode 100644 packages/core/src/session/runner/v2-owner-dev-mint.ts
create mode 100644 packages/core/src/session/runner/v2-owner-seed.ts
create mode 100644 packages/core/src/session/runner/v2-structured-output-evidence.sql.ts
create mode 100644 packages/core/src/session/runtime-status.ts
create mode 100644 packages/core/src/session/runtime.ts
create mode 100644 packages/core/src/session/task-outbox.ts
create mode 100644 packages/core/src/session/task-pr-review.ts
create mode 100644 packages/core/src/session/task-run-dispatcher.ts
create mode 100644 packages/core/src/session/task-run.ts
create mode 100644 packages/core/src/session/task-workspace.ts
create mode 100644 packages/core/src/system-context/capability-load-tool.ts
create mode 100644 packages/core/src/system-context/capability-load.sql.ts
create mode 100644 packages/core/src/system-context/capability-loader-memory.ts
create mode 100644 packages/core/src/system-context/project-docs.ts
create mode 100644 packages/core/src/tool/apply-patch-chunk.ts
create mode 100644 packages/core/src/tool/code-intel.txt
create mode 100644 packages/core/src/tool/context-query-tools.ts
create mode 100644 packages/core/src/tool/context-query.txt
create mode 100644 packages/core/src/tool/delegation.ts
create mode 100644 packages/core/src/tool/edit-replace.ts
create mode 100644 packages/core/src/tool/git-read.ts
create mode 100644 packages/core/src/tool/plan.ts
create mode 100644 packages/core/src/tool/plan.txt
create mode 100644 packages/core/src/tool/task-policy.ts
create mode 100644 packages/core/src/tool/task.ts
create mode 100644 packages/core/src/tool/task.txt
delete mode 100644 packages/core/src/tool/todowrite.ts
create mode 100644 packages/core/src/util/readonly-collections.ts
create mode 100644 packages/core/test/context-federation/frame-identity.test.ts
create mode 100644 packages/core/test/context-federation/production-adapters.test.ts
create mode 100644 packages/core/test/context-federation/query-authorization.test.ts
create mode 100644 packages/core/test/contract/evidence-ledger-script.test.ts
create mode 100644 packages/core/test/contract/evidence-ledger.test.ts
create mode 100644 packages/core/test/contract/packaged-runtime-report.test.ts
create mode 100644 packages/core/test/contract/runtime-integrity-evidence.test.ts
create mode 100644 packages/core/test/deepagent/capability-mode.test.ts
create mode 100644 packages/core/test/deepagent/flip-flag.test.ts
create mode 100644 packages/core/test/deepagent/model-prompt-profile.test.ts
create mode 100644 packages/core/test/deepagent/validation.test.ts
create mode 100644 packages/core/test/event-durable-type.test.ts
create mode 100644 packages/core/test/file-lock-capacity.test.ts
create mode 100644 packages/core/test/filesystem/watcher-delivery-probe.ts
create mode 100644 packages/core/test/fixture/install-version.ts
create mode 100644 packages/core/test/fixture/ledger-id-worker.ts
create mode 100644 packages/core/test/fixture/v2-owner-dev-mint-worker.ts
delete mode 100644 packages/core/test/im-agent-executor.test.ts
delete mode 100644 packages/core/test/im-agent-reply-sink.test.ts
create mode 100644 packages/core/test/im-broadcaster.test.ts
delete mode 100644 packages/core/test/im-context-builder.test.ts
delete mode 100644 packages/core/test/im-orchestrator.test.ts
create mode 100644 packages/core/test/production-runtime-integrity.test.ts
create mode 100644 packages/core/test/prompt-stage-slimming.test.ts
create mode 100644 packages/core/test/recovery-durable-store.test.ts
create mode 100644 packages/core/test/session-history-projection.test.ts
create mode 100644 packages/core/test/session-runner-attachments.test.ts
create mode 100644 packages/core/test/session-runner-model-location.test.ts
create mode 100644 packages/core/test/session-runtime-status.test.ts
create mode 100644 packages/core/test/session-update.test.ts
create mode 100644 packages/core/test/session-wire-egress.test.ts
create mode 100644 packages/core/test/system-context/capability-l2-production.test.ts
create mode 100644 packages/core/test/system-context/project-docs.test.ts
create mode 100644 packages/core/test/task-dispatcher-recovery-process.ts
create mode 100644 packages/core/test/task-pr-review.test.ts
create mode 100644 packages/core/test/task-run-authority.test.ts
create mode 100644 packages/core/test/task-run-crash-process.ts
create mode 100644 packages/core/test/task-run-dispatcher.test.ts
create mode 100644 packages/core/test/task-workspace.test.ts
create mode 100644 packages/core/test/tool-classification-consistency.test.ts
create mode 100644 packages/core/test/tool-context-query.test.ts
create mode 100644 packages/core/test/tool-edit-replace.test.ts
create mode 100644 packages/core/test/tool-plan.test.ts
create mode 100644 packages/core/test/tool-surface-v2.test.ts
create mode 100644 packages/core/test/tool-task-policy.test.ts
create mode 100644 packages/core/test/turn-observability.test.ts
create mode 100644 packages/core/test/util/log.test.ts
create mode 100644 packages/core/test/v2-owner-dev-mint.test.ts
create mode 100644 packages/core/test/v2-owner-production-mint.test.ts
create mode 100644 packages/core/test/v2-owner-renew-guard.test.ts
create mode 100644 packages/core/test/v2-owner-seed.test.ts
create mode 100644 packages/core/test/v2-provider-owner-rotation.test.ts
create mode 100644 packages/core/test/v2-structured-output-evidence.test.ts
create mode 100644 packages/deepagent-code/script/ablation/battery-tasks.ts
create mode 100644 packages/deepagent-code/script/ablation/run-eval-battery.ts
create mode 100644 packages/deepagent-code/script/assert-capability-inventory.ts
create mode 100644 packages/deepagent-code/script/audit-branding.ts
create mode 100644 packages/deepagent-code/script/mint-owner-campaign.ts
create mode 100644 packages/deepagent-code/script/replay-history/extract.ts
create mode 100644 packages/deepagent-code/script/replay-history/replay-worker.ts
create mode 100644 packages/deepagent-code/script/replay-history/replay.ts
create mode 100644 packages/deepagent-code/src/cli/cmd/docs.ts
delete mode 100644 packages/deepagent-code/src/context-federation/observability.ts
create mode 100644 packages/deepagent-code/src/context-federation/production-sources.ts
create mode 100644 packages/deepagent-code/src/context-federation/v2-tool-runtime.ts
create mode 100644 packages/deepagent-code/src/deepagent/learning-reviewer-runner.ts
create mode 100644 packages/deepagent-code/src/deepagent/session-finalizer.ts
delete mode 100644 packages/deepagent-code/src/effect/bootstrap-runtime.ts
create mode 100644 packages/deepagent-code/src/effect/composition-digest.ts
create mode 100644 packages/deepagent-code/src/effect/process-lifecycle.ts
create mode 100644 packages/deepagent-code/src/effect/runtime-integrity-identity.ts
create mode 100644 packages/deepagent-code/src/event/v2-outbox-runtime.ts
create mode 100644 packages/deepagent-code/src/event/v2-outbox-writer.ts
create mode 100644 packages/deepagent-code/src/github/github-agent-execution.ts
delete mode 100644 packages/deepagent-code/src/im/agent-progress-stream.ts
delete mode 100644 packages/deepagent-code/src/im/agent-reply-sink-server.ts
create mode 100644 packages/deepagent-code/src/im/im-agent-execution.ts
create mode 100644 packages/deepagent-code/src/im/im-reply-outbox.ts
create mode 100644 packages/deepagent-code/src/runtime-defaults.ts
create mode 100644 packages/deepagent-code/src/server/recovery-executor.ts
create mode 100644 packages/deepagent-code/src/server/routes/instance/httpapi/handlers/im-config.ts
delete mode 100644 packages/deepagent-code/src/server/shared/tui-control.ts
delete mode 100644 packages/deepagent-code/src/session/branch-provisioner.ts
create mode 100644 packages/deepagent-code/src/session/command-effect-receipt.ts
create mode 100644 packages/deepagent-code/src/session/command-v2.ts
delete mode 100644 packages/deepagent-code/src/session/durable-executor-lock.ts
create mode 100644 packages/deepagent-code/src/session/legacy-provider-receipt-recovery.ts
create mode 100644 packages/deepagent-code/src/session/prompt-v2.ts
delete mode 100644 packages/deepagent-code/src/session/prompt.ts
create mode 100644 packages/deepagent-code/src/session/prompt/deepseek.txt
delete mode 100644 packages/deepagent-code/src/session/prompt/max-steps.txt
create mode 100644 packages/deepagent-code/src/session/prompt/workflow-discipline.txt
create mode 100644 packages/deepagent-code/src/session/structured-output-prompt.ts
delete mode 100644 packages/deepagent-code/src/session/task-delivery.ts
delete mode 100644 packages/deepagent-code/src/session/task-dispatcher.ts
delete mode 100644 packages/deepagent-code/src/session/task-executor.ts
delete mode 100644 packages/deepagent-code/src/session/task-input.ts
delete mode 100644 packages/deepagent-code/src/session/task-pr-submission.ts
delete mode 100644 packages/deepagent-code/src/session/task-worktree.ts
delete mode 100644 packages/deepagent-code/src/session/tool-capability.ts
create mode 100644 packages/deepagent-code/src/session/v2-agent-roster.ts
create mode 100644 packages/deepagent-code/src/session/v2-mcp-bridge.ts
create mode 100644 packages/deepagent-code/src/session/v2-plan-gate.ts
create mode 100644 packages/deepagent-code/src/session/v2-plugin-tools-bridge.ts
create mode 100644 packages/deepagent-code/src/session/v2-runner-frame.ts
delete mode 100644 packages/deepagent-code/src/session/workspace-preflight.ts
create mode 100644 packages/deepagent-code/src/tool/spec.ts
create mode 100644 packages/deepagent-code/src/tool/spec.txt
delete mode 100644 packages/deepagent-code/src/util/queue.ts
create mode 100644 packages/deepagent-code/test/audit-branding.test.ts
create mode 100644 packages/deepagent-code/test/cli/docs.test.ts
create mode 100644 packages/deepagent-code/test/cli/no-process-exit.test.ts
create mode 100644 packages/deepagent-code/test/cli/run/run-timeout.test.ts
create mode 100644 packages/deepagent-code/test/cli/serve/kill9-redrive.test.ts
create mode 100644 packages/deepagent-code/test/cli/serve/packaged-composition-digest.test.ts
create mode 100644 packages/deepagent-code/test/cli/serve/serve-file-db.test.ts
create mode 100644 packages/deepagent-code/test/context-federation/production-sources.test.ts
create mode 100644 packages/deepagent-code/test/context-federation/v2-runner-frame.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/admission.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/delivery.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/dispatcher.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/executor.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/invariants.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/mode.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/recovery.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/structured-response-recovery.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/two-connection.test.ts
delete mode 100644 packages/deepagent-code/test/control-plane/wave3-durability.test.ts
create mode 100644 packages/deepagent-code/test/deepagent/activity-attribution.test.ts
create mode 100644 packages/deepagent-code/test/deepagent/finalizer-delivery-v2.test.ts
create mode 100644 packages/deepagent-code/test/deepagent/learning-v2-settle.test.ts
create mode 100644 packages/deepagent-code/test/deepagent/session-finalizer.test.ts
create mode 100644 packages/deepagent-code/test/deepagent/tool-success-resources.test.ts
create mode 100644 packages/deepagent-code/test/deepagent/workspace-context.test.ts
create mode 100644 packages/deepagent-code/test/effect/app-runtime-v1-assembly-lock.test.ts
create mode 100644 packages/deepagent-code/test/effect/composition-digest.test.ts
create mode 100644 packages/deepagent-code/test/effect/instance-registry.test.ts
create mode 100644 packages/deepagent-code/test/effect/process-lifecycle.test.ts
create mode 100644 packages/deepagent-code/test/event/spool-drain.test.ts
create mode 100644 packages/deepagent-code/test/event/v2-outbox-writer.test.ts
delete mode 100644 packages/deepagent-code/test/fixture/durable-executor-lock-worker.ts
create mode 100644 packages/deepagent-code/test/fixture/provider-recovery.ts
delete mode 100644 packages/deepagent-code/test/im-single-write-gate.test.ts
delete mode 100644 packages/deepagent-code/test/im/agent-executor-server.test.ts
delete mode 100644 packages/deepagent-code/test/im/agent-reply-sink-steered.test.ts
create mode 100644 packages/deepagent-code/test/im/im-agent-execution.test.ts
create mode 100644 packages/deepagent-code/test/im/im-reply-outbox.test.ts
create mode 100644 packages/deepagent-code/test/lib/v2-owner.ts
create mode 100644 packages/deepagent-code/test/runtime-defaults.test.ts
create mode 100644 packages/deepagent-code/test/script/ablation-battery-tasks.test.ts
create mode 100644 packages/deepagent-code/test/server/httpapi-im-websocket.test.ts
create mode 100644 packages/deepagent-code/test/server/httpapi-listen-fallback.test.ts
create mode 100644 packages/deepagent-code/test/server/httpapi-maintenance-boot.test.ts
create mode 100644 packages/deepagent-code/test/server/httpapi-typed-error-dynamic.test.ts
create mode 100644 packages/deepagent-code/test/server/im-config.test.ts
create mode 100644 packages/deepagent-code/test/server/recovery-executor-production.test.ts
delete mode 100644 packages/deepagent-code/test/session/activity-progress-runtime.test.ts
delete mode 100644 packages/deepagent-code/test/session/bug-008-activity-leak.test.ts
delete mode 100644 packages/deepagent-code/test/session/durable-executor-lock.test.ts
create mode 100644 packages/deepagent-code/test/session/facade-activity-task.test.ts
create mode 100644 packages/deepagent-code/test/session/mention-router.test.ts
delete mode 100644 packages/deepagent-code/test/session/multi-process-takeover.test.ts
create mode 100644 packages/deepagent-code/test/session/plan-protocol-budget.test.ts
create mode 100644 packages/deepagent-code/test/session/session-update-v2.test.ts
create mode 100644 packages/deepagent-code/test/session/strict-plan-gate.test.ts
delete mode 100644 packages/deepagent-code/test/session/task-worktree.test.ts
delete mode 100644 packages/deepagent-code/test/session/tool-capability.test.ts
create mode 100644 packages/deepagent-code/test/session/v2-mcp-bridge.test.ts
create mode 100644 packages/deepagent-code/test/session/v2-plan-gate-unseeded.test.ts
create mode 100644 packages/deepagent-code/test/session/v2-plugin-tools-bridge.test.ts
delete mode 100644 packages/deepagent-code/test/tool/degraded-text-recovery.test.ts
create mode 100644 packages/deepagent-code/test/tool/no-dual-owner.test.ts
delete mode 100644 packages/deepagent-code/test/tool/task-finalizer.test.ts
delete mode 100644 packages/deepagent-code/test/tool/task-run.test.ts
delete mode 100644 packages/deepagent-code/test/tool/task-takeover.test.ts
create mode 100644 packages/deepagent-code/test/tool/task-v2-authority.test.ts
create mode 100644 packages/deepagent-code/test/util/rpc.test.ts
create mode 100644 packages/desktop/scripts/sidecar-health-smoke.ts
create mode 100644 packages/desktop/scripts/tsconfig.json
create mode 100644 packages/desktop/src/main/sidecar-routing.test.ts
create mode 100644 packages/desktop/src/main/sidecar-routing.ts
create mode 100644 packages/function/test/share-store-writer.ts
create mode 100644 packages/function/test/store.test.ts
create mode 100644 packages/tui/src/component/dialog-agent-system.tsx
create mode 100644 packages/tui/src/component/dialog-archived-sessions.tsx
create mode 100644 packages/tui/src/component/dialog-backup.tsx
create mode 100644 packages/tui/src/component/dialog-debug.tsx
create mode 100644 packages/tui/src/component/dialog-deepagent-settings.tsx
create mode 100644 packages/tui/src/component/dialog-git-timeline.tsx
create mode 100644 packages/tui/src/component/dialog-im.tsx
create mode 100644 packages/tui/src/component/dialog-knowledge-review.tsx
create mode 100644 packages/tui/src/component/dialog-oversight.tsx
create mode 100644 packages/tui/src/component/dialog-packs.tsx
create mode 100644 packages/tui/src/component/dialog-profile.tsx
create mode 100644 packages/tui/src/component/dialog-review-list.tsx
create mode 100644 packages/tui/src/component/dialog-stats.tsx
delete mode 100644 packages/tui/src/component/dialog-tag.tsx
create mode 100644 packages/tui/src/component/dialog-terminal.tsx
create mode 100644 packages/tui/src/component/dialog-wiki-pages.tsx
create mode 100644 packages/tui/src/component/dialog-worktree.tsx
create mode 100644 packages/tui/src/component/im-client.ts
create mode 100644 packages/tui/src/context/i18n.tsx
create mode 100644 packages/tui/src/context/v2-wire-projection.ts
create mode 100644 packages/tui/src/i18n/en.ts
create mode 100644 packages/tui/src/i18n/i18n.test.ts
create mode 100644 packages/tui/src/i18n/standalone.ts
create mode 100644 packages/tui/src/i18n/zh.ts
create mode 100644 packages/tui/src/i18n/zht.ts
create mode 100644 script/ablation/extract-metrics.ts
create mode 100644 script/ablation/turn-report.ts
create mode 100644 script/publish-mirror.ts
diff --git a/.deepagent-code/command/ai-deps.md b/.deepagent-code/command/ai-deps.md
deleted file mode 100644
index 7578a57ae..000000000
--- a/.deepagent-code/command/ai-deps.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-description: "Bump AI sdk dependencies minor / patch versions only"
----
-
-Please read @package.json and @packages/deepagent-code/package.json.
-
-Your job is to look into AI SDK dependencies, figure out if they have versions that can be upgraded (minor or patch versions ONLY no major ignore major changes).
-
-I want a report of every dependency and the version that can be upgraded to.
-What would be even better is if you can give me brief summary of the changes for each dep and a link to the changelog for each dependency, or at least some reference info so I can see what bugs were fixed or new features were added.
-
-Consider using subagents for each dep to save your context window.
-
-Here is a short list of some deps (please be comprehensive tho):
-
-- "ai"
-- "@ai-sdk/openai"
-- "@ai-sdk/anthropic"
-- "@openrouter/ai-sdk-provider"
-- etc, etc
-
-DO NOT upgrade the dependencies yet, just make a list of all dependencies and their versions that can be upgraded to minor or patch versions only.
-
-Write up your findings to ai-sdk-updates.md
diff --git a/.deepagent-code/command/changelog.md b/.deepagent-code/command/changelog.md
deleted file mode 100644
index 739401403..000000000
--- a/.deepagent-code/command/changelog.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-model: deepagent-code/gpt-5.4
----
-
-Create `UPCOMING_CHANGELOG.md` from the structured changelog input below.
-If `UPCOMING_CHANGELOG.md` already exists, ignore its current contents completely.
-Do not preserve, merge, or reuse text from the existing file.
-
-The input already contains the exact commit range since the last non-draft release.
-The commits are already filtered to the release-relevant packages and grouped into
-the release sections. Do not fetch GitHub releases, PRs, or build your own commit list.
-The input may also include a `## Community Contributors Input` section.
-
-Before writing any entry you keep, inspect the real diff with
-`git show --stat --format='' ` or `git show --format='' ` so you can
-understand the actual code changes and not just the commit message (they may be misleading).
-Do not use `git log` or author metadata when deciding attribution.
-
-Rules:
-
-- Write the final file with release sections in this order:
- `## Core`, `## TUI`, `## Desktop`, `## SDK`, `## Extensions`
-- Only include sections that have at least one notable entry
-- Within each release section, keep bug fixes grouped under `### Bugfixes`
-- Keep other notable entries under `### Improvements` when a section has bug fixes too
-- Omit empty subsections
-- Keep one bullet per commit you keep
-- Skip commits that are entirely internal, CI, tests, refactors, or otherwise not user-facing
-- Start each bullet with a capital letter
-- Prefer what changed for users over what code changed internally
-- Do not copy raw commit prefixes like `fix:` or `feat:` or trailing PR numbers like `(#123)`
-- Community attribution is deterministic: only preserve an existing `(@username)` suffix from the changelog input
-- If an input bullet has no `(@username)` suffix, do not add one
-- Never add a new `(@username)` suffix from `git show`, commit authors, names, or email addresses
-- If no notable entries remain and there is no contributor block, write exactly `No notable changes.`
-- If no notable entries remain but there is a contributor block, omit all release sections and return only the contributor block
-- If the input contains `## Community Contributors Input`, append the block below that heading to the end of the final file verbatim
-- Do not add, remove, rewrite, or reorder contributor names or commit titles in that block
-- Do not derive the thank-you section from the main summary bullets
-- Do not include the heading `## Community Contributors Input` in the final file
-- Focus on writing the least words to get your point across - users will skim read the changelog, so we should be precise
-
-**Importantly, the changelog is for users (who are at least slightly technical), they may use the TUI, Desktop, SDK, Plugins and so forth. Be thorough in understanding flow on effects may not be immediately apparent. e.g. a package upgrade looks internal but may patch a bug. Or a refactor may also stabilise some race condition that fixes bugs for users. The PR title/body + commit message will give you the authors context, usually containing the outcome not just technical detail**
-
-
-
-!`bun script/raw-changelog.ts $ARGUMENTS`
-
-
diff --git a/.deepagent-code/command/commit.md b/.deepagent-code/command/commit.md
deleted file mode 100644
index 9281ca49a..000000000
--- a/.deepagent-code/command/commit.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-description: git commit and push
-model: deepagent-code/kimi-k2.5
-subtask: true
----
-
-commit and push
-
-make sure it includes a prefix like
-docs:
-tui:
-core:
-ci:
-ignore:
-wip:
-
-For anything in the packages/web use the docs: prefix.
-
-prefer to explain WHY something was done from an end user perspective instead of
-WHAT was done.
-
-do not do generic messages like "improved agent experience" be very specific
-about what user facing changes were made
-
-if there are conflicts DO NOT FIX THEM. notify me and I will fix them
-
-## GIT DIFF
-
-!`git diff`
-
-## GIT DIFF --cached
-
-!`git diff --cached`
-
-## GIT STATUS --short
-
-!`git status --short`
diff --git a/.deepagent-code/command/issues.md b/.deepagent-code/command/issues.md
deleted file mode 100644
index c10dffad7..000000000
--- a/.deepagent-code/command/issues.md
+++ /dev/null
@@ -1,23 +0,0 @@
----
-description: "find issue(s) on github"
-model: deepagent-code/claude-haiku-4-5
----
-
-Search through existing issues in lessweb/deepagent-code using the gh cli to find issues matching this query:
-
-$ARGUMENTS
-
-Consider:
-
-1. Similar titles or descriptions
-2. Same error messages or symptoms
-3. Related functionality or components
-4. Similar feature requests
-
-Please list any matching issues with:
-
-- Issue number and title
-- Brief explanation of why it matches the query
-- Link to the issue
-
-If no clear matches are found, say so.
diff --git a/.deepagent-code/command/learn.md b/.deepagent-code/command/learn.md
deleted file mode 100644
index fe4965a58..000000000
--- a/.deepagent-code/command/learn.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-description: Extract non-obvious learnings from session to AGENTS.md files to build codebase understanding
----
-
-Analyze this session and extract non-obvious learnings to add to AGENTS.md files.
-
-AGENTS.md files can exist at any directory level, not just the project root. When an agent reads a file, any AGENTS.md in parent directories are automatically loaded into the context of the tool read. Place learnings as close to the relevant code as possible:
-
-- Project-wide learnings → root AGENTS.md
-- Package/module-specific → packages/foo/AGENTS.md
-- Feature-specific → src/auth/AGENTS.md
-
-What counts as a learning (non-obvious discoveries only):
-
-- Hidden relationships between files or modules
-- Execution paths that differ from how code appears
-- Non-obvious configuration, env vars, or flags
-- Debugging breakthroughs when error messages were misleading
-- API/tool quirks and workarounds
-- Build/test commands not in README
-- Architectural decisions and constraints
-- Files that must change together
-
-What NOT to include:
-
-- Obvious facts from documentation
-- Standard language/framework behavior
-- Things already in an AGENTS.md
-- Verbose explanations
-- Session-specific details
-
-Process:
-
-1. Review session for discoveries, errors that took multiple attempts, unexpected connections
-2. Determine scope - what directory does each learning apply to?
-3. Read existing AGENTS.md files at relevant levels
-4. Create or update AGENTS.md at the appropriate level
-5. Keep entries to 1-3 lines per insight
-
-After updating, summarize which AGENTS.md files were created/updated and how many learnings per file.
-
-$ARGUMENTS
diff --git a/.deepagent-code/command/rmslop.md b/.deepagent-code/command/rmslop.md
deleted file mode 100644
index 02c9fc084..000000000
--- a/.deepagent-code/command/rmslop.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-description: Remove AI code slop
----
-
-Check the diff against dev, and remove all AI generated slop introduced in this branch.
-
-This includes:
-
-- Extra comments that a human wouldn't add or is inconsistent with the rest of the file
-- Extra defensive checks or try/catch blocks that are abnormal for that area of the codebase (especially if called by trusted / validated codepaths)
-- Casts to any to get around type issues
-- Any other style that is inconsistent with the file
-- Unnecessary emoji usage
-
-Report at the end with only a 1-3 sentence summary of what you changed
diff --git a/.deepagent-code/command/spellcheck.md b/.deepagent-code/command/spellcheck.md
deleted file mode 100644
index 0abf23c4f..000000000
--- a/.deepagent-code/command/spellcheck.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-description: spellcheck all markdown file changes
----
-
-Look at all the unstaged changes to markdown (.md, .mdx) files, pull out the lines that have changed, and check for spelling and grammar errors.
diff --git a/.deepagent-code/command/translate.md b/.deepagent-code/command/translate.md
deleted file mode 100644
index 30a746b47..000000000
--- a/.deepagent-code/command/translate.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-description: translate English to other languages
-model: deepagent-code/claude-opus-4-8
----
-
-run git diff and translate changed english doc and UI copy files to other international languages. Translate all languages in parallel to save time.
-
-Requirements:
-
-- Preserve meaning, intent, tone, and formatting (including Markdown/MDX structure).
-- Preserve all technical terms and artifacts exactly: product/company names, API names, identifiers, code, commands/flags, file paths, URLs, versions, error messages, config keys/values, and anything inside inline code or code blocks.
-- Also preserve every term listed in the Do-Not-Translate glossary below.
-- Also apply locale-specific guidance from `.deepagent-code/glossary/.md` when available (for example, `zh-cn.md`).
-- Do not modify fenced code blocks.
diff --git a/.deepagent-code/deepagent-code.jsonc b/.deepagent-code/deepagent-code.jsonc
deleted file mode 100644
index 7024c77c1..000000000
--- a/.deepagent-code/deepagent-code.jsonc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "$schema": "https://deepagent-code.ai/config.json",
- "provider": {},
- "permission": {},
- "reference": {
- "effect": "github.com/Effect-TS/effect-smol",
- },
- "mcp": {},
-}
diff --git a/.deepagent-code/env.d.ts b/.deepagent-code/env.d.ts
deleted file mode 100644
index f2b13a934..000000000
--- a/.deepagent-code/env.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module "*.txt" {
- const content: string
- export default content
-}
diff --git a/.deepagent-code/glossary/README.md b/.deepagent-code/glossary/README.md
deleted file mode 100644
index 2f04c1676..000000000
--- a/.deepagent-code/glossary/README.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# Locale Glossaries
-
-Use this folder for locale-specific translation guidance that supplements `.deepagent-code/agent/translator.md`.
-
-The global glossary in `translator.md` remains the source of truth for shared do-not-translate terms (commands, code, paths, product names, etc.). These locale files capture community learnings about phrasing and terminology preferences.
-
-## File Naming
-
-- One file per locale
-- Use lowercase locale slugs that match docs locales when possible (for example, `zh-cn.md`, `zh-tw.md`)
-- If only language-level guidance exists, use the language code (for example, `fr.md`)
-- Some repo locale slugs may be aliases/non-BCP47 for consistency (for example, `br` for Brazilian Portuguese / `pt-BR`)
-
-## What To Put In A Locale File
-
-- **Sources**: PRs/issues/discussions that motivated the guidance
-- **Do Not Translate (Locale Additions)**: locale-specific terms or casing decisions
-- **Preferred Terms**: recurring UI/docs words with preferred translations
-- **Guidance**: tone, style, and consistency notes
-- **Avoid** (optional): common literal translations or wording we should avoid
-- If the repo uses a locale alias slug, document the alias in **Guidance** (for example, prose may mention `pt-BR` while config/examples use `br`)
-
-Prefer guidance that is:
-
-- Repeated across multiple docs/screens
-- Easy to apply consistently
-- Backed by a community contribution or review discussion
-
-## Template
-
-```md
-# Glossary
-
-## Sources
-
-- PR #12345: https://github.com/lessweb/deepagent-code/pull/12345
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing)
-
-## Preferred Terms
-
-| English | Preferred | Notes |
-| ------- | --------- | --------- |
-| prompt | ... | preferred |
-| session | ... | preferred |
-
-## Guidance
-
-- Prefer natural phrasing over literal translation
-
-## Avoid
-
-- Avoid ... when ...
-```
-
-## Contribution Notes
-
-- Mark entries as preferred when they may evolve
-- Keep examples short
-- Add or update the `Sources` section whenever you add a new rule
-- Prefer PR-backed guidance over invented term mappings; start with general guidance if no term-level corrections exist yet
diff --git a/.deepagent-code/glossary/ar.md b/.deepagent-code/glossary/ar.md
deleted file mode 100644
index d534b4f2f..000000000
--- a/.deepagent-code/glossary/ar.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# ar Glossary
-
-## Sources
-
-- PR #9947: https://github.com/lessweb/deepagent-code/pull/9947
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural Arabic phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-- For RTL text, treat code, commands, and paths as LTR artifacts and keep their character order unchanged
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple Arabic terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/br.md b/.deepagent-code/glossary/br.md
deleted file mode 100644
index 4b03afdd4..000000000
--- a/.deepagent-code/glossary/br.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# br Glossary
-
-## Sources
-
-- PR #10086: https://github.com/lessweb/deepagent-code/pull/10086
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Locale code `br` in repo config, code, and paths (repo alias for Brazilian Portuguese)
-
-## Preferred Terms
-
-These are PR-backed locale naming preferences and may evolve.
-
-| English / Context | Preferred | Notes |
-| ---------------------------------------- | ------------------------------ | ------------------------------------------------------------- |
-| Brazilian Portuguese (prose locale name) | `pt-BR` | Use standard locale naming in prose when helpful |
-| Repo locale slug (code/config) | `br` | PR #10086 uses `br` for consistency/simplicity |
-| Browser locale detection | `pt`, `pt-br`, `pt-BR` -> `br` | Preserve this mapping in docs/examples about locale detection |
-
-## Guidance
-
-- This file covers Brazilian Portuguese (`pt-BR`), but the repo locale code is `br`
-- Use natural Brazilian Portuguese phrasing over literal translation
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-- Keep repo locale identifiers as implemented in code/config (`br`) even when prose mentions `pt-BR`
-
-## Avoid
-
-- Avoid changing repo locale code references from `br` to `pt-br` in code snippets, paths, or config examples
-- Avoid mixing Portuguese variants when a Brazilian Portuguese form is established
diff --git a/.deepagent-code/glossary/bs.md b/.deepagent-code/glossary/bs.md
deleted file mode 100644
index 4252824b9..000000000
--- a/.deepagent-code/glossary/bs.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# bs Glossary
-
-## Sources
-
-- PR #12283: https://github.com/lessweb/deepagent-code/pull/12283
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-These are PR-backed locale naming preferences and may evolve.
-
-| English / Context | Preferred | Notes |
-| ---------------------------------- | ---------- | ------------------------------------------------- |
-| Bosnian language label (UI) | `Bosanski` | PR #12283 tested switching language to `Bosanski` |
-| Repo locale slug (code/config) | `bs` | Preserve in code, config, paths, and examples |
-| Browser locale detection (Bosnian) | `bs` | PR #12283 added `bs` locale auto-detection |
-
-## Guidance
-
-- Use natural Bosnian phrasing over literal translation
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-- Keep repo locale references as `bs` in code/config, and use `Bosanski` for the user-facing language name when applicable
-
-## Avoid
-
-- Avoid changing repo locale references from `bs` to another slug in code snippets or config examples
-- Avoid translating product and protocol names that are fixed identifiers
diff --git a/.deepagent-code/glossary/da.md b/.deepagent-code/glossary/da.md
deleted file mode 100644
index 67405a9cc..000000000
--- a/.deepagent-code/glossary/da.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# da Glossary
-
-## Sources
-
-- PR #9821: https://github.com/lessweb/deepagent-code/pull/9821
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural Danish phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple Danish terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/de.md b/.deepagent-code/glossary/de.md
deleted file mode 100644
index df52b3a06..000000000
--- a/.deepagent-code/glossary/de.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# de Glossary
-
-## Sources
-
-- PR #9817: https://github.com/lessweb/deepagent-code/pull/9817
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural German phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple German terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/es.md b/.deepagent-code/glossary/es.md
deleted file mode 100644
index 2852ae71b..000000000
--- a/.deepagent-code/glossary/es.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# es Glossary
-
-## Sources
-
-- PR #9817: https://github.com/lessweb/deepagent-code/pull/9817
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural Spanish phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple Spanish terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/fr.md b/.deepagent-code/glossary/fr.md
deleted file mode 100644
index 5a43fce29..000000000
--- a/.deepagent-code/glossary/fr.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# fr Glossary
-
-## Sources
-
-- PR #9821: https://github.com/lessweb/deepagent-code/pull/9821
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural French phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple French terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/ja.md b/.deepagent-code/glossary/ja.md
deleted file mode 100644
index cb2710236..000000000
--- a/.deepagent-code/glossary/ja.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# ja Glossary
-
-## Sources
-
-- PR #9821: https://github.com/lessweb/deepagent-code/pull/9821
-- PR #13160: https://github.com/lessweb/deepagent-code/pull/13160
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-These are PR-backed wording preferences and may evolve.
-
-| English / Context | Preferred | Notes |
-| --------------------------- | ----------------------- | ------------------------------------- |
-| WSL integration (UI label) | `WSL連携` | PR #13160 prefers this over `WSL統合` |
-| WSL integration description | `WindowsのWSL環境で...` | PR #13160 improved phrasing naturally |
-
-## Guidance
-
-- Prefer natural Japanese phrasing over literal translation
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-- In WSL integration text, follow PR #13160 wording direction for more natural Japanese phrasing
-
-## Avoid
-
-- Avoid `WSL統合` in the WSL integration UI context where `WSL連携` is the reviewed wording
-- Avoid translating product and protocol names that are fixed identifiers
diff --git a/.deepagent-code/glossary/ko.md b/.deepagent-code/glossary/ko.md
deleted file mode 100644
index a4c502e54..000000000
--- a/.deepagent-code/glossary/ko.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# ko Glossary
-
-## Sources
-
-- PR #9817: https://github.com/lessweb/deepagent-code/pull/9817
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural Korean phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple Korean terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/no.md b/.deepagent-code/glossary/no.md
deleted file mode 100644
index 33691f7bf..000000000
--- a/.deepagent-code/glossary/no.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# no Glossary
-
-## Sources
-
-- PR #10018: https://github.com/lessweb/deepagent-code/pull/10018
-- PR #12935: https://github.com/lessweb/deepagent-code/pull/12935
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Sound names (PR #10018 notes these were intentionally left untranslated)
-
-## Preferred Terms
-
-These are PR-backed corrections and may evolve.
-
-| English / Context | Preferred | Notes |
-| ----------------------------------- | ------------ | ----------------------------- |
-| Save (data persistence action) | `Lagre` | Prefer over `Spare` |
-| Disabled (feature/state) | `deaktivert` | Prefer over `funksjonshemmet` |
-| API keys | `API Nøkler` | Prefer over `API Taster` |
-| Cost (noun) | `Kostnad` | Prefer over verb form `Koste` |
-| Show/View (imperative button label) | `Vis` | Prefer over `Utsikt` |
-
-## Guidance
-
-- Prefer natural Norwegian Bokmal (Bokmål) wording over literal translation
-- Keep tone clear and practical in UI labels
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-- Keep recurring UI terms consistent once a preferred term is chosen
-
-## Avoid
-
-- Avoid `Spare` for save actions in persistence contexts
-- Avoid `funksjonshemmet` for disabled feature states
-- Avoid `API Taster`, `Koste`, and `Utsikt` in the corrected contexts above
diff --git a/.deepagent-code/glossary/pl.md b/.deepagent-code/glossary/pl.md
deleted file mode 100644
index b9c9ab9fe..000000000
--- a/.deepagent-code/glossary/pl.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# pl Glossary
-
-## Sources
-
-- PR #9884: https://github.com/lessweb/deepagent-code/pull/9884
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural Polish phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple Polish terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/ru.md b/.deepagent-code/glossary/ru.md
deleted file mode 100644
index e360554ad..000000000
--- a/.deepagent-code/glossary/ru.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# ru Glossary
-
-## Sources
-
-- PR #9882: https://github.com/lessweb/deepagent-code/pull/9882
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-No PR-backed term mappings yet. Add entries here when review PRs introduce repeated wording corrections.
-
-## Guidance
-
-- Prefer natural Russian phrasing over literal translation
-- Keep tone clear and direct in UI labels and docs prose
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-
-## Avoid
-
-- Avoid translating product and protocol names that are fixed identifiers
-- Avoid mixing multiple Russian terms for the same recurring UI action once a preferred term is established
diff --git a/.deepagent-code/glossary/th.md b/.deepagent-code/glossary/th.md
deleted file mode 100644
index a462a2391..000000000
--- a/.deepagent-code/glossary/th.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# th Glossary
-
-## Sources
-
-- PR #10809: https://github.com/lessweb/deepagent-code/pull/10809
-- PR #11496: https://github.com/lessweb/deepagent-code/pull/11496
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only in commands, package names, paths, or code)
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-These are PR-backed preferences and may evolve.
-
-| English / Context | Preferred | Notes |
-| ------------------------------------- | --------------------- | -------------------------------------------------------------------------------- |
-| Thai language label in language lists | `ไทย` | PR #10809 standardized this across locales |
-| Language names in language pickers | Native names (static) | PR #11496: keep names like `English`, `Deutsch`, `ไทย` consistent across locales |
-
-## Guidance
-
-- Prefer natural Thai phrasing over literal translation
-- Keep tone short and clear for buttons and labels
-- Preserve technical artifacts exactly: commands, flags, code, URLs, model IDs, and file paths
-- Keep language names static/native in language pickers instead of translating them per current locale (PR #11496)
-
-## Avoid
-
-- Avoid translating language names differently per current locale in language lists
-- Avoid changing `ไทย` to another display form for the Thai language option unless the product standard changes
diff --git a/.deepagent-code/glossary/tr.md b/.deepagent-code/glossary/tr.md
deleted file mode 100644
index 0c92b6b46..000000000
--- a/.deepagent-code/glossary/tr.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# tr Glossary
-
-## Sources
-
-- PR #15835: https://github.com/lessweb/deepagent-code/pull/15835
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose, docs, and UI copy)
-- Keep lowercase `deepagent-code` in commands, package names, paths, URLs, and other exact identifiers
-- `` stays the literal key token in code blocks; use `Tab` for the nearby explanatory label in prose
-- Commands, flags, file paths, and code literals (keep exactly as written)
-
-## Preferred Terms
-
-These are PR-backed wording preferences and may evolve.
-
-| English / Context | Preferred | Notes |
-| ------------------------- | --------------------------------------- | ------------------------------------------------------------- |
-| available in beta | `beta olarak mevcut` | Prefer this over `beta olarak kullanılabilir` |
-| privacy-first | `Gizlilik öncelikli tasarlandı` | Prefer this over `Önce gizlilik için tasarlandı` |
-| connect your local models | `yerel modellerinizi bağlayabilirsiniz` | Use the fuller, more direct action phrase |
-| `` key label | `Tab` | Use `Tab` in prose; keep `` in literal UI or code blocks |
-| cross-platform | `cross-platform (tüm platformlarda)` | Keep the English term, add a short clarification when helpful |
-
-## Guidance
-
-- Prefer natural Turkish phrasing over literal translation
-- Merge broken sentence fragments into one clear sentence when the source is a single thought
-- Keep product naming consistent: `DeepAgent Code` in prose, `deepagent-code` only for exact technical identifiers
-- When an English technical term is intentionally kept, add a short Turkish clarification only if it improves readability
-
-## Avoid
-
-- Avoid `beta olarak kullanılabilir` when `beta olarak mevcut` fits
-- Avoid `Önce gizlilik için tasarlandı`; use the more natural reviewed wording instead
-- Avoid `Sekme` for the translated key label in prose when referring to ``
-- Avoid changing `deepagent-code` to `DeepAgent Code` inside commands, URLs, package names, or code literals
diff --git a/.deepagent-code/glossary/zh-cn.md b/.deepagent-code/glossary/zh-cn.md
deleted file mode 100644
index ae95f1159..000000000
--- a/.deepagent-code/glossary/zh-cn.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# zh-cn Glossary
-
-## Sources
-
-- PR #13942: https://github.com/lessweb/deepagent-code/pull/13942
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only when it is part of commands, package names, paths, or code)
-- `DeepAgent Code Zen`
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- `Model Context Protocol` (prefer the English expansion when introducing `MCP`)
-
-## Preferred Terms
-
-These are preferred terms for docs/UI prose and may evolve.
-
-| English | Preferred | Notes |
-| ----------------------- | --------- | ------------------------------------------- |
-| prompt | 提示词 | Keep `--prompt` unchanged in flags/code |
-| session | 会话 | |
-| provider | 提供商 | |
-| share link / shared URL | 分享链接 | Prefer `分享` for user-facing share actions |
-| headless (server) | 无界面 | Docs wording |
-| authentication | 认证 | Prefer in auth/OAuth contexts |
-| cache | 缓存 | |
-| keybind / shortcut | 快捷键 | User-facing docs wording |
-| workflow | 工作流 | e.g. GitHub Actions workflow |
-
-## Guidance
-
-- Prefer natural, concise phrasing over literal translation
-- Keep the tone direct and friendly (PR #13942 consistently moved wording in this direction)
-- Preserve technical artifacts exactly: commands, flags, code, inline code, URLs, file paths, model IDs
-- Keep enum-like values in English when they are literals (for example, `default`, `json`)
-- Prefer consistent terminology across pages once a term is chosen (`会话`, `提供商`, `提示词`, etc.)
-
-## Avoid
-
-- Avoid `deepagent-code` in prose when referring to the product name; use `DeepAgent Code`
-- Avoid mixing alternative terms for the same concept across docs when a preferred term is already established
diff --git a/.deepagent-code/glossary/zh-tw.md b/.deepagent-code/glossary/zh-tw.md
deleted file mode 100644
index ed6729cfd..000000000
--- a/.deepagent-code/glossary/zh-tw.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# zh-tw Glossary
-
-## Sources
-
-- PR #13942: https://github.com/lessweb/deepagent-code/pull/13942
-
-## Do Not Translate (Locale Additions)
-
-- `DeepAgent Code` (preserve casing in prose; keep `deepagent-code` only when it is part of commands, package names, paths, or code)
-- `DeepAgent Code Zen`
-- `DeepAgent Code CLI`
-- `CLI`, `TUI`, `MCP`, `OAuth`
-- `Model Context Protocol` (prefer the English expansion when introducing `MCP`)
-
-## Preferred Terms
-
-These are preferred terms for docs/UI prose and may evolve.
-
-| English | Preferred | Notes |
-| ----------------------- | --------- | ------------------------------------------- |
-| prompt | 提示詞 | Keep `--prompt` unchanged in flags/code |
-| session | 工作階段 | |
-| provider | 供應商 | |
-| share link / shared URL | 分享連結 | Prefer `分享` for user-facing share actions |
-| headless (server) | 無介面 | Docs wording |
-| authentication | 認證 | Prefer in auth/OAuth contexts |
-| cache | 快取 | |
-| keybind / shortcut | 快捷鍵 | User-facing docs wording |
-| workflow | 工作流程 | e.g. GitHub Actions workflow |
-
-## Guidance
-
-- Prefer natural, concise phrasing over literal translation
-- Keep the tone direct and friendly (PR #13942 consistently moved wording in this direction)
-- Preserve technical artifacts exactly: commands, flags, code, inline code, URLs, file paths, model IDs
-- Keep enum-like values in English when they are literals (for example, `default`, `json`)
-- Prefer consistent terminology across pages once a term is chosen (`工作階段`, `供應商`, `提示詞`, etc.)
-
-## Avoid
-
-- Avoid `deepagent-code` in prose when referring to the product name; use `DeepAgent Code`
-- Avoid mixing alternative terms for the same concept across docs when a preferred term is already established
diff --git a/.deepagent-code/plugins/smoke-theme.json b/.deepagent-code/plugins/smoke-theme.json
deleted file mode 100644
index 61c670dff..000000000
--- a/.deepagent-code/plugins/smoke-theme.json
+++ /dev/null
@@ -1,223 +0,0 @@
-{
- "$schema": "https://deepagent-code.ai/theme.json",
- "defs": {
- "nord0": "#2E3440",
- "nord1": "#3B4252",
- "nord2": "#434C5E",
- "nord3": "#4C566A",
- "nord4": "#D8DEE9",
- "nord5": "#E5E9F0",
- "nord6": "#ECEFF4",
- "nord7": "#8FBCBB",
- "nord8": "#88C0D0",
- "nord9": "#81A1C1",
- "nord10": "#5E81AC",
- "nord11": "#BF616A",
- "nord12": "#D08770",
- "nord13": "#EBCB8B",
- "nord14": "#A3BE8C",
- "nord15": "#B48EAD"
- },
- "theme": {
- "primary": {
- "dark": "nord10",
- "light": "nord9"
- },
- "secondary": {
- "dark": "nord9",
- "light": "nord9"
- },
- "accent": {
- "dark": "nord7",
- "light": "nord7"
- },
- "error": {
- "dark": "nord11",
- "light": "nord11"
- },
- "warning": {
- "dark": "nord12",
- "light": "nord12"
- },
- "success": {
- "dark": "nord14",
- "light": "nord14"
- },
- "info": {
- "dark": "nord8",
- "light": "nord10"
- },
- "text": {
- "dark": "nord6",
- "light": "nord0"
- },
- "textMuted": {
- "dark": "#8B95A7",
- "light": "nord1"
- },
- "background": {
- "dark": "nord0",
- "light": "nord6"
- },
- "backgroundPanel": {
- "dark": "nord1",
- "light": "nord5"
- },
- "backgroundElement": {
- "dark": "nord2",
- "light": "nord4"
- },
- "border": {
- "dark": "nord2",
- "light": "nord3"
- },
- "borderActive": {
- "dark": "nord3",
- "light": "nord2"
- },
- "borderSubtle": {
- "dark": "nord2",
- "light": "nord3"
- },
- "diffAdded": {
- "dark": "nord14",
- "light": "nord14"
- },
- "diffRemoved": {
- "dark": "nord11",
- "light": "nord11"
- },
- "diffContext": {
- "dark": "#8B95A7",
- "light": "nord3"
- },
- "diffHunkHeader": {
- "dark": "#8B95A7",
- "light": "nord3"
- },
- "diffHighlightAdded": {
- "dark": "nord14",
- "light": "nord14"
- },
- "diffHighlightRemoved": {
- "dark": "nord11",
- "light": "nord11"
- },
- "diffAddedBg": {
- "dark": "#36413C",
- "light": "#E6EBE7"
- },
- "diffRemovedBg": {
- "dark": "#43393D",
- "light": "#ECE6E8"
- },
- "diffContextBg": {
- "dark": "nord1",
- "light": "nord5"
- },
- "diffLineNumber": {
- "dark": "nord2",
- "light": "nord4"
- },
- "diffAddedLineNumberBg": {
- "dark": "#303A35",
- "light": "#DDE4DF"
- },
- "diffRemovedLineNumberBg": {
- "dark": "#3C3336",
- "light": "#E4DDE0"
- },
- "markdownText": {
- "dark": "nord4",
- "light": "nord0"
- },
- "markdownHeading": {
- "dark": "nord8",
- "light": "nord10"
- },
- "markdownLink": {
- "dark": "nord9",
- "light": "nord9"
- },
- "markdownLinkText": {
- "dark": "nord7",
- "light": "nord7"
- },
- "markdownCode": {
- "dark": "nord14",
- "light": "nord14"
- },
- "markdownBlockQuote": {
- "dark": "#8B95A7",
- "light": "nord3"
- },
- "markdownEmph": {
- "dark": "nord12",
- "light": "nord12"
- },
- "markdownStrong": {
- "dark": "nord13",
- "light": "nord13"
- },
- "markdownHorizontalRule": {
- "dark": "#8B95A7",
- "light": "nord3"
- },
- "markdownListItem": {
- "dark": "nord8",
- "light": "nord10"
- },
- "markdownListEnumeration": {
- "dark": "nord7",
- "light": "nord7"
- },
- "markdownImage": {
- "dark": "nord9",
- "light": "nord9"
- },
- "markdownImageText": {
- "dark": "nord7",
- "light": "nord7"
- },
- "markdownCodeBlock": {
- "dark": "nord4",
- "light": "nord0"
- },
- "syntaxComment": {
- "dark": "#8B95A7",
- "light": "nord3"
- },
- "syntaxKeyword": {
- "dark": "nord9",
- "light": "nord9"
- },
- "syntaxFunction": {
- "dark": "nord8",
- "light": "nord8"
- },
- "syntaxVariable": {
- "dark": "nord7",
- "light": "nord7"
- },
- "syntaxString": {
- "dark": "nord14",
- "light": "nord14"
- },
- "syntaxNumber": {
- "dark": "nord15",
- "light": "nord15"
- },
- "syntaxType": {
- "dark": "nord7",
- "light": "nord7"
- },
- "syntaxOperator": {
- "dark": "nord9",
- "light": "nord9"
- },
- "syntaxPunctuation": {
- "dark": "nord4",
- "light": "nord0"
- }
- }
-}
diff --git a/.deepagent-code/plugins/tui-smoke.tsx b/.deepagent-code/plugins/tui-smoke.tsx
deleted file mode 100644
index 80dcdd37f..000000000
--- a/.deepagent-code/plugins/tui-smoke.tsx
+++ /dev/null
@@ -1,1019 +0,0 @@
-/** @jsxImportSource @opentui/solid */
-import { useTerminalDimensions, type JSX } from "@opentui/solid"
-import { useBindings, useKeymapSelector } from "@opentui/keymap/solid"
-import { RGBA, VignetteEffect, type KeyEvent, type Renderable } from "@opentui/core"
-import { createBindingLookup, type BindingConfig } from "@opentui/keymap/extras"
-import type { TuiPlugin, TuiPluginApi, TuiPluginMeta, TuiPluginModule, TuiSlotPlugin } from "@deepagent-code/plugin/tui"
-
-const tabs = ["overview", "counter", "help"]
-const command = {
- modal: "smoke_modal",
- screen: "smoke_screen",
- alert: "smoke_alert",
- confirm: "smoke_confirm",
- prompt: "smoke_prompt",
- select: "smoke_select",
- host: "smoke_host",
- home: "smoke_home",
- toast: "smoke_toast",
- dialog_close: "smoke_dialog_close",
- local_push: "smoke_local_push",
- local_pop: "smoke_local_pop",
- screen_home: "smoke_screen_home",
- screen_left: "smoke_screen_left",
- screen_right: "smoke_screen_right",
- screen_up: "smoke_screen_up",
- screen_down: "smoke_screen_down",
- screen_modal: "smoke_screen_modal",
- screen_local: "smoke_screen_local",
- screen_host: "smoke_screen_host",
- screen_alert: "smoke_screen_alert",
- screen_confirm: "smoke_screen_confirm",
- screen_prompt: "smoke_screen_prompt",
- screen_select: "smoke_screen_select",
- modal_accept: "smoke_modal_accept",
- modal_close: "smoke_modal_close",
-}
-
-type SmokeBindings = BindingConfig
-
-const defaultKeymap = {
- [command.modal]: "ctrl+shift+m",
- [command.screen]: "ctrl+shift+o",
- [command.dialog_close]: "escape",
- [command.local_push]: "enter,return",
- [command.local_pop]: "escape,q,backspace",
- [command.screen_home]: "escape,ctrl+h",
- [command.screen_left]: "left,h",
- [command.screen_right]: "right,l",
- [command.screen_up]: "up,k",
- [command.screen_down]: "down,j",
- [command.screen_modal]: "ctrl+shift+m",
- [command.screen_local]: "x",
- [command.screen_host]: "z",
- [command.screen_alert]: "a",
- [command.screen_confirm]: "c",
- [command.screen_prompt]: "p",
- [command.screen_select]: "s",
- [command.modal_accept]: "enter,return",
- [command.modal_close]: "escape",
-}
-
-const pick = (value: unknown, fallback: string) => {
- if (typeof value !== "string") return fallback
- if (!value.trim()) return fallback
- return value
-}
-
-const num = (value: unknown, fallback: number) => {
- if (typeof value !== "number") return fallback
- return value
-}
-
-const record = (value: unknown): value is Record =>
- !!value && typeof value === "object" && !Array.isArray(value)
-
-type Cfg = {
- label: string
- route: string
- vignette: number
- keybinds: SmokeBindings | undefined
-}
-
-type Route = {
- modal: string
- screen: string
-}
-
-type State = {
- tab: number
- count: number
- source: string
- note: string
- selected: string
- local: number
-}
-
-const cfg = (options: Record | undefined) => {
- return {
- label: pick(options?.label, "smoke"),
- route: pick(options?.route, "workspace-smoke"),
- vignette: Math.max(0, num(options?.vignette, 0.35)),
- keybinds: record(options?.keybinds) ? (options.keybinds as SmokeBindings) : undefined,
- }
-}
-
-const names = (input: Cfg) => {
- return {
- modal: `${input.route}.modal`,
- screen: `${input.route}.screen`,
- }
-}
-
-function createKeys(input: SmokeBindings | undefined) {
- return createBindingLookup({ ...defaultKeymap, ...input })
-}
-
-type Keys = ReturnType
-
-const ui = {
- panel: "#1d1d1d",
- border: "#4a4a4a",
- text: "#f0f0f0",
- muted: "#a5a5a5",
- accent: "#5f87ff",
-}
-
-type Color = RGBA | string
-
-const ink = (map: Record, name: string, fallback: string): Color => {
- const value = map[name]
- if (typeof value === "string") return value
- if (value instanceof RGBA) return value
- return fallback
-}
-
-const look = (map: Record) => {
- return {
- panel: ink(map, "backgroundPanel", ui.panel),
- border: ink(map, "border", ui.border),
- text: ink(map, "text", ui.text),
- muted: ink(map, "textMuted", ui.muted),
- accent: ink(map, "primary", ui.accent),
- selected: ink(map, "selectedListItemText", ui.text),
- }
-}
-
-const tone = (api: TuiPluginApi) => {
- return look(api.theme.current)
-}
-
-type Skin = {
- panel: Color
- border: Color
- text: Color
- muted: Color
- accent: Color
- selected: Color
-}
-
-const Btn = (props: { txt: string; run: () => void; skin: Skin; on?: boolean }) => {
- return (
- {
- props.run()
- }}
- backgroundColor={props.on ? props.skin.accent : props.skin.border}
- paddingLeft={1}
- paddingRight={1}
- >
- {props.txt}
-
- )
-}
-
-const parse = (params: Record | undefined) => {
- const tab = typeof params?.tab === "number" ? params.tab : 0
- const count = typeof params?.count === "number" ? params.count : 0
- const source = typeof params?.source === "string" ? params.source : "unknown"
- const note = typeof params?.note === "string" ? params.note : ""
- const selected = typeof params?.selected === "string" ? params.selected : ""
- const local = typeof params?.local === "number" ? params.local : 0
- return {
- tab: Math.max(0, Math.min(tab, tabs.length - 1)),
- count,
- source,
- note,
- selected,
- local: Math.max(0, local),
- }
-}
-
-const current = (api: TuiPluginApi, route: Route) => {
- const value = api.route.current
- const ok = Object.values(route).includes(value.name)
- if (!ok) return parse(undefined)
- if (!("params" in value)) return parse(undefined)
- return parse(value.params)
-}
-
-const opts = [
- {
- title: "Overview",
- value: 0,
- description: "Switch to overview tab",
- },
- {
- title: "Counter",
- value: 1,
- description: "Switch to counter tab",
- },
- {
- title: "Help",
- value: 2,
- description: "Switch to help tab",
- },
-]
-
-const host = (api: TuiPluginApi, input: Cfg, skin: Skin) => {
- api.ui.dialog.setSize("medium")
- api.ui.dialog.replace(() => (
-
-
- {input.label} host overlay
-
- Using api.ui.dialog stack with built-in backdrop
- esc closes · depth {api.ui.dialog.depth}
-
- api.ui.dialog.clear()} skin={skin} on />
-
-
- ))
-}
-
-const warn = (api: TuiPluginApi, route: Route, value: State) => {
- const DialogAlert = api.ui.DialogAlert
- api.ui.dialog.setSize("medium")
- api.ui.dialog.replace(() => (
- api.route.navigate(route.screen, { ...value, source: "alert" })}
- />
- ))
-}
-
-const check = (api: TuiPluginApi, route: Route, value: State) => {
- const DialogConfirm = api.ui.DialogConfirm
- api.ui.dialog.setSize("medium")
- api.ui.dialog.replace(() => (
- api.route.navigate(route.screen, { ...value, count: value.count + 1, source: "confirm" })}
- onCancel={() => api.route.navigate(route.screen, { ...value, source: "confirm-cancel" })}
- />
- ))
-}
-
-const entry = (api: TuiPluginApi, route: Route, value: State) => {
- const DialogPrompt = api.ui.DialogPrompt
- api.ui.dialog.setSize("medium")
- api.ui.dialog.replace(() => (
- {
- api.ui.dialog.clear()
- api.route.navigate(route.screen, { ...value, note, source: "prompt" })
- }}
- onCancel={() => {
- api.ui.dialog.clear()
- api.route.navigate(route.screen, value)
- }}
- />
- ))
-}
-
-const picker = (api: TuiPluginApi, route: Route, value: State) => {
- const DialogSelect = api.ui.DialogSelect
- api.ui.dialog.setSize("medium")
- api.ui.dialog.replace(() => (
- {
- api.ui.dialog.clear()
- api.route.navigate(route.screen, {
- ...value,
- tab: typeof item.value === "number" ? item.value : value.tab,
- selected: item.title,
- source: "select",
- })
- }}
- />
- ))
-}
-
-const Screen = (props: {
- api: TuiPluginApi
- input: Cfg
- route: Route
- keys: Keys
- meta: TuiPluginMeta
- params?: Record
-}) => {
- const dim = useTerminalDimensions()
- const value = parse(props.params)
- const skin = tone(props.api)
- const set = (local: number, base?: State) => {
- const next = base ?? current(props.api, props.route)
- props.api.route.navigate(props.route.screen, { ...next, local: Math.max(0, local), source: "local" })
- }
- const push = (base?: State) => {
- const next = base ?? current(props.api, props.route)
- set(next.local + 1, next)
- }
- const open = () => {
- const next = current(props.api, props.route)
- if (next.local > 0) return
- set(1, next)
- }
- const pop = (base?: State) => {
- const next = base ?? current(props.api, props.route)
- set(Math.max(0, next.local - 1), next)
- }
- const show = () => {
- setTimeout(() => {
- open()
- }, 0)
- }
- const screenActive = () => props.api.route.current.name === props.route.screen
-
- useBindings(() => ({
- enabled: () => screenActive() && props.api.ui.dialog.open,
- commands: [
- {
- name: command.dialog_close,
- run() {
- props.api.ui.dialog.clear()
- },
- },
- ],
- bindings: props.keys.gather("smoke.dialog", [command.dialog_close]),
- }))
-
- useBindings(() => ({
- enabled: () => screenActive() && !props.api.ui.dialog.open && current(props.api, props.route).local > 0,
- commands: [
- {
- name: command.local_push,
- run() {
- push(current(props.api, props.route))
- },
- },
- {
- name: command.local_pop,
- run() {
- pop(current(props.api, props.route))
- },
- },
- ],
- bindings: props.keys.gather("smoke.local", [command.local_push, command.local_pop]),
- }))
-
- useBindings(() => ({
- enabled: () => screenActive() && !props.api.ui.dialog.open && current(props.api, props.route).local === 0,
- commands: [
- {
- name: command.screen_home,
- run() {
- props.api.route.navigate("home")
- },
- },
- {
- name: command.screen_left,
- run() {
- const next = current(props.api, props.route)
- props.api.route.navigate(props.route.screen, { ...next, tab: (next.tab - 1 + tabs.length) % tabs.length })
- },
- },
- {
- name: command.screen_right,
- run() {
- const next = current(props.api, props.route)
- props.api.route.navigate(props.route.screen, { ...next, tab: (next.tab + 1) % tabs.length })
- },
- },
- {
- name: command.screen_up,
- run() {
- const next = current(props.api, props.route)
- props.api.route.navigate(props.route.screen, { ...next, count: next.count + 1 })
- },
- },
- {
- name: command.screen_down,
- run() {
- const next = current(props.api, props.route)
- props.api.route.navigate(props.route.screen, { ...next, count: next.count - 1 })
- },
- },
- {
- name: command.screen_modal,
- run() {
- props.api.route.navigate(props.route.modal, current(props.api, props.route))
- },
- },
- {
- name: command.screen_local,
- run() {
- open()
- },
- },
- {
- name: command.screen_host,
- run() {
- host(props.api, props.input, skin)
- },
- },
- {
- name: command.screen_alert,
- run() {
- warn(props.api, props.route, current(props.api, props.route))
- },
- },
- {
- name: command.screen_confirm,
- run() {
- check(props.api, props.route, current(props.api, props.route))
- },
- },
- {
- name: command.screen_prompt,
- run() {
- entry(props.api, props.route, current(props.api, props.route))
- },
- },
- {
- name: command.screen_select,
- run() {
- picker(props.api, props.route, current(props.api, props.route))
- },
- },
- ],
- bindings: props.keys.gather("smoke.screen", [
- command.screen_home,
- command.screen_left,
- command.screen_right,
- command.screen_up,
- command.screen_down,
- command.screen_modal,
- command.screen_local,
- command.screen_host,
- command.screen_alert,
- command.screen_confirm,
- command.screen_prompt,
- command.screen_select,
- ]),
- }))
- const shortcuts = useKeymapSelector((keymap) => {
- const bindings = keymap.getCommandBindings({
- visibility: "registered",
- commands: [
- command.screen_home,
- command.screen_up,
- command.screen_down,
- command.screen_modal,
- command.screen_alert,
- command.screen_confirm,
- command.screen_prompt,
- command.screen_select,
- command.screen_local,
- command.screen_host,
- command.local_push,
- command.local_pop,
- ],
- })
-
- return {
- screen_home: props.api.keys.formatBindings(bindings.get(command.screen_home)) ?? "",
- screen_up: props.api.keys.formatBindings(bindings.get(command.screen_up)) ?? "",
- screen_down: props.api.keys.formatBindings(bindings.get(command.screen_down)) ?? "",
- screen_modal: props.api.keys.formatBindings(bindings.get(command.screen_modal)) ?? "",
- screen_alert: props.api.keys.formatBindings(bindings.get(command.screen_alert)) ?? "",
- screen_confirm: props.api.keys.formatBindings(bindings.get(command.screen_confirm)) ?? "",
- screen_prompt: props.api.keys.formatBindings(bindings.get(command.screen_prompt)) ?? "",
- screen_select: props.api.keys.formatBindings(bindings.get(command.screen_select)) ?? "",
- screen_local: props.api.keys.formatBindings(bindings.get(command.screen_local)) ?? "",
- screen_host: props.api.keys.formatBindings(bindings.get(command.screen_host)) ?? "",
- local_push: props.api.keys.formatBindings(bindings.get(command.local_push)) ?? "",
- local_pop: props.api.keys.formatBindings(bindings.get(command.local_pop)) ?? "",
- }
- })
-
- return (
-
-
-
-
- {props.input.label} screen
- plugin route
-
- {shortcuts().screen_home} home
-
-
-
- {tabs.map((item, i) => {
- const on = value.tab === i
- return (
- props.api.route.navigate(props.route.screen, { ...value, tab: i })}
- skin={skin}
- on={on}
- />
- )
- })}
-
-
-
- {value.tab === 0 ? (
-
- Route: {props.route.screen}
- plugin state: {props.meta.state}
-
- first: {props.meta.state === "first" ? "yes" : "no"} · updated:{" "}
- {props.meta.state === "updated" ? "yes" : "no"} · loads: {props.meta.load_count}
-
- plugin source: {props.meta.source}
- source: {value.source}
- note: {value.note || "(none)"}
- selected: {value.selected || "(none)"}
- local stack depth: {value.local}
- host stack open: {props.api.ui.dialog.open ? "yes" : "no"}
-
- ) : null}
-
- {value.tab === 1 ? (
-
- Counter: {value.count}
-
- {shortcuts().screen_up} / {shortcuts().screen_down} change value
-
-
- ) : null}
-
- {value.tab === 2 ? (
-
-
- {shortcuts().screen_modal} modal | {shortcuts().screen_alert} alert | {shortcuts().screen_confirm}{" "}
- confirm | {shortcuts().screen_prompt} prompt | {shortcuts().screen_select} select
-
-
- {shortcuts().screen_local} local stack | {shortcuts().screen_host} host stack
-
-
- local open: {shortcuts().local_push} push nested · {shortcuts().local_pop} close
-
- {shortcuts().screen_home} returns home
-
- ) : null}
-
-
-
- props.api.route.navigate("home")} skin={skin} />
- props.api.route.navigate(props.route.modal, value)} skin={skin} on />
-
- host(props.api, props.input, skin)} skin={skin} />
- warn(props.api, props.route, value)} skin={skin} />
- check(props.api, props.route, value)} skin={skin} />
- entry(props.api, props.route, value)} skin={skin} />
- picker(props.api, props.route, value)} skin={skin} />
-
-
-
- 0}
- width={dim().width}
- height={dim().height}
- alignItems="center"
- position="absolute"
- zIndex={3000}
- paddingTop={dim().height / 4}
- left={0}
- top={0}
- backgroundColor={RGBA.fromInts(0, 0, 0, 160)}
- onMouseUp={() => {
- pop()
- }}
- >
- {
- evt.stopPropagation()
- }}
- width={60}
- maxWidth={dim().width - 2}
- backgroundColor={skin.panel}
- border
- borderColor={skin.border}
- paddingTop={1}
- paddingBottom={1}
- paddingLeft={2}
- paddingRight={2}
- gap={1}
- flexDirection="column"
- >
-
- {props.input.label} local overlay
-
- Plugin-owned stack depth: {value.local}
-
- {shortcuts().local_push} push nested · {shortcuts().local_pop} pop/close
-
-
-
-
-
-
-
-
- )
-}
-
-const Modal = (props: {
- api: TuiPluginApi
- input: Cfg
- route: Route
- keys: Keys
- params?: Record
-}) => {
- const Dialog = props.api.ui.Dialog
- const value = parse(props.params)
- const skin = tone(props.api)
-
- useBindings(() => ({
- enabled: () => props.api.route.current.name === props.route.modal,
- commands: [
- {
- name: command.modal_accept,
- run() {
- props.api.route.navigate(props.route.screen, { ...parse(props.params), source: "modal" })
- },
- },
- {
- name: command.modal_close,
- run() {
- props.api.route.navigate("home")
- },
- },
- ],
- bindings: props.keys.gather("smoke.modal", [command.modal_accept, command.modal_close]),
- }))
- const shortcuts = useKeymapSelector((keymap) => {
- const bindings = keymap.getCommandBindings({
- visibility: "registered",
- commands: [command.modal, command.screen, command.modal_accept, command.modal_close],
- })
-
- return {
- modal: props.api.keys.formatBindings(bindings.get(command.modal)) ?? "",
- screen: props.api.keys.formatBindings(bindings.get(command.screen)) ?? "",
- modal_accept: props.api.keys.formatBindings(bindings.get(command.modal_accept)) ?? "",
- modal_close: props.api.keys.formatBindings(bindings.get(command.modal_close)) ?? "",
- }
- })
-
- return (
-
-
-
- )
-}
-
-const home = (api: TuiPluginApi, input: Cfg) => ({
- slots: {
- home_logo(ctx) {
- const map = ctx.theme.current
- const skin = look(map)
- const art = [
- " $$\\",
- " $$ |",
- " $$$$$$$\\ $$$$$$\\$$$$\\ $$$$$$\\ $$ | $$\\ $$$$$$\\",
- "$$ _____|$$ _$$ _$$\\ $$ __$$\\ $$ | $$ |$$ __$$\\",
- "\\$$$$$$\\ $$ / $$ / $$ |$$ / $$ |$$$$$$ / $$$$$$$$ |",
- " \\____$$\\ $$ | $$ | $$ |$$ | $$ |$$ _$$< $$ ____|",
- "$$$$$$$ |$$ | $$ | $$ |\\$$$$$$ |$$ | \\$$\\ \\$$$$$$$\\",
- "\\_______/ \\__| \\__| \\__| \\______/ \\__| \\__| \\_______|",
- ]
- const fill = [
- skin.accent,
- skin.muted,
- ink(map, "info", ui.accent),
- skin.text,
- ink(map, "success", ui.accent),
- ink(map, "warning", ui.accent),
- ink(map, "secondary", ui.accent),
- ink(map, "error", ui.accent),
- ]
-
- return (
-
- {art.map((line, i) => (
- {line}
- ))}
-
- )
- },
- home_prompt(ctx, value) {
- const skin = look(ctx.theme.current)
- const Prompt = api.ui.Prompt
- const Slot = api.ui.Slot
- const normal = [
- `[SMOKE] route check for ${input.label}`,
- "[SMOKE] confirm home_prompt slot override",
- "[SMOKE] verify prompt-right slot passthrough",
- ]
- const shell = ["printf '[SMOKE] home prompt\n'", "git status --short", "bun --version"]
- const hint = (
-
-
- • smoke home prompt
-
-
- )
-
- return (
-
-
-
-
- }
- placeholders={{ normal, shell }}
- />
- )
- },
- home_prompt_right(ctx, value) {
- const skin = look(ctx.theme.current)
- const id = value.workspace_id?.slice(0, 8) ?? "none"
- return (
-
- {input.label} home:{id}
-
- )
- },
- session_prompt_right(ctx, value) {
- const skin = look(ctx.theme.current)
- return (
-
- {input.label} session:{value.session_id.slice(0, 8)}
-
- )
- },
- smoke_prompt_right(ctx, value) {
- const skin = look(ctx.theme.current)
- const id = typeof value.workspace_id === "string" ? value.workspace_id.slice(0, 8) : "none"
- const label = typeof value.label === "string" ? value.label : input.label
- return (
-
- {label} custom:{id}
-
- )
- },
- home_bottom(ctx) {
- const skin = look(ctx.theme.current)
- const text = "extra content in the unified home bottom slot"
-
- return (
-
-
-
- {input.label} {text}
-
-
-
- )
- },
- },
-})
-
-const block = (input: Cfg, order: number, title: string, text: string): TuiSlotPlugin => ({
- order,
- slots: {
- sidebar_content(ctx, value) {
- const skin = look(ctx.theme.current)
-
- return (
-
-
- {title}
-
- {text}
-
- {input.label} order {order} · session {value.session_id.slice(0, 8)}
-
-
- )
- },
- },
-})
-
-const slot = (api: TuiPluginApi, input: Cfg): TuiSlotPlugin[] => [
- home(api, input),
- block(input, 50, "Smoke above", "renders above internal sidebar blocks"),
- block(input, 250, "Smoke between", "renders between internal sidebar blocks"),
- block(input, 650, "Smoke below", "renders below internal sidebar blocks"),
-]
-
-const reg = (api: TuiPluginApi, input: Cfg, keys: Keys) => {
- const route = names(input)
- api.keymap.registerLayer({
- commands: [
- {
- name: command.modal,
- title: `${input.label} modal`,
- category: "Plugin",
- namespace: "palette",
- slashName: "smoke",
- run() {
- api.route.navigate(route.modal, { source: "command" })
- },
- },
- {
- name: command.screen,
- title: `${input.label} screen`,
- category: "Plugin",
- namespace: "palette",
- slashName: "smoke-screen",
- run() {
- api.route.navigate(route.screen, { source: "command", tab: 0, count: 0 })
- },
- },
- {
- name: command.alert,
- title: `${input.label} alert dialog`,
- category: "Plugin",
- namespace: "palette",
- slashName: "smoke-alert",
- run() {
- warn(api, route, current(api, route))
- },
- },
- {
- name: command.confirm,
- title: `${input.label} confirm dialog`,
- category: "Plugin",
- namespace: "palette",
- slashName: "smoke-confirm",
- run() {
- check(api, route, current(api, route))
- },
- },
- {
- name: command.prompt,
- title: `${input.label} prompt dialog`,
- category: "Plugin",
- namespace: "palette",
- slashName: "smoke-prompt",
- run() {
- entry(api, route, current(api, route))
- },
- },
- {
- name: command.select,
- title: `${input.label} select dialog`,
- category: "Plugin",
- namespace: "palette",
- slashName: "smoke-select",
- run() {
- picker(api, route, current(api, route))
- },
- },
- {
- name: command.host,
- title: `${input.label} host overlay`,
- category: "Plugin",
- namespace: "palette",
- slashName: "smoke-host",
- run() {
- host(api, input, tone(api))
- },
- },
- {
- name: command.home,
- title: `${input.label} go home`,
- category: "Plugin",
- namespace: "palette",
- enabled: () => api.route.current.name !== "home",
- run() {
- api.route.navigate("home")
- },
- },
- {
- name: command.toast,
- title: `${input.label} toast`,
- category: "Plugin",
- namespace: "palette",
- run() {
- api.ui.toast({
- variant: "info",
- title: "Smoke",
- message: "Plugin toast works",
- duration: 2000,
- })
- },
- },
- ],
- bindings: keys.gather("smoke.global", [
- command.modal,
- command.screen,
- command.alert,
- command.confirm,
- command.prompt,
- command.select,
- command.host,
- command.home,
- command.toast,
- ]),
- })
-}
-
-const tui: TuiPlugin = async (api, options, meta) => {
- if (options?.enabled === false) return
-
- await api.theme.install("./smoke-theme.json")
- api.theme.set("smoke-theme")
-
- const value = cfg(options)
- const route = names(value)
- const keys = createKeys(value.keybinds)
- const fx = new VignetteEffect(value.vignette)
- const post = fx.apply.bind(fx)
- api.renderer.addPostProcessFn(post)
- api.lifecycle.onDispose(() => {
- api.renderer.removePostProcessFn(post)
- })
-
- api.route.register([
- {
- name: route.screen,
- render: ({ params }) => ,
- },
- {
- name: route.modal,
- render: ({ params }) => ,
- },
- ])
-
- reg(api, value, keys)
- for (const item of slot(api, value)) {
- api.slots.register(item)
- }
-}
-
-const plugin: TuiPluginModule & { id: string } = {
- id: "tui-smoke",
- tui,
-}
-
-export default plugin
diff --git a/.deepagent-code/skills/effect/SKILL.md b/.deepagent-code/skills/effect/SKILL.md
deleted file mode 100644
index 05ee5a302..000000000
--- a/.deepagent-code/skills/effect/SKILL.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: effect
-description: Work with Effect v4 / effect-smol TypeScript code in this repo
----
-
-# Effect
-
-This codebase uses Effect for typed, composable TypeScript services, schemas, and workflows.
-
-## Source Of Truth
-
-Use the current Effect v4 / effect-smol source, not memory or older Effect v2/v3 examples.
-
-1. If `.deepagent-code/references/effect-smol` is missing, clone `https://github.com/Effect-TS/effect-smol` there. Do this in the project, not in the skill folder.
-2. Search `.deepagent-code/references/effect-smol` for exact APIs, examples, tests, and naming patterns before answering or implementing Effect-specific code.
-3. Also inspect existing repo code for local house style before introducing new patterns.
-4. Prefer answers and implementations backed by specific source files or nearby repo examples.
-
-## Guidelines
-
-- Prefer current Effect v4 APIs and project-local patterns over old blog posts, examples, or package-memory guesses.
-- Use `Effect.gen(function* () { ... })` for multi-step workflows.
-- Use `Effect.fn("Name")` or `Effect.fnUntraced(...)` for named effects when adding reusable service methods or important workflows.
-- Prefer Effect `Schema` for API and domain data shapes. Use branded schemas for IDs and `Schema.TaggedErrorClass` for typed domain errors when modeling new error surfaces.
-- Keep HTTP handlers thin: decode input, read request context, call services, and map transport errors. Put business rules in services.
-- In Effect service code, prefer Effect-aware platform abstractions and dependencies over ad hoc promises where the surrounding code already does so.
-- Keep layer composition explicit. Avoid broad hidden provisioning that makes missing dependencies hard to see.
-- In tests, prefer the repo's existing Effect test helpers and live tests for filesystem, git, child process, locks, or timing behavior.
-- Do not introduce `any`, non-null assertions, unchecked casts, or older Effect APIs just to satisfy types.
-- Do not answer from memory. Verify against `.deepagent-code/references/effect-smol` or nearby code first.
-
-## Testing Patterns
-
-- Use `testEffect(...)` from `packages/deepagent-code/test/lib/effect.ts` for tests that exercise Effect services, layers, runtime context, scoped resources, or platform integrations.
-- Use `it.live(...)` for filesystem, git repositories, HTTP servers, sockets, child processes, locks, real time, and other live platform behavior.
-- Run tests from package directories such as `packages/deepagent-code`; never run package tests from the repo root.
-- Prefer explicit test layers over ad hoc managed runtimes. Keep dependency provisioning visible in the test file.
-- Use scoped fixtures and finalizers for resources that must be cleaned up, including temporary directories, flags, databases, fibers, servers, and global state.
diff --git a/.deepagent-code/themes/mytheme.json b/.deepagent-code/themes/mytheme.json
deleted file mode 100644
index 2b674b73e..000000000
--- a/.deepagent-code/themes/mytheme.json
+++ /dev/null
@@ -1,223 +0,0 @@
-{
- "$schema": "https://deepagent-code.ai/theme.json",
- "defs": {
- "nord0": "#2E3440",
- "nord1": "#3B4252",
- "nord2": "#434C5E",
- "nord3": "#4C566A",
- "nord4": "#D8DEE9",
- "nord5": "#E5E9F0",
- "nord6": "#ECEFF4",
- "nord7": "#8FBCBB",
- "nord8": "#88C0D0",
- "nord9": "#81A1C1",
- "nord10": "#5E81AC",
- "nord11": "#BF616A",
- "nord12": "#D08770",
- "nord13": "#EBCB8B",
- "nord14": "#A3BE8C",
- "nord15": "#B48EAD"
- },
- "theme": {
- "primary": {
- "dark": "nord8",
- "light": "nord10"
- },
- "secondary": {
- "dark": "nord9",
- "light": "nord9"
- },
- "accent": {
- "dark": "nord7",
- "light": "nord7"
- },
- "error": {
- "dark": "nord11",
- "light": "nord11"
- },
- "warning": {
- "dark": "nord12",
- "light": "nord12"
- },
- "success": {
- "dark": "nord14",
- "light": "nord14"
- },
- "info": {
- "dark": "nord8",
- "light": "nord10"
- },
- "text": {
- "dark": "nord4",
- "light": "nord0"
- },
- "textMuted": {
- "dark": "nord3",
- "light": "nord1"
- },
- "background": {
- "dark": "nord0",
- "light": "nord6"
- },
- "backgroundPanel": {
- "dark": "nord1",
- "light": "nord5"
- },
- "backgroundElement": {
- "dark": "nord1",
- "light": "nord4"
- },
- "border": {
- "dark": "nord2",
- "light": "nord3"
- },
- "borderActive": {
- "dark": "nord3",
- "light": "nord2"
- },
- "borderSubtle": {
- "dark": "nord2",
- "light": "nord3"
- },
- "diffAdded": {
- "dark": "nord14",
- "light": "nord14"
- },
- "diffRemoved": {
- "dark": "nord11",
- "light": "nord11"
- },
- "diffContext": {
- "dark": "nord3",
- "light": "nord3"
- },
- "diffHunkHeader": {
- "dark": "nord3",
- "light": "nord3"
- },
- "diffHighlightAdded": {
- "dark": "nord14",
- "light": "nord14"
- },
- "diffHighlightRemoved": {
- "dark": "nord11",
- "light": "nord11"
- },
- "diffAddedBg": {
- "dark": "#3B4252",
- "light": "#E5E9F0"
- },
- "diffRemovedBg": {
- "dark": "#3B4252",
- "light": "#E5E9F0"
- },
- "diffContextBg": {
- "dark": "nord1",
- "light": "nord5"
- },
- "diffLineNumber": {
- "dark": "#abafb7",
- "light": "textMuted"
- },
- "diffAddedLineNumberBg": {
- "dark": "#3B4252",
- "light": "#E5E9F0"
- },
- "diffRemovedLineNumberBg": {
- "dark": "#3B4252",
- "light": "#E5E9F0"
- },
- "markdownText": {
- "dark": "nord4",
- "light": "nord0"
- },
- "markdownHeading": {
- "dark": "nord8",
- "light": "nord10"
- },
- "markdownLink": {
- "dark": "nord9",
- "light": "nord9"
- },
- "markdownLinkText": {
- "dark": "nord7",
- "light": "nord7"
- },
- "markdownCode": {
- "dark": "nord14",
- "light": "nord14"
- },
- "markdownBlockQuote": {
- "dark": "nord3",
- "light": "nord3"
- },
- "markdownEmph": {
- "dark": "nord12",
- "light": "nord12"
- },
- "markdownStrong": {
- "dark": "nord13",
- "light": "nord13"
- },
- "markdownHorizontalRule": {
- "dark": "nord3",
- "light": "nord3"
- },
- "markdownListItem": {
- "dark": "nord8",
- "light": "nord10"
- },
- "markdownListEnumeration": {
- "dark": "nord7",
- "light": "nord7"
- },
- "markdownImage": {
- "dark": "nord9",
- "light": "nord9"
- },
- "markdownImageText": {
- "dark": "nord7",
- "light": "nord7"
- },
- "markdownCodeBlock": {
- "dark": "nord4",
- "light": "nord0"
- },
- "syntaxComment": {
- "dark": "nord3",
- "light": "nord3"
- },
- "syntaxKeyword": {
- "dark": "nord9",
- "light": "nord9"
- },
- "syntaxFunction": {
- "dark": "nord8",
- "light": "nord8"
- },
- "syntaxVariable": {
- "dark": "nord7",
- "light": "nord7"
- },
- "syntaxString": {
- "dark": "nord14",
- "light": "nord14"
- },
- "syntaxNumber": {
- "dark": "nord15",
- "light": "nord15"
- },
- "syntaxType": {
- "dark": "nord7",
- "light": "nord7"
- },
- "syntaxOperator": {
- "dark": "nord9",
- "light": "nord9"
- },
- "syntaxPunctuation": {
- "dark": "nord4",
- "light": "nord0"
- }
- }
-}
diff --git a/.deepagent-code/tui.json b/.deepagent-code/tui.json
deleted file mode 100644
index be34580f3..000000000
--- a/.deepagent-code/tui.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "$schema": "https://deepagent-code.ai/tui.json",
- "plugin": [
- [
- "./plugins/tui-smoke.tsx",
- {
- "enabled": false,
- "label": "workspace",
- "keybinds": {
- "smoke_modal": "ctrl+alt+m",
- "smoke_screen": "ctrl+alt+o",
- "smoke_screen_home": "escape,ctrl+shift+h",
- "smoke_screen_modal": "ctrl+alt+m",
- "smoke_dialog_close": "escape,q"
- }
- }
- ]
- ]
-}
diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml
index e62c30b3e..35303a25c 100644
--- a/.github/workflows/beta.yml
+++ b/.github/workflows/beta.yml
@@ -19,6 +19,9 @@ jobs:
- name: Setup Bun
uses: ./.github/actions/setup-bun
+ # W0.5: the V2 owner authorization is minted by publish.yml (a REAL signing job) from the
+ # release build identity and exported as owner-authorization.json; this cron sync job must
+ # never depend on the signing secret — a missing secret would otherwise block the beta sync.
- name: Setup Git Committer
id: setup-git-committer
diff --git a/.github/workflows/branding-check.yml b/.github/workflows/branding-check.yml
new file mode 100644
index 000000000..ea0220bf0
--- /dev/null
+++ b/.github/workflows/branding-check.yml
@@ -0,0 +1,40 @@
+name: branding-check
+
+on:
+ push:
+ branches:
+ - main
+ - dev
+ pull_request:
+
+permissions:
+ contents: read
+
+jobs:
+ branding-check:
+ name: branding-check
+ # W11: brand-residue audit gate (legacy brand tokens from the upstream and
+ # migration-era orgs/domains). Pure stateless gate, no build deps; mirrors
+ # the test-fixture-gate pattern.
+ runs-on: blacksmith-4vcpu-ubuntu-2404
+ defaults:
+ run:
+ shell: bash
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Setup Bun
+ uses: ./.github/actions/setup-bun
+
+ - name: Run brand-residue audit
+ # Fails the job on any non-exempt hit; no continue-on-error.
+ working-directory: packages/deepagent-code
+ run: bun script/audit-branding.ts
+
+ - name: Run capability inventory consistency gate
+ # W4 step 7: stable catalog entry_tools must all be in the builtin registry.
+ working-directory: packages/deepagent-code
+ run: bun script/assert-capability-inventory.ts
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 5cbbb16c5..73b79b76b 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -15,7 +15,7 @@ permissions:
jobs:
deploy:
- if: github.repository == 'lessweb/deepagent-code' && (github.ref_name == 'dev' || github.ref_name == 'production')
+ if: github.repository == 'deepagent-ltd/deepagent-code' && (github.ref_name == 'dev' || github.ref_name == 'production')
runs-on: ubuntu-latest
environment: ${{ github.ref_name }}
steps:
diff --git a/.github/workflows/desktop-build.yml b/.github/workflows/desktop-build.yml
index 96a877ee1..21febd55b 100644
--- a/.github/workflows/desktop-build.yml
+++ b/.github/workflows/desktop-build.yml
@@ -150,6 +150,28 @@ jobs:
test -n "$executable"
DEEPAGENT_CODE_DESKTOP_EXECUTABLE="$executable" bun run test:subagents-cold-start
+ # W9.3: first real Windows run of the local-first + WSL-fallback routing.
+ # Launches the packaged app and asserts GET /global/health with Basic auth
+ # (the desktop sidecar always configures a password, so the typed API route
+ # answers 401 to a credential-less curl — the auth'd fetch proves the full
+ # sidecar bootstrap path, not just a listening port).
+ - name: Smoke test packaged Windows sidecar health
+ if: matrix.group == 'win'
+ working-directory: packages/desktop
+ shell: pwsh
+ run: |
+ # Wildcard matches both prod ("DeepAgent Code.exe") and beta
+ # ("DeepAgent Code Beta.exe") artifact names so the beta build
+ # cannot silently fail this smoke because of an exact name filter.
+ $exe = Get-ChildItem -Path "dist/win-unpacked" -Filter "*DeepAgent Code*.exe" -Recurse -File | Select-Object -First 1
+ if (-not $exe) {
+ Write-Error "Packaged executable not found under dist/win-unpacked"
+ exit 1
+ }
+ $env:DEEPAGENT_CODE_DESKTOP_EXECUTABLE = $exe.FullName
+ $env:DEEPAGENT_CODE_SMOKE_PORT = "3188"
+ bun run test:sidecar-health-smoke
+
- name: Upload package artifacts
uses: actions/upload-artifact@v4
with:
diff --git a/.github/workflows/docs-locale-sync.yml b/.github/workflows/docs-locale-sync.yml
index 75902f46d..1a8104959 100644
--- a/.github/workflows/docs-locale-sync.yml
+++ b/.github/workflows/docs-locale-sync.yml
@@ -50,7 +50,7 @@ jobs:
- name: Install DeepAgent Code
if: steps.changes.outputs.has_changes == 'true'
- run: curl -fsSL https://deepagent-code.ai/install | bash
+ run: curl -fsSL https://deepagent.ltd/install | bash
- name: Sync locale docs with DeepAgent Code
if: steps.changes.outputs.has_changes == 'true'
diff --git a/.github/workflows/docs-update.yml b/.github/workflows/docs-update.yml
index b707db2a8..ffc95c840 100644
--- a/.github/workflows/docs-update.yml
+++ b/.github/workflows/docs-update.yml
@@ -10,7 +10,7 @@ env:
jobs:
update-docs:
- if: github.repository == 'lessweb/deepagent-code'
+ if: github.repository == 'deepagent-ltd/deepagent-code'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
id-token: write
diff --git a/.github/workflows/duplicate-issues.yml b/.github/workflows/duplicate-issues.yml
index a2f8faf30..7ee900bc0 100644
--- a/.github/workflows/duplicate-issues.yml
+++ b/.github/workflows/duplicate-issues.yml
@@ -20,7 +20,7 @@ jobs:
- uses: ./.github/actions/setup-bun
- name: Install deepagent-code
- run: curl -fsSL https://deepagent-code.ai/install | bash
+ run: curl -fsSL https://deepagent.ltd/install | bash
- name: Check duplicates and compliance
env:
@@ -132,7 +132,7 @@ jobs:
- uses: ./.github/actions/setup-bun
- name: Install deepagent-code
- run: curl -fsSL https://deepagent-code.ai/install | bash
+ run: curl -fsSL https://deepagent.ltd/install | bash
- name: Recheck compliance
env:
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index cf05fff47..48f85d503 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -34,7 +34,7 @@ permissions:
jobs:
version:
runs-on: blacksmith-4vcpu-ubuntu-2404
- if: github.repository == 'lessweb/deepagent-code'
+ if: github.repository == 'deepagent-ltd/deepagent-code'
steps:
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
with:
@@ -61,7 +61,7 @@ jobs:
DEEPAGENT_CODE_BUMP: ${{ inputs.bump }}
DEEPAGENT_CODE_VERSION: ${{ inputs.version }}
DEEPAGENT_CODE_API_KEY: ${{ secrets.DEEPAGENT_CODE_API_KEY }}
- GH_REPO: ${{ (github.ref_name == 'beta' && 'lessweb/deepagent-code-beta') || github.repository }}
+ GH_REPO: ${{ (github.ref_name == 'beta' && 'deepagent-ltd/deepagent-code-beta') || github.repository }}
outputs:
version: ${{ steps.version.outputs.version }}
release: ${{ steps.version.outputs.release }}
@@ -71,7 +71,7 @@ jobs:
build-cli:
needs: version
runs-on: blacksmith-4vcpu-ubuntu-2404
- if: github.repository == 'lessweb/deepagent-code'
+ if: github.repository == 'deepagent-ltd/deepagent-code'
steps:
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
with:
@@ -86,17 +86,48 @@ jobs:
deepagent-code-app-id: ${{ vars.DEEPAGENT_CODE_APP_ID }}
deepagent-code-app-secret: ${{ secrets.DEEPAGENT_CODE_APP_SECRET }}
- - name: Build
+ - name: Build (release identity pinned)
id: build
run: |
./packages/deepagent-code/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
./packages/cli/script/build.ts ${{ (github.ref_name == 'beta' && '--sourcemaps') || '' }}
+ # Ship the authorization row at every binary's appRoot (dirname of the executable —
+ # V2OwnerSeed.defaultOwnerAuthorizationAppRoot) so default installs self-qualify.
+ for dir in packages/deepagent-code/dist/deepagent-code-*/bin packages/cli/dist/*/bin; do
+ [ -d "$dir" ] && cp "$RUNNER_TEMP/owner-authorization.json" "$dir/owner-authorization.json"
+ done
env:
DEEPAGENT_CODE_VERSION: ${{ needs.version.outputs.version }}
DEEPAGENT_CODE_RELEASE: ${{ needs.version.outputs.release }}
+ DEEPAGENT_CODE_RELEASE_OWNER_PUBLIC_KEY: ${{ runner.temp }}/release-owner-public-key.pem
GH_REPO: ${{ needs.version.outputs.repo }}
GH_TOKEN: ${{ steps.committer.outputs.token }}
+ # Owner authorization (2026-09-11 ruling): mint with a ONE-TIME Ed25519 pair BEFORE the
+ # binaries build — the public half is pinned into this exact build via the
+ # DEEPAGENT_CODE_RELEASE_OWNER_PUBLIC_KEY define and the private half dies with the mint
+ # process. No signing secret exists anywhere. The row never expires (no forced updates).
+ - name: Mint V2 owner authorization (ephemeral per-release)
+ id: mint-owner
+ working-directory: packages/deepagent-code
+ env:
+ DEEPAGENT_CODE_VERSION: ${{ needs.version.outputs.version }}
+ run: |
+ bun install
+ bun script/mint-owner-campaign.ts --ephemeral \
+ --build-identity "$DEEPAGENT_CODE_VERSION" \
+ --db "$RUNNER_TEMP/mint.db" \
+ --export "$RUNNER_TEMP/owner-authorization.json" \
+ | tee "$RUNNER_TEMP/mint-result.json"
+ jq -r '.public_key_pem' "$RUNNER_TEMP/mint-result.json" > "$RUNNER_TEMP/release-owner-public-key.pem"
+ test -s "$RUNNER_TEMP/release-owner-public-key.pem"
+
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
+ with:
+ name: owner-authorization
+ path: ${{ runner.temp }}/owner-authorization.json
+ if-no-files-found: warn
+
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: deepagent-code-cli
@@ -122,7 +153,7 @@ jobs:
- build-cli
- version
runs-on: blacksmith-4vcpu-windows-2025
- if: github.repository == 'lessweb/deepagent-code'
+ if: github.repository == 'deepagent-ltd/deepagent-code'
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
@@ -221,7 +252,7 @@ jobs:
needs:
- build-cli
- version
- if: github.repository == 'lessweb/deepagent-code'
+ if: github.repository == 'deepagent-ltd/deepagent-code'
continue-on-error: false
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
@@ -455,6 +486,12 @@ jobs:
name: deepagent-code-preview-cli
path: packages/cli/dist
+ - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
+ continue-on-error: true
+ with:
+ name: owner-authorization
+ path: /tmp/owner-authorization
+
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
if: needs.version.outputs.release
with:
@@ -494,6 +531,25 @@ jobs:
git config --global user.name "deepagent-code"
ssh-keyscan -H aur.archlinux.org >> ~/.ssh/known_hosts || true
+ # RI-51 authoritative ledger release gate: regenerate the candidate ledger from THIS tree
+ # (caller inventory, source manifest, runtime-state inventory) and stop every upload on
+ # NO-GO. Gate statuses are explicit evidence (release-evidence inputs); without them all
+ # gates are pending and the release is refused — fail-closed by construction.
+ - name: RI-51 authoritative ledger release gate
+ if: needs.version.outputs.release
+ run: |
+ mkdir -p /tmp/authoritative-ledger
+ (cd packages/core && bun run script/evidence-ledger/release-gate.ts --out /tmp/authoritative-ledger/ledger.json)
+
+ - name: Upload authoritative ledger release asset
+ if: needs.version.outputs.release && !cancelled()
+ env:
+ GH_TOKEN: ${{ steps.committer.outputs.token }}
+ run: |
+ if [ -f /tmp/authoritative-ledger/ledger.json ]; then
+ gh release upload "v${{ needs.version.outputs.version }}" /tmp/authoritative-ledger/ledger.json --clobber --repo "${{ needs.version.outputs.repo }}" || echo "::warning::ledger asset upload skipped"
+ fi
+
- name: Upload desktop release assets
if: needs.version.outputs.release
env:
@@ -507,6 +563,20 @@ jobs:
fi
gh release upload "v${{ needs.version.outputs.version }}" "${files[@]}" --clobber --repo "${{ needs.version.outputs.repo }}"
+ # W0.5: deliver the signed owner-authorization.json with the release artifacts. The runtime
+ # seed (v2-owner-seed.ts) reads it from the install root; if it is missing the release still
+ # stands and operations must deliver the line for this version.
+ - name: Upload owner authorization release asset
+ if: needs.version.outputs.release
+ env:
+ GH_TOKEN: ${{ steps.committer.outputs.token }}
+ run: |
+ if [ -f /tmp/owner-authorization/owner-authorization.json ]; then
+ gh release upload "v${{ needs.version.outputs.version }}" /tmp/owner-authorization/owner-authorization.json --clobber --repo "${{ needs.version.outputs.repo }}"
+ else
+ echo "::warning::owner-authorization.json was not minted for this release — operations must mint and deliver it before the default install can pass owner qualification"
+ fi
+
- run: ./script/publish.ts
env:
DEEPAGENT_CODE_VERSION: ${{ needs.version.outputs.version }}
diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml
index 98e043a14..3d0de2652 100644
--- a/.github/workflows/review.yml
+++ b/.github/workflows/review.yml
@@ -32,7 +32,7 @@ jobs:
- uses: ./.github/actions/setup-bun
- name: Install deepagent-code
- run: curl -fsSL https://deepagent-code.ai/install | bash
+ run: curl -fsSL https://deepagent.ltd/install | bash
- name: Get PR details
id: pr-details
diff --git a/.github/workflows/stats.yml b/.github/workflows/stats.yml
index c94322cde..ba8557288 100644
--- a/.github/workflows/stats.yml
+++ b/.github/workflows/stats.yml
@@ -9,7 +9,7 @@ concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
stats:
- if: github.repository == 'lessweb/deepagent-code'
+ if: github.repository == 'deepagent-ltd/deepagent-code'
runs-on: blacksmith-4vcpu-ubuntu-2404
permissions:
contents: write
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 787ade76a..64588554b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -73,7 +73,7 @@ jobs:
- name: Configure git identity
run: |
- git config --global user.email "bot@deepagent-code.ai"
+ git config --global user.email "bot@ai.deepagent.ltd"
git config --global user.name "deepagent-code"
- name: Cache Turbo
diff --git a/.gitignore b/.gitignore
index bca6f4905..2860c8306 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,7 +45,11 @@ tsconfig.tsbuildinfo
# README files, language documentation, or the reviewed design/ tree.
/docs/
/release-evidence/
+/gui-test-screenshots/
/specs/v2/
# Non-code domain packs — own git repo (deepagent-domain), not tracked by main repo.
extra-domain/
+
+# Local DeepAgent Code runtime instance data (per-developer, never tracked).
+/.deepagent-code/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e3923fa61..5027450f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,15 +2,19 @@
This changelog contains public, user-facing product changes. Internal incident identifiers, local paths, private environment topology, test credentials, release-gate evidence, and operational measurements are intentionally excluded.
-## Core V2.0 beta / Desktop 2.0 beta
+## Core 2.0 / Desktop 2.0
-Release labels: `core-v2.0beta` and `desktop-v2.0beta` (`2.0.0-beta.0`).
+Release labels: `core-v2.0` and `desktop-v2.0` (`2.0.0`).
- Consolidated the durable V2 session runtime as the beta release line for Core and Desktop: sessions survive restarts, interruption and startup recovery settle predictably, and provider ownership, activity projection and migration compatibility are hardened.
- Added the official DeepAgent platform provider (OpenAI Chat Completions + Responses, Anthropic-compatible) with live calibration; GPT/DeepSeek families run on the Responses protocol.
- Added the capability system: a machine-readable manifest catalog, L0 boot catalog and `capability_search` discovery entry in the production context, with durable load receipts and a per-session catalog/load snapshot bound into the prepared attempt identity.
- Connected the four-graph context base into the V2 runner with explicit per-graph readiness status (never a silent fallback), staged V2 adapters, and deterministic selection rows.
-- Aligned Core, CLI, renderer, and Electron package metadata for the beta build.
+- Added byte-stable history projection: uniform tool-output caps, protocol-aware reasoning replay, and budget-triggered batched clearing — measured 96%+ prefix-cache hit rate.
+- Measured on DeepSWE tasks against the mini-swe-agent baseline (same model): output tokens cut to roughly one third, fix-to-pass rate up from 71.8% to 98.4% on harder tasks.
+- Added durable task delegation: isolated git worktrees for write-capable subagents, per-SHA PR review, generation-fenced recovery.
+- Removed 7,269-line prompt.ts V1 monolith; replaced with lean V2 surfaces.
+- Added download distribution with mirror priority, sha256 verification, and GitHub Releases fallback.
## Desktop 1.4.7 / DeepAgent Core V4.0.8
diff --git a/README.md b/README.md
index 94e8b761d..922dbc306 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,9 @@
-The AI coding agent that remembers, plans, collaborates, and finishes
+The AI coding agent that remembers, plans, collaborates — and finishes the job
+
+DeepAgent Code 2.0: a durable, crash-safe agent core that completes real work with fewer tokens
English |
@@ -16,20 +18,36 @@
---
-DeepAgent Code is an AI coding workspace for work that lasts longer than one prompt. You can ask for a small edit, guide a running task without interrupting it, hand over a migration with objective completion criteria, or bring several specialist agents into a decision — and the work stays coherent across turns, restarts, tools, people, and projects.
+DeepAgent Code is an AI coding workspace for work that lasts longer than one prompt. Ask for a small edit, guide a running task without interrupting it, hand over a migration with objective completion criteria, or bring several specialist agents into a decision — the work stays coherent across turns, restarts, tools, people, and projects.
-## What makes it different
+## What Makes It Different
| A typical coding agent | DeepAgent Code |
|---|---|
-| Understands only what's in the current prompt | **Remembers your project** — sessions survive restarts, and what you taught it is still there tomorrow |
-| Searches for files when it needs context | **Understands the project** — code, knowledge, project memory and documents are connected, so it works from what your project actually is |
-| Does one task at a time | **Plans and finishes real work** — define a goal once, and it advances through plan → execute → verify → iterate |
-| Works alone | **Collaborates with specialists** — bounded subagents, worktree isolation, and an Expert Panel for high-risk decisions |
-| Runs only in one place, one model | **Fits your setup** — desktop or terminal, and 75+ model providers with your own API keys |
-| Keeps its memory a black box | **Memory you can see and govern** — inspect what it learned, reject what it shouldn't repeat |
+| Forgets everything when the process exits | **Durable by construction**: every prompt, tool call, and event is recorded before it runs; crash, restart, resume |
+| Only understands the current prompt | **Remembers your project**: what you taught it is still there tomorrow, and you can inspect and govern it |
+| Burns tokens narrating bash loops | **Spends tokens on the work**: structured tool calls instead of narrating shell output, with about a third of the baseline's output tokens (details below) |
+| Does one task at a time, alone | **Plans and collaborates**: goal loops, isolated worktrees, per-SHA review before anything merges |
+| Runs in one place, one model | **Fits your setup**: desktop or terminal, 75+ model providers with your own API keys |
+
+## What's New in 2.0: The Durable Core
+
+Version 2.0 rebuilds the runtime around one principle: **record first, then act**. Every prompt, tool call, and event is written to the durable log before it happens.
+
+- **Durable sessions.** A prompt is saved as a durable record before execution starts. If the process dies mid-run, the session resumes exactly where it stopped, and a retry picks up the same work instead of silently starting a second copy.
+- **Event-sourced history.** Session activity is an append-only event log written in the same transaction as the state it describes, so replay, audit, and recovery always agree on what actually happened.
+- **Durable multi-agent collaboration.** Delegated work is itself a durable record: every write-capable agent works in an isolated git worktree, commits only its own scoped changes, and is reviewed against the exact commit before anything merges. An out-of-date worker can never overwrite newer work.
+- **Write isolation.** A strict plan gate is on by default: writes outside the approved plan are rejected with an explicit error instead of silently landing in your tree.
+- **Context that stays small.** Four connected project graphs feed one budgeted context window. Stable instructions stay unchanged from turn to turn while changing state is appended at the end; sent history is byte-stable and shrinks only in one batched pass when the budget is crossed, so provider-side prompt caching stays effective.
-Everything below is what this means day to day.
+## Fewer Tokens, Fewer Steps, Better Fixes
+
+On DeepSWE tasks, against the mini-swe-agent baseline with the same model:
+
+- Output tokens drop to roughly a third of the baseline: structured tool calls replace long stretches of shell-output reasoning, and generated tokens are the most expensive part of the bill.
+- On the harder tasks, the average fix-to-pass rate rises from 71.8% to 98.4%.
+- About 10% fewer steps on average, with end-to-end wall time on par with the baseline.
+- Lower total input tokens: total input runs at roughly 40-80% of the baseline on DeepSWE. Old tool outputs are trimmed by fixed rules and past reasoning is never replayed, so the prompt prefix stays byte-stable, with measured prefix-cache hit rates above 96%.
## One Workspace, Three Ways to Work
@@ -38,7 +56,7 @@ Choose the collaboration style that fits the task:
| Mode | You provide | DeepAgent does |
|---|---|---|
| **Auto** | A request | Defines the objective, designs and plans as needed, then executes end to end |
-| **Loop** | A goal | Writes an editable `goal+plan.md` and advances it through plan, execute, verify, and iterate ticks |
+| **Loop** | A goal | Writes an editable `goal+plan.md` and advances it through plan, execute, verify, and iterate cycles |
| **Design** | Your `goal+plan.md` | Executes your design faithfully without redefining its objective or completion criteria |
Autonomy and permission are independent. Use **Read-only**, **Request approval**, or **Full access** without changing the collaboration mode.
@@ -47,10 +65,10 @@ Autonomy and permission are independent. Use **Read-only**, **Request approval**
DeepAgent is built for active collaboration, not fire-and-forget automation.
-- **Live steering:** send new guidance while a model turn or tool is running. The message is durably admitted and absorbed at the next safe provider-turn boundary without aborting in-flight work.
-- **Goal steering:** guidance sent to an active goal is folded into the next tick, preserving the current tool and plan state.
-- **Hot plan editing:** edit a running or paused goal. Stable step IDs, evidence, completed work, and the new plan version carry into the next tick.
-- **Explicit queueing:** queue a future activity when the instruction should begin after the current activity instead of changing it.
+- **Live steering:** send new guidance while a model turn or tool is running. Your message is saved to the log first, then applied at the next safe pause between model calls. Work in progress is never aborted.
+- **Goal steering:** guidance sent to an active goal is folded into the next cycle, preserving the current tool and plan state.
+- **Hot plan editing:** edit a running or paused goal. Stable step IDs, evidence, completed work, and the new plan version carry into the next cycle.
+- **Explicit queueing:** queue a future task when the instruction should begin after the current one instead of changing it.
- **Pause, resume, take over, or roll back:** every long-running workflow has a human control path and a durable audit trail.
## Memory You Can Inspect and Govern
@@ -76,7 +94,7 @@ DeepAgent connects four views of the project:
3. **Project memory:** decisions, constraints, environment facts, and learned conventions.
4. **Document graph:** plans, designs, worklogs, evaluations, run context, and evidence.
-The Session V2 runner assembles context from explicit sources under a durable Context Epoch. It selects linked evidence within budget, records why each reference was admitted or rejected, and preserves the current goal, constraints, decisions, open questions, next steps, and relevant files during compaction.
+The session runtime assembles context only from explicit, recorded sources. It selects linked evidence within budget, records why each reference was kept or dropped, and preserves the current goal, constraints, decisions, open questions, next steps, and relevant files during compaction.
Prompt caching remains effective across long runs: stable system instructions stay byte-stable, while plans, steering, budgets, round results, and other volatile state are appended in a dedicated tail block.
@@ -92,11 +110,11 @@ Composable domain packs add language, framework, platform, hardware, business, a
### Specialist agents and Expert Panel
-DeepAgent can partition independent work across bounded, isolated workers. Delegated runs persist their identity, generation, owner, lease, phase, terminal state, result, and parent delivery, so an exact retry resumes the same work instead of silently starting another worker. Write-capable subagents receive dedicated worktrees, return compact summaries and artifact references, and leave their full transcripts available for inspection.
+DeepAgent can partition independent work across bounded, isolated workers. Every delegated run is a durable record of who owns it, what stage it is in, its outcome, and which parent task it reports back to, so a retry resumes that same run instead of silently spawning a duplicate. Write-capable subagents receive dedicated worktrees, return compact summaries and artifact references, and leave their full transcripts available for inspection.
-Automatic write collaboration follows a durable Git/PR path. Workers commit only their scoped changes; one Reviewer session checks each exact worker SHA, the coordinator performs serial `--no-ff` merges on the Session branch, and one Senior Reviewer examines the merged batch. Resume, timeout, cancellation, takeover, review feedback, and cleanup are generation-fenced so a stale worker cannot settle or overwrite newer work.
+Automatic write collaboration follows a durable Git/PR path. Workers commit only their scoped changes; one Reviewer session checks each exact worker SHA, the coordinator performs serial `--no-ff` merges on the Session branch, and one Senior Reviewer examines the merged batch. Resume, timeout, cancellation, takeover, review feedback, and cleanup are versioned with the work itself, so a stale worker can never finalize or overwrite newer work.
-For high-risk decisions, convene an **Expert Panel**. Correctness, security, performance, architecture, and reproducibility lenses review the same frozen question, debate anonymously for up to three rounds, and feed a deterministic arbiter that preserves minority opinions and fails closed to human review.
+For high-risk decisions, convene an **Expert Panel**. Correctness, security, performance, architecture, and reproducibility lenses review the same frozen question, debate anonymously for up to three rounds, and feed a deterministic arbiter that preserves minority opinions and defers to human review when it cannot reach a safe verdict.
### Team and agent messaging
@@ -109,7 +127,7 @@ Project IM brings people and agents into the same thread. Mention an agent to st
```bash
# Install script (macOS / Linux)
-curl -fsSL https://deepagent.ltd/install | bash
+curl -fsSL https://ai.deepagent.ltd/download/install | bash
```
Then run:
@@ -122,10 +140,10 @@ deepagent
## Adding a Model Provider
-### DeepAgent API — our own platform (recommended)
+### DeepAgent API: the official platform (recommended)
If you want the experience DeepAgent Code is tuned around, use the official
-**DeepAgent API Platform** ([api.deepagent.ltd](https://api.deepagent.ltd)) — a
+**DeepAgent API Platform** ([api.deepagent.ltd](https://api.deepagent.ltd)), a
secure model API service for DeepAgent applications with GPT and DeepSeek
families over Chat Completions and Responses, plus Anthropic-compatible
endpoints. Get a key from the platform console, check plan prices on
@@ -135,7 +153,7 @@ endpoints. Get a key from the platform console, check plan prices on
### Any other provider
DeepAgent Code is provider-agnostic. It supports 75+ providers through the
-[AI SDK](https://ai-sdk.dev/) and [models.dev](https://models.dev), plus any
+[AI SDK](https://ai-sdk.dev/) and models.dev, plus any
OpenAI- or Anthropic-compatible endpoint.
### Desktop app (recommended)
@@ -145,9 +163,9 @@ Open **Settings → Providers**:
- **Official providers** (DeepAgent, OpenAI, Anthropic, DeepSeek, Google, xAI, ZhipuAI/GLM):
click **Connect**, paste your API key.
- **Any other provider or gateway**: click **Connect** on *Custom provider*, paste
- the **Base URL** and **API key**. DeepAgent Code auto-detects the protocol
- (OpenAI-compatible or Anthropic) and discovers the available models from the
- endpoint's `/models` list — you don't have to fill anything else.
+ the **Base URL** and **API key**. DeepAgent Code infers the API protocol family
+ (OpenAI-compatible or Anthropic) from the provider's SDK package and discovers
+ the available models from the endpoint's `/models` list — nothing else to fill in.
Model specs (context window, reasoning) are auto-filled by matching each model
against the models.dev catalog. You can reopen a custom provider to override a
@@ -166,9 +184,7 @@ deepagent auth list
### Config file
-Providers also live in `~/.deepagent/code/config.jsonc`. A custom
-OpenAI-compatible endpoint looks like this — set `discovery: true` to have models
-refreshed from the endpoint at runtime, or list them explicitly under `models`:
+Providers also live in `~/.deepagent/code/config.jsonc`. A custom OpenAI-compatible endpoint looks like this: set `discovery: true` to have models refreshed from the endpoint at runtime, or list them explicitly under `models`:
```jsonc
{
@@ -190,10 +206,10 @@ refreshed from the endpoint at runtime, or list them explicitly under `models`:
Official-provider keys added via the app/CLI are stored separately in
`~/.deepagent/code/auth.json`, not in the config file. Full reference
(base URL overrides, headers, per-model config, gateways) lives in the
-[DeepAgent API Platform docs](https://api.deepagent.ltd/) — or explore
+[DeepAgent API Platform docs](https://api.deepagent.ltd/), or explore
supported models and plans on [Model Square pricing](https://api.deepagent.ltd/pricing).
-All DeepAgent Code private filesystem data lives under `~/.deepagent/code/`, including configuration, credential references, databases, Desktop state, logs, caches, and temporary files. Native secret values remain in the operating system's credential store. Tests use explicit isolated roots and cannot redirect production storage through ordinary environment variables.
+All DeepAgent Code private filesystem data lives under `~/.deepagent/code/`, including configuration, credential references, databases, Desktop state, logs, caches, and temporary files. Native secret values remain in the operating system's credential store. Tests run against explicitly isolated directories; even environment variables cannot redirect where production data is stored.
## Quick Example
@@ -213,17 +229,21 @@ The agent will:
On your next session, when you ask to add rate limiting elsewhere, the agent already knows the pattern.
-## How It Works (under the hood)
+## How It Works (Under the Hood)
+
+**Durable session core**: Prompts become durable records before execution; a single serialized runner turns them into visible messages at safe points. Steering messages merge into the running task, queued instructions start one at a time after it, and interrupts land precisely on the work that is actually running.
+
+**Event graph**: Session activity, task runs, and evidence are event-sourced, written in the same transaction as the state they describe, so replay and recovery agree with what actually happened.
-**Document graph** — All persistent state lives in typed documents: `knowledge`, `strategy`, `methodology`, `skill`, `memory`, `design`, `worklog`, `diagnosis`, `eval`. Documents link to each other (supports/blocks/conflicts/validates), forming a graph you can traverse.
+**Document graph**: All persistent state lives in typed documents: `knowledge`, `strategy`, `methodology`, `skill`, `memory`, `design`, `worklog`, `diagnosis`, `eval`. Documents link to each other (supports/blocks/conflicts/validates), forming a graph you can traverse.
-**Scope layers** — `session-private` (current conversation), `project-shared` (all sessions in this project), `user-global` (cross-project preferences), `public-system` (built-in skills), `sealed` (audit-only, never enters context).
+**Scope layers**: `session-private` (current conversation), `project-shared` (all sessions in this project), `user-global` (cross-project preferences), `public-system` (built-in skills), `sealed` (audit-only, never enters context).
-**Context admission** — Retrieval hits pass through admission gates. Full tool output (raw LSP dumps, diagnostics, capability indexes) is written to evidence artifacts, ref-linked and tool-only; only summaries and `file:line` snippets enter the model context. Sensitive values (SSH hosts, tokens, internal paths) are suggested, never auto-expanded.
+**Context admission**: Retrieval hits pass through admission gates. Full tool output (raw LSP dumps, diagnostics, capability indexes) is written to evidence artifacts, ref-linked and tool-only; only summaries and `file:line` snippets enter the model context. The agent may point at sensitive values (SSH hosts, tokens, internal paths) but never pastes the raw value into context.
-**AI IDE microservice** — Query code by symbol name and intent (e.g. `code_intel({ symbol: "AgentGateway.open", intent: "overview" })`), not file:line coordinates. Get definitions, references, call chains, type hierarchies, and diagnostics in one call. Built on LSP with 38+ language servers; degrades gracefully to grep/read when no server is configured.
+**AI IDE microservice**: Query code by symbol name and intent (e.g. `code_intel({ symbol: "AgentGateway.open", intent: "overview" })`), not file:line coordinates. Get definitions, references, call chains, type hierarchies, and diagnostics in one call. Built on LSP with 38+ language servers; degrades gracefully to grep/read when no server is configured.
-**Preset MCP catalog** — Curated MCP servers for Git platforms, file search, read-only databases, and browser automation. Risk tiers are derived at load time from the catalog template (not user config, so they can't be injected), and servers default to not-connected with write and external-fetch operations behind approval gates.
+**Preset MCP catalog**: Curated MCP servers for Git platforms, file search, read-only databases, and browser automation. Risk tiers are derived at load time from the catalog template (not user config, so they can't be injected), and servers default to not-connected with write and external-fetch operations behind approval gates.
The full architecture and its invariants are documented in [Architecture & Design](design/README.md).
@@ -269,6 +289,7 @@ bun run --cwd packages/deepagent-code dev import-history --from codex --dry-run
- [Security Policy](SECURITY.md)
- [Privacy Policy](PRIVACY.md)
- [Contributing](CONTRIBUTING.md)
+- [Code of Conduct](CODE_OF_CONDUCT.md)
- [Changelog](CHANGELOG.md)
## License & Attribution
diff --git a/README.zh.md b/README.zh.md
index 86ad65d9a..f7ce78ba4 100644
--- a/README.zh.md
+++ b/README.zh.md
@@ -8,6 +8,8 @@
会记忆、会规划、会协作,也能把工作真正做完的 AI 编程智能体
+DeepAgent Code 2.0:持久化、崩溃可恢复的智能体内核,用更少的 token 完成真实工作
+
English |
简体中文 |
@@ -16,20 +18,36 @@
---
-DeepAgent Code 是一套面向长期工作的 AI 编程工作区。你可以让它完成一次小改动,在任务运行中继续补充指令,把一场迁移交给带客观完成判据的目标回路,或者召集多位专家共同审阅一项决策——工作会在多轮对话、进程重启、工具调用、团队成员和不同项目之间保持连贯。
+DeepAgent Code 是一个面向长期任务的 AI 编程工作区。你可以让它改一个小地方,在任务运行中随时补充指令,把一场迁移交给带客观完成判据的目标回路,或者召集多位专家共同审阅一项决策——无论哪种,工作都会在多轮对话、进程重启、工具调用、团队成员和不同项目之间保持连贯。
## 它和其他编程智能体有什么区别
| 常见的编程智能体 | DeepAgent Code |
|---|---|
-| 只理解当前 prompt 里的内容 | **记得你的项目**——会话跨重启存活,你教过它的东西第二天还在 |
-| 需要临时搜索文件才能拿到上下文 | **理解项目本身**——代码、知识、项目记忆与文档相互连接,它基于项目「实际是什么」工作 |
-| 一次只能做一个任务 | **规划并把真实工作做完**——定一个目标,自动推进计划 → 执行 → 校验 → 迭代 |
-| 单打独斗 | **与专家协作**——有界子智能体、独立 worktree,高风险决策交给 Expert Panel |
-| 只能在一种环境、一个模型上运行 | **适配你的环境**——桌面或终端,75+ 模型供应商、使用你自己的 API Key |
-| 记忆是黑盒 | **记忆看得见、管得住**——可以检查它学到了什么,也能拒绝它不该重复的东西 |
+| 进程退出就忘掉一切 | **天然持久**:每条 prompt、每次工具调用、每个事件都先落盘再执行;崩溃重启后精确续跑 |
+| 只理解当前 prompt 里的内容 | **记得你的项目**:你教过它的东西第二天还在,而且看得见、管得住 |
+| 用大段 shell 叙述烧 token | **把 token 花在工作上**:结构化工具调用取代一遍遍转述的 shell 输出,输出 token 约为基线的三分之一(见下文) |
+| 一次一个任务、单打独斗 | **规划并协作**:目标回路、独立 worktree、逐 SHA 审阅之后才合并 |
+| 只能在一种环境、一个模型上运行 | **适配你的环境**:桌面或终端,75+ 模型供应商,用你自己的 API Key |
+
+## 2.0 新特性:持久化内核
+
+2.0 版本围绕一条原则重建了运行时:**先记录,再执行**。每条 prompt、每次工具调用、每个事件,都会在真正发生之前先写入本地持久日志。
+
+- **持久会话。** prompt 在执行开始前先保存为持久记录。进程中途崩溃,会话从断点精确恢复;重试接起的是同一项工作,而不是悄悄另起一份。
+- **事件溯源的历史。** 会话活动是一份只追加的事件日志,与它所描述的状态在同一事务中写入,回放、审计与恢复读到的永远是同一份事实。
+- **持久化多智能体协作。** 委派工作本身就是一条持久记录:每个可写智能体在独立 git worktree 中工作,只提交自己作用域内的改动,并且要经过绑定精确提交的审阅才会合并。过期的 Worker 永远无法覆盖较新的工作。
+- **写隔离。** 严格计划门默认开启:越出已批准计划的写入会被显式拒绝并报错,而不是静默落进你的代码树。
+- **上下文保持精简。** 四张相互关联的项目图汇入同一个有预算约束的上下文窗口:稳定指令逐轮保持不变,易变状态只追加在末尾;已发送的历史逐字节稳定,只在跨过预算线时一次性批量收缩,让供应商的前缀缓存持续命中。
-下面这些内容就是这些能力在日常中的样子。
+## 更少的 token,更少的步骤,更好的解决
+
+在 DeepSWE 任务上,以相同模型对照 mini-swe-agent 基线:
+
+- 输出 token 降至基线的约三分之一:结构化工具调用取代大段 shell 推理转述,而生成 token 恰恰是账单里最贵的部分。
+- 较难的任务上修复通过率平均从 71.8% 提升到 98.4%。
+- 平均步数少约 10%,端到端耗时与基线持平。
+- 输入 token 总量更低:DeepSWE 上总输入约为基线的四到八成。旧工具输出按固定规则截断,既往思考不回放,提示词前缀逐字节稳定,实测前缀缓存命中率在 96% 以上。
## 一个工作区,三种协作方式
@@ -38,19 +56,19 @@ DeepAgent Code 是一套面向长期工作的 AI 编程工作区。你可以让
| 模式 | 你提供 | DeepAgent 负责 |
|---|---|---|
| **自动(Auto)** | 一项需求 | 自行明确目标,按需设计和规划,再端到端执行 |
-| **循环(Loop)** | 一个目标 | 生成可编辑的 `goal+plan.md`,按计划、执行、校验、迭代逐 tick 推进 |
+| **循环(Loop)** | 一个目标 | 生成可编辑的 `goal+plan.md`,按计划、执行、校验、迭代逐轮推进 |
| **设计(Design)** | 你编写的 `goal+plan.md` | 忠实执行你的设计,不重新定义目标或完成判据 |
自主程度和权限相互独立。你可以在不改变协作模式的情况下选择**只读**、**请求批准**或**完全访问**。
## 它在工作,你仍然掌控全局
-DeepAgent 为持续协作而设计,不是一个发出指令后只能等待的黑盒。
+DeepAgent 为持续协作而设计,不是一个发出指令后只能干等的黑盒。
-- **实时 Steering:** 模型或工具仍在运行时继续发送指导。消息会先持久化,再在下一个安全的供应商轮次边界被吸收,不会中断在飞工作。
-- **Goal Steering:** 发给活跃目标的指导会进入下一个 tick,同时保留当前工具状态和计划状态。
-- **运行中计划热编辑:** 编辑正在运行或已暂停的目标。稳定的步骤 ID、证据、已完成工作和新计划版本会一起进入下一 tick。
-- **显式排队:** 当一条指令应该在当前 activity 结束后独立开始时,把它放入未来队列,而不是改变当前工作。
+- **实时引导(Live Steering):** 模型或工具还在运行时,你可以继续发指令。消息先写入日志,再在模型调用之间的下一个安全时机并入,绝不中断正在执行的工作。
+- **目标引导(Goal Steering):** 发给活跃目标的指导会进入下一轮,同时保留当前工具和计划状态。
+- **运行中计划热编辑:** 编辑正在运行或已暂停的目标。稳定的步骤 ID、证据、已完成工作和新计划版本会一起进入下一轮。
+- **显式排队:** 当一条指令应该在当前任务结束后独立开始时,把它放入未来队列,而不是改变当前工作。
- **暂停、恢复、接管或回滚:** 每个长跑流程都有清晰的人类控制路径和持久审计记录。
## 看得见、管得住的记忆
@@ -63,7 +81,7 @@ DeepAgent 不会把记忆藏在不可见的提示词里。项目状态保存在
- 内置技能与领域包保持系统级版本管理。
- 封存的评测材料仅用于审计,永不进入模型上下文。
-学习遵循可治理的生命周期:证据生成候选,隔离审阅或人工决策改变候选状态,回归与消融门发布可复现的知识快照。拒绝理由会持久保存,因此被淘汰的模式不会在后台被悄悄重新学习。
+学习遵循可治理的生命周期:证据产生候选,隔离审阅或人工决策改变候选状态,回归与消融门禁发布可复现的知识快照。被拒绝的理由会持久保存,被淘汰的模式不会在后台悄悄复活。
**仓库与百科(Repo & Wiki)** 让这套系统对人可读。你可以浏览知识与执行档案、搜索整个仓库、沿文档到代码的链接探索上下文、检查来源链,并把有价值的运行证据升格为受治理知识。
@@ -76,11 +94,11 @@ DeepAgent 把项目的四个视图连接在一起:
3. **项目记忆:** 决策、约束、环境事实与已学习的项目约定。
4. **文档图:** 计划、设计、工作日志、评测、运行上下文与证据。
-Session V2 运行器在持久 Context Epoch 下从明确的 Context Source 装配上下文。它在预算内选择相互关联的证据,记录每条引用为什么被准入或拒绝,并在压缩时保留当前目标、约束、决策、开放问题、后续步骤与相关文件。
+会话运行时只从明确记录的来源装配上下文:在预算内选择相互关联的证据,记录每条引用为什么被保留或舍弃,并在压缩时保留当前目标、约束、决策、开放问题、后续步骤与相关文件。
-长跑任务也能持续命中提示词缓存:稳定 system 指令保持字节级稳定,计划、Steering、预算、轮次结果等易变状态只追加到独立的尾部区块。
+长跑任务也能持续命中提示词缓存:system 指令保持字节级不变,计划、引导、预算、轮次结果等易变状态只追加到独立的尾部区块。
-## 为困难工作而生
+## 为复杂任务而生
### AI IDE
@@ -92,15 +110,15 @@ Session V2 运行器在持久 Context Epoch 下从明确的 Context Source 装
### 专业子智能体与 Expert Panel
-DeepAgent 可以把独立工作拆分给数量有界、相互隔离的 Worker。委派运行会持久化自己的身份、generation、owner、lease、阶段、终态、结果和父会话投递,因此 exact retry 会恢复同一项工作,而不是静默启动另一个 Worker。具备写权限的子智能体获得独立 worktree,只向父会话返回紧凑摘要和工件引用,完整执行记录仍可随时查看。
+DeepAgent 可以把独立工作拆分给数量有界、相互隔离的 Worker。每次委派运行都是一条持久记录,记下它归属于谁、处于哪个阶段、结果如何、向哪个父任务回报,因此重试会恢复同一次运行,而不是静默再起一个重复的 Worker。具备写权限的子智能体获得独立 worktree,只向父会话返回紧凑摘要和工件引用,完整执行记录仍可随时查看。
-自动写协作走一条持久 Git/PR 路径。Worker 只提交其作用域内的改动;同一个普通 Reviewer Session 按精确 Worker SHA 逐项审阅,协调器在 Session 分支上串行执行 `--no-ff` merge,再由同一个 Senior Reviewer Session 审阅合并后的完整批次。恢复、超时、取消、接管、审阅反馈和清理都受 generation fence 保护,过期 Worker 无法结算或覆盖较新的工作。
+自动写协作走一条持久 Git/PR 路径。Worker 只提交其作用域内的改动;一个 Reviewer Session 按精确 Worker SHA 逐项审阅,协调器在 Session 分支上串行执行 `--no-ff` merge,再由同一个 Senior Reviewer Session 审阅合并后的完整批次。恢复、超时、取消、接管、审阅反馈和清理都与工作版本绑定,过期的 Worker 无法敲定或覆盖较新的工作。
-高风险决策可以召集 **Expert Panel**。正确性、安全、性能、架构与可复现性等专家视角审阅同一个冻结问题,进行最多三轮匿名辩论,再由确定性仲裁器生成裁定。少数派意见会被保留,无法安全达成一致时会失败关闭并交给人类。
+高风险决策可以召集 **Expert Panel**。正确性、安全、性能、架构与可复现性等专家视角审阅同一个冻结问题,进行最多三轮匿名辩论,再由确定性仲裁器生成裁定。少数派意见会被保留;无法安全达成一致时,交由人工裁决。
### 团队与智能体消息
-项目 IM 把团队成员和智能体放进同一条讨论。@ 某个智能体即可启动有明确作用域的运行,使用项目上下文、流式展示进度、关联执行工件,并把答案留在发起任务的对话里。
+项目内即时消息(IM)把团队成员和智能体拉进同一条讨论。@ 某个智能体即可启动一次有明确作用域的运行:它会带上项目上下文、流式展示进度、关联执行工件,并把答案留在发起任务的对话里。
## 安装
@@ -109,7 +127,7 @@ DeepAgent 可以把独立工作拆分给数量有界、相互隔离的 Worker。
```bash
# 安装脚本(macOS / Linux)
-curl -fsSL https://deepagent.ltd/install | bash
+curl -fsSL https://ai.deepagent.ltd/download/install | bash
```
然后运行:
@@ -122,10 +140,10 @@ deepagent
## 添加供应商
-### DeepAgent API —— 我们自己的平台(推荐)
+### DeepAgent API:官方平台(推荐)
-如果你想要 DeepAgent Code 最顺畅的体验,请使用官方 **DeepAgent API 平台**
-([api.deepagent.ltd](https://api.deepagent.ltd))——为 DeepAgent 应用提供安全模型 API 的官方服务,
+DeepAgent Code 默认针对 DeepAgent API 调优。如需最契合的体验,请使用官方 **DeepAgent API 平台**
+([api.deepagent.ltd](https://api.deepagent.ltd)),为 DeepAgent 应用提供安全模型 API 的官方服务,
覆盖 GPT 与 DeepSeek 家族的 Chat Completions 与 Responses 协议,并提供 Anthropic 兼容端点。
在平台控制台获取 API Key,在 [Model Square 定价页](https://api.deepagent.ltd/pricing)查看套餐价格,
然后打开 **设置 → 供应商 → DeepAgent → 连接**,粘贴 Key 即可开始。
@@ -133,7 +151,7 @@ deepagent
### 其他任何供应商
DeepAgent Code 不绑定供应商。它通过
-[AI SDK](https://ai-sdk.dev/) 和 [models.dev](https://models.dev) 支持 75+ 家供应商,
+[AI SDK](https://ai-sdk.dev/) 和 models.dev 支持 75+ 家供应商,
以及任意 OpenAI 或 Anthropic 兼容的接口。
### 桌面应用(推荐)
@@ -143,8 +161,8 @@ DeepAgent Code 不绑定供应商。它通过
- **官方供应商**(DeepAgent、OpenAI、Anthropic、DeepSeek、Google、xAI、智谱/GLM):点击
**连接**,粘贴你的 API Key。
- **其他供应商或网关**:在「自定义供应商」上点击 **连接**,填入 **Base URL** 和
- **API Key**。DeepAgent Code 会自动探测协议(OpenAI 兼容或 Anthropic),并从接口的
- `/models` 列表自动发现可用模型——其余字段无需填写。
+ **API Key**。DeepAgent Code 按供应商 SDK 包判定 API 协议族(OpenAI 兼容或 Anthropic),并从接口的
+ `/models` 列表自动发现可用模型,其余字段无需填写。
模型规格(上下文窗口、推理能力)会通过与 models.dev 目录按模型 id 匹配来自动补全。
你可以再次打开自定义供应商,覆盖某个模型的上下文/推理/温度;这些覆盖为尽力而为的默认值,
@@ -162,8 +180,8 @@ deepagent auth list
### 配置文件
-供应商也保存在 `~/.deepagent/code/config.jsonc` 中。一个自定义 OpenAI 兼容接口如下——
-设 `discovery: true` 让模型在运行时从接口刷新,或在 `models` 下显式列出:
+供应商也保存在 `~/.deepagent/code/config.jsonc` 中。一个自定义 OpenAI 兼容接口的配置如下:
+设 `discovery: true` 让模型列表在运行时从接口刷新,或在 `models` 下显式列出:
```jsonc
{
@@ -187,7 +205,7 @@ deepagent auth list
[DeepAgent API 平台文档](https://api.deepagent.ltd/);支持的模型与套餐见
[Model Square 定价](https://api.deepagent.ltd/pricing)。
-DeepAgent Code 的所有私有文件数据都位于 `~/.deepagent/code/`,包括配置、凭据引用、数据库、桌面状态、日志、缓存和临时文件;原生 secret 值仍由操作系统凭据存储保管。测试使用显式隔离的数据根,普通环境变量不能重定向生产存储。
+DeepAgent Code 的所有私有文件数据都位于 `~/.deepagent/code/`,包括配置、凭据引用、数据库、桌面状态、日志、缓存和临时文件;原生 secret 值仍由操作系统凭据存储保管。测试使用显式隔离的独立目录;即使通过环境变量也无法重定向生产数据的存储位置。
## 快速示例
@@ -209,15 +227,19 @@ deepagent-code run "为 /api/users 端点添加限流"
## 工作原理(技术内幕)
-**文档图** — 所有持久状态都存放在带类型的文档里:`knowledge`、`strategy`、`methodology`、`skill`、`memory`、`design`、`worklog`、`diagnosis`、`eval`。文档之间相互链接(支持/阻断/冲突/校验),构成一张可遍历的图。
+**持久会话内核**:prompt 先成为持久记录,再由单一串行执行器在安全点转为可见消息。Steering 消息并入正在运行的任务,排队指令在其结束后逐个开启,中断精确命中真正在运行的那份工作。
+
+**事件图**:会话活动、任务运行与证据全部事件溯源化,与它们所描述的状态在同一事务中写入,回放与恢复始终和事实一致。
+
+**文档图**:所有持久状态都存放在带类型的文档里:`knowledge`、`strategy`、`methodology`、`skill`、`memory`、`design`、`worklog`、`diagnosis`、`eval`。文档之间相互链接(支持/阻断/冲突/校验),构成一张可遍历的图。
-**作用域分层** — `session-private`(当前对话)、`project-shared`(本项目所有会话)、`user-global`(跨项目偏好)、`public-system`(内置技能)、`sealed`(仅供审计,永不进入上下文)。
+**作用域分层**:`session-private`(当前对话)、`project-shared`(本项目所有会话)、`user-global`(跨项目偏好)、`public-system`(内置技能)、`sealed`(仅供审计,永不进入上下文)。
-**上下文准入** — 检索命中要经过准入门。完整的工具输出(原始 LSP 转储、诊断、能力索引)被写入证据工件,带引用链接、仅工具可见;只有摘要与 `file:line` 片段进入模型上下文。敏感值(SSH 主机、令牌、内部路径)只被建议、绝不自动展开。
+**上下文准入**:检索命中要经过准入门。完整的工具输出(原始 LSP 转储、诊断、能力索引)被写入证据工件,带引用链接、仅工具可见;只有摘要与 `file:line` 片段进入模型上下文。对于敏感值(SSH 主机、令牌、内部路径),智能体只会指出位置,绝不把原始值贴进上下文。
-**AI IDE 微服务** — 按符号名与意图查询代码(例如 `code_intel({ symbol: "AgentGateway.open", intent: "overview" })`),而非按 file:line 坐标。一次调用即可拿到定义、引用、调用链、类型层级与诊断。基于 LSP、支持 38+ 种语言服务器;当某文件类型未配置服务器时,优雅降级到 grep/read。
+**AI IDE 微服务**:按符号名与意图查询代码(例如 `code_intel({ symbol: "AgentGateway.open", intent: "overview" })`),而非按 file:line 坐标。一次调用即可拿到定义、引用、调用链、类型层级与诊断。基于 LSP,支持 38+ 种语言服务器;没有配置语言服务器的文件类型会自动回退到 grep/read。
-**预置 MCP 目录** — 面向 Git 平台、文件搜索、只读数据库与浏览器自动化的精选 MCP 服务器。风险等级在加载时由目录模板推导(不来自用户配置,因而无法被注入),服务器默认不连接,写操作与外部请求置于审批门之后。
+**预置 MCP 目录**:面向 Git 平台、文件搜索、只读数据库与浏览器自动化的精选 MCP 服务器。风险等级在加载时由目录模板推导(不来自用户配置,因而无法被注入),服务器默认不连接,写操作与外部请求置于审批门之后。
完整架构与不变量见 [架构与设计](design/README.md)。
@@ -263,6 +285,7 @@ bun run --cwd packages/deepagent-code dev import-history --from codex --dry-run
- [安全策略](SECURITY.md)
- [隐私策略](PRIVACY.md)
- [贡献指南](CONTRIBUTING.md)
+- [行为准则](CODE_OF_CONDUCT.md)
- [更新日志](CHANGELOG.md)
## 许可与署名
diff --git a/bun.lock b/bun.lock
index a5c29ab10..10818a956 100644
--- a/bun.lock
+++ b/bun.lock
@@ -3,7 +3,7 @@
"configVersion": 1,
"workspaces": {
"": {
- "name": "opencode",
+ "name": "deepagent-code",
"dependencies": {
"@aws-sdk/client-s3": "3.933.0",
"@deepagent-code/plugin": "workspace:*",
@@ -106,7 +106,6 @@
"name": "@deepagent-code/cli",
"version": "2.0.0-beta.0",
"bin": {
- "dacode": "./bin/lildax.cjs",
"lildax": "./bin/lildax.cjs",
},
"dependencies": {
@@ -131,9 +130,6 @@
"packages/core": {
"name": "@deepagent-code/core",
"version": "2.0.0-beta.0",
- "bin": {
- "deepagent-code": "./bin/deepagent-code",
- },
"dependencies": {
"@ai-sdk/alibaba": "1.0.17",
"@ai-sdk/amazon-bedrock": "4.0.112",
@@ -174,6 +170,7 @@
"@parcel/watcher": "2.5.1",
"@silvia-odwyer/photon-node": "0.3.4",
"ai-gateway-provider": "3.1.2",
+ "ajv": "8.20.0",
"bun-pty": "0.4.8",
"cross-spawn": "catalog:",
"drizzle-orm": "catalog:",
@@ -443,6 +440,7 @@
},
"devDependencies": {
"@tsconfig/node22": "22.0.2",
+ "@types/bun": "catalog:",
"@types/node": "catalog:",
"@types/ws": "8.18.1",
"typescript": "catalog:",
@@ -1419,6 +1417,32 @@
"@lezer/rust": ["@lezer/rust@1.0.2", "", { "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0" } }, "sha512-Lz5sIPBdF2FUXcWeCu1//ojFAZqzTQNRga0aYv6dYXqJqPfMdCAI0NzajWUd4Xijj1IKJLtjoXRPMvTKWBcqKg=="],
+ "@libsql/client": ["@libsql/client@0.18.0", "", { "dependencies": { "@libsql/core": "^0.18.0", "@libsql/hrana-client": "^0.10.0", "js-base64": "^3.7.5", "libsql": "^0.5.28", "promise-limit": "^2.7.0" } }, "sha512-zMCCo58vv7w27j7+cnt/GW+X6/Rih6cHZ86PKi0AxCMOqMfrVgG9OZ5lW2bDMJhSeOjsv2szH2nJF3A9l36UmA=="],
+
+ "@libsql/core": ["@libsql/core@0.18.0", "", { "dependencies": { "js-base64": "^3.7.5" } }, "sha512-N8RR2CIpcgtbKZnXs2KVpw2lJQfinUj3I56e7qRDRpK18Hty0Rr8nr00VmFb4R/DsqOanPB/TaP3+QAQLZeXMg=="],
+
+ "@libsql/darwin-arm64": ["@libsql/darwin-arm64@0.5.29", "", { "os": "darwin", "cpu": "arm64" }, "sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A=="],
+
+ "@libsql/darwin-x64": ["@libsql/darwin-x64@0.5.29", "", { "os": "darwin", "cpu": "x64" }, "sha512-OtT+KFHsKFy1R5FVadr8FJ2Bb1mghtXTyJkxv0trocq7NuHntSki1eUbxpO5ezJesDvBlqFjnWaYYY516QNLhQ=="],
+
+ "@libsql/hrana-client": ["@libsql/hrana-client@0.10.0", "", { "dependencies": { "@libsql/isomorphic-ws": "^0.1.5", "js-base64": "^3.7.5" } }, "sha512-OoA4EMqRAC7kn7V2P6EQqRcpZf2W+AjsNIyCizBg339Tq/aMC7sRnzs3SklderhmQWAqEzvv8A2vhxVmWpkVvw=="],
+
+ "@libsql/isomorphic-ws": ["@libsql/isomorphic-ws@0.1.5", "", { "dependencies": { "@types/ws": "^8.5.4", "ws": "^8.13.0" } }, "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg=="],
+
+ "@libsql/linux-arm-gnueabihf": ["@libsql/linux-arm-gnueabihf@0.5.29", "", { "os": "linux", "cpu": "arm" }, "sha512-CD4n4zj7SJTHso4nf5cuMoWoMSS7asn5hHygsDuhRl8jjjCTT3yE+xdUvI4J7zsyb53VO5ISh4cwwOtf6k2UhQ=="],
+
+ "@libsql/linux-arm-musleabihf": ["@libsql/linux-arm-musleabihf@0.5.29", "", { "os": "linux", "cpu": "arm" }, "sha512-2Z9qBVpEJV7OeflzIR3+l5yAd4uTOLxklScYTwpZnkm2vDSGlC1PRlueLaufc4EFITkLKXK2MWBpexuNJfMVcg=="],
+
+ "@libsql/linux-arm64-gnu": ["@libsql/linux-arm64-gnu@0.5.29", "", { "os": "linux", "cpu": "arm64" }, "sha512-gURBqaiXIGGwFNEaUj8Ldk7Hps4STtG+31aEidCk5evMMdtsdfL3HPCpvys+ZF/tkOs2MWlRWoSq7SOuCE9k3w=="],
+
+ "@libsql/linux-arm64-musl": ["@libsql/linux-arm64-musl@0.5.29", "", { "os": "linux", "cpu": "arm64" }, "sha512-fwgYZ0H8mUkyVqXZHF3mT/92iIh1N94Owi/f66cPVNsk9BdGKq5gVpoKO+7UxaNzuEH1roJp2QEwsCZMvBLpqg=="],
+
+ "@libsql/linux-x64-gnu": ["@libsql/linux-x64-gnu@0.5.29", "", { "os": "linux", "cpu": "x64" }, "sha512-y14V0vY0nmMC6G0pHeJcEarcnGU2H6cm21ZceRkacWHvQAEhAG0latQkCtoS2njFOXiYIg+JYPfAoWKbi82rkg=="],
+
+ "@libsql/linux-x64-musl": ["@libsql/linux-x64-musl@0.5.29", "", { "os": "linux", "cpu": "x64" }, "sha512-gquqwA/39tH4pFl+J9n3SOMSymjX+6kZ3kWgY3b94nXFTwac9bnFNMffIomgvlFaC4ArVqMnOZD3nuJ3H3VO1w=="],
+
+ "@libsql/win32-x64-msvc": ["@libsql/win32-x64-msvc@0.5.29", "", { "os": "win32", "cpu": "x64" }, "sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg=="],
+
"@lukeed/ms": ["@lukeed/ms@2.0.2", "", {}, "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA=="],
"@lydell/node-pty": ["@lydell/node-pty@1.2.0-beta.12", "", { "optionalDependencies": { "@lydell/node-pty-darwin-arm64": "1.2.0-beta.12", "@lydell/node-pty-darwin-x64": "1.2.0-beta.12", "@lydell/node-pty-linux-arm64": "1.2.0-beta.12", "@lydell/node-pty-linux-x64": "1.2.0-beta.12", "@lydell/node-pty-win32-arm64": "1.2.0-beta.12", "@lydell/node-pty-win32-x64": "1.2.0-beta.12" } }, "sha512-qIK890UwPupoj07osVvgOIa++1mxeHbcGry4PKRHhNVNs81V2SCG34eJr46GybiOmBtc8Sj5PB1/GGM5PL549g=="],
@@ -1463,6 +1487,8 @@
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="],
+ "@neon-rs/load": ["@neon-rs/load@0.0.4", "", {}, "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw=="],
+
"@nodable/entities": ["@nodable/entities@2.1.1", "", {}, "sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg=="],
"@npm/types": ["@npm/types@1.0.2", "", {}, "sha512-KXZccTDEnWqNrrx6JjpJKU/wJvNeg9BDgjS0XhmlZab7br921HtyVbsYzJr4L+xIvjdJ20Wh9dgxgCI2a5CEQw=="],
@@ -3033,7 +3059,7 @@
"get-tsconfig": ["get-tsconfig@4.14.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA=="],
- "ghostty-web": ["ghostty-web@github:anomalyco/ghostty-web#83c0a07", {}, "anomalyco-ghostty-web-83c0a07", "sha512-Lf2v1agHkVUpMpHBWWuCZrhOEmcwwin5/Hboc9rZwQ7/CKkIh5rU1r1CvfLlhkMoFv+ed8z52RZ8hkzGZZj3MQ=="],
+ "ghostty-web": ["ghostty-web@github:anomalyco/ghostty-web#6e24d04", {}, "anomalyco-ghostty-web-6e24d04", "sha512-svnTv7Djx1QbZHr2H2Fxqp/LqkMwZB19x7ln4IOSYxlCs2wN1fTC3QRrknxtuPxDznfjV7eVBGps+Foa2v2YnQ=="],
"giget": ["giget@3.3.0", "", { "bin": { "giget": "dist/cli.mjs" } }, "sha512-gzi2D96p+AMfDcmJHGDj3KJ9NRiwvlFAU5yfa3ROwWZmFUjX4P43x3BcyRaOMMLto1vUo7C+86+MFhYTl6Ryiw=="],
@@ -3373,6 +3399,8 @@
"lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="],
+ "libsql": ["libsql@0.5.29", "", { "dependencies": { "@neon-rs/load": "^0.0.4", "detect-libc": "2.0.2" }, "optionalDependencies": { "@libsql/darwin-arm64": "0.5.29", "@libsql/darwin-x64": "0.5.29", "@libsql/linux-arm-gnueabihf": "0.5.29", "@libsql/linux-arm-musleabihf": "0.5.29", "@libsql/linux-arm64-gnu": "0.5.29", "@libsql/linux-arm64-musl": "0.5.29", "@libsql/linux-x64-gnu": "0.5.29", "@libsql/linux-x64-musl": "0.5.29", "@libsql/win32-x64-msvc": "0.5.29" }, "os": [ "linux", "win32", "darwin", ], "cpu": [ "arm", "x64", "arm64", ] }, "sha512-8lMP8iMgiBzzoNbAPQ59qdVcj6UaE/Vnm+fiwX4doX4Narook0a4GPKWBEv+CR8a1OwbfkgL18uBfBjWdF0Fzg=="],
+
"lightningcss": ["lightningcss@1.30.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-darwin-arm64": "1.30.1", "lightningcss-darwin-x64": "1.30.1", "lightningcss-freebsd-x64": "1.30.1", "lightningcss-linux-arm-gnueabihf": "1.30.1", "lightningcss-linux-arm64-gnu": "1.30.1", "lightningcss-linux-arm64-musl": "1.30.1", "lightningcss-linux-x64-gnu": "1.30.1", "lightningcss-linux-x64-musl": "1.30.1", "lightningcss-win32-arm64-msvc": "1.30.1", "lightningcss-win32-x64-msvc": "1.30.1" } }, "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg=="],
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ=="],
@@ -3859,6 +3887,8 @@
"promise-call-limit": ["promise-call-limit@3.0.2", "", {}, "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw=="],
+ "promise-limit": ["promise-limit@2.7.0", "", {}, "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw=="],
+
"promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="],
"promise.allsettled": ["promise.allsettled@1.0.7", "", { "dependencies": { "array.prototype.map": "^1.0.5", "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "iterate-value": "^1.0.2" } }, "sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA=="],
@@ -5131,6 +5161,8 @@
"lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="],
+ "libsql/detect-libc": ["detect-libc@2.0.2", "", {}, "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw=="],
+
"lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
"matcher/escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
diff --git a/design/README.md b/design/README.md
index 5b88a6a78..8d0a4b901 100644
--- a/design/README.md
+++ b/design/README.md
@@ -9,6 +9,7 @@ The architecture is designed around one requirement: a long-running agent must r
## User Guides
- [Running Real-LLM Tests](./real-llm-testing.md)
+- [V2.0 R1 Implementation-Wave Review Summary](./v2.0-r1-wave-review-summary.md)
## Design Principles
diff --git a/github/README.md b/github/README.md
index 95d09412c..315804c93 100644
--- a/github/README.md
+++ b/github/README.md
@@ -1,6 +1,6 @@
# deepagent-code GitHub Action
-A GitHub Action that integrates [deepagent-code](https://deepagent-code.ai) directly into your GitHub workflow.
+A GitHub Action that integrates [deepagent-code](https://ai.deepagent.ltd) directly into your GitHub workflow.
The release workflow reads the target version from `github/VERSION` and publishes that exact tag.
diff --git a/github/action.yml b/github/action.yml
index 788c0bda1..770a28de3 100644
--- a/github/action.yml
+++ b/github/action.yml
@@ -35,7 +35,7 @@ inputs:
required: false
oidc_base_url:
- description: "Base URL for OIDC token exchange API. Only required when running a custom GitHub App install. Defaults to https://api.deepagent-code.ai"
+ description: "Base URL for OIDC token exchange API. Only required when running a custom GitHub App install. Defaults to https://api.deepagent.ltd"
required: false
runs:
@@ -58,7 +58,7 @@ runs:
- name: Install deepagent-code
if: steps.cache.outputs.cache-hit != 'true'
shell: bash
- run: curl -fsSL https://deepagent-code.ai/install | bash
+ run: curl -fsSL https://deepagent.ltd/install | bash
- name: Add deepagent-code to PATH
shell: bash
diff --git a/github/index.ts b/github/index.ts
index 227a44654..b09f9df95 100644
--- a/github/index.ts
+++ b/github/index.ts
@@ -363,7 +363,7 @@ function useIssueId() {
}
function useShareUrl() {
- return isMock() ? "https://dev.deepagent-code.ai" : "https://deepagent-code.ai"
+ return isMock() ? "https://dev.ai.deepagent.ltd" : "https://ai.deepagent.ltd"
}
async function getAccessToken() {
@@ -374,7 +374,7 @@ async function getAccessToken() {
let response
if (isMock()) {
- response = await fetch("https://api.deepagent-code.ai/exchange_github_app_token_with_pat", {
+ response = await fetch("https://api.deepagent.ltd/exchange_github_app_token_with_pat", {
method: "POST",
headers: {
Authorization: `Bearer ${useEnvMock().mockToken}`,
@@ -383,7 +383,7 @@ async function getAccessToken() {
})
} else {
const oidcToken = await core.getIDToken("deepagent-code-github-action")
- response = await fetch("https://api.deepagent-code.ai/exchange_github_app_token", {
+ response = await fetch("https://api.deepagent.ltd/exchange_github_app_token", {
method: "POST",
headers: {
Authorization: `Bearer ${oidcToken}`,
diff --git a/infra/app.ts b/infra/app.ts
index 37134e76d..820c9d3b6 100644
--- a/infra/app.ts
+++ b/infra/app.ts
@@ -10,8 +10,8 @@
* bun run --cwd packages/app build # static web app -> packages/app/dist
*
* Secrets for the backend are read from the environment (see
- * packages/function/src/api.ts): ADMIN_SECRET, GITHUB_APP_ID,
- * GITHUB_APP_PRIVATE_KEY, FEISHU_APP_ID, FEISHU_APP_SECRET,
+ * packages/function/src/api.ts): SHARE_CREATE_TOKEN, ADMIN_SECRET, GITHUB_APP_ID,
+ * GITHUB_APP_PRIVATE_KEY, FEISHU_VERIFICATION_TOKEN,
* DISCORD_SUPPORT_BOT_TOKEN, DISCORD_SUPPORT_CHANNEL_ID.
*/
export {}
diff --git a/infra/stage.ts b/infra/stage.ts
index ab98a10f2..82ef76b91 100644
--- a/infra/stage.ts
+++ b/infra/stage.ts
@@ -1,7 +1,7 @@
export const domain = (() => {
- if ($app.stage === "production") return "deepagent-code.ai"
- if ($app.stage === "dev") return "dev.deepagent-code.ai"
- return `${$app.stage}.dev.deepagent-code.ai`
+ if ($app.stage === "production") return "ai.deepagent.ltd"
+ if ($app.stage === "dev") return "dev.ai.deepagent.ltd"
+ return `${$app.stage}.dev.ai.deepagent.ltd`
})()
export const zoneID = "430ba34c138cfb5360826c4909f99be8"
diff --git a/install b/install
index 32ccc96d7..c50a9a154 100755
--- a/install
+++ b/install
@@ -17,18 +17,36 @@ Options:
-h, --help Display this help message
-v, --version Install a specific version (e.g., 2.0.0-beta.0)
-b, --binary Install from a local binary instead of downloading
+ -m, --mirror Download mirror base (default: \$DEEPAGENT_MIRROR or https://ai.deepagent.ltd/download)
--no-modify-path Don't modify shell config files (.zshrc, .bashrc, etc.)
Examples:
- curl -fsSL https://deepagent.ltd/install | bash
- curl -fsSL https://deepagent.ltd/install | bash -s -- --version 2.0.0-beta.0
+ curl -fsSL https://ai.deepagent.ltd/download/install | bash
+ curl -fsSL https://ai.deepagent.ltd/download/install | bash -s -- --version 2.0.0-beta.0
+ curl -fsSL https://ai.deepagent.ltd/download/install | bash -s -- --mirror https://your-mirror.example.com/download
./install --binary /path/to/deepagent-code
EOF
}
+print_message() {
+ local level=$1
+ local message=$2
+ local color=""
+
+ case $level in
+ info) color="${NC}" ;;
+ warning) color="${NC}" ;;
+ error) color="${RED}" ;;
+ esac
+
+ echo -e "${color}${message}${NC}"
+}
+
requested_version=${VERSION:-}
no_modify_path=false
binary_path=""
+mirror=${DEEPAGENT_MIRROR:-https://ai.deepagent.ltd/download}
+mirror="${mirror%/}"
while [[ $# -gt 0 ]]; do
case "$1" in
@@ -45,6 +63,15 @@ while [[ $# -gt 0 ]]; do
exit 1
fi
;;
+ -m|--mirror)
+ if [[ -n "${2:-}" ]]; then
+ mirror="${2%/}"
+ shift 2
+ else
+ echo -e "${RED}Error: --mirror requires a URL argument${NC}"
+ exit 1
+ fi
+ ;;
-b|--binary)
if [[ -n "${2:-}" ]]; then
binary_path="$2"
@@ -167,7 +194,6 @@ else
filename="$APP-$target$archive_ext"
-
if [ "$os" = "linux" ]; then
if ! command -v tar >/dev/null 2>&1; then
echo -e "${RED}Error: 'tar' is required but not installed.${NC}"
@@ -180,43 +206,48 @@ else
fi
fi
- if [ -z "$requested_version" ]; then
- url="https://github.com/deepagent-ltd/deepagent-code/releases/latest/download/$filename"
- specific_version=$(curl -s https://api.github.com/repos/deepagent-ltd/deepagent-code/releases/latest | sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
-
- if [[ $? -ne 0 || -z "$specific_version" ]]; then
- echo -e "${RED}Failed to fetch version information${NC}"
- exit 1
- fi
- else
- # Strip leading 'v' if present
+ # Download source resolution: the self-hosted mirror first (flat layout, sha256 sidecars —
+ # no jq dependency), GitHub Releases as fallback for when the mirror is unreachable.
+ # Mirror layout (produced by script/publish-mirror.ts):
+ # {mirror}/stable.version -> "2.0.0-beta.0"
+ # {mirror}/{version}/deepagent-code-{target}.zip -> archive
+ # {mirror}/{version}/deepagent-code-{target}.zip.sha256 -> " "
+ expected_sha256=""
+ resolved_from_mirror=false
+ if [ -n "$requested_version" ]; then
requested_version="${requested_version#v}"
- url="https://github.com/deepagent-ltd/deepagent-code/releases/download/v${requested_version}/$filename"
specific_version=$requested_version
-
- # Verify the release exists before downloading
- http_status=$(curl -sI -o /dev/null -w "%{http_code}" "https://github.com/deepagent-ltd/deepagent-code/releases/tag/v${requested_version}")
- if [ "$http_status" = "404" ]; then
- echo -e "${RED}Error: Release v${requested_version} not found${NC}"
- echo -e "${MUTED}Available releases: https://github.com/deepagent-ltd/deepagent-code/releases${NC}"
- exit 1
- fi
+ else
+ specific_version=$(curl -fsSL -m 15 "$mirror/stable.version" 2>/dev/null | tr -d '[:space:]' || true)
fi
-fi
-print_message() {
- local level=$1
- local message=$2
- local color=""
+ if [ -n "$specific_version" ] && curl -fsI -m 15 -o /dev/null "$mirror/$specific_version/$filename" 2>/dev/null; then
+ url="$mirror/$specific_version/$filename"
+ expected_sha256=$(curl -fsSL -m 15 "$url.sha256" 2>/dev/null | awk '{print $1}' || true)
+ resolved_from_mirror=true
+ else
+ print_message warning "Mirror unreachable or missing ($mirror), falling back to GitHub Releases"
+ if [ -z "$requested_version" ]; then
+ url="https://github.com/deepagent-ltd/deepagent-code/releases/latest/download/$filename"
+ specific_version=$(curl -s https://api.github.com/repos/deepagent-ltd/deepagent-code/releases/latest | sed -n 's/.*"tag_name": *"v\([^"]*\)".*/\1/p')
- case $level in
- info) color="${NC}" ;;
- warning) color="${NC}" ;;
- error) color="${RED}" ;;
- esac
+ if [[ $? -ne 0 || -z "$specific_version" ]]; then
+ echo -e "${RED}Failed to fetch version information${NC}"
+ exit 1
+ fi
+ else
+ url="https://github.com/deepagent-ltd/deepagent-code/releases/download/v${requested_version}/$filename"
- echo -e "${color}${message}${NC}"
-}
+ # Verify the release exists before downloading
+ http_status=$(curl -sI -o /dev/null -w "%{http_code}" "https://github.com/deepagent-ltd/deepagent-code/releases/tag/v${requested_version}")
+ if [ "$http_status" = "404" ]; then
+ echo -e "${RED}Error: Release v${requested_version} not found${NC}"
+ echo -e "${MUTED}Available releases: https://github.com/deepagent-ltd/deepagent-code/releases${NC}"
+ exit 1
+ fi
+ fi
+ fi
+fi
check_version() {
if command -v deepagent-code >/dev/null 2>&1; then
@@ -325,8 +356,31 @@ download_with_progress() {
return $ret
}
+verify_checksum() {
+ local file=$1
+ local expected=$2
+ [ -n "$expected" ] || return 0
+
+ local actual=""
+ if command -v sha256sum >/dev/null 2>&1; then
+ actual=$(sha256sum "$file" | awk '{print $1}')
+ elif command -v shasum >/dev/null 2>&1; then
+ actual=$(shasum -a 256 "$file" | awk '{print $1}')
+ else
+ print_message warning "No sha256 tool found (sha256sum/shasum); skipping integrity check"
+ return 0
+ fi
+
+ if [ "$actual" != "$expected" ]; then
+ echo -e "${RED}Error: checksum mismatch for $file${NC}"
+ echo -e "${MUTED}expected $expected${NC}"
+ echo -e "${MUTED}actual $actual${NC}"
+ exit 1
+ fi
+}
+
download_and_install() {
- print_message info "\n${MUTED}Installing ${NC}deepagent-code ${MUTED}version: ${NC}$specific_version"
+ print_message info "\n${MUTED}Installing ${NC}deepagent-code ${MUTED}version: ${NC}$specific_version${MUTED} from: ${NC}$url"
local tmp_dir="$HOME/.deepagent/code/tmp/deepagent_code_install_$$"
mkdir -p "$tmp_dir"
@@ -335,6 +389,8 @@ download_and_install() {
curl -# -L -o "$tmp_dir/$filename" "$url"
fi
+ verify_checksum "$tmp_dir/$filename" "$expected_sha256"
+
if [ "$os" = "linux" ]; then
tar -xzf "$tmp_dir/$filename" -C "$tmp_dir"
else
diff --git a/nix/deepagent-code.nix b/nix/deepagent-code.nix
index 42a4c3841..5b28db96d 100644
--- a/nix/deepagent-code.nix
+++ b/nix/deepagent-code.nix
@@ -96,7 +96,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
meta = {
description = "The open source coding agent";
- homepage = "https://deepagent-code.ai";
+ homepage = "https://ai.deepagent.ltd";
license = lib.licenses.mit;
mainProgram = "deepagent-code";
inherit (node_modules.meta) platforms;
diff --git a/packages/app/AGENTS.md b/packages/app/AGENTS.md
index a54dff835..fd4cc6225 100644
--- a/packages/app/AGENTS.md
+++ b/packages/app/AGENTS.md
@@ -4,7 +4,7 @@
## Local Dev
-- `deepagent-code dev web` proxies `https://app.deepagent-code.ai`, so local UI/CSS changes will not show there.
+- `deepagent-code dev web` proxies `https://ai.deepagent.ltd`, so local UI/CSS changes will not show there.
- For local UI changes, run the backend and app dev servers separately.
- Backend (from `packages/deepagent-code`): `bun run --conditions=browser ./src/index.ts serve --port 4096`
- App (from `packages/app`): `bun dev -- --port 4444`
diff --git a/packages/app/e2e/pixel-matrix/cn-desktop-1920x1080.png b/packages/app/e2e/pixel-matrix/cn-desktop-1920x1080.png
index 76996699c0345775687673486244ebb5bd030fc1..3de7bba7f372012c685f5e1a3bff7cd49932de74 100644
GIT binary patch
literal 110600
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