chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

chore: version packages - #763

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

chore: version packages#763
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actionsgithub-actionsBot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@sapiom/harness@0.13.0

Minor Changes

  • 516f13a: Add durable, path-free Studio project identities and lazy Agent Map workspace state. The authenticated local server now exposes project workspace and root-binding association endpoints, and stores the new catalog at studio-projects.json with per-project records beneath agent-map/ in the configured harness state root. The legacy System Graph and per-agent Canvas remain unchanged.

  • fb2486d: Open Studio Agent Maps as a dedicated planning workspace with a live, project-scoped planning conversation beside the durable map. Planner tabs can resume, start fresh, rename, and end; transcript updates refetch through content-free invalidations, map and planner failures retry independently, and mobile keeps the conversation primary behind an explicit Agent Map sheet.

    This release adds variants to the public BusMessage, UiEventName, and AnalyticsEventType unions. Consumers that switch over these forward-extensible event types should retain a default arm so later additive events remain source-compatible.

  • 189eaf1: Open durable Studio projects in a pinned Agent Map workspace and remember the selected Agent Map or agent per user and project. Preferences live in the new agent-map/studio-workspace-preferences.json state file and are exposed through the path-free GET and PUT /api/projects/:projectId/current-workspace routes. Agent identities remain opaque outside the server, survive authenticated moves, and repair safely when a complete project scan proves that an agent was deleted.

  • ac9a35f: Add trusted, project-scoped Agent Map planner sessions with deterministic
    resume-or-create/fresh resolution, focused path-free context, a durable
    automatic-greeting state machine, FIFO user input, bounded lifecycle telemetry,
    public planner session/greeting state, and per-session ingest capabilities that
    cannot be replayed across PTYs or used for host /api mutations. Rehydrated
    planner replacements atomically inherit the exact predecessor FIFO while their
    focused brief can reuse an older recorded ancestor.

    Breaking: generic POST /api/sessions now strictly rejects unknown fields,
    so clients can no longer attach planner metadata to a generic create request.
    Generic planner input, resume, and adopt routes also reject planner-owned
    sessions. Generic adopt additionally rejects every conflicting current owner
    or durable historical vendor identity, including ordinary pre-/clear and
    pre-/resume aliases, with a bounded 409 before adapter probing. Migrate
    planner clients to the project-scoped open, message, and greeting-retry routes
    under /api/projects/:projectId/planner-sessions.

    All coding-agent sessions now pin
    vendor identity to a durable session owner: conflicting SessionStart claims
    are rejected. The only rotation exception is a short-lived, one-shot
    server-observed /clear or /resume terminal gesture; /resume picker input
    may refresh its soft window only within a bounded hard deadline.

    On upgrade, duplicate legacy vendor resume pointers are migrated with the first
    persisted sessions.json row as owner. Later duplicate rows are rewritten with
    agentSessionId: null and cannot resume or re-adopt that fenced identity under
    the losing row. Provider transcripts and conversation history are not deleted;
    start a fresh session in the losing row's directory to continue there.

  • 6bc9d58: Agent Studio now fetches its coding-agent system prompt from the Sapiom backend on session start (GET /v1/harness/system-prompt), instead of using only the copy baked into this package. Prompt improvements now reach a session after a backend deploy rather than after an npm upgrade. The bundled prompt remains the offline fallback — a non-200, empty body, network error or 5s timeout starts the session on it, exactly as before.

    The request is unconditional: it fetches configuration rather than reporting usage, so it is not gated on the telemetry opt-in, and it carries no session content, identifiers or API key. Set SAPIOM_HARNESS_PROMPT_FETCH_DISABLED=1 (or true) to skip it and always use the bundled prompt — see the README's "Outbound requests" section.

Patch Changes

  • d26f6f5: Separate permanent workspace discovery freshness from legacy System Graph invocation observations while preserving shared watcher ownership. On polling fallback, files covered only by legacy invocation scanning stop triggering session and rail rescans after the legacy graph subscription retires; accepted discovery inputs continue to refresh normally.
  • e9a847b: Refactor workspace file-watch ownership without changing behavior or public APIs.
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4

@sapiom/tools@0.35.0

Minor Changes

  • 5808e8f: contentGeneration: an async image or video job that terminally FAILS is now distinguishable from one that is merely slow (SAP-3097).

    wait() fails fast — live in this release. Every non-OK poll response used to be treated as "still generating", so a job that failed in three seconds burned the caller's whole timeoutMs and then threw Image generation did not complete within 300000ms — the opposite of what happened. wait() (and video.create, which polls the same way) now reads the queue's terminal state and throws the new ContentGenerationFailedError as soon as the job fails, carrying requestId and the provider's own providerError. A plain Error about the timeout now means only what it says: the job was still running when you stopped waiting. ContentGenerationFailedError is exported from @sapiom/tools.

    A transport blip still keeps polling. A non-OK result poll is ambiguous on its own, so it is disambiguated against the status endpoint, and anything short of an explicit terminal marker keeps the poll going.

    generationError on the resume payload — a type, populated by the platform.ImageResultPayload and VideoResultPayload outputs gain generationError?: string. A terminal provider failure has been arriving on storageError — the field documented as "persisting this output failed" — so a resumed workflow step concludes storage broke when in fact nothing was ever generated. The platform sends one field or the other, never both, so a step can branch without string-matching a message.

    Nothing in this package produces generationError; it appears on the wire once the corresponding gateway change is deployed, and a step running against an older gateway still sees a generation failure on storageError. Check generationError first and fall back to storageError — that reads correctly on both sides of the deploy.

    The type is also what makes VIDEO_RESULT_SIGNAL's documented "carries the result either way (ready OR failed)" contract expressible; the payload previously had nowhere to put the failure. IMAGE_RESULT_SIGNAL carries the same contract.

Patch Changes

  • 44d7f76: Document images.launch in the content-generation README: the launch handle, wait() and its 2min/2s defaults, IMAGE_RESULT_SIGNAL, ImageResultPayload, and when to prefer launch over create. The async image path shipped in 0.25.0 with no README coverage. Also corrects the pause/resume snippets in both the image and video sections — defineStep's pause requires signal and resumeStep and belongs on the pausing step, and the pause/resume helpers are imported from @sapiom/agent.

@sapiom/agent@0.13.1

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/agent-core@0.13.4

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0
    • @sapiom/agent@0.13.1

@sapiom/agent-studio@0.1.22

Patch Changes

@sapiom/cli@12.0.0

Patch Changes

  • Updated dependencies [516f13a]
  • Updated dependencies [d26f6f5]
  • Updated dependencies [e9a847b]
  • Updated dependencies [fb2486d]
  • Updated dependencies [189eaf1]
  • Updated dependencies [ac9a35f]
  • Updated dependencies [6bc9d58]
    • @sapiom/harness@0.13.0
    • @sapiom/agent@0.13.1
    • @sapiom/agent-core@0.13.4
    • @sapiom/sandbox-preview@0.1.21

@sapiom/sandbox-preview@0.1.21

Patch Changes

  • Updated dependencies [44d7f76]
  • Updated dependencies [5808e8f]
    • @sapiom/tools@0.35.0

@sapiom/harness-desktop@0.4.3

Patch Changes

@github-actions
github-actionsBotforce-pushed the changeset-release/main branch 7 times, most recently from ef92cae to b1466ccCompareSeptember 2, 2026 04:30
@github-actions
github-actionsBotforce-pushed the changeset-release/main branch from b1466cc to f9142dfCompareSeptember 2, 2026 06:43
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants