@polpo-ai/node 0.11.1
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/adapters/engine.d.ts +51 -0
- package/dist/adapters/engine.d.ts.map +1 -0
- package/dist/adapters/engine.js +316 -0
- package/dist/adapters/engine.js.map +1 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +4 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/loop-engine.d.ts +36 -0
- package/dist/adapters/loop-engine.d.ts.map +1 -0
- package/dist/adapters/loop-engine.js +534 -0
- package/dist/adapters/loop-engine.js.map +1 -0
- package/dist/adapters/node-filesystem.d.ts +22 -0
- package/dist/adapters/node-filesystem.d.ts.map +1 -0
- package/dist/adapters/node-filesystem.js +59 -0
- package/dist/adapters/node-filesystem.js.map +1 -0
- package/dist/adapters/node-shell.d.ts +5 -0
- package/dist/adapters/node-shell.d.ts.map +1 -0
- package/dist/adapters/node-shell.js +34 -0
- package/dist/adapters/node-shell.js.map +1 -0
- package/dist/adapters/node-spawner.d.ts +14 -0
- package/dist/adapters/node-spawner.d.ts.map +1 -0
- package/dist/adapters/node-spawner.js +103 -0
- package/dist/adapters/node-spawner.js.map +1 -0
- package/dist/assessment/assessor.d.ts +6 -0
- package/dist/assessment/assessor.d.ts.map +1 -0
- package/dist/assessment/assessor.js +37 -0
- package/dist/assessment/assessor.js.map +1 -0
- package/dist/assessment/index.d.ts +6 -0
- package/dist/assessment/index.d.ts.map +1 -0
- package/dist/assessment/index.js +6 -0
- package/dist/assessment/index.js.map +1 -0
- package/dist/assessment/llm-review.d.ts +34 -0
- package/dist/assessment/llm-review.d.ts.map +1 -0
- package/dist/assessment/llm-review.js +669 -0
- package/dist/assessment/llm-review.js.map +1 -0
- package/dist/assessment/schemas.d.ts +5 -0
- package/dist/assessment/schemas.d.ts.map +1 -0
- package/dist/assessment/schemas.js +5 -0
- package/dist/assessment/schemas.js.map +1 -0
- package/dist/assessment/scoring.d.ts +5 -0
- package/dist/assessment/scoring.d.ts.map +1 -0
- package/dist/assessment/scoring.js +5 -0
- package/dist/assessment/scoring.js.map +1 -0
- package/dist/assessment/transcript-parser.d.ts +31 -0
- package/dist/assessment/transcript-parser.d.ts.map +1 -0
- package/dist/assessment/transcript-parser.js +203 -0
- package/dist/assessment/transcript-parser.js.map +1 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/core/adapter.d.ts +62 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +2 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/assessment-orchestrator.d.ts +18 -0
- package/dist/core/assessment-orchestrator.d.ts.map +1 -0
- package/dist/core/assessment-orchestrator.js +93 -0
- package/dist/core/assessment-orchestrator.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +272 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/constants.d.ts +10 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +11 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/deadlock-resolver.d.ts +35 -0
- package/dist/core/deadlock-resolver.d.ts.map +1 -0
- package/dist/core/deadlock-resolver.js +317 -0
- package/dist/core/deadlock-resolver.js.map +1 -0
- package/dist/core/drizzle-sqlite-schema.d.ts +8 -0
- package/dist/core/drizzle-sqlite-schema.d.ts.map +1 -0
- package/dist/core/drizzle-sqlite-schema.js +250 -0
- package/dist/core/drizzle-sqlite-schema.js.map +1 -0
- package/dist/core/events.d.ts +26 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +39 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/index.d.ts +37 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +31 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/ink.d.ts +165 -0
- package/dist/core/ink.d.ts.map +1 -0
- package/dist/core/ink.js +445 -0
- package/dist/core/ink.js.map +1 -0
- package/dist/core/orchestrator.d.ts +387 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +1015 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/question-detector.d.ts +19 -0
- package/dist/core/question-detector.d.ts.map +1 -0
- package/dist/core/question-detector.js +29 -0
- package/dist/core/question-detector.js.map +1 -0
- package/dist/core/runner.d.ts +14 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +299 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/session-reader.d.ts +46 -0
- package/dist/core/session-reader.d.ts.map +1 -0
- package/dist/core/session-reader.js +166 -0
- package/dist/core/session-reader.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/index.d.ts +8 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +21 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/pi-client.d.ts +8 -0
- package/dist/llm/pi-client.d.ts.map +1 -0
- package/dist/llm/pi-client.js +8 -0
- package/dist/llm/pi-client.js.map +1 -0
- package/dist/llm/prompts.d.ts +14 -0
- package/dist/llm/prompts.d.ts.map +1 -0
- package/dist/llm/prompts.js +1618 -0
- package/dist/llm/prompts.js.map +1 -0
- package/dist/llm/retry.d.ts +5 -0
- package/dist/llm/retry.d.ts.map +1 -0
- package/dist/llm/retry.js +5 -0
- package/dist/llm/retry.js.map +1 -0
- package/dist/llm/skills.d.ts +265 -0
- package/dist/llm/skills.d.ts.map +1 -0
- package/dist/llm/skills.js +804 -0
- package/dist/llm/skills.js.map +1 -0
- package/dist/quality/index.d.ts +3 -0
- package/dist/quality/index.d.ts.map +1 -0
- package/dist/quality/index.js +3 -0
- package/dist/quality/index.js.map +1 -0
- package/dist/quality/quality-controller.d.ts +2 -0
- package/dist/quality/quality-controller.d.ts.map +1 -0
- package/dist/quality/quality-controller.js +2 -0
- package/dist/quality/quality-controller.js.map +1 -0
- package/dist/quality/sla-monitor.d.ts +2 -0
- package/dist/quality/sla-monitor.d.ts.map +1 -0
- package/dist/quality/sla-monitor.js +2 -0
- package/dist/quality/sla-monitor.js.map +1 -0
- package/dist/scheduling/cron.d.ts +2 -0
- package/dist/scheduling/cron.d.ts.map +1 -0
- package/dist/scheduling/cron.js +2 -0
- package/dist/scheduling/cron.js.map +1 -0
- package/dist/scheduling/index.d.ts +3 -0
- package/dist/scheduling/index.d.ts.map +1 -0
- package/dist/scheduling/index.js +3 -0
- package/dist/scheduling/index.js.map +1 -0
- package/dist/scheduling/scheduler.d.ts +2 -0
- package/dist/scheduling/scheduler.d.ts.map +1 -0
- package/dist/scheduling/scheduler.js +2 -0
- package/dist/scheduling/scheduler.js.map +1 -0
- package/dist/server/app.d.ts +19 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +302 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/deps.d.ts +157 -0
- package/dist/server/deps.d.ts.map +1 -0
- package/dist/server/deps.js +9 -0
- package/dist/server/deps.js.map +1 -0
- package/dist/server/index.d.ts +43 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +128 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middleware/auth.d.ts +3 -0
- package/dist/server/middleware/auth.d.ts.map +1 -0
- package/dist/server/middleware/auth.js +35 -0
- package/dist/server/middleware/auth.js.map +1 -0
- package/dist/server/middleware/error.d.ts +15 -0
- package/dist/server/middleware/error.d.ts.map +1 -0
- package/dist/server/middleware/error.js +44 -0
- package/dist/server/middleware/error.js.map +1 -0
- package/dist/server/middleware/rate-limit.d.ts +16 -0
- package/dist/server/middleware/rate-limit.d.ts.map +1 -0
- package/dist/server/middleware/rate-limit.js +51 -0
- package/dist/server/middleware/rate-limit.js.map +1 -0
- package/dist/server/routes/config.d.ts +25 -0
- package/dist/server/routes/config.d.ts.map +1 -0
- package/dist/server/routes/config.js +446 -0
- package/dist/server/routes/config.js.map +1 -0
- package/dist/server/routes/files.d.ts +11 -0
- package/dist/server/routes/files.d.ts.map +1 -0
- package/dist/server/routes/files.js +514 -0
- package/dist/server/routes/files.js.map +1 -0
- package/dist/server/routes/filesystem.d.ts +3 -0
- package/dist/server/routes/filesystem.d.ts.map +1 -0
- package/dist/server/routes/filesystem.js +152 -0
- package/dist/server/routes/filesystem.js.map +1 -0
- package/dist/server/routes/providers.d.ts +7 -0
- package/dist/server/routes/providers.d.ts.map +1 -0
- package/dist/server/routes/providers.js +256 -0
- package/dist/server/routes/providers.js.map +1 -0
- package/dist/server/routes/skills.d.ts +11 -0
- package/dist/server/routes/skills.d.ts.map +1 -0
- package/dist/server/routes/skills.js +543 -0
- package/dist/server/routes/skills.js.map +1 -0
- package/dist/server/security.d.ts +34 -0
- package/dist/server/security.d.ts.map +1 -0
- package/dist/server/security.js +118 -0
- package/dist/server/security.js.map +1 -0
- package/dist/server/sse-bridge.d.ts +36 -0
- package/dist/server/sse-bridge.d.ts.map +1 -0
- package/dist/server/sse-bridge.js +110 -0
- package/dist/server/sse-bridge.js.map +1 -0
- package/dist/server/types.d.ts +69 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +2 -0
- package/dist/server/types.js.map +1 -0
- package/dist/setup/env-persistence.d.ts +9 -0
- package/dist/setup/env-persistence.d.ts.map +1 -0
- package/dist/setup/env-persistence.js +42 -0
- package/dist/setup/env-persistence.js.map +1 -0
- package/dist/setup/index.d.ts +32 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +24 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/models.d.ts +20 -0
- package/dist/setup/models.d.ts.map +1 -0
- package/dist/setup/models.js +33 -0
- package/dist/setup/models.js.map +1 -0
- package/dist/setup/providers.d.ts +26 -0
- package/dist/setup/providers.d.ts.map +1 -0
- package/dist/setup/providers.js +31 -0
- package/dist/setup/providers.js.map +1 -0
- package/dist/vault/encrypted-store.d.ts +45 -0
- package/dist/vault/encrypted-store.d.ts.map +1 -0
- package/dist/vault/encrypted-store.js +149 -0
- package/dist/vault/encrypted-store.js.map +1 -0
- package/dist/vault/index.d.ts +4 -0
- package/dist/vault/index.d.ts.map +1 -0
- package/dist/vault/index.js +3 -0
- package/dist/vault/index.js.map +1 -0
- package/dist/vault/resolver.d.ts +8 -0
- package/dist/vault/resolver.d.ts.map +1 -0
- package/dist/vault/resolver.js +8 -0
- package/dist/vault/resolver.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { getPolpoDir } from "./constants.js";
|
|
4
|
+
const DEFAULT_SETTINGS = {
|
|
5
|
+
maxRetries: 3,
|
|
6
|
+
workDir: ".",
|
|
7
|
+
logLevel: "normal",
|
|
8
|
+
};
|
|
9
|
+
// --- .polpo/polpo.json (persistent project config) ---
|
|
10
|
+
export function loadPolpoConfig(polpoDir) {
|
|
11
|
+
const filePath = join(polpoDir, "polpo.json");
|
|
12
|
+
if (!existsSync(filePath))
|
|
13
|
+
return undefined;
|
|
14
|
+
try {
|
|
15
|
+
const raw = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
16
|
+
return {
|
|
17
|
+
project: raw.project ?? "",
|
|
18
|
+
teams: [],
|
|
19
|
+
settings: raw.settings ?? { maxRetries: 3, workDir: ".", logLevel: "normal" },
|
|
20
|
+
providers: raw.providers,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function savePolpoConfig(polpoDir, config) {
|
|
28
|
+
if (!existsSync(polpoDir))
|
|
29
|
+
mkdirSync(polpoDir, { recursive: true });
|
|
30
|
+
writeFileSync(join(polpoDir, "polpo.json"), JSON.stringify(config, null, 2), "utf-8");
|
|
31
|
+
}
|
|
32
|
+
// --- Validation helpers ---
|
|
33
|
+
export function validateAgents(agents) {
|
|
34
|
+
for (const agent of agents) {
|
|
35
|
+
if (!agent.name || typeof agent.name !== "string") {
|
|
36
|
+
throw new Error("Each agent must have a name");
|
|
37
|
+
}
|
|
38
|
+
// Validate allowedPaths
|
|
39
|
+
if (agent.allowedPaths !== undefined) {
|
|
40
|
+
if (!Array.isArray(agent.allowedPaths)) {
|
|
41
|
+
throw new Error(`Agent "${agent.name}": allowedPaths must be an array of strings`);
|
|
42
|
+
}
|
|
43
|
+
for (const p of agent.allowedPaths) {
|
|
44
|
+
if (typeof p !== "string" || p.trim() === "") {
|
|
45
|
+
throw new Error(`Agent "${agent.name}": each allowedPaths entry must be a non-empty string`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Validate browser profile name
|
|
50
|
+
if (agent.browserProfile !== undefined) {
|
|
51
|
+
if (typeof agent.browserProfile !== "string" || !/^[a-zA-Z0-9_-]+$/.test(agent.browserProfile)) {
|
|
52
|
+
throw new Error(`Agent "${agent.name}": browserProfile must contain only letters, numbers, hyphens, underscores`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Vault credentials are now stored in .polpo/vault.enc (encrypted) — no longer inline.
|
|
56
|
+
// Silently strip any leftover vault field from old configs.
|
|
57
|
+
if (agent.vault)
|
|
58
|
+
delete agent.vault;
|
|
59
|
+
// Validate identity
|
|
60
|
+
if (agent.identity) {
|
|
61
|
+
if (agent.identity.responsibilities && !Array.isArray(agent.identity.responsibilities)) {
|
|
62
|
+
throw new Error(`Agent "${agent.name}": identity.responsibilities must be an array`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Validate reportsTo — self-reference
|
|
66
|
+
if (agent.reportsTo === agent.name) {
|
|
67
|
+
throw new Error(`Agent "${agent.name}": cannot report to itself`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Second pass: validate reportsTo references existing agents
|
|
71
|
+
const agentNames = new Set(agents.map((a) => a.name));
|
|
72
|
+
for (const agent of agents) {
|
|
73
|
+
if (agent.reportsTo && !agentNames.has(agent.reportsTo)) {
|
|
74
|
+
throw new Error(`Agent "${agent.name}": reportsTo "${agent.reportsTo}" does not match any agent`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Detect circular reportsTo chains
|
|
78
|
+
for (const agent of agents) {
|
|
79
|
+
if (!agent.reportsTo)
|
|
80
|
+
continue;
|
|
81
|
+
const visited = new Set();
|
|
82
|
+
let current = agent.name;
|
|
83
|
+
while (current) {
|
|
84
|
+
if (visited.has(current)) {
|
|
85
|
+
throw new Error(`Agent "${agent.name}": circular reportsTo chain detected (${[...visited, current].join(" → ")})`);
|
|
86
|
+
}
|
|
87
|
+
visited.add(current);
|
|
88
|
+
const next = agents.find((a) => a.name === current);
|
|
89
|
+
current = next?.reportsTo;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export function parseProviders(raw) {
|
|
94
|
+
const providers = {};
|
|
95
|
+
for (const [name, cfg] of Object.entries(raw)) {
|
|
96
|
+
if (!cfg || typeof cfg !== "object")
|
|
97
|
+
continue;
|
|
98
|
+
const c = cfg;
|
|
99
|
+
const pc = {};
|
|
100
|
+
if (typeof c.baseUrl === "string")
|
|
101
|
+
pc.baseUrl = c.baseUrl;
|
|
102
|
+
if (typeof c.api === "string")
|
|
103
|
+
pc.api = c.api;
|
|
104
|
+
if (Array.isArray(c.models))
|
|
105
|
+
pc.models = c.models;
|
|
106
|
+
// Only include if there's actual custom config (not just an empty object)
|
|
107
|
+
if (pc.baseUrl || pc.api || pc.models) {
|
|
108
|
+
providers[name] = pc;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return providers;
|
|
112
|
+
}
|
|
113
|
+
/** Parse orchestratorModel which can be string or ModelConfig */
|
|
114
|
+
function parseOrchestratorModel(raw) {
|
|
115
|
+
if (raw === undefined || raw === null)
|
|
116
|
+
return undefined;
|
|
117
|
+
if (typeof raw === "string")
|
|
118
|
+
return raw;
|
|
119
|
+
if (typeof raw === "object") {
|
|
120
|
+
const obj = raw;
|
|
121
|
+
const result = {};
|
|
122
|
+
if (typeof obj.primary === "string")
|
|
123
|
+
result.primary = obj.primary;
|
|
124
|
+
if (Array.isArray(obj.fallbacks)) {
|
|
125
|
+
result.fallbacks = obj.fallbacks.filter((f) => typeof f === "string");
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
function parseSettings(raw) {
|
|
132
|
+
const settings = {
|
|
133
|
+
maxRetries: raw?.maxRetries ?? DEFAULT_SETTINGS.maxRetries,
|
|
134
|
+
workDir: raw?.workDir ?? DEFAULT_SETTINGS.workDir,
|
|
135
|
+
logLevel: raw?.logLevel ?? DEFAULT_SETTINGS.logLevel,
|
|
136
|
+
};
|
|
137
|
+
if (raw?.taskTimeout != null)
|
|
138
|
+
settings.taskTimeout = raw.taskTimeout;
|
|
139
|
+
if (raw?.staleThreshold != null)
|
|
140
|
+
settings.staleThreshold = raw.staleThreshold;
|
|
141
|
+
if (raw?.orchestratorModel)
|
|
142
|
+
settings.orchestratorModel = parseOrchestratorModel(raw.orchestratorModel);
|
|
143
|
+
if (raw?.imageModel && typeof raw.imageModel === "string")
|
|
144
|
+
settings.imageModel = raw.imageModel;
|
|
145
|
+
if (raw?.modelAllowlist && typeof raw.modelAllowlist === "object")
|
|
146
|
+
settings.modelAllowlist = raw.modelAllowlist;
|
|
147
|
+
if (raw?.enableVolatileTeams != null)
|
|
148
|
+
settings.enableVolatileTeams = raw.enableVolatileTeams;
|
|
149
|
+
if (raw?.volatileCleanup)
|
|
150
|
+
settings.volatileCleanup = raw.volatileCleanup;
|
|
151
|
+
if (raw?.maxFixAttempts != null)
|
|
152
|
+
settings.maxFixAttempts = raw.maxFixAttempts;
|
|
153
|
+
if (raw?.maxQuestionRounds != null)
|
|
154
|
+
settings.maxQuestionRounds = raw.maxQuestionRounds;
|
|
155
|
+
if (raw?.maxResolutionAttempts != null)
|
|
156
|
+
settings.maxResolutionAttempts = raw.maxResolutionAttempts;
|
|
157
|
+
if (raw?.autoCorrectExpectations != null)
|
|
158
|
+
settings.autoCorrectExpectations = raw.autoCorrectExpectations;
|
|
159
|
+
if (raw?.defaultRetryPolicy)
|
|
160
|
+
settings.defaultRetryPolicy = raw.defaultRetryPolicy;
|
|
161
|
+
if (raw?.maxAssessmentRetries != null)
|
|
162
|
+
settings.maxAssessmentRetries = raw.maxAssessmentRetries;
|
|
163
|
+
if (raw?.maxConcurrency != null)
|
|
164
|
+
settings.maxConcurrency = raw.maxConcurrency;
|
|
165
|
+
// Extended settings: notifications, approval gates, escalation, SLA, scheduling, quality
|
|
166
|
+
if (raw?.approvalGates)
|
|
167
|
+
settings.approvalGates = raw.approvalGates;
|
|
168
|
+
if (raw?.notifications)
|
|
169
|
+
settings.notifications = raw.notifications;
|
|
170
|
+
if (raw?.escalationPolicy)
|
|
171
|
+
settings.escalationPolicy = raw.escalationPolicy;
|
|
172
|
+
if (raw?.sla)
|
|
173
|
+
settings.sla = raw.sla;
|
|
174
|
+
if (raw?.enableScheduler != null)
|
|
175
|
+
settings.enableScheduler = raw.enableScheduler;
|
|
176
|
+
if (raw?.defaultQualityThreshold != null)
|
|
177
|
+
settings.defaultQualityThreshold = raw.defaultQualityThreshold;
|
|
178
|
+
if (raw?.reasoning)
|
|
179
|
+
settings.reasoning = raw.reasoning;
|
|
180
|
+
if (raw?.orchestratorSkills)
|
|
181
|
+
settings.orchestratorSkills = raw.orchestratorSkills;
|
|
182
|
+
if (raw?.emailAllowedDomains)
|
|
183
|
+
settings.emailAllowedDomains = raw.emailAllowedDomains;
|
|
184
|
+
// Storage backend
|
|
185
|
+
if (raw?.storage && ["file", "sqlite", "postgres"].includes(raw.storage)) {
|
|
186
|
+
settings.storage = raw.storage;
|
|
187
|
+
}
|
|
188
|
+
if (raw?.databaseUrl && typeof raw.databaseUrl === "string") {
|
|
189
|
+
settings.databaseUrl = raw.databaseUrl;
|
|
190
|
+
}
|
|
191
|
+
// Allow DATABASE_URL env var as fallback
|
|
192
|
+
if (!settings.databaseUrl && process.env.DATABASE_URL) {
|
|
193
|
+
settings.databaseUrl = process.env.DATABASE_URL;
|
|
194
|
+
}
|
|
195
|
+
// Validate: postgres requires databaseUrl
|
|
196
|
+
if (settings.storage === "postgres" && !settings.databaseUrl) {
|
|
197
|
+
throw new Error('storage: "postgres" requires a databaseUrl in settings or DATABASE_URL env var');
|
|
198
|
+
}
|
|
199
|
+
if (!["quiet", "normal", "verbose"].includes(settings.logLevel)) {
|
|
200
|
+
throw new Error(`Invalid logLevel "${settings.logLevel}": must be quiet, normal, or verbose`);
|
|
201
|
+
}
|
|
202
|
+
return settings;
|
|
203
|
+
}
|
|
204
|
+
/** Load .polpo/.env into process.env (does NOT overwrite existing vars). */
|
|
205
|
+
export function loadEnvFile(polpoDir) {
|
|
206
|
+
const envPath = join(polpoDir, ".env");
|
|
207
|
+
if (!existsSync(envPath))
|
|
208
|
+
return;
|
|
209
|
+
try {
|
|
210
|
+
for (const line of readFileSync(envPath, "utf-8").split("\n")) {
|
|
211
|
+
const trimmed = line.trim();
|
|
212
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
213
|
+
continue;
|
|
214
|
+
const eq = trimmed.indexOf("=");
|
|
215
|
+
if (eq === -1)
|
|
216
|
+
continue;
|
|
217
|
+
const key = trimmed.slice(0, eq).trim();
|
|
218
|
+
const val = trimmed.slice(eq + 1).trim().replace(/^["']|["']$/g, "");
|
|
219
|
+
if (!process.env[key])
|
|
220
|
+
process.env[key] = val;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch { /* ignore */ }
|
|
224
|
+
}
|
|
225
|
+
// --- parseConfig: .polpo/polpo.json only ---
|
|
226
|
+
/**
|
|
227
|
+
* Load config from workDir. Reads `.polpo/polpo.json` for project config.
|
|
228
|
+
* Tasks are managed via plans and the task store — not in the config file.
|
|
229
|
+
*/
|
|
230
|
+
export async function parseConfig(workDir) {
|
|
231
|
+
const polpoDir = getPolpoDir(workDir);
|
|
232
|
+
// Load .polpo/.env relative to workDir (handles --dir correctly).
|
|
233
|
+
// The CLI top-level only loads from cwd; this ensures the right .env is used
|
|
234
|
+
// when workDir differs from cwd.
|
|
235
|
+
loadEnvFile(polpoDir);
|
|
236
|
+
const polpoConfig = loadPolpoConfig(polpoDir);
|
|
237
|
+
if (!polpoConfig) {
|
|
238
|
+
throw new Error(`No configuration found: missing .polpo/polpo.json in ${workDir}. Run 'polpo create' or 'polpo link --project-id <id>' first.`);
|
|
239
|
+
}
|
|
240
|
+
// Teams/agents are no longer read from polpo.json.
|
|
241
|
+
// They come exclusively from FileAgentStore/FileTeamStore (agents.json / teams.json).
|
|
242
|
+
// polpo.json only contains: project, settings, providers.
|
|
243
|
+
const settings = parseSettings(polpoConfig.settings ?? {});
|
|
244
|
+
const providers = polpoConfig.providers
|
|
245
|
+
? parseProviders(polpoConfig.providers)
|
|
246
|
+
: undefined;
|
|
247
|
+
return {
|
|
248
|
+
version: "1",
|
|
249
|
+
project: polpoConfig.project,
|
|
250
|
+
teams: [], // populated by syncConfigCache() from TeamStore/AgentStore
|
|
251
|
+
tasks: [],
|
|
252
|
+
settings,
|
|
253
|
+
providers: providers && Object.keys(providers).length > 0 ? providers : undefined,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
// --- Default config generator ---
|
|
257
|
+
export function generatePolpoConfigDefault(projectName, options) {
|
|
258
|
+
const settings = { ...DEFAULT_SETTINGS };
|
|
259
|
+
if (options?.model) {
|
|
260
|
+
settings.orchestratorModel = options.model;
|
|
261
|
+
}
|
|
262
|
+
const config = {
|
|
263
|
+
project: projectName,
|
|
264
|
+
teams: [],
|
|
265
|
+
settings: settings,
|
|
266
|
+
};
|
|
267
|
+
if (options?.providers && Object.keys(options.providers).length > 0) {
|
|
268
|
+
config.providers = options.providers;
|
|
269
|
+
}
|
|
270
|
+
return config;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants — single source of truth for default values
|
|
3
|
+
* used across CLI and server.
|
|
4
|
+
*/
|
|
5
|
+
/** Default port for the Polpo HTTP server. */
|
|
6
|
+
export declare const DEFAULT_SERVER_PORT = 3890;
|
|
7
|
+
/** Default host for the Polpo HTTP server. */
|
|
8
|
+
export declare const DEFAULT_SERVER_HOST = "127.0.0.1";
|
|
9
|
+
export { POLPO_DIR_NAME, getPolpoDir, getGlobalPolpoDir } from "@polpo-ai/file-stores";
|
|
10
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAG/C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants — single source of truth for default values
|
|
3
|
+
* used across CLI and server.
|
|
4
|
+
*/
|
|
5
|
+
/** Default port for the Polpo HTTP server. */
|
|
6
|
+
export const DEFAULT_SERVER_PORT = 3890;
|
|
7
|
+
/** Default host for the Polpo HTTP server. */
|
|
8
|
+
export const DEFAULT_SERVER_HOST = "127.0.0.1";
|
|
9
|
+
// .polpo directory layout helpers — canonical home is @polpo-ai/file-stores
|
|
10
|
+
export { POLPO_DIR_NAME, getPolpoDir, getGlobalPolpoDir } from "@polpo-ai/file-stores";
|
|
11
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/core/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAExC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C,4EAA4E;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deadlock resolution: LLM-powered dependency unblocking.
|
|
3
|
+
*
|
|
4
|
+
* When a plan task fails and blocks downstream dependents, the resolver
|
|
5
|
+
* analyzes the failure and decides whether blocked tasks can proceed
|
|
6
|
+
* (absorb), whether the failed dep should be retried, or whether the
|
|
7
|
+
* chain should be failed.
|
|
8
|
+
*/
|
|
9
|
+
import type { Task } from "@polpo-ai/core/types";
|
|
10
|
+
import type { Orchestrator } from "./orchestrator.js";
|
|
11
|
+
export interface BlockageInfo {
|
|
12
|
+
task: Task;
|
|
13
|
+
failedDeps: Task[];
|
|
14
|
+
missingDeps: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface BlockageAnalysis {
|
|
17
|
+
resolvable: BlockageInfo[];
|
|
18
|
+
unresolvable: BlockageInfo[];
|
|
19
|
+
}
|
|
20
|
+
/** Whether an async resolution is currently in progress. */
|
|
21
|
+
export declare function isResolving(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Classify each pending task's blockage: resolvable (failed deps) vs
|
|
24
|
+
* unresolvable (missing deps). Follows cascade chains to root failures.
|
|
25
|
+
*/
|
|
26
|
+
export declare function analyzeBlockedTasks(pending: Task[], allTasks: Task[]): BlockageAnalysis;
|
|
27
|
+
/**
|
|
28
|
+
* Async deadlock resolution. For each resolvable blockage, calls LLM
|
|
29
|
+
* to decide action (absorb/retry/fail) and applies the decision.
|
|
30
|
+
*
|
|
31
|
+
* Pattern: fire-and-forget from tick(), results applied via registry.updateTask()
|
|
32
|
+
* and picked up on next tick.
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveDeadlock(analysis: BlockageAnalysis, orchestrator: Orchestrator): Promise<void>;
|
|
35
|
+
//# sourceMappingURL=deadlock-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deadlock-resolver.d.ts","sourceRoot":"","sources":["../../src/core/deadlock-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAetD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,YAAY,EAAE,YAAY,EAAE,CAAC;CAC9B;AAYD,4DAA4D;AAC5D,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAwCvF;AAwBD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,gBAAgB,EAC1B,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,IAAI,CAAC,CA2Df"}
|