diff --git a/.github/workflows/deepagent-code.yml b/.github/workflows/deepagent-code.yml index 9a117e8a..0eab6d2e 100644 --- a/.github/workflows/deepagent-code.yml +++ b/.github/workflows/deepagent-code.yml @@ -26,7 +26,7 @@ jobs: - uses: ./.github/actions/setup-bun - name: Run deepagent-code - uses: deepagent-ltd/deepagent-code/github@github-v1.4.5 + uses: deepagent-ltd/deepagent-code/github@github-v1.4.7 env: DEEPAGENT_CODE_API_KEY: ${{ secrets.DEEPAGENT_CODE_API_KEY }} DEEPAGENT_CODE_PERMISSION: '{"bash": "deny"}' diff --git a/.github/workflows/docs-update.yml b/.github/workflows/docs-update.yml index d503a9f2..b707db2a 100644 --- a/.github/workflows/docs-update.yml +++ b/.github/workflows/docs-update.yml @@ -43,7 +43,7 @@ jobs: - name: Run deepagent-code if: steps.commits.outputs.has_commits == 'true' - uses: deepagent-ltd/deepagent-code/github@github-v1.4.5 + uses: deepagent-ltd/deepagent-code/github@github-v1.4.7 env: DEEPAGENT_CODE_API_KEY: ${{ secrets.DEEPAGENT_CODE_API_KEY }} with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3c55bd09..787ade76 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,6 +21,26 @@ env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: + test-fixture-gate: + name: test-fixture-gate + # QUAL-003: forbid test fixtures from bypassing the durable session state + # machine via direct inserts into authority tables. Pure grep gate, no deps. + 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 test fixture gate + run: bun script/check-test-fixtures.ts + unit: name: unit (${{ matrix.settings.name }}) strategy: diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml index fc9a5279..0e5c3b3b 100644 --- a/.github/workflows/typecheck.yml +++ b/.github/workflows/typecheck.yml @@ -3,8 +3,9 @@ name: typecheck on: push: branches: [dev] + # Gate every PR regardless of target branch: the typecheck baseline is easily polluted by stale + # worktrees/generated files, so keep it required and branch-agnostic. pull_request: - branches: [dev] workflow_dispatch: jobs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 11b906cc..49ba7836 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Changelog +## Desktop 1.4.7 / DeepAgent Core V4.0.8 - Release hardening and data governance + +- Recover the two incident sessions through the formal abandoned path with a zero-provider-invocation oracle and fork smoke on production-snapshot copies; fence pre-successor binaries via a protocol-3 database capability so older builds refuse to open databases carrying successor ownership. +- Fix the desktop startup crash in the session_intent rebuild migration on SQLite 3.51 (node runtime) and retry transient schema-lock failures in the migration runner. +- Stop the infinite compaction-continuation recovery loop on startup: recovery failures now land fail-closed (pending → failed) through the widened continuation state machine, serialized per session, with warning-level telemetry. +- Add durable turn stage evidence and a pre-dispatch watchdog for hung activities; order app timelines by (time, id) so wrapped opaque IDs never reorder messages. +- Persist encrypted remote-compaction content per session and commit remote compaction runs with an opaque blob pointer instead of a text summary, exempt from information-hole validation. +- Land RISK-003 data governance: runtime diff-artifact capture (staged behind a flag), a legacy event canonicalizer daemon, portable aggregate snapshot bundles, and a gate-ordered maintenance drill that reclaimed hundreds of MiB on production-snapshot copies (33,168 events deleted, VACUUM 5075 → 4311 MiB). +- Add the release-evidence manifest infrastructure and archive the 2026-08-19/20 release gates; lock REL-002 wire-budget and discovery-budget regressions; retire the legacy activity authority in favor of the durable path. +- Align Desktop 1.4.7, DeepAgent Core V4.0.8, and GitHub Action `github-v1.4.7` across package metadata, updater tags, and workflow references. + ## Desktop 1.4.5 / DeepAgent Core V4.0.6 - Bounded planning and runtime hardening - Make compaction durable through explicit run/attempt lifecycle records and Prompt Epoch authority, with bounded text-only summary retries and typed terminal failures. diff --git a/README.md b/README.md index 5572d09f..c96e8638 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@
English | - 简体中文 | + 中文 | Enterprise
diff --git a/github/README.md b/github/README.md index 949c933d..95d09412 100644 --- a/github/README.md +++ b/github/README.md @@ -90,7 +90,7 @@ This will walk you through installing the GitHub app, creating the workflow, and persist-credentials: false - name: Run deepagent-code - uses: deepagent-ltd/deepagent-code/github@github-v1.4.5 + uses: deepagent-ltd/deepagent-code/github@github-v1.4.7 env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/github/VERSION b/github/VERSION index e516bb9d..be05bba9 100644 --- a/github/VERSION +++ b/github/VERSION @@ -1 +1 @@ -1.4.5 +1.4.7 diff --git a/packages/app/package.json b/packages/app/package.json index b143030a..cea1b8d1 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@deepagent-code/app", - "version": "1.4.6", + "version": "1.4.7", "description": "", "type": "module", "exports": { diff --git a/packages/app/src/components/dialog-console-account.tsx b/packages/app/src/components/dialog-console-account.tsx new file mode 100644 index 00000000..ed101149 --- /dev/null +++ b/packages/app/src/components/dialog-console-account.tsx @@ -0,0 +1,105 @@ +import { createResource, createSignal, type Component, For, Show } from "solid-js" +import { useDialog } from "@deepagent-code/ui/context/dialog" +import { Dialog } from "@deepagent-code/ui/dialog" +import { Spinner } from "@deepagent-code/ui/spinner" +import { showToast } from "@/utils/toast" +import { useLanguage } from "@/context/language" +import { useServerSDK } from "@/context/server-sdk" +import { useServerSync } from "@/context/server-sync" + +// PARITY-004 / GUI 批 — Console 账号接线:消费 /experimental/console/orgs 与 /switch, +// 列出可切换的 Console 组织并切换活跃组织(server-side truth,见 worklist GUI 批)。 +type Org = { + accountID: string + accountEmail: string + accountUrl: string + orgID: string + orgName: string + active: boolean +} + +export const DialogConsoleAccount: Component = () => { + const dialog = useDialog() + const language = useLanguage() + const serverSDK = useServerSDK() + const serverSync = useServerSync() + const [switching, setSwitching] = createSignal