@ccpocket/bridge 1.80.2 → 1.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,47 @@
1
+ export type WorkspaceProvider = "claude" | "codex";
2
+ export type WorkspaceKind = "project";
3
+ export interface WorkspaceProject {
4
+ id: string;
5
+ name: string;
6
+ /** Ordered roots. Index zero is primary. */
7
+ rootPaths: string[];
8
+ createdAt: string;
9
+ updatedAt: string;
10
+ }
11
+ export interface SessionWorkspaceAssignment {
12
+ provider: WorkspaceProvider;
13
+ providerSessionId: string;
14
+ kind: WorkspaceKind;
15
+ projectId?: string;
16
+ /** Snapshot used for resume even if the Project is edited or removed. */
17
+ rootPaths: string[];
18
+ assignedAt: string;
19
+ }
20
+ export interface ResolvedWorkspace {
21
+ kind: WorkspaceKind;
22
+ projectId?: string;
23
+ projectName?: string;
24
+ rootPaths: string[];
25
+ }
26
+ export declare class WorkspaceStore {
27
+ private readonly filePath;
28
+ private readonly now;
29
+ private state;
30
+ private saveQueue;
31
+ private mutationQueue;
32
+ constructor(options?: {
33
+ filePath?: string;
34
+ now?: () => Date;
35
+ });
36
+ init(): Promise<void>;
37
+ listProjects(): WorkspaceProject[];
38
+ getProject(projectId: string): WorkspaceProject | undefined;
39
+ createProject(name: string, rootPaths: string[]): Promise<WorkspaceProject>;
40
+ updateProject(projectId: string, name: string, rootPaths: string[]): Promise<WorkspaceProject | undefined>;
41
+ removeProject(projectId: string): Promise<boolean>;
42
+ assignSession(provider: WorkspaceProvider, providerSessionId: string, workspace: ResolvedWorkspace): Promise<void>;
43
+ getAssignment(provider: WorkspaceProvider, providerSessionId: string): SessionWorkspaceAssignment | undefined;
44
+ resolveRecentWorkspace(provider: WorkspaceProvider, providerSessionId: string): ResolvedWorkspace | undefined;
45
+ private save;
46
+ private mutate;
47
+ }
@@ -0,0 +1,209 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { constants } from "node:fs";
3
+ import { access, mkdir, readFile, rename, writeFile } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { dirname, join } from "node:path";
6
+ const DEFAULT_STATE_FILE = join(homedir(), ".ccpocket", "workspaces-v1.json");
7
+ function assignmentKey(provider, providerSessionId) {
8
+ return `${provider}:${providerSessionId}`;
9
+ }
10
+ function cloneProject(project) {
11
+ return { ...project, rootPaths: [...project.rootPaths] };
12
+ }
13
+ function cloneAssignment(assignment) {
14
+ return { ...assignment, rootPaths: [...assignment.rootPaths] };
15
+ }
16
+ function isNonEmptyString(value) {
17
+ return typeof value === "string" && value.trim().length > 0;
18
+ }
19
+ function validProject(value) {
20
+ if (!value || typeof value !== "object")
21
+ return false;
22
+ const project = value;
23
+ return (isNonEmptyString(project.id) &&
24
+ isNonEmptyString(project.name) &&
25
+ Array.isArray(project.rootPaths) &&
26
+ project.rootPaths.length > 0 &&
27
+ project.rootPaths.every(isNonEmptyString) &&
28
+ isNonEmptyString(project.createdAt) &&
29
+ isNonEmptyString(project.updatedAt));
30
+ }
31
+ function validAssignment(value) {
32
+ if (!value || typeof value !== "object")
33
+ return false;
34
+ const assignment = value;
35
+ return ((assignment.provider === "claude" || assignment.provider === "codex") &&
36
+ isNonEmptyString(assignment.providerSessionId) &&
37
+ assignment.kind === "project" &&
38
+ (assignment.projectId === undefined || isNonEmptyString(assignment.projectId)) &&
39
+ Array.isArray(assignment.rootPaths) &&
40
+ assignment.rootPaths.length > 0 &&
41
+ assignment.rootPaths.every(isNonEmptyString) &&
42
+ isNonEmptyString(assignment.assignedAt));
43
+ }
44
+ export class WorkspaceStore {
45
+ filePath;
46
+ now;
47
+ state;
48
+ saveQueue = Promise.resolve();
49
+ mutationQueue = Promise.resolve();
50
+ constructor(options) {
51
+ this.filePath = options?.filePath ?? DEFAULT_STATE_FILE;
52
+ this.now = options?.now ?? (() => new Date());
53
+ this.state = {
54
+ version: 1,
55
+ projects: [],
56
+ assignments: {},
57
+ };
58
+ }
59
+ async init() {
60
+ await mkdir(dirname(this.filePath), { recursive: true });
61
+ try {
62
+ const raw = await readFile(this.filePath, "utf-8");
63
+ const parsed = JSON.parse(raw);
64
+ if (parsed.version !== 1)
65
+ return;
66
+ const projects = Array.isArray(parsed.projects)
67
+ ? parsed.projects.filter(validProject).map(cloneProject)
68
+ : [];
69
+ const assignments = Object.fromEntries(Object.entries(parsed.assignments ?? {})
70
+ .filter(([, value]) => validAssignment(value))
71
+ .map(([key, value]) => [key, cloneAssignment(value)]));
72
+ this.state = {
73
+ version: 1,
74
+ projects,
75
+ assignments,
76
+ };
77
+ }
78
+ catch {
79
+ // Missing or corrupt state starts clean. The first mutation rewrites it.
80
+ }
81
+ }
82
+ listProjects() {
83
+ return this.state.projects.map(cloneProject);
84
+ }
85
+ getProject(projectId) {
86
+ const project = this.state.projects.find((item) => item.id === projectId);
87
+ return project ? cloneProject(project) : undefined;
88
+ }
89
+ async createProject(name, rootPaths) {
90
+ return this.mutate(async () => {
91
+ const timestamp = this.now().toISOString();
92
+ const project = {
93
+ id: randomUUID(),
94
+ name: name.trim(),
95
+ rootPaths: [...rootPaths],
96
+ createdAt: timestamp,
97
+ updatedAt: timestamp,
98
+ };
99
+ this.state.projects.push(project);
100
+ try {
101
+ await this.save();
102
+ }
103
+ catch (error) {
104
+ this.state.projects = this.state.projects.filter((item) => item.id !== project.id);
105
+ throw error;
106
+ }
107
+ return cloneProject(project);
108
+ });
109
+ }
110
+ async updateProject(projectId, name, rootPaths) {
111
+ return this.mutate(async () => {
112
+ const project = this.state.projects.find((item) => item.id === projectId);
113
+ if (!project)
114
+ return undefined;
115
+ const previous = cloneProject(project);
116
+ project.name = name.trim();
117
+ project.rootPaths = [...rootPaths];
118
+ project.updatedAt = this.now().toISOString();
119
+ try {
120
+ await this.save();
121
+ }
122
+ catch (error) {
123
+ Object.assign(project, previous);
124
+ throw error;
125
+ }
126
+ return cloneProject(project);
127
+ });
128
+ }
129
+ async removeProject(projectId) {
130
+ return this.mutate(async () => {
131
+ const next = this.state.projects.filter((item) => item.id !== projectId);
132
+ if (next.length === this.state.projects.length)
133
+ return false;
134
+ const previous = this.state.projects;
135
+ this.state.projects = next;
136
+ try {
137
+ await this.save();
138
+ }
139
+ catch (error) {
140
+ this.state.projects = previous;
141
+ throw error;
142
+ }
143
+ return true;
144
+ });
145
+ }
146
+ async assignSession(provider, providerSessionId, workspace) {
147
+ await this.mutate(async () => {
148
+ const assignment = {
149
+ provider,
150
+ providerSessionId,
151
+ kind: workspace.kind,
152
+ ...(workspace.projectId ? { projectId: workspace.projectId } : {}),
153
+ rootPaths: [...workspace.rootPaths],
154
+ assignedAt: this.now().toISOString(),
155
+ };
156
+ const key = assignmentKey(provider, providerSessionId);
157
+ const previous = this.state.assignments[key];
158
+ this.state.assignments[key] = assignment;
159
+ try {
160
+ await this.save();
161
+ }
162
+ catch (error) {
163
+ if (previous) {
164
+ this.state.assignments[key] = previous;
165
+ }
166
+ else {
167
+ delete this.state.assignments[key];
168
+ }
169
+ throw error;
170
+ }
171
+ });
172
+ }
173
+ getAssignment(provider, providerSessionId) {
174
+ const assignment = this.state.assignments[assignmentKey(provider, providerSessionId)];
175
+ return assignment ? cloneAssignment(assignment) : undefined;
176
+ }
177
+ resolveRecentWorkspace(provider, providerSessionId) {
178
+ const assignment = this.getAssignment(provider, providerSessionId);
179
+ if (!assignment)
180
+ return undefined;
181
+ const project = assignment.projectId
182
+ ? this.getProject(assignment.projectId)
183
+ : undefined;
184
+ return {
185
+ kind: assignment.kind,
186
+ ...(assignment.projectId ? { projectId: assignment.projectId } : {}),
187
+ ...(project ? { projectName: project.name } : {}),
188
+ rootPaths: assignment.rootPaths,
189
+ };
190
+ }
191
+ save() {
192
+ const snapshot = JSON.stringify(this.state, null, 2);
193
+ this.saveQueue = this.saveQueue.catch(() => undefined).then(async () => {
194
+ const tmpPath = `${this.filePath}.tmp`;
195
+ await writeFile(tmpPath, snapshot, "utf-8");
196
+ await rename(tmpPath, this.filePath);
197
+ await access(this.filePath, constants.R_OK);
198
+ });
199
+ return this.saveQueue;
200
+ }
201
+ mutate(operation) {
202
+ const result = this.mutationQueue
203
+ .catch(() => undefined)
204
+ .then(operation);
205
+ this.mutationQueue = result.then(() => undefined, () => undefined);
206
+ return result;
207
+ }
208
+ }
209
+ //# sourceMappingURL=workspace-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-store.js","sourceRoot":"","sources":["../src/workspace-store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ccpocket/bridge",
3
- "version": "1.80.2",
3
+ "version": "1.81.0",
4
4
  "description": "Bridge server that connects Claude Agent SDK and Codex CLI sessions to mobile devices via WebSocket",
5
5
  "private": false,
6
6
  "type": "module",