@gonzih/cc-agent 0.2.5 → 0.3.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.
package/dist/store.js ADDED
@@ -0,0 +1,286 @@
1
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
2
+ import { join } from "path";
3
+ import { homedir } from "os";
4
+ import { getRedis } from "./redis.js";
5
+ import { loadPersistedJobs, savePersistedJobs, appendLog, readLogSync, } from "./state.js";
6
+ const JOB_TTL_SECONDS = 7 * 24 * 60 * 60; // 7 days
7
+ const PLAN_TTL_SECONDS = 30 * 24 * 60 * 60; // 30 days
8
+ // ─── Profile disk helpers ────────────────────────────────────────────────────
9
+ const PROFILES_DIR = join(homedir(), ".cc-agent");
10
+ const PROFILES_FILE = join(PROFILES_DIR, "profiles.json");
11
+ function diskLoadProfiles() {
12
+ if (!existsSync(PROFILES_FILE))
13
+ return [];
14
+ try {
15
+ return JSON.parse(readFileSync(PROFILES_FILE, "utf-8"));
16
+ }
17
+ catch {
18
+ return [];
19
+ }
20
+ }
21
+ function diskSaveProfiles(profiles) {
22
+ mkdirSync(PROFILES_DIR, { recursive: true });
23
+ writeFileSync(PROFILES_FILE, JSON.stringify(profiles, null, 2), "utf-8");
24
+ }
25
+ export class JobStore {
26
+ memJobs = new Map(); // fallback when Redis unavailable
27
+ async saveJob(record) {
28
+ const redis = getRedis();
29
+ if (redis) {
30
+ try {
31
+ await redis.set(`cca:job:${record.id}`, JSON.stringify(record), "EX", JOB_TTL_SECONDS);
32
+ await redis.lpush("cca:jobs:index", record.id);
33
+ await redis.ltrim("cca:jobs:index", 0, 499);
34
+ return;
35
+ }
36
+ catch (err) {
37
+ console.error("[cc-agent] Redis saveJob failed:", err);
38
+ }
39
+ }
40
+ this.memJobs.set(record.id, record);
41
+ this.flushToDisk();
42
+ }
43
+ async getJob(id) {
44
+ const redis = getRedis();
45
+ if (redis) {
46
+ try {
47
+ const raw = await redis.get(`cca:job:${id}`);
48
+ return raw ? JSON.parse(raw) : null;
49
+ }
50
+ catch (err) {
51
+ console.error("[cc-agent] Redis getJob failed:", err);
52
+ }
53
+ }
54
+ return this.memJobs.get(id) ?? null;
55
+ }
56
+ async listJobs() {
57
+ const redis = getRedis();
58
+ if (redis) {
59
+ try {
60
+ const ids = await redis.lrange("cca:jobs:index", 0, 499);
61
+ if (!ids.length)
62
+ return [];
63
+ const pipeline = redis.pipeline();
64
+ for (const id of ids)
65
+ pipeline.get(`cca:job:${id}`);
66
+ const results = await pipeline.exec();
67
+ const jobs = [];
68
+ for (const [, val] of results ?? []) {
69
+ if (val) {
70
+ try {
71
+ jobs.push(JSON.parse(val));
72
+ }
73
+ catch { }
74
+ }
75
+ }
76
+ return jobs;
77
+ }
78
+ catch (err) {
79
+ console.error("[cc-agent] Redis listJobs failed:", err);
80
+ }
81
+ }
82
+ return Array.from(this.memJobs.values());
83
+ }
84
+ async appendOutput(id, line) {
85
+ const redis = getRedis();
86
+ if (redis) {
87
+ try {
88
+ const key = `cca:job:${id}:output`;
89
+ await redis.rpush(key, line);
90
+ await redis.expire(key, JOB_TTL_SECONDS);
91
+ return;
92
+ }
93
+ catch (err) {
94
+ console.error("[cc-agent] Redis appendOutput failed:", err);
95
+ }
96
+ }
97
+ appendLog(id, line);
98
+ }
99
+ async getOutput(id, offset) {
100
+ const redis = getRedis();
101
+ if (redis) {
102
+ try {
103
+ return await redis.lrange(`cca:job:${id}:output`, offset, -1);
104
+ }
105
+ catch (err) {
106
+ console.error("[cc-agent] Redis getOutput failed:", err);
107
+ }
108
+ }
109
+ return readLogSync(id, offset);
110
+ }
111
+ async updateJob(id, partial) {
112
+ const existing = await this.getJob(id);
113
+ if (existing) {
114
+ await this.saveJob({ ...existing, ...partial });
115
+ }
116
+ }
117
+ /** Load all persisted jobs on startup: Redis first, disk fallback. */
118
+ async loadAll() {
119
+ const redis = getRedis();
120
+ if (redis) {
121
+ try {
122
+ const jobs = await this.listJobs();
123
+ if (jobs.length > 0)
124
+ return jobs;
125
+ }
126
+ catch (err) {
127
+ console.error("[cc-agent] Redis loadAll failed:", err);
128
+ }
129
+ }
130
+ return loadPersistedJobs().map((p) => ({
131
+ ...p,
132
+ recentTools: [],
133
+ outputLineCount: 0,
134
+ }));
135
+ }
136
+ flushToDisk() {
137
+ try {
138
+ const records = Array.from(this.memJobs.values()).map((r) => ({
139
+ id: r.id,
140
+ status: r.status,
141
+ repoUrl: r.repoUrl,
142
+ task: r.task,
143
+ branch: r.branch,
144
+ createBranch: r.createBranch,
145
+ startedAt: r.startedAt ?? new Date().toISOString(),
146
+ finishedAt: r.finishedAt,
147
+ exitCode: r.exitCode,
148
+ error: r.error,
149
+ pid: r.pid,
150
+ sessionIdAfter: r.sessionIdAfter,
151
+ usage: r.usage,
152
+ totalInputTokens: r.totalInputTokens,
153
+ totalOutputTokens: r.totalOutputTokens,
154
+ totalCacheReadTokens: r.totalCacheReadTokens,
155
+ totalCacheWriteTokens: r.totalCacheWriteTokens,
156
+ costUsd: r.costUsd,
157
+ dependsOn: r.dependsOn,
158
+ }));
159
+ savePersistedJobs(records);
160
+ }
161
+ catch (err) {
162
+ console.error("[cc-agent] Disk sync failed:", err);
163
+ }
164
+ }
165
+ }
166
+ export class ProfileStore {
167
+ async saveProfile(profile) {
168
+ const redis = getRedis();
169
+ if (redis) {
170
+ try {
171
+ await redis.set(`cca:profile:${profile.name}`, JSON.stringify(profile));
172
+ await redis.sadd("cca:profiles:index", profile.name);
173
+ return;
174
+ }
175
+ catch (err) {
176
+ console.error("[cc-agent] Redis saveProfile failed:", err);
177
+ }
178
+ }
179
+ const profiles = diskLoadProfiles();
180
+ const idx = profiles.findIndex((p) => p.name === profile.name);
181
+ if (idx >= 0)
182
+ profiles[idx] = profile;
183
+ else
184
+ profiles.push(profile);
185
+ diskSaveProfiles(profiles);
186
+ }
187
+ async getProfile(name) {
188
+ const redis = getRedis();
189
+ if (redis) {
190
+ try {
191
+ const raw = await redis.get(`cca:profile:${name}`);
192
+ return raw ? JSON.parse(raw) : null;
193
+ }
194
+ catch (err) {
195
+ console.error("[cc-agent] Redis getProfile failed:", err);
196
+ }
197
+ }
198
+ return diskLoadProfiles().find((p) => p.name === name) ?? null;
199
+ }
200
+ async listProfiles() {
201
+ const redis = getRedis();
202
+ if (redis) {
203
+ try {
204
+ const names = await redis.smembers("cca:profiles:index");
205
+ if (!names.length) {
206
+ // Migrate disk profiles to Redis on first run
207
+ const disk = diskLoadProfiles();
208
+ for (const p of disk)
209
+ await this.saveProfile(p);
210
+ return disk;
211
+ }
212
+ const pipeline = redis.pipeline();
213
+ for (const name of names)
214
+ pipeline.get(`cca:profile:${name}`);
215
+ const results = await pipeline.exec();
216
+ const profiles = [];
217
+ for (const [, val] of results ?? []) {
218
+ if (val) {
219
+ try {
220
+ profiles.push(JSON.parse(val));
221
+ }
222
+ catch { }
223
+ }
224
+ }
225
+ return profiles.sort((a, b) => a.name.localeCompare(b.name));
226
+ }
227
+ catch (err) {
228
+ console.error("[cc-agent] Redis listProfiles failed:", err);
229
+ }
230
+ }
231
+ return diskLoadProfiles();
232
+ }
233
+ async deleteProfile(name) {
234
+ const redis = getRedis();
235
+ if (redis) {
236
+ try {
237
+ const deleted = await redis.del(`cca:profile:${name}`);
238
+ await redis.srem("cca:profiles:index", name);
239
+ return deleted > 0;
240
+ }
241
+ catch (err) {
242
+ console.error("[cc-agent] Redis deleteProfile failed:", err);
243
+ }
244
+ }
245
+ const profiles = diskLoadProfiles();
246
+ const idx = profiles.findIndex((p) => p.name === name);
247
+ if (idx < 0)
248
+ return false;
249
+ profiles.splice(idx, 1);
250
+ diskSaveProfiles(profiles);
251
+ return true;
252
+ }
253
+ }
254
+ export class PlanStore {
255
+ async savePlan(plan) {
256
+ const redis = getRedis();
257
+ if (redis) {
258
+ try {
259
+ await redis.set(`cca:plan:${plan.id}`, JSON.stringify(plan), "EX", PLAN_TTL_SECONDS);
260
+ return;
261
+ }
262
+ catch (err) {
263
+ console.error("[cc-agent] Redis savePlan failed:", err);
264
+ }
265
+ }
266
+ // No disk fallback for plans — they are best-effort metadata
267
+ }
268
+ async getPlan(id) {
269
+ const redis = getRedis();
270
+ if (redis) {
271
+ try {
272
+ const raw = await redis.get(`cca:plan:${id}`);
273
+ return raw ? JSON.parse(raw) : null;
274
+ }
275
+ catch (err) {
276
+ console.error("[cc-agent] Redis getPlan failed:", err);
277
+ }
278
+ }
279
+ return null;
280
+ }
281
+ }
282
+ // ─── Singletons ──────────────────────────────────────────────────────────────
283
+ export const jobStore = new JobStore();
284
+ export const profileStore = new ProfileStore();
285
+ export const planStore = new PlanStore();
286
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gonzih/cc-agent",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server for spawning Claude Code agents in cloned repos — branch your agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,6 +20,7 @@
20
20
  ],
21
21
  "dependencies": {
22
22
  "@modelcontextprotocol/sdk": "^1.12.0",
23
+ "ioredis": "^5.4.2",
23
24
  "uuid": "^11.0.0"
24
25
  },
25
26
  "devDependencies": {