@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.
- package/LICENSE +13 -0
- package/dist/file-agent-store.d.ts +24 -0
- package/dist/file-agent-store.d.ts.map +1 -0
- package/dist/file-agent-store.js +102 -0
- package/dist/file-agent-store.js.map +1 -0
- package/dist/file-approval-store.d.ts +20 -0
- package/dist/file-approval-store.d.ts.map +1 -0
- package/dist/file-approval-store.js +62 -0
- package/dist/file-approval-store.js.map +1 -0
- package/dist/file-checkpoint-store.d.ts +18 -0
- package/dist/file-checkpoint-store.d.ts.map +1 -0
- package/dist/file-checkpoint-store.js +52 -0
- package/dist/file-checkpoint-store.js.map +1 -0
- package/dist/file-delay-store.d.ts +18 -0
- package/dist/file-delay-store.d.ts.map +1 -0
- package/dist/file-delay-store.js +52 -0
- package/dist/file-delay-store.js.map +1 -0
- package/dist/file-log-store.d.ts +22 -0
- package/dist/file-log-store.d.ts.map +1 -0
- package/dist/file-log-store.js +123 -0
- package/dist/file-log-store.js.map +1 -0
- package/dist/file-memory-store.d.ts +21 -0
- package/dist/file-memory-store.d.ts.map +1 -0
- package/dist/file-memory-store.js +85 -0
- package/dist/file-memory-store.js.map +1 -0
- package/dist/file-playbook-store.d.ts +25 -0
- package/dist/file-playbook-store.d.ts.map +1 -0
- package/dist/file-playbook-store.js +35 -0
- package/dist/file-playbook-store.js.map +1 -0
- package/dist/file-run-store.d.ts +29 -0
- package/dist/file-run-store.d.ts.map +1 -0
- package/dist/file-run-store.js +131 -0
- package/dist/file-run-store.js.map +1 -0
- package/dist/file-session-store.d.ts +28 -0
- package/dist/file-session-store.d.ts.map +1 -0
- package/dist/file-session-store.js +245 -0
- package/dist/file-session-store.js.map +1 -0
- package/dist/file-skill-store.d.ts +26 -0
- package/dist/file-skill-store.d.ts.map +1 -0
- package/dist/file-skill-store.js +92 -0
- package/dist/file-skill-store.js.map +1 -0
- package/dist/file-task-store.d.ts +48 -0
- package/dist/file-task-store.d.ts.map +1 -0
- package/dist/file-task-store.js +296 -0
- package/dist/file-task-store.js.map +1 -0
- package/dist/file-team-store.d.ts +20 -0
- package/dist/file-team-store.d.ts.map +1 -0
- package/dist/file-team-store.js +91 -0
- package/dist/file-team-store.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/json-config-store.d.ts +25 -0
- package/dist/json-config-store.d.ts.map +1 -0
- package/dist/json-config-store.js +66 -0
- package/dist/json-config-store.js.map +1 -0
- package/dist/json-task-store.d.ts +22 -0
- package/dist/json-task-store.d.ts.map +1 -0
- package/dist/json-task-store.js +112 -0
- package/dist/json-task-store.js.map +1 -0
- package/dist/paths.d.ts +11 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +17 -0
- package/dist/paths.js.map +1 -0
- package/dist/playbook-files.d.ts +38 -0
- package/dist/playbook-files.d.ts.map +1 -0
- package/dist/playbook-files.js +159 -0
- package/dist/playbook-files.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|