Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ SwiftASB helps Swift apps work with the local Codex app-server without making ap

### Status

SwiftASB has a supported v1 public API for the core local Codex app-server lifecycle. `v1.1.1` is the current released baseline.
SwiftASB has a supported v1 public API for the core local Codex app-server lifecycle. `v1.1.2` is the current released baseline.

### What This Project Is

Expand All @@ -33,7 +33,7 @@ Add SwiftASB from the GitHub package URL:

https://github.com/gaelic-ghost/SwiftASB

Use release `v1.1.1` or newer unless your project intentionally pins an older version.
Use release `v1.1.2` or newer unless your project intentionally pins an older version.

You also need a local Codex CLI installation with app-server support. SwiftASB looks for `codex` in the usual command-line locations, and apps can provide an exact executable path when they need stricter control.

Expand Down
21 changes: 11 additions & 10 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
| Non-UI local history-reading helpers | `Partially shipped` | `CodexThread` now exposes a lightweight `HistoryWindow` page shape for recent local history, older or newer local windows around a known boundary turn id, centered `windowAroundTurn(...)` reads, centered `windowAroundItem(...)` reads, direct `ClosedTurn` reads for one turn, and convenience array helpers over those same windows. This gives non-UI callers an intentional path into the local history store without binding a UI-oriented observable, while still deferring a broader public cursor model, transcript search surface, and richer history-query helpers. |
| Public API curation | `Shipped / ongoing` | The source-organization pass has split app-wide model, MCP, thread-management, history, and observable companion values into focused public files while preserving `CodexAppServer`, `CodexThread`, and `CodexTurnHandle` as the three real owners. The connected public-surface review closed the v1 ownership model; future curation should stay tied to concrete public API additions. |
| DocC documentation | `Shipped / ongoing` | `Sources/SwiftASB/SwiftASB.docc/` contains a package landing page, public-handle extension pages, conceptual articles for app-wide capabilities, interactive lifecycle, thread management, history/observable companions, generated-wire boundary notes, and copy-pasteable walkthroughs for startup, progress/approval handling, diagnostics/history, and SwiftUI observable companions. The catalog is validated through Xcode `docbuild`; future work is ordinary stale-link, prose, and symbol-comment refinement as the public API grows. |
| Swift Package Index readiness | `Shipped` | `.spi.yml` declares `SwiftASB` as the documentation target, and Swift Package Index now lists `gaelic-ghost/SwiftASB` with `v1.1.1` selected, a documentation link, compatibility/build results, Package ID `9B5839D9-9551-473F-A939-841534A3FC55`, and a 2026-05-06 update timestamp. |
| Swift Package Index readiness | `Shipped` | `.spi.yml` declares `SwiftASB` as the documentation target, and Swift Package Index lists `gaelic-ghost/SwiftASB` with a documentation link, compatibility/build results, Package ID `9B5839D9-9551-473F-A939-841534A3FC55`, and a 2026-05-06 update timestamp for the latest confirmed indexed release. Recheck SPI after the `v1.1.2` tag is published. |
| Contributor documentation split | `Shipped` | `README.md` is now focused on Swift and SwiftUI package users, while `CONTRIBUTING.md` owns contributor setup, validation, DocC, live-test flags, generated-wire refresh, and PR expectations. |
| `CodexTurnHandle` live observable companion | `Partially shipped` | `CodexTurnHandle` owns a live `Minimap` companion that is attached when the handle is created and maintains current-state call snapshots for command, file-edit, dynamic-tool, collab-tool, and MCP item activity. It also now mirrors whether thread context compaction is active for the turn and supports explicit `complete()` handoff into a caller-owned sealed turn snapshot. |
| Additional turn event mapping | `Partially shipped` | The public event layer covers the current interactive lifecycle plus the item-start and item-complete events needed for observable call-state mirrors. Raw command-output and file-change-output deltas now stay internal as transport detail but drive the shipped `RecentCommands` and `RecentFiles` companions, and streamed or patch-updated payloads are preserved when later completed snapshots are thinner. Richer MCP-progress detail still remains internal, while warning, guardian-warning, config-warning, deprecation, MCP-server-status, remote-control-status, model-reroute, and model-verification notifications now surface through hand-owned diagnostic events. |
Expand Down Expand Up @@ -104,7 +104,7 @@
The next meaningful package step is no longer proving the v1 interactive
lifecycle, SPI visibility, basic history hydration, first-pass reconciliation,
or command-approval completion. Those slices now exist and shipped in the
`v1.1.1` baseline.
`v1.1.2` baseline.

The next meaningful work is to widen the reviewed app-server schema and protocol
coverage before adding more public query descriptors. Descriptors should compile
Expand Down Expand Up @@ -177,7 +177,7 @@ That means the current priority order is:

## V1 Readiness Checklist

This checklist records the work that made `SwiftASB` ready for the `v1.1.1`
This checklist records the work that made `SwiftASB` ready for the `v1.1.2`
tag. The goal was not to make every possible app-server feature public before
v1. The goal was to make the supported lifecycle honest, durable, well
documented, and intentionally shaped.
Expand Down Expand Up @@ -343,8 +343,8 @@ workflow earns them in a later feature release.

### Documentation And Examples

- [x] Update stale release references after the `v1.1.1` release.
Decision: README now names `v1.1.1` as the current released baseline and no
- [x] Update stale release references after the `v1.1.2` release.
Decision: README now names `v1.1.2` as the current released baseline and no
longer describes the package as early development.
- [x] Finish DocC symbol comments for the supported lifecycle, not just the
conceptual articles.
Expand Down Expand Up @@ -509,10 +509,10 @@ workflow earns them in a later feature release.
the `release/v1.0.0` branch on 2026-05-02 and on the
`release/v1.0.1-prep` branch on 2026-05-02.
- [x] Decide whether another targeted `v0.9.x` patch release is needed before
`v1.1.1`, or whether the remaining work should go straight into the v1
`v1.1.2`, or whether the remaining work should go straight into the v1
release branch.
Decision: no additional `v0.9.x` patch is needed. The remaining work should go
straight into the `v1.1.1` release branch.
straight into the `v1.1.2` release branch.
- [x] Prepare v1 release notes with explicit sections for public surface,
intentionally internal surfaces, compatibility window, migration notes,
validation performed, and known post-v1 work.
Expand Down Expand Up @@ -565,7 +565,7 @@ workflow earns them in a later feature release.
#### Migration Notes

- Existing `v0.9.x` consumers should update the SwiftPM dependency to
`from: "1.1.1"` once the tag is published.
`from: "1.1.2"` once the tag is published.
- The v1 API surface has removed stale pre-v1 compatibility shims and phantom
fields that no longer exist in the reviewed `v0.128.0` schema.
- Same-thread overlapping turns are rejected client-side with
Expand All @@ -589,7 +589,8 @@ workflow earns them in a later feature release.
#### Known Post-V1 Work

- Keep an eye on future Swift Package Index builds after compatibility-window
or DocC changes; the `v1.1.1` listing and documentation link are live.
or DocC changes; the `v1.1.1` listing and documentation link are live, and
`v1.1.2` should be rechecked after the patch tag is indexed.
- Add broader live server-request coverage for permissions and MCP elicitation
if those become stronger public runtime guarantees.
- Continue tuning recent companion cache calibration, richer file previews,
Expand Down Expand Up @@ -1163,7 +1164,7 @@ Completed
- [x] Add version-compatibility policy notes for the local Codex binary.
- [x] Refresh the compatibility window and promoted generated snapshot against the current `v0.124.0` schema dump once the added endpoint, notification, and field families have been classified.
- [x] Curate the public API before v1 by splitting large source files along existing responsibility boundaries where still helpful, tightening public names/defaults, and finishing targeted source-level symbol documentation for the supported lifecycle.
Decision: completed for the `v1.1.1` boundary through the public API audit,
Decision: completed for the `v1.1.2` boundary through the public API audit,
symbol inventory, source-comment pass, and focused public file organization.
- [x] Add the first DocC documentation catalog before v1, including a package landing page, public-handle topic groups, and conceptual articles for the interactive lifecycle, history companions, and generated-wire boundary.
- [x] Validate the DocC catalog through Xcode `docbuild` and document the maintainer command.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Foundation
import CryptoKit
import Darwin
import Foundation
import Testing
@testable import SwiftASB

Expand Down Expand Up @@ -761,6 +762,13 @@ final class MockResponsesServer: @unchecked Sendable {
func stop() {
if process.isRunning {
process.terminate()
let deadline = Date().addingTimeInterval(2)
while process.isRunning && Date() < deadline {
Thread.sleep(forTimeInterval: 0.05)
}
if process.isRunning {
Darwin.kill(process.processIdentifier, SIGKILL)
}
process.waitUntilExit()
}
try? FileManager.default.removeItem(at: rootDirectoryURL)
Expand Down
6 changes: 3 additions & 3 deletions docs/maintainers/v1-public-api-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

This document is the working checklist for the `SwiftASB` v1 public API
curation pass. The goal is to freeze a compact, Swift-native surface for the
supported app-server lifecycle before `v1.1.1`, not to expose every generated
supported app-server lifecycle before `v1.1.2`, not to expose every generated
wire family.

## Current Public Source Inventory
Expand Down Expand Up @@ -429,7 +429,7 @@ Use these decisions for every public symbol:

- [x] Add symbol comments for every stable v1 public type and method that is not
self-explanatory from its declaration.
Decision: complete for the `v1.1.1` release boundary. Default-bearing public
Decision: complete for the `v1.1.2` release boundary. Default-bearing public
initializers and methods now document whether omission delegates to Codex,
chooses a SwiftASB local-history/UI default, or applies an explicit safety
default such as `.turn` or `.unchanged`. The source-level pass also covers the
Expand Down Expand Up @@ -487,7 +487,7 @@ Use these decisions for every public symbol:
Decision: covered by the startup, progress/approval, diagnostics/history, and
SwiftUI observable companion walkthroughs in `Sources/SwiftASB/SwiftASB.docc/`.
- [x] Update stale README release references before the next release.
Decision: README now names `v1.1.1` as the current released baseline.
Decision: README now names `v1.1.2` as the current released baseline.
- [x] Confirm README, DocC, and this audit use the same v1 release boundary.
Decision: README, DocC, and this audit now describe the same narrow v1
promise: app-server lifecycle, app-wide capability reads, stored-thread
Expand Down