@polpo-ai/file-stores 0.11.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.
Files changed (70) hide show
  1. package/LICENSE +13 -0
  2. package/dist/file-agent-store.d.ts +24 -0
  3. package/dist/file-agent-store.d.ts.map +1 -0
  4. package/dist/file-agent-store.js +102 -0
  5. package/dist/file-agent-store.js.map +1 -0
  6. package/dist/file-approval-store.d.ts +20 -0
  7. package/dist/file-approval-store.d.ts.map +1 -0
  8. package/dist/file-approval-store.js +62 -0
  9. package/dist/file-approval-store.js.map +1 -0
  10. package/dist/file-checkpoint-store.d.ts +18 -0
  11. package/dist/file-checkpoint-store.d.ts.map +1 -0
  12. package/dist/file-checkpoint-store.js +52 -0
  13. package/dist/file-checkpoint-store.js.map +1 -0
  14. package/dist/file-delay-store.d.ts +18 -0
  15. package/dist/file-delay-store.d.ts.map +1 -0
  16. package/dist/file-delay-store.js +52 -0
  17. package/dist/file-delay-store.js.map +1 -0
  18. package/dist/file-log-store.d.ts +22 -0
  19. package/dist/file-log-store.d.ts.map +1 -0
  20. package/dist/file-log-store.js +123 -0
  21. package/dist/file-log-store.js.map +1 -0
  22. package/dist/file-memory-store.d.ts +21 -0
  23. package/dist/file-memory-store.d.ts.map +1 -0
  24. package/dist/file-memory-store.js +85 -0
  25. package/dist/file-memory-store.js.map +1 -0
  26. package/dist/file-playbook-store.d.ts +25 -0
  27. package/dist/file-playbook-store.d.ts.map +1 -0
  28. package/dist/file-playbook-store.js +35 -0
  29. package/dist/file-playbook-store.js.map +1 -0
  30. package/dist/file-run-store.d.ts +29 -0
  31. package/dist/file-run-store.d.ts.map +1 -0
  32. package/dist/file-run-store.js +131 -0
  33. package/dist/file-run-store.js.map +1 -0
  34. package/dist/file-session-store.d.ts +28 -0
  35. package/dist/file-session-store.d.ts.map +1 -0
  36. package/dist/file-session-store.js +245 -0
  37. package/dist/file-session-store.js.map +1 -0
  38. package/dist/file-skill-store.d.ts +26 -0
  39. package/dist/file-skill-store.d.ts.map +1 -0
  40. package/dist/file-skill-store.js +92 -0
  41. package/dist/file-skill-store.js.map +1 -0
  42. package/dist/file-task-store.d.ts +48 -0
  43. package/dist/file-task-store.d.ts.map +1 -0
  44. package/dist/file-task-store.js +296 -0
  45. package/dist/file-task-store.js.map +1 -0
  46. package/dist/file-team-store.d.ts +20 -0
  47. package/dist/file-team-store.d.ts.map +1 -0
  48. package/dist/file-team-store.js +91 -0
  49. package/dist/file-team-store.js.map +1 -0
  50. package/dist/index.d.ts +17 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +19 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/json-config-store.d.ts +25 -0
  55. package/dist/json-config-store.d.ts.map +1 -0
  56. package/dist/json-config-store.js +66 -0
  57. package/dist/json-config-store.js.map +1 -0
  58. package/dist/json-task-store.d.ts +22 -0
  59. package/dist/json-task-store.d.ts.map +1 -0
  60. package/dist/json-task-store.js +112 -0
  61. package/dist/json-task-store.js.map +1 -0
  62. package/dist/paths.d.ts +11 -0
  63. package/dist/paths.d.ts.map +1 -0
  64. package/dist/paths.js +17 -0
  65. package/dist/paths.js.map +1 -0
  66. package/dist/playbook-files.d.ts +38 -0
  67. package/dist/playbook-files.d.ts.map +1 -0
  68. package/dist/playbook-files.js +159 -0
  69. package/dist/playbook-files.js.map +1 -0
  70. package/package.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-skill-store.d.ts","sourceRoot":"","sources":["../src/file-skill-store.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAItB,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAK9B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAKnD,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ5C,qDAAqD;IACrD,OAAO,CAAC,OAAO;IAqCf,wDAAwD;IACxD,OAAO,CAAC,QAAQ;CAOjB"}
@@ -0,0 +1,92 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync, } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ /**
4
+ * File-backed SkillStore.
5
+ *
6
+ * Persists the full catalog to `${polpoDir}/skills-index.json` as a
7
+ * JSON object keyed by skill name. Writes are atomic (tmp + rename).
8
+ *
9
+ * Legacy compatibility: the old `skills-index.json` format contained
10
+ * only `{ tags?, category? }` per skill. This store reads those files
11
+ * transparently (treating them as partial records) and the caller —
12
+ * typically the upsert triggered by skills/add — fills in the full
13
+ * record on next write.
14
+ */
15
+ export class FileSkillStore {
16
+ filePath;
17
+ constructor(polpoDir) {
18
+ this.filePath = join(polpoDir, "skills-index.json");
19
+ }
20
+ async list() {
21
+ const all = this.readAll();
22
+ return Object.values(all);
23
+ }
24
+ async get(name) {
25
+ const all = this.readAll();
26
+ return all[name];
27
+ }
28
+ async upsert(record) {
29
+ const all = this.readAll();
30
+ all[record.name] = record;
31
+ this.writeAll(all);
32
+ }
33
+ async remove(name) {
34
+ const all = this.readAll();
35
+ if (!(name in all))
36
+ return false;
37
+ delete all[name];
38
+ this.writeAll(all);
39
+ return true;
40
+ }
41
+ /** Read the JSON file, normalising legacy shapes. */
42
+ readAll() {
43
+ if (!existsSync(this.filePath))
44
+ return {};
45
+ let raw;
46
+ try {
47
+ raw = readFileSync(this.filePath, "utf-8");
48
+ }
49
+ catch {
50
+ return {};
51
+ }
52
+ if (!raw.trim())
53
+ return {};
54
+ let parsed;
55
+ try {
56
+ parsed = JSON.parse(raw);
57
+ }
58
+ catch {
59
+ return {};
60
+ }
61
+ if (!parsed || typeof parsed !== "object")
62
+ return {};
63
+ const out = {};
64
+ for (const [name, value] of Object.entries(parsed)) {
65
+ if (!value || typeof value !== "object")
66
+ continue;
67
+ const v = value;
68
+ out[name] = {
69
+ name,
70
+ description: typeof v.description === "string" ? v.description : "",
71
+ source: typeof v.source === "string" ? v.source : undefined,
72
+ installedAt: typeof v.installedAt === "string"
73
+ ? v.installedAt
74
+ : new Date(0).toISOString(),
75
+ allowedTools: Array.isArray(v.allowedTools) ? v.allowedTools : undefined,
76
+ tags: Array.isArray(v.tags) ? v.tags : undefined,
77
+ category: typeof v.category === "string" ? v.category : undefined,
78
+ };
79
+ }
80
+ return out;
81
+ }
82
+ /** Write the full catalog atomically (tmp + rename). */
83
+ writeAll(all) {
84
+ const dir = dirname(this.filePath);
85
+ if (!existsSync(dir))
86
+ mkdirSync(dir, { recursive: true });
87
+ const tmp = this.filePath + ".tmp";
88
+ writeFileSync(tmp, JSON.stringify(all, null, 2) + "\n", "utf-8");
89
+ renameSync(tmp, this.filePath);
90
+ }
91
+ }
92
+ //# sourceMappingURL=file-skill-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-skill-store.js","sourceRoot":"","sources":["../src/file-skill-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Task, TaskStatus, PolpoState, Mission } from "@polpo-ai/core/types";
2
+ import type { TaskStore } from "@polpo-ai/core/task-store";
3
+ /**
4
+ * Filesystem-based TaskStore.
5
+ * Stores tasks, missions, and metadata as individual JSON files under .polpo/.
6
+ *
7
+ * Layout:
8
+ * .polpo/tasks/<taskId>.json
9
+ * .polpo/missions/<missionId>.json
10
+ * .polpo/_meta.json
11
+ */
12
+ export declare class FileTaskStore implements TaskStore {
13
+ private tasksDir;
14
+ private missionsDir;
15
+ private metaPath;
16
+ constructor(polpoDir: string);
17
+ private taskPath;
18
+ private missionPath;
19
+ private readMeta;
20
+ private writeMeta;
21
+ private readTask;
22
+ private writeTask;
23
+ private listTaskIds;
24
+ private readMission;
25
+ private writeMission;
26
+ private listMissionIds;
27
+ getState(): Promise<PolpoState>;
28
+ setState(partial: Partial<PolpoState>): Promise<void>;
29
+ addTask(task: Omit<Task, "id" | "status" | "retries" | "createdAt" | "updatedAt"> & {
30
+ status?: TaskStatus;
31
+ }): Promise<Task>;
32
+ getTask(taskId: string): Promise<Task | undefined>;
33
+ getAllTasks(): Promise<Task[]>;
34
+ unsafeSetStatus(taskId: string, newStatus: TaskStatus, reason: string): Promise<Task>;
35
+ updateTask(taskId: string, updates: Partial<Omit<Task, "id" | "status">>): Promise<Task>;
36
+ removeTask(taskId: string): Promise<boolean>;
37
+ removeTasks(filter: (task: Task) => boolean): Promise<number>;
38
+ transition(taskId: string, newStatus: TaskStatus): Promise<Task>;
39
+ saveMission(mission: Omit<Mission, "id" | "createdAt" | "updatedAt">): Promise<Mission>;
40
+ getMission(missionId: string): Promise<Mission | undefined>;
41
+ getMissionByName(name: string): Promise<Mission | undefined>;
42
+ getAllMissions(): Promise<Mission[]>;
43
+ updateMission(missionId: string, updates: Partial<Omit<Mission, "id">>): Promise<Mission>;
44
+ deleteMission(missionId: string): Promise<boolean>;
45
+ nextMissionName(): Promise<string>;
46
+ close(): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=file-task-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-task-store.d.ts","sourceRoot":"","sources":["../src/file-task-store.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,IAAI,EACJ,UAAU,EACV,UAAU,EAGV,OAAO,EACR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AA8C3D;;;;;;;;GAQG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAY5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,cAAc;IAShB,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAa/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBrD,OAAO,CACX,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG;QAAE,MAAM,CAAC,EAAE,UAAU,CAAA;KAAE,GAClG,OAAO,CAAC,IAAI,CAAC;IAcV,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAIlD,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAW9B,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxF,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW5C,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAS7D,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBhE,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAYvF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAI3D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAQ5D,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAUpC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAczF,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlD,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAKlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,296 @@
1
+ import { join } from "node:path";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync, readdirSync, unlinkSync, } from "node:fs";
3
+ import { nanoid } from "nanoid";
4
+ import { assertValidTransition } from "@polpo-ai/core/state-machine";
5
+ function safeJsonParse(raw, fallback) {
6
+ try {
7
+ return JSON.parse(raw);
8
+ }
9
+ catch {
10
+ return fallback;
11
+ }
12
+ }
13
+ /** Atomic write: write to tmp file then rename. */
14
+ function atomicWrite(filePath, data) {
15
+ const tmp = filePath + ".tmp";
16
+ writeFileSync(tmp, JSON.stringify(data, null, 2), "utf-8");
17
+ renameSync(tmp, filePath);
18
+ }
19
+ /** Read and parse a JSON file, returning fallback if missing or malformed. */
20
+ function readJson(filePath, fallback) {
21
+ if (!existsSync(filePath))
22
+ return fallback;
23
+ try {
24
+ return safeJsonParse(readFileSync(filePath, "utf-8"), fallback);
25
+ }
26
+ catch {
27
+ return fallback;
28
+ }
29
+ }
30
+ /**
31
+ * Filesystem-based TaskStore.
32
+ * Stores tasks, missions, and metadata as individual JSON files under .polpo/.
33
+ *
34
+ * Layout:
35
+ * .polpo/tasks/<taskId>.json
36
+ * .polpo/missions/<missionId>.json
37
+ * .polpo/_meta.json
38
+ */
39
+ export class FileTaskStore {
40
+ tasksDir;
41
+ missionsDir;
42
+ metaPath;
43
+ constructor(polpoDir) {
44
+ this.tasksDir = join(polpoDir, "tasks");
45
+ this.missionsDir = join(polpoDir, "missions");
46
+ this.metaPath = join(polpoDir, "_meta.json");
47
+ if (!existsSync(polpoDir))
48
+ mkdirSync(polpoDir, { recursive: true });
49
+ if (!existsSync(this.tasksDir))
50
+ mkdirSync(this.tasksDir, { recursive: true });
51
+ if (!existsSync(this.missionsDir))
52
+ mkdirSync(this.missionsDir, { recursive: true });
53
+ }
54
+ // ── Helpers ──
55
+ taskPath(id) {
56
+ return join(this.tasksDir, `${id}.json`);
57
+ }
58
+ missionPath(id) {
59
+ return join(this.missionsDir, `${id}.json`);
60
+ }
61
+ readMeta() {
62
+ const raw = readJson(this.metaPath, {
63
+ teams: [{ name: "", agents: [] }],
64
+ processes: [],
65
+ });
66
+ // Migrate legacy singular team → teams array
67
+ const teams = raw.teams && raw.teams.length > 0
68
+ ? raw.teams
69
+ : raw.team
70
+ ? [raw.team]
71
+ : [{ name: "", agents: [] }];
72
+ return { project: raw.project ?? "", teams, processes: raw.processes, startedAt: raw.startedAt, completedAt: raw.completedAt };
73
+ }
74
+ writeMeta(meta) {
75
+ atomicWrite(this.metaPath, meta);
76
+ }
77
+ readTask(id) {
78
+ return readJson(this.taskPath(id), undefined);
79
+ }
80
+ writeTask(task) {
81
+ atomicWrite(this.taskPath(task.id), task);
82
+ }
83
+ listTaskIds() {
84
+ if (!existsSync(this.tasksDir))
85
+ return [];
86
+ return readdirSync(this.tasksDir)
87
+ .filter(f => f.endsWith(".json") && !f.endsWith(".tmp"))
88
+ .map(f => f.slice(0, -5));
89
+ }
90
+ readMission(id) {
91
+ return readJson(this.missionPath(id), undefined);
92
+ }
93
+ writeMission(mission) {
94
+ atomicWrite(this.missionPath(mission.id), mission);
95
+ }
96
+ listMissionIds() {
97
+ if (!existsSync(this.missionsDir))
98
+ return [];
99
+ return readdirSync(this.missionsDir)
100
+ .filter(f => f.endsWith(".json") && !f.endsWith(".tmp"))
101
+ .map(f => f.slice(0, -5));
102
+ }
103
+ // ── TaskStore interface ──
104
+ async getState() {
105
+ const meta = this.readMeta();
106
+ const tasks = await this.getAllTasks();
107
+ return {
108
+ project: meta.project,
109
+ teams: meta.teams,
110
+ tasks,
111
+ processes: meta.processes,
112
+ startedAt: meta.startedAt,
113
+ completedAt: meta.completedAt,
114
+ };
115
+ }
116
+ async setState(partial) {
117
+ const meta = this.readMeta();
118
+ if (partial.project !== undefined)
119
+ meta.project = partial.project;
120
+ if (partial.teams !== undefined)
121
+ meta.teams = partial.teams;
122
+ if (partial.startedAt !== undefined)
123
+ meta.startedAt = partial.startedAt;
124
+ if (partial.completedAt !== undefined)
125
+ meta.completedAt = partial.completedAt;
126
+ if (partial.processes !== undefined)
127
+ meta.processes = partial.processes;
128
+ if (partial.tasks !== undefined) {
129
+ // Wipe existing tasks and write new ones
130
+ for (const id of this.listTaskIds()) {
131
+ try {
132
+ unlinkSync(this.taskPath(id));
133
+ }
134
+ catch { /* already gone */ }
135
+ }
136
+ for (const task of partial.tasks) {
137
+ this.writeTask(task);
138
+ }
139
+ }
140
+ this.writeMeta(meta);
141
+ }
142
+ async addTask(task) {
143
+ const now = new Date().toISOString();
144
+ const newTask = {
145
+ ...task,
146
+ id: nanoid(),
147
+ status: task.status ?? "pending",
148
+ retries: 0,
149
+ createdAt: now,
150
+ updatedAt: now,
151
+ };
152
+ this.writeTask(newTask);
153
+ return newTask;
154
+ }
155
+ async getTask(taskId) {
156
+ return this.readTask(taskId);
157
+ }
158
+ async getAllTasks() {
159
+ const ids = this.listTaskIds();
160
+ const tasks = [];
161
+ for (const id of ids) {
162
+ const task = this.readTask(id);
163
+ if (task)
164
+ tasks.push(task);
165
+ }
166
+ tasks.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
167
+ return tasks;
168
+ }
169
+ async unsafeSetStatus(taskId, newStatus, reason) {
170
+ const existing = this.readTask(taskId);
171
+ if (!existing)
172
+ throw new Error(`Task not found: ${taskId}`);
173
+ const from = existing.status;
174
+ const updated = { ...existing, status: newStatus, updatedAt: new Date().toISOString() };
175
+ this.writeTask(updated);
176
+ console.warn(`[unsafeSetStatus] ${taskId}: ${from} → ${newStatus} — ${reason}`);
177
+ return updated;
178
+ }
179
+ async updateTask(taskId, updates) {
180
+ const existing = this.readTask(taskId);
181
+ if (!existing)
182
+ throw new Error(`Task not found: ${taskId}`);
183
+ const updated = {
184
+ ...existing,
185
+ ...updates,
186
+ id: taskId,
187
+ updatedAt: new Date().toISOString(),
188
+ };
189
+ this.writeTask(updated);
190
+ return updated;
191
+ }
192
+ async removeTask(taskId) {
193
+ const path = this.taskPath(taskId);
194
+ if (!existsSync(path))
195
+ return false;
196
+ try {
197
+ unlinkSync(path);
198
+ return true;
199
+ }
200
+ catch {
201
+ return false;
202
+ }
203
+ }
204
+ async removeTasks(filter) {
205
+ const all = await this.getAllTasks();
206
+ const toRemove = all.filter(filter);
207
+ for (const task of toRemove) {
208
+ this.removeTask(task.id);
209
+ }
210
+ return toRemove.length;
211
+ }
212
+ async transition(taskId, newStatus) {
213
+ const existing = this.readTask(taskId);
214
+ if (!existing)
215
+ throw new Error(`Task not found: ${taskId}`);
216
+ assertValidTransition(existing.status, newStatus);
217
+ let retries = existing.retries;
218
+ if (newStatus === "pending" && existing.status === "failed") {
219
+ retries += 1;
220
+ }
221
+ const updated = {
222
+ ...existing,
223
+ status: newStatus,
224
+ retries,
225
+ updatedAt: new Date().toISOString(),
226
+ };
227
+ this.writeTask(updated);
228
+ return updated;
229
+ }
230
+ // ── Mission persistence ──
231
+ async saveMission(mission) {
232
+ const now = new Date().toISOString();
233
+ const newMission = {
234
+ ...mission,
235
+ id: nanoid(),
236
+ createdAt: now,
237
+ updatedAt: now,
238
+ };
239
+ this.writeMission(newMission);
240
+ return newMission;
241
+ }
242
+ async getMission(missionId) {
243
+ return this.readMission(missionId);
244
+ }
245
+ async getMissionByName(name) {
246
+ for (const id of this.listMissionIds()) {
247
+ const mission = this.readMission(id);
248
+ if (mission && mission.name === name)
249
+ return mission;
250
+ }
251
+ return undefined;
252
+ }
253
+ async getAllMissions() {
254
+ const missions = [];
255
+ for (const id of this.listMissionIds()) {
256
+ const mission = this.readMission(id);
257
+ if (mission)
258
+ missions.push(mission);
259
+ }
260
+ missions.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
261
+ return missions;
262
+ }
263
+ async updateMission(missionId, updates) {
264
+ const existing = this.readMission(missionId);
265
+ if (!existing)
266
+ throw new Error(`Mission not found: ${missionId}`);
267
+ const updated = {
268
+ ...existing,
269
+ ...updates,
270
+ id: missionId,
271
+ updatedAt: new Date().toISOString(),
272
+ };
273
+ this.writeMission(updated);
274
+ return updated;
275
+ }
276
+ async deleteMission(missionId) {
277
+ const path = this.missionPath(missionId);
278
+ if (!existsSync(path))
279
+ return false;
280
+ try {
281
+ unlinkSync(path);
282
+ return true;
283
+ }
284
+ catch {
285
+ return false;
286
+ }
287
+ }
288
+ async nextMissionName() {
289
+ const count = this.listMissionIds().length;
290
+ return `mission-${count + 1}`;
291
+ }
292
+ async close() {
293
+ // No-op for filesystem store
294
+ }
295
+ }
296
+ //# sourceMappingURL=file-task-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-task-store.js","sourceRoot":"","sources":["../src/file-task-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Team } from "@polpo-ai/core/types";
2
+ import type { TeamStore } from "@polpo-ai/core/team-store";
3
+ /**
4
+ * File-based TeamStore.
5
+ * Persists teams as JSON in `.polpo/teams.json`.
6
+ */
7
+ export declare class FileTeamStore implements TeamStore {
8
+ private readonly filePath;
9
+ constructor(polpoDir: string);
10
+ private readAll;
11
+ private writeAll;
12
+ getTeams(): Promise<Team[]>;
13
+ getTeam(name: string): Promise<Team | undefined>;
14
+ createTeam(team: Team): Promise<Team>;
15
+ updateTeam(name: string, updates: Partial<Omit<Team, "name" | "agents">>): Promise<Team>;
16
+ renameTeam(oldName: string, newName: string): Promise<Team>;
17
+ deleteTeam(name: string): Promise<boolean>;
18
+ seed(teams: Team[]): Promise<void>;
19
+ }
20
+ //# sourceMappingURL=file-team-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-team-store.d.ts","sourceRoot":"","sources":["../src/file-team-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D;;;GAGG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAM5B,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,QAAQ;IAQV,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAI3B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAIhD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASxF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS1C,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAazC"}
@@ -0,0 +1,91 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
2
+ import { join, dirname } from "node:path";
3
+ /**
4
+ * File-based TeamStore.
5
+ * Persists teams as JSON in `.polpo/teams.json`.
6
+ */
7
+ export class FileTeamStore {
8
+ filePath;
9
+ constructor(polpoDir) {
10
+ this.filePath = join(polpoDir, "teams.json");
11
+ }
12
+ // ── helpers ──────────────────────────────────────────────────────────
13
+ readAll() {
14
+ if (!existsSync(this.filePath))
15
+ return [];
16
+ try {
17
+ return JSON.parse(readFileSync(this.filePath, "utf-8"));
18
+ }
19
+ catch {
20
+ return [];
21
+ }
22
+ }
23
+ writeAll(teams) {
24
+ const dir = dirname(this.filePath);
25
+ if (!existsSync(dir))
26
+ mkdirSync(dir, { recursive: true });
27
+ writeFileSync(this.filePath, JSON.stringify(teams, null, 2), "utf-8");
28
+ }
29
+ // ── TeamStore implementation ─────────────────────────────────────────
30
+ async getTeams() {
31
+ return this.readAll();
32
+ }
33
+ async getTeam(name) {
34
+ return this.readAll().find(t => t.name === name);
35
+ }
36
+ async createTeam(team) {
37
+ const teams = this.readAll();
38
+ if (teams.some(t => t.name === team.name)) {
39
+ throw new Error(`Team "${team.name}" already exists`);
40
+ }
41
+ teams.push(team);
42
+ this.writeAll(teams);
43
+ return team;
44
+ }
45
+ async updateTeam(name, updates) {
46
+ const teams = this.readAll();
47
+ const team = teams.find(t => t.name === name);
48
+ if (!team)
49
+ throw new Error(`Team "${name}" not found`);
50
+ if (updates.description !== undefined)
51
+ team.description = updates.description;
52
+ this.writeAll(teams);
53
+ return team;
54
+ }
55
+ async renameTeam(oldName, newName) {
56
+ const teams = this.readAll();
57
+ const team = teams.find(t => t.name === oldName);
58
+ if (!team)
59
+ throw new Error(`Team "${oldName}" not found`);
60
+ if (teams.some(t => t.name === newName)) {
61
+ throw new Error(`Team "${newName}" already exists`);
62
+ }
63
+ team.name = newName;
64
+ this.writeAll(teams);
65
+ return team;
66
+ }
67
+ async deleteTeam(name) {
68
+ const teams = this.readAll();
69
+ const idx = teams.findIndex(t => t.name === name);
70
+ if (idx < 0)
71
+ return false;
72
+ teams.splice(idx, 1);
73
+ this.writeAll(teams);
74
+ return true;
75
+ }
76
+ async seed(teams) {
77
+ const existing = this.readAll();
78
+ const existingNames = new Set(existing.map(t => t.name));
79
+ let changed = false;
80
+ for (const team of teams) {
81
+ if (!existingNames.has(team.name)) {
82
+ // Seed the team without its agents (agents live in AgentStore)
83
+ existing.push({ name: team.name, description: team.description, agents: [] });
84
+ changed = true;
85
+ }
86
+ }
87
+ if (changed)
88
+ this.writeAll(existing);
89
+ }
90
+ }
91
+ //# sourceMappingURL=file-team-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-team-store.js","sourceRoot":"","sources":["../src/file-team-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export { FileTaskStore } from "./file-task-store.js";
2
+ export { FileRunStore } from "./file-run-store.js";
3
+ export { JsonTaskStore } from "./json-task-store.js";
4
+ export { PolpoConfigStore, JsonConfigStore } from "./json-config-store.js";
5
+ export { FileMemoryStore } from "./file-memory-store.js";
6
+ export { FileLogStore } from "./file-log-store.js";
7
+ export { FileSessionStore } from "./file-session-store.js";
8
+ export { FileApprovalStore } from "./file-approval-store.js";
9
+ export { FileCheckpointStore } from "./file-checkpoint-store.js";
10
+ export { FileDelayStore } from "./file-delay-store.js";
11
+ export { FileTeamStore } from "./file-team-store.js";
12
+ export { FileAgentStore } from "./file-agent-store.js";
13
+ export { POLPO_DIR_NAME, getPolpoDir, getGlobalPolpoDir } from "./paths.js";
14
+ export { discoverPlaybooks, loadPlaybook, savePlaybook, deletePlaybook } from "./playbook-files.js";
15
+ export { FilePlaybookStore } from "./file-playbook-store.js";
16
+ export { FileSkillStore } from "./file-skill-store.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ export { FileTaskStore } from "./file-task-store.js";
2
+ export { FileRunStore } from "./file-run-store.js";
3
+ export { JsonTaskStore } from "./json-task-store.js";
4
+ export { PolpoConfigStore, JsonConfigStore } from "./json-config-store.js";
5
+ export { FileMemoryStore } from "./file-memory-store.js";
6
+ export { FileLogStore } from "./file-log-store.js";
7
+ export { FileSessionStore } from "./file-session-store.js";
8
+ export { FileApprovalStore } from "./file-approval-store.js";
9
+ export { FileCheckpointStore } from "./file-checkpoint-store.js";
10
+ export { FileDelayStore } from "./file-delay-store.js";
11
+ export { FileTeamStore } from "./file-team-store.js";
12
+ export { FileAgentStore } from "./file-agent-store.js";
13
+ // .polpo directory layout helpers (canonical home)
14
+ export { POLPO_DIR_NAME, getPolpoDir, getGlobalPolpoDir } from "./paths.js";
15
+ // Playbook file persistence (discovery + CRUD)
16
+ export { discoverPlaybooks, loadPlaybook, savePlaybook, deletePlaybook } from "./playbook-files.js";
17
+ export { FilePlaybookStore } from "./file-playbook-store.js";
18
+ export { FileSkillStore } from "./file-skill-store.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,mDAAmD;AACnD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE5E,+CAA+C;AAC/C,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}