@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
package/LICENSE
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Copyright 2026-present Lumea Labs
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task-spawn shared helpers — prompt building, spawn preparation, tool
|
|
3
|
+
* building, and outcome collection for the task runtime.
|
|
4
|
+
*
|
|
5
|
+
* The agentic loop itself lives in loop-engine.ts (spawnLoopEngine, driven
|
|
6
|
+
* by @polpo-ai/core's LoopRunner/PipelineExecutor). The legacy manual
|
|
7
|
+
* streamText loop that used to live here was removed once spawnLoopEngine
|
|
8
|
+
* reached behavioral parity (see engine-behavior.test.ts).
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentConfig, AgentActivity, Task, TaskOutcome } from "@polpo-ai/core/types";
|
|
11
|
+
import type { SpawnContext } from "../core/adapter.js";
|
|
12
|
+
/** Create a fresh AgentActivity object */
|
|
13
|
+
export declare function createActivity(): AgentActivity;
|
|
14
|
+
import { resolveModel } from "../llm/pi-client.js";
|
|
15
|
+
import type { FileSystem } from "@polpo-ai/core/filesystem";
|
|
16
|
+
import type { Shell } from "@polpo-ai/core/shell";
|
|
17
|
+
import type { PolpoTool } from "@polpo-ai/core";
|
|
18
|
+
/**
|
|
19
|
+
* Build the system prompt for the agent, including loaded skills.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildSystemPrompt(agent: AgentConfig, cwd: string, polpoDir?: string, outputDir?: string, allowedPaths?: string[]): string;
|
|
22
|
+
/**
|
|
23
|
+
* Build the user prompt from task data.
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildPrompt(task: Task): string;
|
|
26
|
+
export interface SpawnPrep {
|
|
27
|
+
model: ReturnType<typeof resolveModel>;
|
|
28
|
+
polpoDir: string;
|
|
29
|
+
fs: FileSystem;
|
|
30
|
+
shell: Shell;
|
|
31
|
+
outputDir?: string;
|
|
32
|
+
effectiveAllowedPaths?: string[];
|
|
33
|
+
systemPrompt: string;
|
|
34
|
+
providerOptions?: Record<string, Record<string, any>>;
|
|
35
|
+
hasExtendedTools: boolean;
|
|
36
|
+
browserProfileDir: string;
|
|
37
|
+
maxTurns: number;
|
|
38
|
+
}
|
|
39
|
+
export declare function prepareSpawn(agentConfig: AgentConfig, cwd: string, ctx?: SpawnContext): SpawnPrep;
|
|
40
|
+
/**
|
|
41
|
+
* Resolve the agent vault and build the full PolpoTool set (core tools plus
|
|
42
|
+
* extended categories when requested via allowedTools). Async because vault
|
|
43
|
+
* resolution hits the store.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildAgentTools(agentConfig: AgentConfig, cwd: string, prep: SpawnPrep, ctx?: SpawnContext): Promise<PolpoTool[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Create a TaskOutcome from a `register_outcome` tool call.
|
|
48
|
+
* Returns undefined for any other tool — outcome registration is explicit only.
|
|
49
|
+
*/
|
|
50
|
+
export declare function collectOutcome(toolName: string, details: Record<string, unknown>): TaskOutcome | undefined;
|
|
51
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/adapters/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAC;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIvD,0CAA0C;AAC1C,wBAAgB,cAAc,IAAI,aAAa,CAQ9C;AAED,OAAO,EAAE,YAAY,EAAwD,MAAM,qBAAqB,CAAC;AAIzG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA+LhD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAiCzI;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAmD9C;AAUD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACtD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,SAAS,CAoFjG;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,WAAW,EACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,SAAS,EACf,GAAG,CAAC,EAAE,YAAY,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CA+BtB;AA6BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,SAAS,CAsB1G"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task-spawn shared helpers — prompt building, spawn preparation, tool
|
|
3
|
+
* building, and outcome collection for the task runtime.
|
|
4
|
+
*
|
|
5
|
+
* The agentic loop itself lives in loop-engine.ts (spawnLoopEngine, driven
|
|
6
|
+
* by @polpo-ai/core's LoopRunner/PipelineExecutor). The legacy manual
|
|
7
|
+
* streamText loop that used to live here was removed once spawnLoopEngine
|
|
8
|
+
* reached behavioral parity (see engine-behavior.test.ts).
|
|
9
|
+
*/
|
|
10
|
+
import { resolveAgentVault } from "../vault/index.js";
|
|
11
|
+
import { buildAgentSystemPrompt } from "@polpo-ai/core";
|
|
12
|
+
/** Create a fresh AgentActivity object */
|
|
13
|
+
export function createActivity() {
|
|
14
|
+
return {
|
|
15
|
+
filesCreated: [],
|
|
16
|
+
filesEdited: [],
|
|
17
|
+
toolCalls: 0,
|
|
18
|
+
totalTokens: 0,
|
|
19
|
+
lastUpdate: new Date().toISOString(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
import { join, resolve, sep } from "node:path";
|
|
23
|
+
import { resolveModel, enforceModelAllowlist, mapReasoningToProviderOptions } from "../llm/pi-client.js";
|
|
24
|
+
import { createSystemTools, createAllTools } from "@polpo-ai/tools";
|
|
25
|
+
import { NodeFileSystem } from "./node-filesystem.js";
|
|
26
|
+
import { NodeShell } from "./node-shell.js";
|
|
27
|
+
import { loadAgentSkills } from "../llm/skills.js";
|
|
28
|
+
import { nanoid } from "nanoid";
|
|
29
|
+
function resolvePromptAllowedPaths(cwd, allowedPaths) {
|
|
30
|
+
const configured = Array.isArray(allowedPaths)
|
|
31
|
+
? allowedPaths.filter((path) => typeof path === "string" && path.trim().length > 0)
|
|
32
|
+
: [];
|
|
33
|
+
const paths = configured.length > 0 ? configured : [cwd];
|
|
34
|
+
return [...new Set(paths.map((path) => resolve(cwd, path)))];
|
|
35
|
+
}
|
|
36
|
+
function buildFilesystemWorkspaceSection(cwd, allowedPaths) {
|
|
37
|
+
const resolvedCwd = resolve(cwd);
|
|
38
|
+
const resolvedAllowedPaths = resolvePromptAllowedPaths(resolvedCwd, allowedPaths);
|
|
39
|
+
return [
|
|
40
|
+
"## Filesystem Workspace",
|
|
41
|
+
"",
|
|
42
|
+
`Your working directory is \`${resolvedCwd}\`.`,
|
|
43
|
+
"",
|
|
44
|
+
"File tools (`read`, `write`, `edit`, `ls`, `glob`, `grep`) can only access these directories:",
|
|
45
|
+
...resolvedAllowedPaths.map((path) => `- \`${path}\``),
|
|
46
|
+
"",
|
|
47
|
+
"Use relative paths or paths inside the directories above. Do not create project files under `/tmp`, `/home`, or other locations unless that exact directory is listed above.",
|
|
48
|
+
"Bash commands start in the working directory, but files created outside the allowed directories may not be readable or editable by later file tools.",
|
|
49
|
+
"If a requested path is outside the allowed directories, adapt it to the working directory or explain that `allowedPaths` must be changed first.",
|
|
50
|
+
].join("\n");
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Build an "## Available Tools" section for the agent's system prompt.
|
|
54
|
+
*
|
|
55
|
+
* Lists every tool the agent has access to, grouped by category, so the agent
|
|
56
|
+
* knows its full capabilities upfront. Without this, the agent only discovers
|
|
57
|
+
* tools through the LLM tool-calling protocol and may resort to shell commands,
|
|
58
|
+
* npm installs, or manual workarounds for capabilities it already has.
|
|
59
|
+
*
|
|
60
|
+
* Mirrors the orchestrator-side `describeAgentCapabilities()` in prompts.ts
|
|
61
|
+
* but is more detailed — written for the agent itself, not the orchestrator.
|
|
62
|
+
*/
|
|
63
|
+
function describeToolsForAgent(agent) {
|
|
64
|
+
const lines = ["## Available Tools", ""];
|
|
65
|
+
// --- Core tools (always present) ---
|
|
66
|
+
lines.push("**Core (always available):**", "- `read` — read file contents (supports offset/limit for large files)", "- `write` — create or overwrite files", "- `edit` — surgical string replacement in files (preferred over rewriting entire files)", "- `bash` — execute shell commands (30s default timeout; pass explicit timeout for long commands)", "- `glob` — find files by pattern (e.g. `**/*.ts`)", "- `grep` — search file contents by regex", "- `ls` — list directory contents", "- `http_fetch` — make HTTP requests (GET, POST, PUT, DELETE)", "- `http_download` — download files from URLs", "- `register_outcome` — declare task deliverables (files, URLs, text, data)", "- `vault_get` — retrieve stored credentials/secrets", "- `vault_list` — list available vault entries");
|
|
67
|
+
// --- Extended tools (only if configured in allowedTools) ---
|
|
68
|
+
const allowed = agent.allowedTools ?? [];
|
|
69
|
+
const hasPattern = (prefix) => allowed.some(t => t.toLowerCase().startsWith(prefix));
|
|
70
|
+
const extended = [];
|
|
71
|
+
if (hasPattern("browser_")) {
|
|
72
|
+
extended.push("", "**Browser (agent-browser):**", "- `browser_navigate` — open a URL", "- `browser_snapshot` — capture page accessibility snapshot", "- `browser_click` / `browser_fill` / `browser_select` — interact with page elements", "- `browser_eval` — run JavaScript in the page", "- `browser_screenshot` — take a screenshot", "- Plus: browser_scroll, browser_back, browser_forward, browser_wait, browser_tabs, browser_tab_new, browser_tab_close, browser_tab_switch, browser_pdf, browser_drag, browser_hover, browser_keypress", "Use browser tools instead of curl/wget for pages that require JavaScript rendering or authentication.");
|
|
73
|
+
}
|
|
74
|
+
if (hasPattern("email_")) {
|
|
75
|
+
extended.push("", "**Email:**", "- `email_send` — send an email (WARNING: irreversible side effect)", "- `email_draft` — create a draft without sending", "- `email_list` — list inbox messages", "- `email_read` — read a specific email (includes attachment metadata; set download_attachments=true to save all)", "- `email_download_attachment` — download a specific attachment by part number", "- `email_search` — search emails by sender, recipient, subject, date range, body, or answered status", "- `email_count` — count emails matching filters without downloading content (returns total and unread counts)", "- `email_verify` — verify SMTP connection and credentials", "ALWAYS use these tools for email operations. Never use bash/curl to send emails.");
|
|
76
|
+
}
|
|
77
|
+
if (hasPattern("image_")) {
|
|
78
|
+
extended.push("", "**Image:**", "- `image_generate` — generate images with AI (fal.ai FLUX)", "- `image_analyze` — analyze/describe images with vision models");
|
|
79
|
+
}
|
|
80
|
+
if (hasPattern("video_")) {
|
|
81
|
+
extended.push("", "**Video:**", "- `video_generate` — generate video with AI (fal.ai Wan 2.2)");
|
|
82
|
+
}
|
|
83
|
+
if (hasPattern("audio_")) {
|
|
84
|
+
extended.push("", "**Audio:**", "- `audio_transcribe` — speech-to-text (Whisper / Deepgram Nova)", "- `audio_speak` — text-to-speech (OpenAI / Deepgram / ElevenLabs / Edge)");
|
|
85
|
+
}
|
|
86
|
+
if (hasPattern("excel_")) {
|
|
87
|
+
extended.push("", "**Excel:**", "- `excel_read` — read spreadsheet data", "- `excel_write` — write/create spreadsheets", "- `excel_query` — query spreadsheet data with SQL-like syntax", "- `excel_info` — get spreadsheet metadata", "Use these instead of installing npm packages for spreadsheet operations.");
|
|
88
|
+
}
|
|
89
|
+
if (hasPattern("pdf_")) {
|
|
90
|
+
extended.push("", "**PDF:**", "- `pdf_read` — extract text from PDFs", "- `pdf_create` — create PDF documents", "- `pdf_merge` — merge multiple PDFs", "- `pdf_info` — get PDF metadata", "Use these instead of installing npm packages for PDF operations.");
|
|
91
|
+
}
|
|
92
|
+
if (hasPattern("docx_")) {
|
|
93
|
+
extended.push("", "**Word Documents:**", "- `docx_read` — read .docx file contents", "- `docx_create` — create .docx documents");
|
|
94
|
+
}
|
|
95
|
+
if (hasPattern("search_")) {
|
|
96
|
+
extended.push("", "**Web Search (Exa AI):**", "- `search_web` — search the web for information", "- `search_find_similar` — find pages similar to a given URL", "Use these for research instead of scraping or manual browsing.");
|
|
97
|
+
}
|
|
98
|
+
if (extended.length > 0) {
|
|
99
|
+
lines.push(...extended);
|
|
100
|
+
}
|
|
101
|
+
// --- Ink Hub tools (always available when polpoDir exists) ---
|
|
102
|
+
lines.push("", "**Ink Hub (package registry — always available):**", "- `ink_search` — search the Ink Hub for available packages (playbooks, agents, companies)", "- `ink_browse` — list packages currently installed in this project", "- `ink_add` — install packages from a GitHub source (e.g. 'lumea-labs/ink-registry')", "- `ink_remove` — remove an installed registry source and uninstall its packages", "- `ink_update` — update installed registries by pulling the latest from git", "Use ink tools to find and install reusable playbooks, agent configs, and company setups.", "The official registry is 'lumea-labs/ink-registry'.");
|
|
103
|
+
// --- Guidance ---
|
|
104
|
+
lines.push("", "**IMPORTANT:** ALWAYS prefer your available tools over shell commands, npm installs, or manual workarounds.", "For example: use `email_send` not `curl`; use `pdf_read` not `pip install PyPDF2`; use `excel_read` not `npm install xlsx`.", "If a task requires a capability you don't have listed above, use `bash` as a fallback.");
|
|
105
|
+
return lines.join("\n");
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Build the system prompt for the agent, including loaded skills.
|
|
109
|
+
*/
|
|
110
|
+
export function buildSystemPrompt(agent, cwd, polpoDir, outputDir, allowedPaths) {
|
|
111
|
+
// Load skills (sync, Node.js filesystem)
|
|
112
|
+
const skills = polpoDir
|
|
113
|
+
? loadAgentSkills(cwd, polpoDir, agent.name, agent.skills)
|
|
114
|
+
: [];
|
|
115
|
+
// Core prompt: identity, responsibilities, tone, personality, hierarchy, systemPrompt, skills
|
|
116
|
+
// Shared agent loop logic (lives in @polpo-ai/core).
|
|
117
|
+
const parts = [buildAgentSystemPrompt(agent, { skills })];
|
|
118
|
+
// Shell-specific sections below (tools, cwd, sandbox paths)
|
|
119
|
+
// Available tools — enumerate what the agent can use so it doesn't resort to
|
|
120
|
+
// shell scripts, npm installs, or manual workarounds for capabilities it already has.
|
|
121
|
+
const toolSection = describeToolsForAgent(agent);
|
|
122
|
+
if (toolSection)
|
|
123
|
+
parts.push("", toolSection);
|
|
124
|
+
// Working directory and sandbox boundaries — tell the agent exactly where it can operate.
|
|
125
|
+
parts.push("", buildFilesystemWorkspaceSection(cwd, allowedPaths));
|
|
126
|
+
// Output directory for task deliverables
|
|
127
|
+
if (outputDir) {
|
|
128
|
+
parts.push("", "## Output Directory", `Your task output directory is: ${outputDir}`, "Write all deliverable files (reports, images, data exports, etc.) to this directory.", "When you register an outcome with register_outcome, use paths inside this directory.", "This directory is pre-created and writable. Other tasks have separate output directories.");
|
|
129
|
+
}
|
|
130
|
+
return parts.join("\n");
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Build the user prompt from task data.
|
|
134
|
+
*/
|
|
135
|
+
export function buildPrompt(task) {
|
|
136
|
+
const parts = [`Task: ${task.title}`, ``, task.description];
|
|
137
|
+
if (task.expectations.length > 0) {
|
|
138
|
+
parts.push(``, `Acceptance criteria:`);
|
|
139
|
+
for (const exp of task.expectations) {
|
|
140
|
+
if (exp.type === "test")
|
|
141
|
+
parts.push(`- Tests must pass: ${exp.command}`);
|
|
142
|
+
if (exp.type === "file_exists")
|
|
143
|
+
parts.push(`- Files must exist: ${exp.paths?.join(", ")}`);
|
|
144
|
+
if (exp.type === "script")
|
|
145
|
+
parts.push(`- Script must pass: ${exp.command}`);
|
|
146
|
+
if (exp.type === "llm_review")
|
|
147
|
+
parts.push(`- Code review criteria: ${exp.criteria}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
parts.push(``, `IMPORTANT — Orchestration contract:`, `- You are being orchestrated by a supervisor. Complete the task autonomously and EXIT.`, `- Do NOT ask clarifying questions. Make reasonable decisions and proceed.`, `- You MUST terminate after completing your work. Never block indefinitely.`, `- Your session has a timeout. If you hang, you will be killed and the task will fail.`, ``, `CRITICAL — Bash tool rules:`, `- The bash tool has a default timeout of 30 seconds. Commands that exceed it are killed.`, `- For long commands (npm install, builds, etc.), pass an explicit timeout: {"command": "...", "timeout": 120000}`, `- NEVER run a server or long-lived process in the foreground. It will block forever and kill your session.`, `- To start a background server, ALWAYS use this exact pattern:`, ` {"command": "nohup python3 server.py > /tmp/server.log 2>&1 & echo \"PID=$!\"", "timeout": 5000}`, ` Then verify separately: {"command": "sleep 2 && curl -s --max-time 5 http://127.0.0.1:PORT/", "timeout": 10000}`, `- NEVER combine server start + verification in one command (e.g. "cmd & sleep 2 && lsof" WILL hang).`, `- NEVER use "lsof" or "netstat" to check if a server is running. Use "curl" instead.`, `- NEVER use "tail -f", "watch", or any command that runs forever.`, `- If a command times out, do NOT retry the same command. Analyze why it hung and fix the approach.`, ``, `CRITICAL — Outcome tracking:`, `When you produce artifacts (files, reports, data), the orchestrator attaches them to`, `task-done notifications (Telegram, Slack, etc.) and approval reviews.`, `Outcomes are NEVER auto-collected — you MUST explicitly register every deliverable.`, ``, `Use the register_outcome tool to declare artifacts as task outcomes:`, ` register_outcome({type: 'file', label: 'Sales Report', path: 'output/report.pdf'})`, ` register_outcome({type: 'media', label: 'Chart', path: 'charts/revenue.png'})`, ` register_outcome({type: 'url', label: 'Staging Deploy', url: 'https://staging.example.com'})`, ` register_outcome({type: 'text', label: 'Summary', text: 'Revenue increased 23%...'})`, ` register_outcome({type: 'json', label: 'Metrics', data: {revenue: 1234, growth: 0.23}})`, ``, `RULES:`, ` - ALWAYS call register_outcome for every artifact you produce — files, reports, screenshots,`, ` downloads, generated media, transcriptions, analysis results, URLs, data summaries`, ` - Producing a file (via write, pdf_create, bash, etc.) does NOT auto-register it as an outcome`, ` - Only register final deliverables — not intermediate/temporary files`, ` - If the task has expectedOutcomes defined, ensure you register matching outcomes`);
|
|
151
|
+
return parts.join("\n");
|
|
152
|
+
}
|
|
153
|
+
export function prepareSpawn(agentConfig, cwd, ctx) {
|
|
154
|
+
// Enforce model allowlist (throws if model not allowed)
|
|
155
|
+
if (agentConfig.model) {
|
|
156
|
+
enforceModelAllowlist(agentConfig.model);
|
|
157
|
+
}
|
|
158
|
+
// Resolve model
|
|
159
|
+
const model = resolveModel(agentConfig.model, { gateway: ctx?.gatewayConfig });
|
|
160
|
+
// polpoDir must always be provided via SpawnContext.
|
|
161
|
+
// Fallback to join(cwd, ".polpo") is WRONG when settings.workDir points to a
|
|
162
|
+
// subdirectory — cwd would be e.g. /project/packages/app while .polpo/ lives
|
|
163
|
+
// at /project/.polpo/. Throw early to catch misconfiguration.
|
|
164
|
+
if (!ctx?.polpoDir) {
|
|
165
|
+
throw new Error("spawnEngine: ctx.polpoDir is required (cannot derive .polpo from cwd when settings.workDir is set)");
|
|
166
|
+
}
|
|
167
|
+
const polpoDir = ctx.polpoDir;
|
|
168
|
+
// Extract fs/shell from context — safety fallback to NodeFileSystem/NodeShell
|
|
169
|
+
// In practice the orchestrator (or runner subprocess) always provides them via SpawnContext.
|
|
170
|
+
const fs = ctx?.fs ?? new NodeFileSystem();
|
|
171
|
+
const shell = ctx?.shell ?? new NodeShell();
|
|
172
|
+
// Browser profile directory for agent-browser persistent state (cookies, auth, localStorage)
|
|
173
|
+
const browserProfileDir = join(polpoDir, "browser-profiles", agentConfig.browserProfile || agentConfig.name);
|
|
174
|
+
// Check if extended tools (browser, email, image, video, audio, excel, pdf, docx) are requested via allowedTools
|
|
175
|
+
// Note: vault tools are now core — always available, no need to check here.
|
|
176
|
+
const hasExtendedTools = agentConfig.allowedTools?.some(t => {
|
|
177
|
+
const lc = t.toLowerCase();
|
|
178
|
+
return lc.startsWith("browser_") || lc.startsWith("email_")
|
|
179
|
+
|| lc.startsWith("image_") || lc.startsWith("video_") || lc.startsWith("audio_")
|
|
180
|
+
|| lc.startsWith("excel_") || lc.startsWith("pdf_") || lc.startsWith("docx_")
|
|
181
|
+
|| lc.startsWith("search_");
|
|
182
|
+
}) ?? false;
|
|
183
|
+
// Derive output directory from context (per-task output dir for deliverables)
|
|
184
|
+
const outputDir = ctx?.outputDir;
|
|
185
|
+
// Build effective allowed paths, preserving the resolveAllowedPaths default behavior.
|
|
186
|
+
//
|
|
187
|
+
// When allowedPaths is NOT configured (the common case), we leave it undefined so
|
|
188
|
+
// resolveAllowedPaths defaults to [cwd]. But outputDir (.polpo/output/<taskId>)
|
|
189
|
+
// may live outside cwd when settings.workDir points to a subdirectory, so we
|
|
190
|
+
// must add it explicitly in that case.
|
|
191
|
+
//
|
|
192
|
+
// When allowedPaths IS configured, we append outputDir so the agent can write
|
|
193
|
+
// deliverables regardless of its sandbox.
|
|
194
|
+
//
|
|
195
|
+
// BUG FIX: Previously, `agentConfig.allowedPaths ?? []` turned undefined into [],
|
|
196
|
+
// producing [outputDir] as the ONLY allowed path — locking the agent out of its
|
|
197
|
+
// own working directory.
|
|
198
|
+
let effectiveAllowedPaths;
|
|
199
|
+
if (agentConfig.allowedPaths) {
|
|
200
|
+
// Explicit sandbox — append outputDir so deliverables are always writable
|
|
201
|
+
effectiveAllowedPaths = [...agentConfig.allowedPaths, ...(outputDir ? [outputDir] : [])];
|
|
202
|
+
}
|
|
203
|
+
else if (outputDir && !outputDir.startsWith(cwd + sep) && outputDir !== cwd) {
|
|
204
|
+
// No explicit sandbox, but outputDir is outside cwd — add both
|
|
205
|
+
effectiveAllowedPaths = [cwd, outputDir];
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
// No explicit sandbox, outputDir under cwd (or absent) — let resolveAllowedPaths default to [cwd]
|
|
209
|
+
effectiveAllowedPaths = undefined;
|
|
210
|
+
}
|
|
211
|
+
// Resolve reasoning level: agent config > global settings (via SpawnContext) > "off"
|
|
212
|
+
const thinkingLevel = agentConfig.reasoning ?? ctx?.reasoning ?? "off";
|
|
213
|
+
// Build the system prompt once for reuse in both the agent loop and context compaction
|
|
214
|
+
const systemPrompt = buildSystemPrompt(agentConfig, cwd, ctx?.polpoDir, outputDir, effectiveAllowedPaths);
|
|
215
|
+
// Track turns for maxTurns enforcement
|
|
216
|
+
const maxTurns = agentConfig.maxTurns ?? 150;
|
|
217
|
+
// Provider options for reasoning/thinking
|
|
218
|
+
// Cast needed: mapReasoningToProviderOptions returns Record<string, Record<string, unknown>>
|
|
219
|
+
// but AI SDK expects Record<string, JSONObject> (JSONValue values). The values are always
|
|
220
|
+
// JSON-serializable (numbers, strings, objects), so this cast is safe.
|
|
221
|
+
const providerOptions = mapReasoningToProviderOptions(model.provider, thinkingLevel, model.maxTokens);
|
|
222
|
+
return {
|
|
223
|
+
model, polpoDir, fs, shell, outputDir, effectiveAllowedPaths,
|
|
224
|
+
systemPrompt, providerOptions, hasExtendedTools, browserProfileDir, maxTurns,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Resolve the agent vault and build the full PolpoTool set (core tools plus
|
|
229
|
+
* extended categories when requested via allowedTools). Async because vault
|
|
230
|
+
* resolution hits the store.
|
|
231
|
+
*/
|
|
232
|
+
export async function buildAgentTools(agentConfig, cwd, prep, ctx) {
|
|
233
|
+
const vaultEntries = await ctx?.vaultStore?.getAllForAgent(agentConfig.name);
|
|
234
|
+
const vault = resolveAgentVault(vaultEntries);
|
|
235
|
+
let allPolpoTools = createSystemTools(cwd, agentConfig.allowedTools, prep.effectiveAllowedPaths, prep.outputDir, vault, prep.fs, prep.shell);
|
|
236
|
+
if (prep.hasExtendedTools) {
|
|
237
|
+
allPolpoTools = await createAllTools({
|
|
238
|
+
cwd,
|
|
239
|
+
allowedTools: agentConfig.allowedTools,
|
|
240
|
+
allowedPaths: prep.effectiveAllowedPaths,
|
|
241
|
+
browserSession: agentConfig.name,
|
|
242
|
+
browserProfileDir: prep.browserProfileDir,
|
|
243
|
+
vault,
|
|
244
|
+
emailAllowedDomains: agentConfig.emailAllowedDomains ?? ctx?.emailAllowedDomains,
|
|
245
|
+
outputDir: prep.outputDir,
|
|
246
|
+
fs: prep.fs,
|
|
247
|
+
shell: prep.shell,
|
|
248
|
+
memoryStore: ctx?.memoryStore,
|
|
249
|
+
agentName: agentConfig.name,
|
|
250
|
+
// Per-modality models from agent config. When undefined, the
|
|
251
|
+
// tool layer applies its own DEFAULT_*_MODEL.
|
|
252
|
+
imageModel: agentConfig.image_model,
|
|
253
|
+
videoModel: agentConfig.video_model,
|
|
254
|
+
visionModel: agentConfig.vision_model,
|
|
255
|
+
transcribeModel: agentConfig.transcribe_model,
|
|
256
|
+
ttsModel: agentConfig.tts_model,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
return allPolpoTools;
|
|
260
|
+
}
|
|
261
|
+
// ─── Outcome Collection ────���────────────────────────
|
|
262
|
+
//
|
|
263
|
+
// Outcomes are ONLY created via the `register_outcome` tool.
|
|
264
|
+
// The agent explicitly decides what artifacts are deliverables.
|
|
265
|
+
// No auto-collection from other tools — producing files and
|
|
266
|
+
// declaring outcomes are two separate responsibilities.
|
|
267
|
+
/** MIME type inference from file extension. */
|
|
268
|
+
const EXT_MIME = {
|
|
269
|
+
".mp3": "audio/mpeg", ".wav": "audio/wav", ".ogg": "audio/ogg", ".flac": "audio/flac",
|
|
270
|
+
".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".webp": "image/webp", ".gif": "image/gif",
|
|
271
|
+
".pdf": "application/pdf",
|
|
272
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
273
|
+
".xls": "application/vnd.ms-excel",
|
|
274
|
+
".csv": "text/csv",
|
|
275
|
+
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
276
|
+
".json": "application/json",
|
|
277
|
+
".txt": "text/plain",
|
|
278
|
+
".html": "text/html",
|
|
279
|
+
".zip": "application/zip",
|
|
280
|
+
};
|
|
281
|
+
function guessMime(filePath) {
|
|
282
|
+
const ext = filePath.slice(filePath.lastIndexOf(".")).toLowerCase();
|
|
283
|
+
return EXT_MIME[ext];
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Create a TaskOutcome from a `register_outcome` tool call.
|
|
287
|
+
* Returns undefined for any other tool — outcome registration is explicit only.
|
|
288
|
+
*/
|
|
289
|
+
export function collectOutcome(toolName, details) {
|
|
290
|
+
if (toolName !== "register_outcome" || !details.outcomeType || !details.outcomeLabel) {
|
|
291
|
+
return undefined;
|
|
292
|
+
}
|
|
293
|
+
const outcome = {
|
|
294
|
+
id: nanoid(),
|
|
295
|
+
type: details.outcomeType,
|
|
296
|
+
label: details.outcomeLabel,
|
|
297
|
+
producedBy: "register_outcome",
|
|
298
|
+
producedAt: new Date().toISOString(),
|
|
299
|
+
};
|
|
300
|
+
if (details.path) {
|
|
301
|
+
outcome.path = details.path;
|
|
302
|
+
outcome.mimeType = details.outcomeMimeType ?? guessMime(details.path);
|
|
303
|
+
if (details.outcomeSize !== undefined)
|
|
304
|
+
outcome.size = details.outcomeSize;
|
|
305
|
+
}
|
|
306
|
+
if (details.outcomeText)
|
|
307
|
+
outcome.text = details.outcomeText;
|
|
308
|
+
if (details.outcomeUrl)
|
|
309
|
+
outcome.url = details.outcomeUrl;
|
|
310
|
+
if (details.outcomeData !== undefined)
|
|
311
|
+
outcome.data = details.outcomeData;
|
|
312
|
+
if (details.outcomeTags)
|
|
313
|
+
outcome.tags = details.outcomeTags;
|
|
314
|
+
return outcome;
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/adapters/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// spawnEngine is a compatibility alias: the legacy manual loop was removed
|
|
2
|
+
// after spawnLoopEngine reached behavioral parity (engine-behavior.test.ts).
|
|
3
|
+
export { spawnLoopEngine, spawnLoopEngine as spawnEngine } from "./loop-engine.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loop-engine — the task runtime driven by the core loop system.
|
|
3
|
+
*
|
|
4
|
+
* Same external contract as spawnEngine (AgentHandle in, TaskResult out),
|
|
5
|
+
* but the agentic loop is @polpo-ai/core's LoopRunner instead of a manual
|
|
6
|
+
* for-loop, and agents with configured loops get the full graph runtime:
|
|
7
|
+
*
|
|
8
|
+
* - No loop config on the agent → one implicit "default" loop, behavior
|
|
9
|
+
* identical to the legacy engine (proven by the parity suite).
|
|
10
|
+
* - defaultLoop/loops on the agent → the selected loop's overlays apply
|
|
11
|
+
* (tools subset, systemPrompt, model, maxTurns), same merge semantics
|
|
12
|
+
* as chat completions (buildLoopStepAgent).
|
|
13
|
+
* - assignedLoops + project loop graph (.polpo/loops/<name>.json) → the
|
|
14
|
+
* PipelineExecutor drives the step graph: agent steps are independent
|
|
15
|
+
* LLM sessions communicating through the context bag, tool steps run
|
|
16
|
+
* deterministically without an LLM turn.
|
|
17
|
+
*
|
|
18
|
+
* Setup semantics (model resolution, sandbox paths, system prompt, tool
|
|
19
|
+
* building) are shared with the legacy engine via prepareSpawn/
|
|
20
|
+
* buildAgentTools so the two stay byte-identical during the migration.
|
|
21
|
+
*
|
|
22
|
+
* Known deliberate differences from the legacy engine:
|
|
23
|
+
* - In a turn with MULTIPLE tool calls, transcript order is
|
|
24
|
+
* use,use,...,result,result (the model step completes before execution)
|
|
25
|
+
* instead of use,result interleaved. Single-call turns are identical.
|
|
26
|
+
*/
|
|
27
|
+
import type { AgentConfig, Task } from "@polpo-ai/core/types";
|
|
28
|
+
import type { AgentHandle, SpawnContext } from "../core/adapter.js";
|
|
29
|
+
/**
|
|
30
|
+
* Spawn an agent on the loop runtime.
|
|
31
|
+
*
|
|
32
|
+
* Drop-in replacement for spawnEngine: same signature, same AgentHandle
|
|
33
|
+
* contract, same activity/transcript/outcome semantics.
|
|
34
|
+
*/
|
|
35
|
+
export declare function spawnLoopEngine(agentConfig: AgentConfig, task: Task, cwd: string, ctx?: SpawnContext): AgentHandle;
|
|
36
|
+
//# sourceMappingURL=loop-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop-engine.d.ts","sourceRoot":"","sources":["../../src/adapters/loop-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAc,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA+HpE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,YAAY,GAAG,WAAW,CAyblH"}
|