polpo-ai 0.11.0 → 0.12.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/core/runner.d.ts +6 -10
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +6 -295
- package/dist/core/runner.js.map +1 -1
- package/dist/index.d.ts +6 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -28
- package/dist/index.js.map +1 -1
- package/dist/server/index.d.ts +2 -42
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -127
- package/dist/server/index.js.map +1 -1
- package/package.json +3 -38
- package/dist/adapters/engine.d.ts +0 -51
- package/dist/adapters/engine.d.ts.map +0 -1
- package/dist/adapters/engine.js +0 -316
- package/dist/adapters/engine.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -2
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -4
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/loop-engine.d.ts +0 -36
- package/dist/adapters/loop-engine.d.ts.map +0 -1
- package/dist/adapters/loop-engine.js +0 -534
- package/dist/adapters/loop-engine.js.map +0 -1
- package/dist/adapters/node-filesystem.d.ts +0 -22
- package/dist/adapters/node-filesystem.d.ts.map +0 -1
- package/dist/adapters/node-filesystem.js +0 -59
- package/dist/adapters/node-filesystem.js.map +0 -1
- package/dist/adapters/node-shell.d.ts +0 -5
- package/dist/adapters/node-shell.d.ts.map +0 -1
- package/dist/adapters/node-shell.js +0 -34
- package/dist/adapters/node-shell.js.map +0 -1
- package/dist/adapters/node-spawner.d.ts +0 -14
- package/dist/adapters/node-spawner.d.ts.map +0 -1
- package/dist/adapters/node-spawner.js +0 -103
- package/dist/adapters/node-spawner.js.map +0 -1
- package/dist/assessment/assessor.d.ts +0 -6
- package/dist/assessment/assessor.d.ts.map +0 -1
- package/dist/assessment/assessor.js +0 -37
- package/dist/assessment/assessor.js.map +0 -1
- package/dist/assessment/index.d.ts +0 -6
- package/dist/assessment/index.d.ts.map +0 -1
- package/dist/assessment/index.js +0 -6
- package/dist/assessment/index.js.map +0 -1
- package/dist/assessment/llm-review.d.ts +0 -34
- package/dist/assessment/llm-review.d.ts.map +0 -1
- package/dist/assessment/llm-review.js +0 -669
- package/dist/assessment/llm-review.js.map +0 -1
- package/dist/assessment/schemas.d.ts +0 -5
- package/dist/assessment/schemas.d.ts.map +0 -1
- package/dist/assessment/schemas.js +0 -5
- package/dist/assessment/schemas.js.map +0 -1
- package/dist/assessment/scoring.d.ts +0 -5
- package/dist/assessment/scoring.d.ts.map +0 -1
- package/dist/assessment/scoring.js +0 -5
- package/dist/assessment/scoring.js.map +0 -1
- package/dist/assessment/transcript-parser.d.ts +0 -31
- package/dist/assessment/transcript-parser.d.ts.map +0 -1
- package/dist/assessment/transcript-parser.js +0 -203
- package/dist/assessment/transcript-parser.js.map +0 -1
- package/dist/auth/index.d.ts +0 -2
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -4
- package/dist/auth/index.js.map +0 -1
- package/dist/core/adapter.d.ts +0 -62
- package/dist/core/adapter.d.ts.map +0 -1
- package/dist/core/adapter.js +0 -2
- package/dist/core/adapter.js.map +0 -1
- package/dist/core/assessment-orchestrator.d.ts +0 -18
- package/dist/core/assessment-orchestrator.d.ts.map +0 -1
- package/dist/core/assessment-orchestrator.js +0 -93
- package/dist/core/assessment-orchestrator.js.map +0 -1
- package/dist/core/config.d.ts +0 -17
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js +0 -272
- package/dist/core/config.js.map +0 -1
- package/dist/core/constants.d.ts +0 -10
- package/dist/core/constants.d.ts.map +0 -1
- package/dist/core/constants.js +0 -11
- package/dist/core/constants.js.map +0 -1
- package/dist/core/deadlock-resolver.d.ts +0 -35
- package/dist/core/deadlock-resolver.d.ts.map +0 -1
- package/dist/core/deadlock-resolver.js +0 -317
- package/dist/core/deadlock-resolver.js.map +0 -1
- package/dist/core/drizzle-sqlite-schema.d.ts +0 -8
- package/dist/core/drizzle-sqlite-schema.d.ts.map +0 -1
- package/dist/core/drizzle-sqlite-schema.js +0 -250
- package/dist/core/drizzle-sqlite-schema.js.map +0 -1
- package/dist/core/events.d.ts +0 -26
- package/dist/core/events.d.ts.map +0 -1
- package/dist/core/events.js +0 -39
- package/dist/core/events.js.map +0 -1
- package/dist/core/index.d.ts +0 -37
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -31
- package/dist/core/index.js.map +0 -1
- package/dist/core/ink.d.ts +0 -165
- package/dist/core/ink.d.ts.map +0 -1
- package/dist/core/ink.js +0 -445
- package/dist/core/ink.js.map +0 -1
- package/dist/core/orchestrator.d.ts +0 -387
- package/dist/core/orchestrator.d.ts.map +0 -1
- package/dist/core/orchestrator.js +0 -1015
- package/dist/core/orchestrator.js.map +0 -1
- package/dist/core/question-detector.d.ts +0 -19
- package/dist/core/question-detector.d.ts.map +0 -1
- package/dist/core/question-detector.js +0 -29
- package/dist/core/question-detector.js.map +0 -1
- package/dist/core/session-reader.d.ts +0 -46
- package/dist/core/session-reader.d.ts.map +0 -1
- package/dist/core/session-reader.js +0 -166
- package/dist/core/session-reader.js.map +0 -1
- package/dist/llm/index.d.ts +0 -8
- package/dist/llm/index.d.ts.map +0 -1
- package/dist/llm/index.js +0 -21
- package/dist/llm/index.js.map +0 -1
- package/dist/llm/pi-client.d.ts +0 -8
- package/dist/llm/pi-client.d.ts.map +0 -1
- package/dist/llm/pi-client.js +0 -8
- package/dist/llm/pi-client.js.map +0 -1
- package/dist/llm/prompts.d.ts +0 -14
- package/dist/llm/prompts.d.ts.map +0 -1
- package/dist/llm/prompts.js +0 -1618
- package/dist/llm/prompts.js.map +0 -1
- package/dist/llm/retry.d.ts +0 -5
- package/dist/llm/retry.d.ts.map +0 -1
- package/dist/llm/retry.js +0 -5
- package/dist/llm/retry.js.map +0 -1
- package/dist/llm/skills.d.ts +0 -265
- package/dist/llm/skills.d.ts.map +0 -1
- package/dist/llm/skills.js +0 -804
- package/dist/llm/skills.js.map +0 -1
- package/dist/quality/index.d.ts +0 -3
- package/dist/quality/index.d.ts.map +0 -1
- package/dist/quality/index.js +0 -3
- package/dist/quality/index.js.map +0 -1
- package/dist/quality/quality-controller.d.ts +0 -2
- package/dist/quality/quality-controller.d.ts.map +0 -1
- package/dist/quality/quality-controller.js +0 -2
- package/dist/quality/quality-controller.js.map +0 -1
- package/dist/quality/sla-monitor.d.ts +0 -2
- package/dist/quality/sla-monitor.d.ts.map +0 -1
- package/dist/quality/sla-monitor.js +0 -2
- package/dist/quality/sla-monitor.js.map +0 -1
- package/dist/scheduling/cron.d.ts +0 -2
- package/dist/scheduling/cron.d.ts.map +0 -1
- package/dist/scheduling/cron.js +0 -2
- package/dist/scheduling/cron.js.map +0 -1
- package/dist/scheduling/index.d.ts +0 -3
- package/dist/scheduling/index.d.ts.map +0 -1
- package/dist/scheduling/index.js +0 -3
- package/dist/scheduling/index.js.map +0 -1
- package/dist/scheduling/scheduler.d.ts +0 -2
- package/dist/scheduling/scheduler.d.ts.map +0 -1
- package/dist/scheduling/scheduler.js +0 -2
- package/dist/scheduling/scheduler.js.map +0 -1
- package/dist/server/app.d.ts +0 -19
- package/dist/server/app.d.ts.map +0 -1
- package/dist/server/app.js +0 -302
- package/dist/server/app.js.map +0 -1
- package/dist/server/deps.d.ts +0 -157
- package/dist/server/deps.d.ts.map +0 -1
- package/dist/server/deps.js +0 -9
- package/dist/server/deps.js.map +0 -1
- package/dist/server/middleware/auth.d.ts +0 -3
- package/dist/server/middleware/auth.d.ts.map +0 -1
- package/dist/server/middleware/auth.js +0 -35
- package/dist/server/middleware/auth.js.map +0 -1
- package/dist/server/middleware/error.d.ts +0 -15
- package/dist/server/middleware/error.d.ts.map +0 -1
- package/dist/server/middleware/error.js +0 -44
- package/dist/server/middleware/error.js.map +0 -1
- package/dist/server/middleware/rate-limit.d.ts +0 -16
- package/dist/server/middleware/rate-limit.d.ts.map +0 -1
- package/dist/server/middleware/rate-limit.js +0 -51
- package/dist/server/middleware/rate-limit.js.map +0 -1
- package/dist/server/routes/config.d.ts +0 -25
- package/dist/server/routes/config.d.ts.map +0 -1
- package/dist/server/routes/config.js +0 -446
- package/dist/server/routes/config.js.map +0 -1
- package/dist/server/routes/files.d.ts +0 -11
- package/dist/server/routes/files.d.ts.map +0 -1
- package/dist/server/routes/files.js +0 -514
- package/dist/server/routes/files.js.map +0 -1
- package/dist/server/routes/filesystem.d.ts +0 -3
- package/dist/server/routes/filesystem.d.ts.map +0 -1
- package/dist/server/routes/filesystem.js +0 -152
- package/dist/server/routes/filesystem.js.map +0 -1
- package/dist/server/routes/providers.d.ts +0 -7
- package/dist/server/routes/providers.d.ts.map +0 -1
- package/dist/server/routes/providers.js +0 -256
- package/dist/server/routes/providers.js.map +0 -1
- package/dist/server/routes/skills.d.ts +0 -11
- package/dist/server/routes/skills.d.ts.map +0 -1
- package/dist/server/routes/skills.js +0 -543
- package/dist/server/routes/skills.js.map +0 -1
- package/dist/server/security.d.ts +0 -34
- package/dist/server/security.d.ts.map +0 -1
- package/dist/server/security.js +0 -118
- package/dist/server/security.js.map +0 -1
- package/dist/server/sse-bridge.d.ts +0 -36
- package/dist/server/sse-bridge.d.ts.map +0 -1
- package/dist/server/sse-bridge.js +0 -110
- package/dist/server/sse-bridge.js.map +0 -1
- package/dist/server/types.d.ts +0 -69
- package/dist/server/types.d.ts.map +0 -1
- package/dist/server/types.js +0 -2
- package/dist/server/types.js.map +0 -1
- package/dist/setup/env-persistence.d.ts +0 -9
- package/dist/setup/env-persistence.d.ts.map +0 -1
- package/dist/setup/env-persistence.js +0 -42
- package/dist/setup/env-persistence.js.map +0 -1
- package/dist/setup/index.d.ts +0 -32
- package/dist/setup/index.d.ts.map +0 -1
- package/dist/setup/index.js +0 -24
- package/dist/setup/index.js.map +0 -1
- package/dist/setup/models.d.ts +0 -20
- package/dist/setup/models.d.ts.map +0 -1
- package/dist/setup/models.js +0 -33
- package/dist/setup/models.js.map +0 -1
- package/dist/setup/providers.d.ts +0 -26
- package/dist/setup/providers.d.ts.map +0 -1
- package/dist/setup/providers.js +0 -31
- package/dist/setup/providers.js.map +0 -1
- package/dist/vault/encrypted-store.d.ts +0 -45
- package/dist/vault/encrypted-store.d.ts.map +0 -1
- package/dist/vault/encrypted-store.js +0 -149
- package/dist/vault/encrypted-store.js.map +0 -1
- package/dist/vault/index.d.ts +0 -4
- package/dist/vault/index.d.ts.map +0 -1
- package/dist/vault/index.js +0 -3
- package/dist/vault/index.js.map +0 -1
- package/dist/vault/resolver.d.ts +0 -8
- package/dist/vault/resolver.d.ts.map +0 -1
- package/dist/vault/resolver.js +0 -8
- package/dist/vault/resolver.js.map +0 -1
package/dist/core/runner.d.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Detached subprocess runner.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* 3. Spawn agent via built-in engine
|
|
9
|
-
* 4. Poll activity, write to RunStore
|
|
10
|
-
* 5. Await handle.done, write result
|
|
11
|
-
* 6. Cleanup & exit
|
|
3
|
+
* Detached subprocess runner — historical entry path.
|
|
4
|
+
*
|
|
5
|
+
* The cloud sandbox executes `node_modules/polpo-ai/dist/core/runner.js`
|
|
6
|
+
* directly, so this path must keep working: the actual runner (which
|
|
7
|
+
* self-executes on import) lives in @polpo-ai/node.
|
|
12
8
|
*/
|
|
13
|
-
|
|
9
|
+
import "@polpo-ai/node/runner";
|
|
14
10
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,uBAAuB,CAAC"}
|
package/dist/core/runner.js
CHANGED
|
@@ -1,299 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Detached subprocess runner.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* 3. Spawn agent via built-in engine
|
|
9
|
-
* 4. Poll activity, write to RunStore
|
|
10
|
-
* 5. Await handle.done, write result
|
|
11
|
-
* 6. Cleanup & exit
|
|
3
|
+
* Detached subprocess runner — historical entry path.
|
|
4
|
+
*
|
|
5
|
+
* The cloud sandbox executes `node_modules/polpo-ai/dist/core/runner.js`
|
|
6
|
+
* directly, so this path must keep working: the actual runner (which
|
|
7
|
+
* self-executes on import) lives in @polpo-ai/node.
|
|
12
8
|
*/
|
|
13
|
-
import
|
|
14
|
-
import { join } from "node:path";
|
|
15
|
-
import { FileRunStore } from "@polpo-ai/file-stores";
|
|
16
|
-
import { spawnLoopEngine } from "../adapters/loop-engine.js";
|
|
17
|
-
import { sanitizeTranscriptEntry } from "../server/security.js";
|
|
18
|
-
import { EncryptedVaultStore } from "../vault/encrypted-store.js";
|
|
19
|
-
import { FileMemoryStore } from "@polpo-ai/file-stores";
|
|
20
|
-
import { NodeFileSystem } from "../adapters/node-filesystem.js";
|
|
21
|
-
import { NodeShell } from "../adapters/node-shell.js";
|
|
22
|
-
const ACTIVITY_POLL_MS = 1500;
|
|
23
|
-
function readConfigFromFile() {
|
|
24
|
-
const idx = process.argv.indexOf("--config");
|
|
25
|
-
if (idx < 0 || !process.argv[idx + 1]) {
|
|
26
|
-
console.error("Usage: runner --config <path> | --run-id <id> --db <url>");
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
const configPath = process.argv[idx + 1];
|
|
30
|
-
const raw = readFileSync(configPath, "utf-8");
|
|
31
|
-
try {
|
|
32
|
-
return JSON.parse(raw);
|
|
33
|
-
}
|
|
34
|
-
catch (err) {
|
|
35
|
-
console.error(`Failed to parse runner config at ${configPath}:`, err instanceof Error ? err.message : err);
|
|
36
|
-
process.exit(1);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* DB mode: read RunnerConfig from database via RunStore.
|
|
41
|
-
* Usage: runner --run-id <id> --db <postgres-url>
|
|
42
|
-
*/
|
|
43
|
-
async function readConfigFromDb() {
|
|
44
|
-
const runIdIdx = process.argv.indexOf("--run-id");
|
|
45
|
-
const dbIdx = process.argv.indexOf("--db");
|
|
46
|
-
if (runIdIdx < 0 || dbIdx < 0 || !process.argv[runIdIdx + 1] || !process.argv[dbIdx + 1]) {
|
|
47
|
-
console.error("Usage: runner --run-id <id> --db <postgres-url>");
|
|
48
|
-
process.exit(1);
|
|
49
|
-
}
|
|
50
|
-
const runId = process.argv[runIdIdx + 1];
|
|
51
|
-
const dbUrl = process.argv[dbIdx + 1];
|
|
52
|
-
const { createPgStores } = await import("@polpo-ai/drizzle");
|
|
53
|
-
const postgres = (await import("postgres")).default;
|
|
54
|
-
const { drizzle } = await import("drizzle-orm/postgres-js");
|
|
55
|
-
const sql = postgres(dbUrl);
|
|
56
|
-
const db = drizzle(sql);
|
|
57
|
-
const store = createPgStores(db).runStore;
|
|
58
|
-
const run = await store.getRun(runId);
|
|
59
|
-
if (!run?.config) {
|
|
60
|
-
console.error(`Run ${runId} not found or has no config in DB`);
|
|
61
|
-
await sql.end();
|
|
62
|
-
process.exit(1);
|
|
63
|
-
}
|
|
64
|
-
await sql.end();
|
|
65
|
-
return run.config;
|
|
66
|
-
}
|
|
67
|
-
function errorResult(err) {
|
|
68
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
69
|
-
return { exitCode: 1, stdout: "", stderr: `Runner error: ${msg}`, duration: 0 };
|
|
70
|
-
}
|
|
71
|
-
/** Persistent per-run activity log (JSONL file in .polpo/logs/) */
|
|
72
|
-
class RunActivityLog {
|
|
73
|
-
logPath;
|
|
74
|
-
lastSnapshot = "";
|
|
75
|
-
constructor(polpoDir, runId, taskId, agentName) {
|
|
76
|
-
const logsDir = join(polpoDir, "logs");
|
|
77
|
-
if (!existsSync(logsDir))
|
|
78
|
-
mkdirSync(logsDir, { recursive: true });
|
|
79
|
-
this.logPath = join(logsDir, `run-${runId}.jsonl`);
|
|
80
|
-
// Write header
|
|
81
|
-
this.write({ _run: true, runId, taskId, agentName, startedAt: new Date().toISOString(), pid: process.pid });
|
|
82
|
-
}
|
|
83
|
-
/** Log activity diff — only writes if something changed */
|
|
84
|
-
logActivity(activity) {
|
|
85
|
-
const snapshot = JSON.stringify(activity);
|
|
86
|
-
if (snapshot === this.lastSnapshot)
|
|
87
|
-
return;
|
|
88
|
-
this.lastSnapshot = snapshot;
|
|
89
|
-
this.write({ ts: new Date().toISOString(), event: "activity", data: activity });
|
|
90
|
-
}
|
|
91
|
-
/** Log a transcript entry from the engine (assistant text, tool_use, tool_result, etc.) */
|
|
92
|
-
logTranscript(entry) {
|
|
93
|
-
this.write({ ts: new Date().toISOString(), ...sanitizeTranscriptEntry(entry) });
|
|
94
|
-
}
|
|
95
|
-
/** Log a lifecycle event */
|
|
96
|
-
logEvent(event, data) {
|
|
97
|
-
this.write({ ts: new Date().toISOString(), event, ...(data ? { data } : {}) });
|
|
98
|
-
}
|
|
99
|
-
write(obj) {
|
|
100
|
-
try {
|
|
101
|
-
appendFileSync(this.logPath, JSON.stringify(obj) + "\n", "utf-8");
|
|
102
|
-
}
|
|
103
|
-
catch { /* best effort */ }
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
async function createStores(config) {
|
|
107
|
-
if (config.storage === "postgres" && config.databaseUrl) {
|
|
108
|
-
const { createPgStores } = await import("@polpo-ai/drizzle");
|
|
109
|
-
const postgres = (await import("postgres")).default;
|
|
110
|
-
const { drizzle } = await import("drizzle-orm/postgres-js");
|
|
111
|
-
const sql = postgres(config.databaseUrl);
|
|
112
|
-
const db = drizzle(sql);
|
|
113
|
-
const stores = createPgStores(db);
|
|
114
|
-
return { runStore: stores.runStore, logStore: stores.logStore, vaultStore: stores.vaultStore, memoryStore: stores.memoryStore };
|
|
115
|
-
}
|
|
116
|
-
if (config.storage === "sqlite") {
|
|
117
|
-
const { createSqliteStores } = await import("@polpo-ai/drizzle");
|
|
118
|
-
const { createRequire } = await import("node:module");
|
|
119
|
-
const req = createRequire(import.meta.url);
|
|
120
|
-
const Database = req("better-sqlite3");
|
|
121
|
-
const dbPath = join(config.polpoDir, "state.db");
|
|
122
|
-
const sqlite = new Database(dbPath);
|
|
123
|
-
sqlite.exec("PRAGMA journal_mode = WAL");
|
|
124
|
-
sqlite.exec("PRAGMA synchronous = NORMAL");
|
|
125
|
-
sqlite.exec("PRAGMA foreign_keys = ON");
|
|
126
|
-
const { ensureSqliteSchema } = await import("./drizzle-sqlite-schema.js");
|
|
127
|
-
ensureSqliteSchema(sqlite);
|
|
128
|
-
const { drizzle } = await import("drizzle-orm/better-sqlite3");
|
|
129
|
-
const db = drizzle(sqlite);
|
|
130
|
-
const stores = createSqliteStores(db);
|
|
131
|
-
return { runStore: stores.runStore, logStore: stores.logStore, vaultStore: stores.vaultStore, memoryStore: stores.memoryStore };
|
|
132
|
-
}
|
|
133
|
-
return { runStore: new FileRunStore(config.polpoDir) };
|
|
134
|
-
}
|
|
135
|
-
async function main() {
|
|
136
|
-
const isDbMode = process.argv.includes("--run-id");
|
|
137
|
-
const config = isDbMode ? await readConfigFromDb() : readConfigFromFile();
|
|
138
|
-
// Apply provider overrides from the config (custom baseUrl endpoints).
|
|
139
|
-
// The runner never reads polpo.json, so without this custom-provider
|
|
140
|
-
// agents resolve against the static provider map and fail.
|
|
141
|
-
if (config.providers && Object.keys(config.providers).length > 0) {
|
|
142
|
-
const { setProviderOverrides } = await import("../llm/pi-client.js");
|
|
143
|
-
setProviderOverrides(config.providers);
|
|
144
|
-
}
|
|
145
|
-
const { runStore, logStore, vaultStore: drizzleVaultStore, memoryStore: drizzleMemoryStore } = await createStores(config);
|
|
146
|
-
const actLog = new RunActivityLog(config.polpoDir, config.runId, config.taskId, config.agent.name);
|
|
147
|
-
// When LogStore is available (postgres/sqlite), persist transcript to DB.
|
|
148
|
-
// This ensures transcript survives sandbox destruction.
|
|
149
|
-
let logSessionId;
|
|
150
|
-
if (logStore) {
|
|
151
|
-
logSessionId = await logStore.startSession();
|
|
152
|
-
}
|
|
153
|
-
const now = new Date().toISOString();
|
|
154
|
-
const initialRecord = {
|
|
155
|
-
id: config.runId,
|
|
156
|
-
taskId: config.taskId,
|
|
157
|
-
pid: process.pid,
|
|
158
|
-
agentName: config.agent.name,
|
|
159
|
-
status: "running",
|
|
160
|
-
startedAt: now,
|
|
161
|
-
updatedAt: now,
|
|
162
|
-
// sessionId starts at the LogStore session we just opened, so the
|
|
163
|
-
// run record is linked to its transcript from the very first poll.
|
|
164
|
-
// Without this, downstream readers (the cloud task-activity endpoint,
|
|
165
|
-
// a future dashboard, anything that joins runs to log sessions) have
|
|
166
|
-
// to guess by time-proximity — fragile on cold sandboxes where the
|
|
167
|
-
// log session is created hundreds of ms before the first stream
|
|
168
|
-
// chunk lands. In file mode this is mostly cosmetic because
|
|
169
|
-
// RunActivityLog writes a parallel JSONL side-channel; in DB mode
|
|
170
|
-
// (cloud) it's the only link that ever gets persisted.
|
|
171
|
-
activity: {
|
|
172
|
-
filesCreated: [], filesEdited: [], toolCalls: 0, totalTokens: 0, lastUpdate: now,
|
|
173
|
-
...(logSessionId ? { sessionId: logSessionId } : {}),
|
|
174
|
-
},
|
|
175
|
-
configPath: isDbMode ? `db://${config.runId}` : join(process.argv[process.argv.indexOf("--config") + 1]),
|
|
176
|
-
};
|
|
177
|
-
// In DB mode, run record already exists (created by spawner) — update it with PID
|
|
178
|
-
await runStore.upsertRun(initialRecord);
|
|
179
|
-
actLog.logEvent("spawning", { task: config.task.title });
|
|
180
|
-
let handle;
|
|
181
|
-
try {
|
|
182
|
-
// Use Drizzle vault store when available (postgres/sqlite), fall back to file-based
|
|
183
|
-
let vaultStore = drizzleVaultStore;
|
|
184
|
-
if (!vaultStore) {
|
|
185
|
-
try {
|
|
186
|
-
vaultStore = new EncryptedVaultStore(config.polpoDir);
|
|
187
|
-
}
|
|
188
|
-
catch { /* vault unavailable */ }
|
|
189
|
-
}
|
|
190
|
-
const memoryStore = drizzleMemoryStore ?? new FileMemoryStore(config.polpoDir);
|
|
191
|
-
const spawnCtx = {
|
|
192
|
-
polpoDir: config.polpoDir,
|
|
193
|
-
outputDir: config.outputDir,
|
|
194
|
-
emailAllowedDomains: config.emailAllowedDomains,
|
|
195
|
-
reasoning: config.reasoning,
|
|
196
|
-
vaultStore,
|
|
197
|
-
memoryStore,
|
|
198
|
-
// Runner is a subprocess — creates its own fs/shell instances
|
|
199
|
-
fs: new NodeFileSystem(),
|
|
200
|
-
shell: new NodeShell(),
|
|
201
|
-
};
|
|
202
|
-
handle = spawnLoopEngine(config.agent, config.task, config.cwd, spawnCtx);
|
|
203
|
-
// Propagate the LogStore sessionId onto the agent's activity blob so
|
|
204
|
-
// the poll loop's updateActivity() persists it on every tick. Without
|
|
205
|
-
// this the run record has activity.sessionId = undefined forever, and
|
|
206
|
-
// downstream readers (cloud task-activity endpoint, dashboards) can't
|
|
207
|
-
// resolve the transcript except via fragile time-proximity fallback.
|
|
208
|
-
if (logSessionId) {
|
|
209
|
-
handle.activity.sessionId = logSessionId;
|
|
210
|
-
}
|
|
211
|
-
// Wire transcript persistence — every agent message gets written to the run log
|
|
212
|
-
handle.onTranscript = (entry) => {
|
|
213
|
-
actLog.logTranscript(entry);
|
|
214
|
-
// Persist transcript to DB when LogStore is available
|
|
215
|
-
if (logStore && logSessionId) {
|
|
216
|
-
const event = entry.type === "assistant" ? "transcript:assistant"
|
|
217
|
-
: entry.type === "tool_result" ? "transcript:tool_result"
|
|
218
|
-
: entry.type === "tool_use" ? "transcript:tool_use"
|
|
219
|
-
: `transcript:${entry.type ?? "unknown"}`;
|
|
220
|
-
logStore.append({ ts: new Date().toISOString(), event, data: sanitizeTranscriptEntry(entry) })
|
|
221
|
-
.catch(() => { }); // best-effort, don't block engine
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
actLog.logEvent("spawned");
|
|
225
|
-
}
|
|
226
|
-
catch (err) {
|
|
227
|
-
const result = errorResult(err);
|
|
228
|
-
actLog.logEvent("error", { message: result.stderr });
|
|
229
|
-
await runStore.completeRun(config.runId, "failed", result);
|
|
230
|
-
await runStore.close();
|
|
231
|
-
process.exit(1);
|
|
232
|
-
}
|
|
233
|
-
// Activity polling + persistent logging
|
|
234
|
-
const poll = setInterval(async () => {
|
|
235
|
-
try {
|
|
236
|
-
await runStore.updateActivity(config.runId, handle.activity);
|
|
237
|
-
actLog.logActivity({ ...handle.activity });
|
|
238
|
-
}
|
|
239
|
-
catch { /* DB temporarily locked */
|
|
240
|
-
}
|
|
241
|
-
}, ACTIVITY_POLL_MS);
|
|
242
|
-
// SIGTERM handler: graceful kill
|
|
243
|
-
let sigterm = false;
|
|
244
|
-
process.on("SIGTERM", () => {
|
|
245
|
-
sigterm = true;
|
|
246
|
-
actLog.logEvent("sigterm");
|
|
247
|
-
handle.kill();
|
|
248
|
-
});
|
|
249
|
-
try {
|
|
250
|
-
const result = await handle.done;
|
|
251
|
-
clearInterval(poll);
|
|
252
|
-
// Final activity + sessionId flush before marking terminal
|
|
253
|
-
try {
|
|
254
|
-
await runStore.updateActivity(config.runId, handle.activity);
|
|
255
|
-
}
|
|
256
|
-
catch { /* best effort */ }
|
|
257
|
-
actLog.logActivity({ ...handle.activity });
|
|
258
|
-
// Store auto-collected outcomes on the run record
|
|
259
|
-
if (handle.outcomes && handle.outcomes.length > 0) {
|
|
260
|
-
try {
|
|
261
|
-
await runStore.updateOutcomes(config.runId, handle.outcomes);
|
|
262
|
-
}
|
|
263
|
-
catch { /* best effort */ }
|
|
264
|
-
actLog.logEvent("outcomes", { count: handle.outcomes.length, types: handle.outcomes.map((o) => o.type) });
|
|
265
|
-
}
|
|
266
|
-
// If we received SIGTERM (timeout/shutdown), force exitCode=1 regardless of
|
|
267
|
-
// what the engine returned — an aborted task is not a successful task.
|
|
268
|
-
if (sigterm) {
|
|
269
|
-
result.exitCode = 1;
|
|
270
|
-
result.stderr = (result.stderr ? result.stderr + "\n" : "") + "Killed by SIGTERM (timeout or shutdown)";
|
|
271
|
-
}
|
|
272
|
-
const status = sigterm ? "killed" : (result.exitCode === 0 ? "completed" : "failed");
|
|
273
|
-
actLog.logEvent("done", { status, exitCode: result.exitCode, duration: result.duration });
|
|
274
|
-
await runStore.completeRun(config.runId, status, result);
|
|
275
|
-
}
|
|
276
|
-
catch (err) {
|
|
277
|
-
clearInterval(poll);
|
|
278
|
-
try {
|
|
279
|
-
await runStore.updateActivity(config.runId, handle.activity);
|
|
280
|
-
}
|
|
281
|
-
catch { /* best effort */ }
|
|
282
|
-
actLog.logEvent("error", { message: err instanceof Error ? err.message : String(err) });
|
|
283
|
-
await runStore.completeRun(config.runId, "failed", errorResult(err));
|
|
284
|
-
}
|
|
285
|
-
// Cleanup config file (only in file mode, not DB mode)
|
|
286
|
-
if (!isDbMode) {
|
|
287
|
-
try {
|
|
288
|
-
unlinkSync(join(process.argv[process.argv.indexOf("--config") + 1]));
|
|
289
|
-
}
|
|
290
|
-
catch { /* already gone */ }
|
|
291
|
-
}
|
|
292
|
-
await runStore.close();
|
|
293
|
-
process.exit(0);
|
|
294
|
-
}
|
|
295
|
-
main().catch((err) => {
|
|
296
|
-
console.error("Runner fatal error:", err);
|
|
297
|
-
process.exit(1);
|
|
298
|
-
});
|
|
9
|
+
import "@polpo-ai/node/runner";
|
|
299
10
|
//# sourceMappingURL=runner.js.map
|
package/dist/core/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,UAAU,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,QAAQ,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACzF,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAEtC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;IAE1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,mCAAmC,CAAC,CAAC;QAC/D,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,mEAAmE;AACnE,MAAM,cAAc;IACV,OAAO,CAAS;IAChB,YAAY,GAAG,EAAE,CAAC;IAE1B,YAAY,QAAgB,EAAE,KAAa,EAAE,MAAc,EAAE,SAAiB;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC;QACnD,eAAe;QACf,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9G,CAAC;IAED,2DAA2D;IAC3D,WAAW,CAAC,QAAiC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,IAAI,CAAC,YAAY;YAAE,OAAO;QAC3C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,2FAA2F;IAC3F,aAAa,CAAC,KAA8B;QAC1C,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,4BAA4B;IAC5B,QAAQ,CAAC,KAAa,EAAE,IAA8B;QACpD,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjF,CAAC;IAEO,KAAK,CAAC,GAA4B;QACxC,IAAI,CAAC;YAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACxG,CAAC;CACF;AASD,KAAK,UAAU,YAAY,CAAC,MAAoB;IAC9C,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;QACpD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IAClI,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACjE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxC,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAC1E,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QAC/D,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;IAClI,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC;IAE1E,uEAAuE;IACvE,qEAAqE;IACrE,2DAA2D;IAC3D,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;QACrE,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1H,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEnG,0EAA0E;IAC1E,wDAAwD;IACxD,IAAI,YAAgC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,aAAa,GAAc;QAC/B,EAAE,EAAE,MAAM,CAAC,KAAK;QAChB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;QAC5B,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,kEAAkE;QAClE,mEAAmE;QACnE,sEAAsE;QACtE,qEAAqE;QACrE,mEAAmE;QACnE,gEAAgE;QAChE,4DAA4D;QAC5D,kEAAkE;QAClE,uDAAuD;QACvD,QAAQ,EAAE;YACR,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG;YAChF,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD;QACD,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;KACzG,CAAC;IACF,kFAAkF;IAClF,MAAM,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAEzD,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,oFAAoF;QACpF,IAAI,UAAU,GAA2B,iBAAiB,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC;gBAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;QAClG,CAAC;QAED,MAAM,WAAW,GAAgB,kBAAkB,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE5F,MAAM,QAAQ,GAAG;YACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU;YACV,WAAW;YACX,8DAA8D;YAC9D,EAAE,EAAE,IAAI,cAAc,EAAE;YACxB,KAAK,EAAE,IAAI,SAAS,EAAE;SACvB,CAAC;QACF,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1E,qEAAqE;QACrE,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,qEAAqE;QACrE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,QAAQ,CAAC,SAAS,GAAG,YAAY,CAAC;QAC3C,CAAC;QACD,gFAAgF;QAChF,MAAM,CAAC,YAAY,GAAG,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5B,sDAAsD;YACtD,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,sBAAsB;oBAC/D,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,wBAAwB;wBACzD,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,qBAAqB;4BACnD,CAAC,CAAC,cAAc,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;qBAC3F,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,kCAAkC;YACxD,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,wCAAwC;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7D,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B;QACrC,CAAC;IACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAErB,iCAAiC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC;QACjC,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,2DAA2D;QAC3D,IAAI,CAAC;YAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACjG,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3C,kDAAkD;QAClD,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACjG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjH,CAAC;QAED,4EAA4E;QAC5E,uEAAuE;QACvE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,yCAAyC,CAAC;QAC1G,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrF,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC;YAAC,MAAM,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACjG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,uDAAuD;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,IAAI,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAC5G,CAAC;IAED,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,uBAAuB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,24 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
export type { ValidatedReviewPayload, ExecutionSummaryResult } from "./assessment/index.js";
|
|
8
|
-
export { PolpoServer, createApp, SSEBridge } from "./server/index.js";
|
|
9
|
-
export type { AppOptions } from "./server/index.js";
|
|
10
|
-
export type { ServerConfig, ApiResponse, ApiError, SSEEvent, CreateTaskRequest, UpdateTaskRequest, CreateMissionRequest, UpdateMissionRequest, AddAgentRequest, } from "./server/index.js";
|
|
11
|
-
export { taskRoutes, missionRoutes, agentRoutes, eventRoutes, chatRoutes, skillRoutes, approvalRoutes, playbookRoutes, stateRoutes, completionRoutes, scheduleRoutes, watcherRoutes, vaultRoutes, fileRoutes, configRoutes, publicConfigRoutes, healthRoutes, } from "./server/index.js";
|
|
12
|
-
export { safeEnv, bashSafeEnv } from "@polpo-ai/tools";
|
|
13
|
-
export { createSystemTools, createSystemTools as createCodingTools, createAllTools, TOOL_CATALOG } from "@polpo-ai/tools";
|
|
14
|
-
export type { ExtendedToolName, CreateAllToolsOptions } from "@polpo-ai/tools";
|
|
15
|
-
export { createBrowserTools, ALL_BROWSER_TOOL_NAMES } from "@polpo-ai/tools";
|
|
16
|
-
export { createHttpTools, ALL_HTTP_TOOL_NAMES } from "@polpo-ai/tools";
|
|
17
|
-
export { createExcelTools, ALL_EXCEL_TOOL_NAMES } from "@polpo-ai/tools";
|
|
18
|
-
export { createPdfTools, ALL_PDF_TOOL_NAMES } from "@polpo-ai/tools";
|
|
19
|
-
export { createDocxTools, ALL_DOCX_TOOL_NAMES } from "@polpo-ai/tools";
|
|
20
|
-
export { createEmailTools, ALL_EMAIL_TOOL_NAMES } from "@polpo-ai/tools";
|
|
21
|
-
export { createVaultTools, ALL_VAULT_TOOL_NAMES } from "@polpo-ai/tools";
|
|
22
|
-
export { createAudioTools, ALL_AUDIO_TOOL_NAMES } from "@polpo-ai/tools";
|
|
23
|
-
export { createImageTools, ALL_IMAGE_TOOL_NAMES } from "@polpo-ai/tools";
|
|
1
|
+
/**
|
|
2
|
+
* polpo-ai — public facade.
|
|
3
|
+
* The Node.js runtime lives in @polpo-ai/node (the composition root);
|
|
4
|
+
* this package re-exports it and preserves the historical entry paths.
|
|
5
|
+
*/
|
|
6
|
+
export * from "@polpo-ai/node";
|
|
24
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,29 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
// legacy manual loop was removed after the loop runtime reached parity).
|
|
8
|
-
export { spawnLoopEngine, spawnLoopEngine as spawnEngine } from "./adapters/loop-engine.js";
|
|
9
|
-
// Assessment
|
|
10
|
-
export { assessTask, runCheck, runMetric } from "./assessment/assessor.js";
|
|
11
|
-
export { runLLMReview, computeWeightedScore, buildRubricSection, DEFAULT_DIMENSIONS, validateReviewPayload, ReviewPayloadSchema, findLogForTask, buildExecutionSummary } from "./assessment/index.js";
|
|
12
|
-
// Server
|
|
13
|
-
export { PolpoServer, createApp, SSEBridge } from "./server/index.js";
|
|
14
|
-
// Route factories (for data-plane wiring)
|
|
15
|
-
export { taskRoutes, missionRoutes, agentRoutes, eventRoutes, chatRoutes, skillRoutes, approvalRoutes, playbookRoutes, stateRoutes, completionRoutes, scheduleRoutes, watcherRoutes, vaultRoutes, fileRoutes, configRoutes, publicConfigRoutes, healthRoutes, } from "./server/index.js";
|
|
16
|
-
// Security
|
|
17
|
-
export { safeEnv, bashSafeEnv } from "@polpo-ai/tools";
|
|
18
|
-
// Extended Tools
|
|
19
|
-
export { createSystemTools, createSystemTools as createCodingTools, createAllTools, TOOL_CATALOG } from "@polpo-ai/tools";
|
|
20
|
-
export { createBrowserTools, ALL_BROWSER_TOOL_NAMES } from "@polpo-ai/tools";
|
|
21
|
-
export { createHttpTools, ALL_HTTP_TOOL_NAMES } from "@polpo-ai/tools";
|
|
22
|
-
export { createExcelTools, ALL_EXCEL_TOOL_NAMES } from "@polpo-ai/tools";
|
|
23
|
-
export { createPdfTools, ALL_PDF_TOOL_NAMES } from "@polpo-ai/tools";
|
|
24
|
-
export { createDocxTools, ALL_DOCX_TOOL_NAMES } from "@polpo-ai/tools";
|
|
25
|
-
export { createEmailTools, ALL_EMAIL_TOOL_NAMES } from "@polpo-ai/tools";
|
|
26
|
-
export { createVaultTools, ALL_VAULT_TOOL_NAMES } from "@polpo-ai/tools";
|
|
27
|
-
export { createAudioTools, ALL_AUDIO_TOOL_NAMES } from "@polpo-ai/tools";
|
|
28
|
-
export { createImageTools, ALL_IMAGE_TOOL_NAMES } from "@polpo-ai/tools";
|
|
1
|
+
/**
|
|
2
|
+
* polpo-ai — public facade.
|
|
3
|
+
* The Node.js runtime lives in @polpo-ai/node (the composition root);
|
|
4
|
+
* this package re-exports it and preserves the historical entry paths.
|
|
5
|
+
*/
|
|
6
|
+
export * from "@polpo-ai/node";
|
|
29
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,gBAAgB,CAAC"}
|
package/dist/server/index.d.ts
CHANGED
|
@@ -1,43 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Polpo HTTP Server.
|
|
5
|
-
*
|
|
6
|
-
* Single-orchestrator architecture. Manages one Polpo instance via HTTP API + SSE streaming.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* const server = new PolpoServer({
|
|
10
|
-
* port: 3890,
|
|
11
|
-
* host: "0.0.0.0",
|
|
12
|
-
* workDir: "./my-project",
|
|
13
|
-
* autoStart: true,
|
|
14
|
-
* });
|
|
15
|
-
* await server.start();
|
|
16
|
-
*/
|
|
17
|
-
export declare class PolpoServer {
|
|
18
|
-
private config;
|
|
19
|
-
private orchestrator;
|
|
20
|
-
private sseBridge;
|
|
21
|
-
private server;
|
|
22
|
-
private shutdownHandlers;
|
|
23
|
-
constructor(config: ServerConfig);
|
|
24
|
-
/** Initialize the orchestrator (called at start or after setup completes). */
|
|
25
|
-
private initOrchestrator;
|
|
26
|
-
/** Called by the initialize endpoint to transition from uninitialized → ready. */
|
|
27
|
-
completeSetup(workDir: string): Promise<void>;
|
|
28
|
-
/** Start the server: init orchestrator if config exists, bind HTTP. */
|
|
29
|
-
start(): Promise<void>;
|
|
30
|
-
/** Graceful shutdown: stop orchestrator, close HTTP server. */
|
|
31
|
-
stop(): Promise<void>;
|
|
32
|
-
/** Get the orchestrator (for programmatic access). */
|
|
33
|
-
getOrchestrator(): Orchestrator;
|
|
34
|
-
}
|
|
35
|
-
export { createApp } from "./app.js";
|
|
36
|
-
export type { AppOptions } from "./app.js";
|
|
37
|
-
export { SSEBridge } from "./sse-bridge.js";
|
|
38
|
-
export type { ServerConfig, ApiResponse, ApiError, SSEEvent, CreateTaskRequest, UpdateTaskRequest, CreateMissionRequest, UpdateMissionRequest, AddAgentRequest, } from "./types.js";
|
|
39
|
-
export { taskRoutes, missionRoutes, chatRoutes, approvalRoutes, playbookRoutes, stateRoutes, completionRoutes, scheduleRoutes, watcherRoutes, vaultRoutes, healthRoutes, agentRoutes, eventRoutes, configRoutes, } from "@polpo-ai/server";
|
|
40
|
-
export { skillRoutes } from "./routes/skills.js";
|
|
41
|
-
export { fileRoutes } from "./routes/files.js";
|
|
42
|
-
export { publicConfigRoutes } from "./routes/config.js";
|
|
1
|
+
/** polpo-ai/server — facade over @polpo-ai/node/server. */
|
|
2
|
+
export * from "@polpo-ai/node/server";
|
|
43
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,cAAc,uBAAuB,CAAC"}
|
package/dist/server/index.js
CHANGED
|
@@ -1,128 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { getPolpoDir } from "../core/constants.js";
|
|
4
|
-
import { serve } from "@hono/node-server";
|
|
5
|
-
import { createApp } from "./app.js";
|
|
6
|
-
import { Orchestrator } from "../core/orchestrator.js";
|
|
7
|
-
import { SSEBridge } from "./sse-bridge.js";
|
|
8
|
-
/**
|
|
9
|
-
* Polpo HTTP Server.
|
|
10
|
-
*
|
|
11
|
-
* Single-orchestrator architecture. Manages one Polpo instance via HTTP API + SSE streaming.
|
|
12
|
-
*
|
|
13
|
-
* Usage:
|
|
14
|
-
* const server = new PolpoServer({
|
|
15
|
-
* port: 3890,
|
|
16
|
-
* host: "0.0.0.0",
|
|
17
|
-
* workDir: "./my-project",
|
|
18
|
-
* autoStart: true,
|
|
19
|
-
* });
|
|
20
|
-
* await server.start();
|
|
21
|
-
*/
|
|
22
|
-
export class PolpoServer {
|
|
23
|
-
config;
|
|
24
|
-
orchestrator;
|
|
25
|
-
sseBridge;
|
|
26
|
-
server = null;
|
|
27
|
-
shutdownHandlers = [];
|
|
28
|
-
constructor(config) {
|
|
29
|
-
this.config = config;
|
|
30
|
-
}
|
|
31
|
-
/** Initialize the orchestrator (called at start or after setup completes). */
|
|
32
|
-
async initOrchestrator(overrideWorkDir) {
|
|
33
|
-
const workDir = resolve(overrideWorkDir ?? this.config.workDir);
|
|
34
|
-
const defaultTeam = {
|
|
35
|
-
name: "default",
|
|
36
|
-
agents: [{ name: "dev-1", role: "developer" }],
|
|
37
|
-
};
|
|
38
|
-
await this.orchestrator.initInteractive(basename(workDir), defaultTeam);
|
|
39
|
-
// (Re-)create SSE bridge
|
|
40
|
-
this.sseBridge?.dispose();
|
|
41
|
-
this.sseBridge = new SSEBridge(this.orchestrator);
|
|
42
|
-
this.sseBridge.start();
|
|
43
|
-
console.log("\n Orchestrator initialized — dashboard is ready.\n");
|
|
44
|
-
}
|
|
45
|
-
/** Called by the initialize endpoint to transition from uninitialized → ready. */
|
|
46
|
-
async completeSetup(workDir) {
|
|
47
|
-
this.orchestrator.resetWorkDir(workDir);
|
|
48
|
-
await this.initOrchestrator(workDir);
|
|
49
|
-
}
|
|
50
|
-
/** Start the server: init orchestrator if config exists, bind HTTP. */
|
|
51
|
-
async start() {
|
|
52
|
-
const workDir = resolve(this.config.workDir);
|
|
53
|
-
this.orchestrator = new Orchestrator(workDir);
|
|
54
|
-
const configPath = join(getPolpoDir(workDir), "polpo.json");
|
|
55
|
-
const hasConfig = existsSync(configPath);
|
|
56
|
-
if (hasConfig) {
|
|
57
|
-
await this.initOrchestrator();
|
|
58
|
-
if (this.config.autoStart !== false) {
|
|
59
|
-
this.orchestrator.run().catch((err) => {
|
|
60
|
-
console.error(`[PolpoServer] Supervisor loop crashed:`, err instanceof Error ? err.message : err);
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// No config yet — placeholder SSE bridge, orchestrator will be initialized after setup
|
|
66
|
-
this.sseBridge = new SSEBridge(this.orchestrator);
|
|
67
|
-
}
|
|
68
|
-
const app = createApp(this.orchestrator, this.sseBridge, {
|
|
69
|
-
apiKeys: this.config.apiKeys,
|
|
70
|
-
corsOrigins: this.config.corsOrigins,
|
|
71
|
-
workDir,
|
|
72
|
-
onInitialize: (workDir) => this.completeSetup(workDir),
|
|
73
|
-
});
|
|
74
|
-
this.server = serve({
|
|
75
|
-
fetch: app.fetch,
|
|
76
|
-
port: this.config.port,
|
|
77
|
-
hostname: this.config.host,
|
|
78
|
-
});
|
|
79
|
-
// Disable Node 18+ requestTimeout (default 5 min). This is a wall-clock
|
|
80
|
-
// timer — NOT idle-based — so it kills long-running streaming responses
|
|
81
|
-
// (e.g. multi-turn tool loops in chat completions) even when data is
|
|
82
|
-
// actively flowing. Setting to 0 disables it entirely.
|
|
83
|
-
// See: https://nodejs.org/api/http.html#serverrequesttimeout
|
|
84
|
-
if ("requestTimeout" in this.server) {
|
|
85
|
-
this.server.requestTimeout = 0;
|
|
86
|
-
}
|
|
87
|
-
const base = `http://${this.config.host}:${this.config.port}`;
|
|
88
|
-
console.log(`\n Listening ${base}`);
|
|
89
|
-
console.log(` WorkDir ${workDir}`);
|
|
90
|
-
console.log(` API ${base}/api/v1/health`);
|
|
91
|
-
console.log();
|
|
92
|
-
// Signal handlers for graceful shutdown
|
|
93
|
-
const onSignal = () => { this.stop(); };
|
|
94
|
-
process.on("SIGTERM", onSignal);
|
|
95
|
-
process.on("SIGINT", onSignal);
|
|
96
|
-
this.shutdownHandlers.push(() => {
|
|
97
|
-
process.off("SIGTERM", onSignal);
|
|
98
|
-
process.off("SIGINT", onSignal);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
/** Graceful shutdown: stop orchestrator, close HTTP server. */
|
|
102
|
-
async stop() {
|
|
103
|
-
console.log("\nShutting down Polpo Server...");
|
|
104
|
-
this.sseBridge?.dispose();
|
|
105
|
-
if (this.orchestrator?.isInitialized) {
|
|
106
|
-
await this.orchestrator.gracefulStop();
|
|
107
|
-
}
|
|
108
|
-
this.server?.close();
|
|
109
|
-
for (const fn of this.shutdownHandlers)
|
|
110
|
-
fn();
|
|
111
|
-
console.log("Polpo Server stopped.");
|
|
112
|
-
}
|
|
113
|
-
/** Get the orchestrator (for programmatic access). */
|
|
114
|
-
getOrchestrator() {
|
|
115
|
-
return this.orchestrator;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// Re-exports
|
|
119
|
-
export { createApp } from "./app.js";
|
|
120
|
-
export { SSEBridge } from "./sse-bridge.js";
|
|
121
|
-
// Route factories — shared routes re-exported from @polpo-ai/server
|
|
122
|
-
export { taskRoutes, missionRoutes, chatRoutes, approvalRoutes, playbookRoutes, stateRoutes, completionRoutes, scheduleRoutes, watcherRoutes, vaultRoutes, healthRoutes, agentRoutes, eventRoutes, configRoutes, } from "@polpo-ai/server";
|
|
123
|
-
// eventRoutes now in @polpo-ai/server (decoupled with EventBridge interface)
|
|
124
|
-
export { skillRoutes } from "./routes/skills.js";
|
|
125
|
-
export { fileRoutes } from "./routes/files.js";
|
|
126
|
-
// configRoutes now in @polpo-ai/server (decoupled with saveConfig dep)
|
|
127
|
-
export { publicConfigRoutes } from "./routes/config.js";
|
|
1
|
+
/** polpo-ai/server — facade over @polpo-ai/node/server. */
|
|
2
|
+
export * from "@polpo-ai/node/server";
|
|
128
3
|
//# sourceMappingURL=index.js.map
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,cAAc,uBAAuB,CAAC"}
|