Tags: apache/maka
Tags
fix(storage): reclaim the bytes the v1 upgrade orphaned (#4867) The v1 upgrade rebuilds the artifact catalog by dropping the table and re-inserting what still decodes. A record naming a retired source, one naming no source, the tombstone a user's deletion left behind, and any row too malformed or self-inconsistent to carry over all fail that gate -- and every one of them leaves its file on disk, unreachable from the catalog that used to name it. Dropping a row is the last moment anything knows where its bytes are, so the upgrade now records every path it does not carry over, in the same transaction. Unlinking there is not an option: a rollback after one would be unrecoverable. The store drains that list on recovery, a path some record has since claimed keeps its bytes, and a file that will not go keeps only its own note rather than holding up the ones behind it. Recording what the upgrade drops is exact where a file-name pattern could only be a guess, so there is nothing to scan and nothing to keep in step with the writers that produced these files. The cost is that a store converted by an earlier build keeps its residue: its rows are already gone. Generated-by: Claude Code
fix(release): make unsigned Windows artifacts reproducible (#4690) Make independently built unsigned Windows x64 payloads byte-identical by removing build timestamps and variable linker metadata, while preserving real publication metadata. Add regression coverage for the actual electron-builder ZIP and NSIS paths. Refs #3276 and #3414. Generated-by: Codex
fix(release): decouple Nightly from registry audit (#4703) Keep valid moderate-or-higher shipped advisories blocking while treating audit-service unavailability as nonfatal for Product Nightly and pull request validation. Consolidate shipped dependency audit at the product boundary, remove duplicate matrix and workflow requests, and keep publishable formal candidates fail-closed. Generated-by: Codex
ci(dependabot): label npm and actions updates with dependencies only (#… …4681) Neither update block sets `labels`, so dependabot applies its defaults: `dependencies` plus a language label, `javascript` for npm and `github_actions` for github-actions. `javascript` appears only on dependabot PRs and nobody, human or workflow, reads it; the `github_actions` label does not even exist in the repository. Pin both blocks to `dependencies` alone. The configuration has to change before the `javascript` label is deleted, otherwise dependabot recreates it on its next update. Generated-by: Claude Code
fix(desktop): accept Intel Mach-O architecture in package verification ( #4589) macOS Intel Nightly packages pass notarization but fail verification because lipo reports x86_64 while the release target uses Node architecture x64. Translate that name at the existing Mach-O assertion while retaining the single-architecture requirement for both Nightly and formal releases. Exercise the packaged-app verifier with real ASAR and update configuration fixtures. Cover accepted Intel and ARM packages, wrong architectures, and universal binaries. The Intel regression fails without the mapping and passes with it. Generated-by: Codex
fix(desktop): declare a mode for Bot sessions Every Bot conversation — Feishu, Telegram, WeCom — answered `Maka 暂时无法处理这条消息:机器人对话处理失败` and never created a session, while the platform connection itself stayed healthy. `explore` is a boundary a product mode confers, not one a caller may request directly (`create-session-input.ts`). The Bot adapter asked for it directly: `permissionMode: 'explore'` with no `mode`. `prepareCreate` rejected that, and the rejection matched no category in `generalizedErrorMessage`, so what the user saw was a generic fallback that read like a platform or credentials fault. Desktop chat was never affected — it starts at `ask`. A Bot session is exactly such a product intent, so `bot` joins `SESSION_START_MODE_SPECS` and the adapter names the mode instead of asking for the boundary. Unlike Deep Research it carries no name of its own: `prepareCreate` resolves `mode?.name ?? input.name`, and a fixed spec name would flatten `飞书 任务` and `Telegram 任务` into one label, so `SessionStartModeSpec.name` becomes optional. The `mode:bot` label is reserved for free, since `prepareCreate` already refuses caller-supplied mode labels. `session.create.mode` therefore accepts a value it did not before, and a Host that predates it answers `Invalid Session start mode`, so `RUNTIME_HOST_COMPATIBILITY_EPOCH` moves 89 → 90. The mode registry moves from `deep-research.ts` to `session-start-mode.ts`. It was born there when Deep Research was its only member; `bot` is a sibling, not a Deep Research detail, and nobody looks for Bot permissions in a file named for Deep Research. Pure move. A mode without a name of its own also exposed a sibling defect: `sessions:create` dropped the requested name whenever a mode was present, which held only while every mode carried one. It now forwards the name either way and leaves the precedence to the Host. The Bot adapter talks to the Host directly and never took that path, so that is a contract repair rather than a second user-visible bug. Both regressions are guarded where they were rejected — at the coordinator and at the IPC handler; the Bot adapter's own test reached neither, because its fake client returns a session without entering `prepareCreate`, which is why this shipped. Deliberately not covered: `bot-incoming-main.ts` still swallows `invalid_request` into `机器人对话处理失败`, which is what made this take a packaged-app patch to diagnose, and `updateSessionConfiguration` still admits `explore` with no mode — the path `prepareSession` uses to re-arm a bound Bot session. Fixes #4193 Generated-by: Claude Code
feat(desktop): warn that deleting a parent keeps and archives its sub… …tasks (#3781) Deleting a parent task permanently removes it, but its ordinary linked subagent subtasks are intentionally kept and moved to the archive rather than cascade-deleted (#1467 / #3151). The confirm said nothing and the completion gave no feedback, so the archived rows that appeared next read as tasks from nowhere. The delete confirm now warns, when the task has ordinary linked subtasks, that they are kept and moved to Archived; the completion toast reports how many moved. Both counts are owned by the Host rather than estimated by the renderer, whose catalog projection carries linked children as `subagent: { parentSessionId }` with no operator marker or copy state: - `session.remove` returns `archivedSubtaskCount` (deduplicated by revision family), which the toast reports verbatim. - A read-only `session.remove.preview` query returns how many subtasks a delete would archive, computed by the same `#readRemovalPlanSessionIds` the mutation uses. The confirm warns off it. Agent Graph operators (retired with the parent rather than archived), already-archived children, copies mid-preparation, and absent targets all preview zero. On preview failure the confirm falls back to an uncertain note rather than hiding the warning, and the delete still proceeds. - Bulk purge sums the executed counts into `SessionPurgeOutcome.archivedSubtasks`; the archived-tasks purge confirm warns and its toast reports how many moved. Because Agent Graph operator Sessions are retired with the parent, the notices say "ordinary subtasks" rather than "linked subtasks", so operators are never presented as survivors on either surface. Copy lives in `shell-copy.ts` and `settings-tasks-copy.ts` (zh + en). Deletion semantics are unchanged. Compatibility: bumps `RUNTIME_HOST_COMPATIBILITY_EPOCH` to 82 for the new removed-result field and the new query, both of which an older peer rejects. `session.remove.preview` is added to `REMOTE_OWNER_OPERATION_GRANTS`; it is a strictly weaker read of a plan whose mutation is already granted, so it expands no privilege. Fixes #3780 Generated-by: Claude Code
fix: preserve skill outcomes across queued-message recovery Keep the Host-produced SkillInvocationResult for every admitted message disposition, including steering, follow-up, queued, started, and blocked submissions. Persist both the original submitted placement and the Skill outcome through admission, SQLite recovery, promotion, restart, and durable retry. This lets Desktop and CLI report partial Skill preparation failures without turning a promoted next-turn retry into an operation conflict. Update the Runtime Host protocol epoch and session schema together, with production-owner recovery coverage and exact-head CI passing. Fixes #4026 Generated-by: OpenAI Codex
refactor(runtime): persist durable Tool Result projections (#4287) * feat(core): define durable tool result projections Generated-by: Codex * feat(runtime): add durable projection codec Generated-by: Codex * feat(runtime): commit projections atomically at T2 Generated-by: Codex * refactor(runtime): replay effective tool result projections Generated-by: Codex * feat(runtime-host): persist projected artifacts and recoveries Generated-by: Codex * refactor(runtime): remove transient Tool Result authority Generated-by: Codex * fix(storage): reuse projected image artifacts Generated-by: Codex * fix(runtime): remap projected artifacts on copy Generated-by: Codex * refactor(runtime): remove synthetic projection return Generated-by: Codex * refactor(runtime): privatize synthetic result writer Generated-by: Codex * fix(runtime): validate projected images before persistence Generated-by: Codex * fix(runtime): reject unowned projection copies Generated-by: Codex * refactor(runtime): remove retired conversation copy owner Generated-by: Codex * test(runtime): verify durable projection owner boundaries Generated-by: Codex * refactor(runtime): keep projection helper types private Generated-by: Codex * test(runtime): target durable projection T2 rollback Generated-by: Codex * refactor(runtime): trim projection artifact input Generated-by: Codex * test(runtime): produce restart projection through T2 Generated-by: Codex * style(runtime): format session manager tests Generated-by: Codex * fix(runtime): make projection admission side-effect free Generated-by: Codex * test(runtime): replay persisted image after restart Generated-by: Codex * test(runtime-host): cover projection artifact restart Generated-by: Codex * refactor(runtime): preserve projection content fidelity Generated-by: Codex * fix(storage): protect projection artifacts Generated-by: Codex * fix(runtime): admit tool calls before publication Generated-by: Codex * fix(runtime): bound projection copies before allocation Generated-by: Codex * test(runtime-host): consolidate projection lifecycle coverage Generated-by: Codex * test(runtime): lock T1 failure side effects Generated-by: Codex * refactor(core): unify artifact source policy Generated-by: Codex * fix(runtime): make tool result projectors total Generated-by: Codex
PreviousNext