Skip to content

Commit 10f0f3d

Browse files
authored
Merge pull request #68 from gaelic-ghost/docs/roadmap-spi-status
release: prepare v1.1.0
2 parents a063e2c + 42371b0 commit 10f0f3d

44 files changed

Lines changed: 6691 additions & 955 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ SwiftASB helps Swift apps work with the local Codex app-server without making ap
1717

1818
### Status
1919

20-
SwiftASB has a supported v1 public API for the core local Codex app-server lifecycle. `v1.0.3` is the current released baseline.
20+
SwiftASB has a supported v1 public API for the core local Codex app-server lifecycle. `v1.1.0` is the current released baseline.
2121

2222
### What This Project Is
2323

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

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

36-
Use release `v1.0.3` or newer unless your project intentionally pins an older version.
36+
Use release `v1.1.0` or newer unless your project intentionally pins an older version.
3737

3838
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.
3939

@@ -45,7 +45,11 @@ For copy-pasteable startup code, open the DocC getting-started guide:
4545

4646
Use SwiftASB when an app needs to show what Codex is doing right now, keep recent command and file activity visible, answer interactive requests, or build SwiftUI state around a running Codex turn.
4747

48-
For app-wide sidebars and launchers, `CodexAppServer.makeLibrary()` provides observable stored-thread lists, cwd grouping, refresh actions, library-local selection state, and app-wide model, MCP, and hook diagnostics snapshots.
48+
For app-wide sidebars and launchers, `CodexAppServer.makeLibrary()` provides observable stored-thread lists, cwd or repository grouping, refresh actions, library-local selection state, and app-wide model, MCP, and hook diagnostics snapshots.
49+
50+
Use `CodexAppServer.fs` when a sandboxed client needs filesystem metadata, directory listings, file bytes, file discovery, fuzzy file lookup, or file-change watches through the Codex app-server instead of reading local disk directly. `CodexWorkspace` carries app-server-owned workspace permission selections, active permission-profile provenance, and runtime filesystem/network permission facts for started threads and turns. Use `CodexAppServer.config` for effective config reads, and `CodexAppServer.extensions` for app, skill, plugin, and collaboration-mode inventory.
51+
52+
Use `CodexAppServer.ThreadListQD`, `CodexFS.FileDiscoveryQD`, `CodexThread.HistoryWindowQD`, `CodexThread.RecentFilesQD`, and `CodexThread.RecentCommandsQD` when a client needs to preserve repeatable list, file-discovery, history-window, or recent-activity intent without depending on Core Data, SwiftData, direct filesystem reads, or raw app-server paging details.
4953

5054
The generated Codex wire models are internal to this package. App code should use SwiftASB's public Swift types instead.
5155

ROADMAP.md

Lines changed: 123 additions & 72 deletions
Large diffs are not rendered by default.

Sources/SwiftASB/Generated/CodexWire/Latest/CodexLifecycleV2Batch+JSONValue.swift

Lines changed: 1708 additions & 335 deletions
Large diffs are not rendered by default.

Sources/SwiftASB/History/ThreadHistoryStore.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ actor ThreadHistoryStore {
9898
let forkedFromThreadID: String?
9999
let forkedFromTurnID: String?
100100
let gitBranch: String?
101+
let gitOriginURL: String?
101102
let isArchived: Bool
102103
let isClosed: Bool
103104
let modelProvider: String
@@ -153,6 +154,7 @@ actor ThreadHistoryStore {
153154
let ephemeral: Bool
154155
let forkedFromThreadID: String?
155156
let gitBranch: String?
157+
let gitOriginURL: String?
156158
let isArchived: Bool
157159
let isClosed: Bool
158160
let lastCompletedTurnAt: Int?
@@ -609,6 +611,7 @@ actor ThreadHistoryStore {
609611
forkedFromThreadID: thread.forkedFromThreadID,
610612
forkedFromTurnID: thread.forkedFromTurnID,
611613
gitBranch: thread.gitBranch,
614+
gitOriginURL: thread.gitOriginURL,
612615
isArchived: thread.isArchived,
613616
isClosed: thread.isClosed,
614617
modelProvider: thread.modelProvider,
@@ -896,6 +899,7 @@ actor ThreadHistoryStore {
896899
thread.ephemeral = info.ephemeral
897900
thread.forkedFromThreadID = info.forkedFromThreadID
898901
thread.gitBranch = info.gitInfo?.branch
902+
thread.gitOriginURL = info.gitInfo?.originURL
899903
thread.modelProvider = info.modelProvider
900904
thread.name = info.name
901905
thread.preview = info.preview
@@ -1062,6 +1066,7 @@ actor ThreadHistoryStore {
10621066
ephemeral: thread.ephemeral,
10631067
forkedFromThreadID: thread.forkedFromThreadID,
10641068
gitBranch: thread.gitBranch,
1069+
gitOriginURL: thread.gitOriginURL,
10651070
isArchived: thread.isArchived,
10661071
isClosed: thread.isClosed,
10671072
lastCompletedTurnAt: Self.lastCompletedTurnAt(for: thread),
@@ -1450,6 +1455,7 @@ actor ThreadHistoryStore {
14501455
attribute("forkedFromThreadID", .stringAttributeType, isOptional: true),
14511456
attribute("forkedFromTurnID", .stringAttributeType, isOptional: true),
14521457
attribute("gitBranch", .stringAttributeType, isOptional: true),
1458+
attribute("gitOriginURL", .stringAttributeType, isOptional: true),
14531459
attribute("modelProvider", .stringAttributeType, isOptional: false),
14541460
attribute("name", .stringAttributeType, isOptional: true),
14551461
attribute("preview", .stringAttributeType, isOptional: false),
@@ -1679,6 +1685,7 @@ final class HistoryThread: NSManagedObject {
16791685
@NSManaged var forkedFromThreadID: String?
16801686
@NSManaged var forkedFromTurnID: String?
16811687
@NSManaged var gitBranch: String?
1688+
@NSManaged var gitOriginURL: String?
16821689
@NSManaged var id: String
16831690
@NSManaged var isArchived: Bool
16841691
@NSManaged var isClosed: Bool

Sources/SwiftASB/Protocol/CodexAppServerProtocol+Types.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ enum CodexAppServerProtocolEvent: Equatable, Sendable {
1515
case threadClosed(CodexWireThreadClosedNotification)
1616
case threadNameUpdated(CodexWireThreadNameUpdatedNotification)
1717
case threadTokenUsageUpdated(CodexWireThreadTokenUsageUpdatedNotification)
18+
case threadGoalUpdated(CodexWireThreadGoalUpdatedNotification)
19+
case threadGoalCleared(CodexWireThreadGoalClearedNotification)
20+
case fsChanged(CodexWireFSChangedNotification)
1821
case hookStarted(CodexWireHookStartedNotification)
1922
case hookCompleted(CodexWireHookCompletedNotification)
2023
case warning(CodexWireWarningNotification)
@@ -54,6 +57,8 @@ struct CodexProtocolModelProviderCapabilitiesReadResponse: Decodable, Equatable,
5457
let webSearch: Bool
5558
}
5659

60+
struct CodexProtocolCollaborationModeListParams: Encodable, Equatable, Sendable {}
61+
5762
struct CodexProtocolThreadMetadataUpdateParams: Encodable, Equatable, Sendable {
5863
let gitInfo: GitInfo?
5964
let threadID: String
@@ -139,6 +144,7 @@ struct CodexProtocolThreadResumeParams: Encodable, Equatable, Sendable {
139144
let excludeTurns: Bool?
140145
let model: String?
141146
let modelProvider: String?
147+
let permissions: CodexWirePermissionProfileSelectionParams?
142148
let personality: CodexWirePersonality?
143149
let sandbox: CodexWireSandboxMode?
144150
let serviceName: String?
@@ -155,6 +161,7 @@ struct CodexProtocolThreadResumeParams: Encodable, Equatable, Sendable {
155161
case excludeTurns
156162
case model
157163
case modelProvider
164+
case permissions
158165
case personality
159166
case sandbox
160167
case serviceName
@@ -174,6 +181,7 @@ struct CodexProtocolThreadForkParams: Encodable, Equatable, Sendable {
174181
let excludeTurns: Bool?
175182
let model: String?
176183
let modelProvider: String?
184+
let permissions: CodexWirePermissionProfileSelectionParams?
177185
let personality: CodexWirePersonality?
178186
let sandbox: CodexWireSandboxMode?
179187
let serviceName: String?
@@ -191,6 +199,7 @@ struct CodexProtocolThreadForkParams: Encodable, Equatable, Sendable {
191199
case excludeTurns
192200
case model
193201
case modelProvider
202+
case permissions
194203
case personality
195204
case sandbox
196205
case serviceName

0 commit comments

Comments
 (0)