Conversation
Creating a symlink on Windows requires Administrator or Developer Mode and otherwise raises OSError (WinError 1314), which would crash memory layout setup. _ensure_symlink now catches that and falls back to a one-time copy so the app still starts, logging a clear warning that this harness's memory will NOT be shared on such a platform (enable Developer Mode for sharing). POSIX behavior is unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
oauth connectors fixes
* return friendly message when tokens are exceeded * add test coverage --------- Co-authored-by: Max Stepanov <stpmax@yandex.ru>
…66) * ENG-350: tag scratchpad results with cell_status (ok/timeout/error) The SSE scratchpad-result event carried only the result string, so a killed/timed-out cell was indistinguishable from a slow-but-running one in the UI. Add a `cell_status` field (ok | timeout | error) classified from the result text — markers mirror what anton emits (timeout/inactivity kill in core/backends/local.py; `[error]` / empty-code "exec failed"). Additive field — older clients ignore it. The cowork desktop UI consumes it in a follow-up PR to render killed vs running vs done. Timeout classification takes precedence over the generic `[error]` bracket a killed cell also carries. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ENG-350: classify cell_status from the structured cell error, not rendered text Review fix: an exec result arrives as json.dumps(asdict(cell)), not format_cell_result output — so the previous "[error]" sniff never matched (runtime errors classified as ok), and sniffing the whole blob risked misclassifying a successful cell whose own stdout contained "[error]" or "Cell timed out". Parse the JSON and inspect the cell's `error` field: empty -> ok; timeout/ inactivity text -> timeout; any other non-empty error -> error. Fall back to a best-effort text sniff for non-JSON results (dump notebook, other tools). Added a regression test for the success-with-markers-in-stdout case. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Max Stepanov <stpmax@yandex.ru> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Exposes the agent's act-first posture as a UserSettings toggle (default True), overlaid onto AntonSettings and passed to ChatSessionConfig so the desktop Settings switch controls whether Anton acts-and-surfaces-assumptions vs asks first. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(settings): act_first user setting wired to the agent
Enabled Shared Harness Memory
* feat(move): move a task to another project with its artifacts + files
Adds a task_objects index, a provenance-based reconcile (harness-agnostic),
and POST /conversations/{id}/move that relocates the task's owned artifact
folders (collision-prefixed, .published.json preserved) and re-tags its
attachment files to the destination project.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(move): attribute artifacts to a task via run-boundary snapshot
Anton runs with its own session id and never tags artifacts with the cowork
conversation_id, so provenance stays empty and moved tasks left their
artifacts behind. cowork-server now snapshots the project's artifact folders
before each turn (stream_response) and indexes any that appear afterward as
owned by that conversation — harness-agnostic, no agent change.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Max Stepanov <stpmax@yandex.ru>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
google connectors
lucas-koontz
approved these changes
Jun 22, 2026
Inline artifact cards in chat previously came from a single path — the HTML-only publish_or_preview tool — so non-HTML artifacts (datasets, docs, images, …) never surfaced inline, and HTML only did if the agent chose to call that tool. Make it deterministic and uniform: at turn end each harness diffs the project's artifacts dir (the SAME snapshot the move/index uses) and emits a response.artifact_created event per new slug, carrying the artifact's title/type/primary-file path. Anton rides it on its Stream* channel via a new ArtifactCreated event; Hermes yields it as a dict its formatter maps. Both go through the existing event-sink persistence, so cards replay identically on reload. Older artifacts created before the index simply have no card (acceptable). - task_objects.new_artifact_cards(): shared payload builder over ArtifactStore - anton/hermes harnesses: emit artifact_created after the turn - both formatters: map it to response.artifact_created SSE Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add POST /artifacts/export — converts a document artifact (markdown/HTML) to pdf|docx|html and writes the result into the same artifact folder. Pure-Python pipeline (markdown → HTML → xhtml2pdf / htmldocx+python-docx), no native deps or external binaries, so the desktop install stays clean cross-platform. Runs in a threadpool; rejects non-document sources. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Inline artifact cards for every artifact type (both harnesses)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.