@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.
Files changed (238) hide show
  1. package/LICENSE +13 -0
  2. package/dist/adapters/engine.d.ts +51 -0
  3. package/dist/adapters/engine.d.ts.map +1 -0
  4. package/dist/adapters/engine.js +316 -0
  5. package/dist/adapters/engine.js.map +1 -0
  6. package/dist/adapters/index.d.ts +2 -0
  7. package/dist/adapters/index.d.ts.map +1 -0
  8. package/dist/adapters/index.js +4 -0
  9. package/dist/adapters/index.js.map +1 -0
  10. package/dist/adapters/loop-engine.d.ts +36 -0
  11. package/dist/adapters/loop-engine.d.ts.map +1 -0
  12. package/dist/adapters/loop-engine.js +534 -0
  13. package/dist/adapters/loop-engine.js.map +1 -0
  14. package/dist/adapters/node-filesystem.d.ts +22 -0
  15. package/dist/adapters/node-filesystem.d.ts.map +1 -0
  16. package/dist/adapters/node-filesystem.js +59 -0
  17. package/dist/adapters/node-filesystem.js.map +1 -0
  18. package/dist/adapters/node-shell.d.ts +5 -0
  19. package/dist/adapters/node-shell.d.ts.map +1 -0
  20. package/dist/adapters/node-shell.js +34 -0
  21. package/dist/adapters/node-shell.js.map +1 -0
  22. package/dist/adapters/node-spawner.d.ts +14 -0
  23. package/dist/adapters/node-spawner.d.ts.map +1 -0
  24. package/dist/adapters/node-spawner.js +103 -0
  25. package/dist/adapters/node-spawner.js.map +1 -0
  26. package/dist/assessment/assessor.d.ts +6 -0
  27. package/dist/assessment/assessor.d.ts.map +1 -0
  28. package/dist/assessment/assessor.js +37 -0
  29. package/dist/assessment/assessor.js.map +1 -0
  30. package/dist/assessment/index.d.ts +6 -0
  31. package/dist/assessment/index.d.ts.map +1 -0
  32. package/dist/assessment/index.js +6 -0
  33. package/dist/assessment/index.js.map +1 -0
  34. package/dist/assessment/llm-review.d.ts +34 -0
  35. package/dist/assessment/llm-review.d.ts.map +1 -0
  36. package/dist/assessment/llm-review.js +669 -0
  37. package/dist/assessment/llm-review.js.map +1 -0
  38. package/dist/assessment/schemas.d.ts +5 -0
  39. package/dist/assessment/schemas.d.ts.map +1 -0
  40. package/dist/assessment/schemas.js +5 -0
  41. package/dist/assessment/schemas.js.map +1 -0
  42. package/dist/assessment/scoring.d.ts +5 -0
  43. package/dist/assessment/scoring.d.ts.map +1 -0
  44. package/dist/assessment/scoring.js +5 -0
  45. package/dist/assessment/scoring.js.map +1 -0
  46. package/dist/assessment/transcript-parser.d.ts +31 -0
  47. package/dist/assessment/transcript-parser.d.ts.map +1 -0
  48. package/dist/assessment/transcript-parser.js +203 -0
  49. package/dist/assessment/transcript-parser.js.map +1 -0
  50. package/dist/auth/index.d.ts +2 -0
  51. package/dist/auth/index.d.ts.map +1 -0
  52. package/dist/auth/index.js +4 -0
  53. package/dist/auth/index.js.map +1 -0
  54. package/dist/core/adapter.d.ts +62 -0
  55. package/dist/core/adapter.d.ts.map +1 -0
  56. package/dist/core/adapter.js +2 -0
  57. package/dist/core/adapter.js.map +1 -0
  58. package/dist/core/assessment-orchestrator.d.ts +18 -0
  59. package/dist/core/assessment-orchestrator.d.ts.map +1 -0
  60. package/dist/core/assessment-orchestrator.js +93 -0
  61. package/dist/core/assessment-orchestrator.js.map +1 -0
  62. package/dist/core/config.d.ts +17 -0
  63. package/dist/core/config.d.ts.map +1 -0
  64. package/dist/core/config.js +272 -0
  65. package/dist/core/config.js.map +1 -0
  66. package/dist/core/constants.d.ts +10 -0
  67. package/dist/core/constants.d.ts.map +1 -0
  68. package/dist/core/constants.js +11 -0
  69. package/dist/core/constants.js.map +1 -0
  70. package/dist/core/deadlock-resolver.d.ts +35 -0
  71. package/dist/core/deadlock-resolver.d.ts.map +1 -0
  72. package/dist/core/deadlock-resolver.js +317 -0
  73. package/dist/core/deadlock-resolver.js.map +1 -0
  74. package/dist/core/drizzle-sqlite-schema.d.ts +8 -0
  75. package/dist/core/drizzle-sqlite-schema.d.ts.map +1 -0
  76. package/dist/core/drizzle-sqlite-schema.js +250 -0
  77. package/dist/core/drizzle-sqlite-schema.js.map +1 -0
  78. package/dist/core/events.d.ts +26 -0
  79. package/dist/core/events.d.ts.map +1 -0
  80. package/dist/core/events.js +39 -0
  81. package/dist/core/events.js.map +1 -0
  82. package/dist/core/index.d.ts +37 -0
  83. package/dist/core/index.d.ts.map +1 -0
  84. package/dist/core/index.js +31 -0
  85. package/dist/core/index.js.map +1 -0
  86. package/dist/core/ink.d.ts +165 -0
  87. package/dist/core/ink.d.ts.map +1 -0
  88. package/dist/core/ink.js +445 -0
  89. package/dist/core/ink.js.map +1 -0
  90. package/dist/core/orchestrator.d.ts +387 -0
  91. package/dist/core/orchestrator.d.ts.map +1 -0
  92. package/dist/core/orchestrator.js +1015 -0
  93. package/dist/core/orchestrator.js.map +1 -0
  94. package/dist/core/question-detector.d.ts +19 -0
  95. package/dist/core/question-detector.d.ts.map +1 -0
  96. package/dist/core/question-detector.js +29 -0
  97. package/dist/core/question-detector.js.map +1 -0
  98. package/dist/core/runner.d.ts +14 -0
  99. package/dist/core/runner.d.ts.map +1 -0
  100. package/dist/core/runner.js +299 -0
  101. package/dist/core/runner.js.map +1 -0
  102. package/dist/core/session-reader.d.ts +46 -0
  103. package/dist/core/session-reader.d.ts.map +1 -0
  104. package/dist/core/session-reader.js +166 -0
  105. package/dist/core/session-reader.js.map +1 -0
  106. package/dist/index.d.ts +24 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +29 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/llm/index.d.ts +8 -0
  111. package/dist/llm/index.d.ts.map +1 -0
  112. package/dist/llm/index.js +21 -0
  113. package/dist/llm/index.js.map +1 -0
  114. package/dist/llm/pi-client.d.ts +8 -0
  115. package/dist/llm/pi-client.d.ts.map +1 -0
  116. package/dist/llm/pi-client.js +8 -0
  117. package/dist/llm/pi-client.js.map +1 -0
  118. package/dist/llm/prompts.d.ts +14 -0
  119. package/dist/llm/prompts.d.ts.map +1 -0
  120. package/dist/llm/prompts.js +1618 -0
  121. package/dist/llm/prompts.js.map +1 -0
  122. package/dist/llm/retry.d.ts +5 -0
  123. package/dist/llm/retry.d.ts.map +1 -0
  124. package/dist/llm/retry.js +5 -0
  125. package/dist/llm/retry.js.map +1 -0
  126. package/dist/llm/skills.d.ts +265 -0
  127. package/dist/llm/skills.d.ts.map +1 -0
  128. package/dist/llm/skills.js +804 -0
  129. package/dist/llm/skills.js.map +1 -0
  130. package/dist/quality/index.d.ts +3 -0
  131. package/dist/quality/index.d.ts.map +1 -0
  132. package/dist/quality/index.js +3 -0
  133. package/dist/quality/index.js.map +1 -0
  134. package/dist/quality/quality-controller.d.ts +2 -0
  135. package/dist/quality/quality-controller.d.ts.map +1 -0
  136. package/dist/quality/quality-controller.js +2 -0
  137. package/dist/quality/quality-controller.js.map +1 -0
  138. package/dist/quality/sla-monitor.d.ts +2 -0
  139. package/dist/quality/sla-monitor.d.ts.map +1 -0
  140. package/dist/quality/sla-monitor.js +2 -0
  141. package/dist/quality/sla-monitor.js.map +1 -0
  142. package/dist/scheduling/cron.d.ts +2 -0
  143. package/dist/scheduling/cron.d.ts.map +1 -0
  144. package/dist/scheduling/cron.js +2 -0
  145. package/dist/scheduling/cron.js.map +1 -0
  146. package/dist/scheduling/index.d.ts +3 -0
  147. package/dist/scheduling/index.d.ts.map +1 -0
  148. package/dist/scheduling/index.js +3 -0
  149. package/dist/scheduling/index.js.map +1 -0
  150. package/dist/scheduling/scheduler.d.ts +2 -0
  151. package/dist/scheduling/scheduler.d.ts.map +1 -0
  152. package/dist/scheduling/scheduler.js +2 -0
  153. package/dist/scheduling/scheduler.js.map +1 -0
  154. package/dist/server/app.d.ts +19 -0
  155. package/dist/server/app.d.ts.map +1 -0
  156. package/dist/server/app.js +302 -0
  157. package/dist/server/app.js.map +1 -0
  158. package/dist/server/deps.d.ts +157 -0
  159. package/dist/server/deps.d.ts.map +1 -0
  160. package/dist/server/deps.js +9 -0
  161. package/dist/server/deps.js.map +1 -0
  162. package/dist/server/index.d.ts +43 -0
  163. package/dist/server/index.d.ts.map +1 -0
  164. package/dist/server/index.js +128 -0
  165. package/dist/server/index.js.map +1 -0
  166. package/dist/server/middleware/auth.d.ts +3 -0
  167. package/dist/server/middleware/auth.d.ts.map +1 -0
  168. package/dist/server/middleware/auth.js +35 -0
  169. package/dist/server/middleware/auth.js.map +1 -0
  170. package/dist/server/middleware/error.d.ts +15 -0
  171. package/dist/server/middleware/error.d.ts.map +1 -0
  172. package/dist/server/middleware/error.js +44 -0
  173. package/dist/server/middleware/error.js.map +1 -0
  174. package/dist/server/middleware/rate-limit.d.ts +16 -0
  175. package/dist/server/middleware/rate-limit.d.ts.map +1 -0
  176. package/dist/server/middleware/rate-limit.js +51 -0
  177. package/dist/server/middleware/rate-limit.js.map +1 -0
  178. package/dist/server/routes/config.d.ts +25 -0
  179. package/dist/server/routes/config.d.ts.map +1 -0
  180. package/dist/server/routes/config.js +446 -0
  181. package/dist/server/routes/config.js.map +1 -0
  182. package/dist/server/routes/files.d.ts +11 -0
  183. package/dist/server/routes/files.d.ts.map +1 -0
  184. package/dist/server/routes/files.js +514 -0
  185. package/dist/server/routes/files.js.map +1 -0
  186. package/dist/server/routes/filesystem.d.ts +3 -0
  187. package/dist/server/routes/filesystem.d.ts.map +1 -0
  188. package/dist/server/routes/filesystem.js +152 -0
  189. package/dist/server/routes/filesystem.js.map +1 -0
  190. package/dist/server/routes/providers.d.ts +7 -0
  191. package/dist/server/routes/providers.d.ts.map +1 -0
  192. package/dist/server/routes/providers.js +256 -0
  193. package/dist/server/routes/providers.js.map +1 -0
  194. package/dist/server/routes/skills.d.ts +11 -0
  195. package/dist/server/routes/skills.d.ts.map +1 -0
  196. package/dist/server/routes/skills.js +543 -0
  197. package/dist/server/routes/skills.js.map +1 -0
  198. package/dist/server/security.d.ts +34 -0
  199. package/dist/server/security.d.ts.map +1 -0
  200. package/dist/server/security.js +118 -0
  201. package/dist/server/security.js.map +1 -0
  202. package/dist/server/sse-bridge.d.ts +36 -0
  203. package/dist/server/sse-bridge.d.ts.map +1 -0
  204. package/dist/server/sse-bridge.js +110 -0
  205. package/dist/server/sse-bridge.js.map +1 -0
  206. package/dist/server/types.d.ts +69 -0
  207. package/dist/server/types.d.ts.map +1 -0
  208. package/dist/server/types.js +2 -0
  209. package/dist/server/types.js.map +1 -0
  210. package/dist/setup/env-persistence.d.ts +9 -0
  211. package/dist/setup/env-persistence.d.ts.map +1 -0
  212. package/dist/setup/env-persistence.js +42 -0
  213. package/dist/setup/env-persistence.js.map +1 -0
  214. package/dist/setup/index.d.ts +32 -0
  215. package/dist/setup/index.d.ts.map +1 -0
  216. package/dist/setup/index.js +24 -0
  217. package/dist/setup/index.js.map +1 -0
  218. package/dist/setup/models.d.ts +20 -0
  219. package/dist/setup/models.d.ts.map +1 -0
  220. package/dist/setup/models.js +33 -0
  221. package/dist/setup/models.js.map +1 -0
  222. package/dist/setup/providers.d.ts +26 -0
  223. package/dist/setup/providers.d.ts.map +1 -0
  224. package/dist/setup/providers.js +31 -0
  225. package/dist/setup/providers.js.map +1 -0
  226. package/dist/vault/encrypted-store.d.ts +45 -0
  227. package/dist/vault/encrypted-store.d.ts.map +1 -0
  228. package/dist/vault/encrypted-store.js +149 -0
  229. package/dist/vault/encrypted-store.js.map +1 -0
  230. package/dist/vault/index.d.ts +4 -0
  231. package/dist/vault/index.d.ts.map +1 -0
  232. package/dist/vault/index.js +3 -0
  233. package/dist/vault/index.js.map +1 -0
  234. package/dist/vault/resolver.d.ts +8 -0
  235. package/dist/vault/resolver.d.ts.map +1 -0
  236. package/dist/vault/resolver.js +8 -0
  237. package/dist/vault/resolver.js.map +1 -0
  238. 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"}