@polpo-ai/core 0.8.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/approval-manager.d.ts +1 -0
  2. package/dist/approval-manager.d.ts.map +1 -1
  3. package/dist/approval-manager.js +7 -9
  4. package/dist/approval-manager.js.map +1 -1
  5. package/dist/index.d.ts +12 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +9 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/loop/contract.test.d.ts +2 -0
  10. package/dist/loop/contract.test.d.ts.map +1 -0
  11. package/dist/loop/contract.test.js +106 -0
  12. package/dist/loop/contract.test.js.map +1 -0
  13. package/dist/loop/expression.d.ts +29 -0
  14. package/dist/loop/expression.d.ts.map +1 -0
  15. package/dist/loop/expression.js +215 -0
  16. package/dist/loop/expression.js.map +1 -0
  17. package/dist/loop/expression.test.d.ts +2 -0
  18. package/dist/loop/expression.test.d.ts.map +1 -0
  19. package/dist/loop/expression.test.js +55 -0
  20. package/dist/loop/expression.test.js.map +1 -0
  21. package/dist/loop/hooks.d.ts +132 -0
  22. package/dist/loop/hooks.d.ts.map +1 -0
  23. package/dist/loop/hooks.js +85 -0
  24. package/dist/loop/hooks.js.map +1 -0
  25. package/dist/loop/normalize.d.ts +4 -0
  26. package/dist/loop/normalize.d.ts.map +1 -0
  27. package/dist/loop/normalize.js +88 -0
  28. package/dist/loop/normalize.js.map +1 -0
  29. package/dist/loop/pipeline.d.ts +45 -0
  30. package/dist/loop/pipeline.d.ts.map +1 -0
  31. package/dist/loop/pipeline.js +128 -0
  32. package/dist/loop/pipeline.js.map +1 -0
  33. package/dist/loop/pipeline.test.d.ts +2 -0
  34. package/dist/loop/pipeline.test.d.ts.map +1 -0
  35. package/dist/loop/pipeline.test.js +127 -0
  36. package/dist/loop/pipeline.test.js.map +1 -0
  37. package/dist/loop/runner.d.ts +44 -0
  38. package/dist/loop/runner.d.ts.map +1 -0
  39. package/dist/loop/runner.js +215 -0
  40. package/dist/loop/runner.js.map +1 -0
  41. package/dist/loop/runner.test.d.ts +2 -0
  42. package/dist/loop/runner.test.d.ts.map +1 -0
  43. package/dist/loop/runner.test.js +124 -0
  44. package/dist/loop/runner.test.js.map +1 -0
  45. package/dist/loop/selector.d.ts +13 -0
  46. package/dist/loop/selector.d.ts.map +1 -0
  47. package/dist/loop/selector.js +65 -0
  48. package/dist/loop/selector.js.map +1 -0
  49. package/dist/loop/selector.test.d.ts +2 -0
  50. package/dist/loop/selector.test.d.ts.map +1 -0
  51. package/dist/loop/selector.test.js +70 -0
  52. package/dist/loop/selector.test.js.map +1 -0
  53. package/dist/loop/types.d.ts +163 -0
  54. package/dist/loop/types.d.ts.map +1 -0
  55. package/dist/loop/types.js +14 -0
  56. package/dist/loop/types.js.map +1 -0
  57. package/dist/schemas.d.ts +204 -0
  58. package/dist/schemas.d.ts.map +1 -1
  59. package/dist/schemas.js +220 -0
  60. package/dist/schemas.js.map +1 -1
  61. package/dist/types.d.ts +13 -0
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/types.js +0 -1
  64. package/dist/types.js.map +1 -1
  65. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.test.d.ts","sourceRoot":"","sources":["../../src/loop/selector.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,70 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { resolveLoopSelection } from "./selector.js";
3
+ describe("resolveLoopSelection", () => {
4
+ it("keeps current agent behavior when no loop is requested", () => {
5
+ const agent = { name: "agent", model: "base", allowedTools: ["read"], systemPrompt: "base" };
6
+ const selected = resolveLoopSelection(agent);
7
+ expect(selected.name).toBe("default");
8
+ expect(selected.agent).toBe(agent);
9
+ });
10
+ it("applies requested loop overrides to the effective agent", () => {
11
+ const selected = resolveLoopSelection({
12
+ name: "agent",
13
+ model: "base",
14
+ reasoning: "low",
15
+ allowedTools: ["read", "write"],
16
+ skills: ["general"],
17
+ systemPrompt: "base prompt",
18
+ loops: {
19
+ plan: {
20
+ systemPrompt: "plan prompt",
21
+ tools: ["read"],
22
+ skills: ["planning"],
23
+ model: "planner",
24
+ reasoning: "high",
25
+ maxTurns: 3,
26
+ },
27
+ },
28
+ }, "plan");
29
+ expect(selected.loop.name).toBe("plan");
30
+ expect(selected.agent).toMatchObject({
31
+ model: "planner",
32
+ reasoning: "high",
33
+ allowedTools: ["read"],
34
+ skills: ["planning"],
35
+ maxTurns: 3,
36
+ });
37
+ expect(selected.agent.systemPrompt).toContain("base prompt");
38
+ expect(selected.agent.systemPrompt).toContain("## Active loop: plan");
39
+ expect(selected.agent.systemPrompt).toContain("plan prompt");
40
+ });
41
+ it("inherits agent skills when a requested loop does not narrow them", () => {
42
+ const selected = resolveLoopSelection({
43
+ name: "agent",
44
+ skills: ["general", "testing"],
45
+ loops: {
46
+ verify: {
47
+ tools: ["read", "bash"],
48
+ },
49
+ },
50
+ }, "verify");
51
+ expect(selected.agent.skills).toEqual(["general", "testing"]);
52
+ });
53
+ it("selects an assigned project-level loop without requiring inline definitions", () => {
54
+ const agent = {
55
+ name: "agent",
56
+ model: "base",
57
+ assignedLoops: ["coding-flow"],
58
+ defaultLoop: "coding-flow",
59
+ };
60
+ expect(resolveLoopSelection(agent).name).toBe("coding-flow");
61
+ expect(resolveLoopSelection(agent, "coding-flow").agent).toBe(agent);
62
+ });
63
+ it("throws a clear error for unknown requested loops", () => {
64
+ expect(() => resolveLoopSelection({
65
+ name: "agent",
66
+ loops: { plan: {} },
67
+ }, "build")).toThrow('Unknown loop "build". Available loops: plan');
68
+ });
69
+ });
70
+ //# sourceMappingURL=selector.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.test.js","sourceRoot":"","sources":["../../src/loop/selector.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Configurable agentic loops — config model (declarative surface).
3
+ *
4
+ * ProjectLoopConfig is the canonical project-level graph assigned to agents by
5
+ * name. AgentLoopConfig is the normalized legacy executor shape: a collection
6
+ * of named loops plus a pipeline tree over a shared context bag.
7
+ */
8
+ export interface Condition {
9
+ /** Expression over the context bag, evaluated by SafeExpressionEvaluator. */
10
+ expression: string;
11
+ }
12
+ export type ContextBag = Record<string, unknown>;
13
+ export type LoopNext = string | Array<{
14
+ when?: string;
15
+ to: string;
16
+ }>;
17
+ export type LoopToolChoice = "auto" | "none" | "required" | {
18
+ mode: "auto" | "none" | "required";
19
+ /** Optional specific tool to force when mode is required. */
20
+ tool?: string;
21
+ };
22
+ export interface LoopConfig {
23
+ /** Optional — the loops-map key is the canonical name. */
24
+ name?: string;
25
+ systemPrompt?: string;
26
+ /** Tool subset active in this loop (restriction = determinism/safety). */
27
+ tools?: string[];
28
+ /** Skill subset active in this loop. Defaults to the agent-level skills. */
29
+ skills?: string[];
30
+ /** Optional model tool-choice policy for this agent step. */
31
+ toolChoice?: LoopToolChoice;
32
+ model?: string;
33
+ reasoning?: string;
34
+ temperature?: number;
35
+ maxTurns?: number;
36
+ /** Deterministic stop condition over the context bag. */
37
+ stopWhen?: Condition;
38
+ /** Structured output contract — the loop's typed deliverable. */
39
+ output?: {
40
+ schema?: unknown;
41
+ };
42
+ }
43
+ export interface AgentLoopStep extends LoopConfig {
44
+ type?: "agent";
45
+ /** Optional guard evaluated before this step is entered. */
46
+ when?: string;
47
+ /** Next step id, conditional transitions, or "end". */
48
+ next?: LoopNext;
49
+ }
50
+ export interface HumanLoopStep {
51
+ type: "human";
52
+ when?: string;
53
+ output?: {
54
+ schema?: unknown;
55
+ };
56
+ notify?: string[];
57
+ next?: LoopNext;
58
+ }
59
+ export interface ParallelLoopStep {
60
+ type: "parallel";
61
+ when?: string;
62
+ branches: string[];
63
+ join?: "all" | "any" | number;
64
+ next?: LoopNext;
65
+ }
66
+ export interface ToolLoopStep {
67
+ type: "tool";
68
+ when?: string;
69
+ /** Built-in or custom tool name to execute directly, without an LLM turn. */
70
+ tool: string;
71
+ /** Static JSON input or host-templated input resolved by the runtime. */
72
+ input?: unknown;
73
+ /** Context path where the tool output should be stored. Defaults to the tool name. */
74
+ saveAs?: string;
75
+ next?: LoopNext;
76
+ }
77
+ export type LoopStepConfig = AgentLoopStep | HumanLoopStep | ParallelLoopStep | ToolLoopStep;
78
+ /** Project-level reusable loop graph. Agents assign these by name/id. */
79
+ export interface ProjectLoopConfig {
80
+ name: string;
81
+ description?: string;
82
+ context?: "shared";
83
+ start: string;
84
+ steps: Record<string, LoopStepConfig>;
85
+ }
86
+ export interface SwitchCase {
87
+ when: string;
88
+ steps: Step[];
89
+ }
90
+ export type Step = {
91
+ loop: string;
92
+ when?: string;
93
+ } | {
94
+ tool: string;
95
+ input?: unknown;
96
+ saveAs?: string;
97
+ when?: string;
98
+ } | {
99
+ parallel: Step[];
100
+ join?: "all" | "any" | number;
101
+ when?: string;
102
+ } | {
103
+ switch: {
104
+ cases: SwitchCase[];
105
+ default?: {
106
+ steps: Step[];
107
+ };
108
+ };
109
+ when?: string;
110
+ } | {
111
+ human: string;
112
+ output?: {
113
+ schema?: unknown;
114
+ };
115
+ notify?: string[];
116
+ when?: string;
117
+ };
118
+ export interface Pipeline {
119
+ mode?: "sequential" | "parallel";
120
+ context?: "shared";
121
+ steps: Step[];
122
+ }
123
+ export interface AgentLoopConfig {
124
+ name?: string;
125
+ model?: string;
126
+ /** Out-of-scope runtime/environment ref (default polpo-runner; custom image later). */
127
+ runtime?: string;
128
+ loops: Record<string, LoopConfig>;
129
+ pipeline?: Pipeline;
130
+ }
131
+ export declare const isLoopStep: (s: Step) => s is {
132
+ loop: string;
133
+ when?: string;
134
+ };
135
+ export declare const isToolStep: (s: Step) => s is {
136
+ tool: string;
137
+ input?: unknown;
138
+ saveAs?: string;
139
+ when?: string;
140
+ };
141
+ export declare const isParallelStep: (s: Step) => s is {
142
+ parallel: Step[];
143
+ join?: "all" | "any" | number;
144
+ when?: string;
145
+ };
146
+ export declare const isSwitchStep: (s: Step) => s is {
147
+ switch: {
148
+ cases: SwitchCase[];
149
+ default?: {
150
+ steps: Step[];
151
+ };
152
+ };
153
+ when?: string;
154
+ };
155
+ export declare const isHumanStep: (s: Step) => s is {
156
+ human: string;
157
+ output?: {
158
+ schema?: unknown;
159
+ };
160
+ notify?: string[];
161
+ when?: string;
162
+ };
163
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/loop/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,KAAK,CAAC;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC,CAAC;AAEP,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,MAAM,GACN,UAAU,GACV;IACE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACnC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEN,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,iEAAiE;IACjE,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,aAAa,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAE7F,yEAAyE;AACzE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,MAAM,IAAI,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,KAAK,EAAE,IAAI,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/E;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvF,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjC,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAGD,eAAO,MAAM,UAAU,GAAI,GAAG,IAAI,KAAG,CAAC,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAiB,CAAC;AACzF,eAAO,MAAM,UAAU,GAAI,GAAG,IAAI,KAAG,CAAC,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAC5F,CAAC;AACd,eAAO,MAAM,cAAc,GAAI,GAAG,IAAI,KAAG,CAAC,IAAI;IAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAC7F,CAAC;AAClB,eAAO,MAAM,YAAY,GACvB,GAAG,IAAI,KACN,CAAC,IAAI;IAAE,MAAM,EAAE;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,KAAK,EAAE,IAAI,EAAE,CAAA;SAAE,CAAA;KAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAmB,CAAC;AACzG,eAAO,MAAM,WAAW,GACtB,GAAG,IAAI,KACN,CAAC,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Configurable agentic loops — config model (declarative surface).
3
+ *
4
+ * ProjectLoopConfig is the canonical project-level graph assigned to agents by
5
+ * name. AgentLoopConfig is the normalized legacy executor shape: a collection
6
+ * of named loops plus a pipeline tree over a shared context bag.
7
+ */
8
+ // ─── Step type guards ────────────────────────────────────
9
+ export const isLoopStep = (s) => "loop" in s;
10
+ export const isToolStep = (s) => "tool" in s;
11
+ export const isParallelStep = (s) => "parallel" in s;
12
+ export const isSwitchStep = (s) => "switch" in s;
13
+ export const isHumanStep = (s) => "human" in s;
14
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/loop/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwHH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAO,EAAwC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;AACzF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAO,EAA0E,EAAE,CAC5G,MAAM,IAAI,CAAC,CAAC;AACd,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAO,EAA2E,EAAE,CACjH,UAAU,IAAI,CAAC,CAAC;AAClB,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,CAAO,EAC+E,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC;AACzG,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,CAAO,EACkF,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC"}
package/dist/schemas.d.ts CHANGED
@@ -96,6 +96,210 @@ export declare const missionDocumentSchema: z.ZodObject<{
96
96
  notifications: z.ZodOptional<z.ZodAny>;
97
97
  }, z.core.$strip>;
98
98
  export type MissionDocumentParsed = z.infer<typeof missionDocumentSchema>;
99
+ export declare const conditionSchema: z.ZodObject<{
100
+ expression: z.ZodString;
101
+ }, z.core.$strip>;
102
+ export declare const loopToolChoiceSchema: z.ZodUnion<readonly [z.ZodEnum<{
103
+ auto: "auto";
104
+ none: "none";
105
+ required: "required";
106
+ }>, z.ZodObject<{
107
+ mode: z.ZodEnum<{
108
+ auto: "auto";
109
+ none: "none";
110
+ required: "required";
111
+ }>;
112
+ tool: z.ZodOptional<z.ZodString>;
113
+ }, z.core.$strip>]>;
114
+ export declare const loopConfigSchema: z.ZodObject<{
115
+ name: z.ZodOptional<z.ZodString>;
116
+ systemPrompt: z.ZodOptional<z.ZodString>;
117
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
118
+ skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
119
+ toolChoice: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
120
+ auto: "auto";
121
+ none: "none";
122
+ required: "required";
123
+ }>, z.ZodObject<{
124
+ mode: z.ZodEnum<{
125
+ auto: "auto";
126
+ none: "none";
127
+ required: "required";
128
+ }>;
129
+ tool: z.ZodOptional<z.ZodString>;
130
+ }, z.core.$strip>]>>;
131
+ model: z.ZodOptional<z.ZodString>;
132
+ reasoning: z.ZodOptional<z.ZodString>;
133
+ temperature: z.ZodOptional<z.ZodNumber>;
134
+ maxTurns: z.ZodOptional<z.ZodNumber>;
135
+ stopWhen: z.ZodOptional<z.ZodObject<{
136
+ expression: z.ZodString;
137
+ }, z.core.$strip>>;
138
+ output: z.ZodOptional<z.ZodObject<{
139
+ schema: z.ZodOptional<z.ZodUnknown>;
140
+ }, z.core.$strip>>;
141
+ }, z.core.$strip>;
142
+ export declare const loopNextSchema: z.ZodType<unknown>;
143
+ export declare const loopStepConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
144
+ name: z.ZodOptional<z.ZodString>;
145
+ systemPrompt: z.ZodOptional<z.ZodString>;
146
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
147
+ skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
148
+ toolChoice: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
149
+ auto: "auto";
150
+ none: "none";
151
+ required: "required";
152
+ }>, z.ZodObject<{
153
+ mode: z.ZodEnum<{
154
+ auto: "auto";
155
+ none: "none";
156
+ required: "required";
157
+ }>;
158
+ tool: z.ZodOptional<z.ZodString>;
159
+ }, z.core.$strip>]>>;
160
+ model: z.ZodOptional<z.ZodString>;
161
+ reasoning: z.ZodOptional<z.ZodString>;
162
+ temperature: z.ZodOptional<z.ZodNumber>;
163
+ maxTurns: z.ZodOptional<z.ZodNumber>;
164
+ stopWhen: z.ZodOptional<z.ZodObject<{
165
+ expression: z.ZodString;
166
+ }, z.core.$strip>>;
167
+ output: z.ZodOptional<z.ZodObject<{
168
+ schema: z.ZodOptional<z.ZodUnknown>;
169
+ }, z.core.$strip>>;
170
+ type: z.ZodLiteral<"agent">;
171
+ when: z.ZodOptional<z.ZodString>;
172
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
173
+ }, z.core.$strip>, z.ZodObject<{
174
+ type: z.ZodLiteral<"human">;
175
+ when: z.ZodOptional<z.ZodString>;
176
+ output: z.ZodOptional<z.ZodObject<{
177
+ schema: z.ZodOptional<z.ZodUnknown>;
178
+ }, z.core.$strip>>;
179
+ notify: z.ZodOptional<z.ZodArray<z.ZodString>>;
180
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
181
+ }, z.core.$strip>, z.ZodObject<{
182
+ type: z.ZodLiteral<"parallel">;
183
+ when: z.ZodOptional<z.ZodString>;
184
+ branches: z.ZodArray<z.ZodString>;
185
+ join: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"all">, z.ZodLiteral<"any">, z.ZodNumber]>>;
186
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
187
+ }, z.core.$strip>, z.ZodObject<{
188
+ type: z.ZodLiteral<"tool">;
189
+ when: z.ZodOptional<z.ZodString>;
190
+ tool: z.ZodString;
191
+ input: z.ZodOptional<z.ZodUnknown>;
192
+ saveAs: z.ZodOptional<z.ZodString>;
193
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
194
+ }, z.core.$strip>], "type">;
195
+ export declare const projectLoopConfigSchema: z.ZodObject<{
196
+ name: z.ZodString;
197
+ description: z.ZodOptional<z.ZodString>;
198
+ context: z.ZodOptional<z.ZodLiteral<"shared">>;
199
+ start: z.ZodString;
200
+ steps: z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodObject<{
201
+ name: z.ZodOptional<z.ZodString>;
202
+ systemPrompt: z.ZodOptional<z.ZodString>;
203
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
204
+ skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
205
+ toolChoice: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
206
+ auto: "auto";
207
+ none: "none";
208
+ required: "required";
209
+ }>, z.ZodObject<{
210
+ mode: z.ZodEnum<{
211
+ auto: "auto";
212
+ none: "none";
213
+ required: "required";
214
+ }>;
215
+ tool: z.ZodOptional<z.ZodString>;
216
+ }, z.core.$strip>]>>;
217
+ model: z.ZodOptional<z.ZodString>;
218
+ reasoning: z.ZodOptional<z.ZodString>;
219
+ temperature: z.ZodOptional<z.ZodNumber>;
220
+ maxTurns: z.ZodOptional<z.ZodNumber>;
221
+ stopWhen: z.ZodOptional<z.ZodObject<{
222
+ expression: z.ZodString;
223
+ }, z.core.$strip>>;
224
+ output: z.ZodOptional<z.ZodObject<{
225
+ schema: z.ZodOptional<z.ZodUnknown>;
226
+ }, z.core.$strip>>;
227
+ type: z.ZodOptional<z.ZodLiteral<"agent">>;
228
+ when: z.ZodOptional<z.ZodString>;
229
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
230
+ }, z.core.$strip>, z.ZodObject<{
231
+ type: z.ZodLiteral<"human">;
232
+ when: z.ZodOptional<z.ZodString>;
233
+ output: z.ZodOptional<z.ZodObject<{
234
+ schema: z.ZodOptional<z.ZodUnknown>;
235
+ }, z.core.$strip>>;
236
+ notify: z.ZodOptional<z.ZodArray<z.ZodString>>;
237
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
238
+ }, z.core.$strip>, z.ZodObject<{
239
+ type: z.ZodLiteral<"parallel">;
240
+ when: z.ZodOptional<z.ZodString>;
241
+ branches: z.ZodArray<z.ZodString>;
242
+ join: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"all">, z.ZodLiteral<"any">, z.ZodNumber]>>;
243
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
244
+ }, z.core.$strip>, z.ZodObject<{
245
+ type: z.ZodLiteral<"tool">;
246
+ when: z.ZodOptional<z.ZodString>;
247
+ tool: z.ZodString;
248
+ input: z.ZodOptional<z.ZodUnknown>;
249
+ saveAs: z.ZodOptional<z.ZodString>;
250
+ next: z.ZodOptional<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
251
+ }, z.core.$strip>]>>;
252
+ }, z.core.$strip>;
253
+ export declare const loopStepSchema: z.ZodType<unknown>;
254
+ export declare const pipelineSchema: z.ZodObject<{
255
+ mode: z.ZodOptional<z.ZodEnum<{
256
+ parallel: "parallel";
257
+ sequential: "sequential";
258
+ }>>;
259
+ context: z.ZodOptional<z.ZodLiteral<"shared">>;
260
+ steps: z.ZodArray<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
261
+ }, z.core.$strip>;
262
+ export declare const agentLoopConfigSchema: z.ZodObject<{
263
+ name: z.ZodOptional<z.ZodString>;
264
+ model: z.ZodOptional<z.ZodString>;
265
+ runtime: z.ZodOptional<z.ZodString>;
266
+ loops: z.ZodRecord<z.ZodString, z.ZodObject<{
267
+ name: z.ZodOptional<z.ZodString>;
268
+ systemPrompt: z.ZodOptional<z.ZodString>;
269
+ tools: z.ZodOptional<z.ZodArray<z.ZodString>>;
270
+ skills: z.ZodOptional<z.ZodArray<z.ZodString>>;
271
+ toolChoice: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
272
+ auto: "auto";
273
+ none: "none";
274
+ required: "required";
275
+ }>, z.ZodObject<{
276
+ mode: z.ZodEnum<{
277
+ auto: "auto";
278
+ none: "none";
279
+ required: "required";
280
+ }>;
281
+ tool: z.ZodOptional<z.ZodString>;
282
+ }, z.core.$strip>]>>;
283
+ model: z.ZodOptional<z.ZodString>;
284
+ reasoning: z.ZodOptional<z.ZodString>;
285
+ temperature: z.ZodOptional<z.ZodNumber>;
286
+ maxTurns: z.ZodOptional<z.ZodNumber>;
287
+ stopWhen: z.ZodOptional<z.ZodObject<{
288
+ expression: z.ZodString;
289
+ }, z.core.$strip>>;
290
+ output: z.ZodOptional<z.ZodObject<{
291
+ schema: z.ZodOptional<z.ZodUnknown>;
292
+ }, z.core.$strip>>;
293
+ }, z.core.$strip>>;
294
+ pipeline: z.ZodOptional<z.ZodObject<{
295
+ mode: z.ZodOptional<z.ZodEnum<{
296
+ parallel: "parallel";
297
+ sequential: "sequential";
298
+ }>>;
299
+ context: z.ZodOptional<z.ZodLiteral<"shared">>;
300
+ steps: z.ZodArray<z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>;
301
+ }, z.core.$strip>>;
302
+ }, z.core.$strip>;
99
303
  /**
100
304
  * Parse and validate a mission JSON document strictly.
101
305
  * Returns the validated document or throws with a clear error message.
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAyC,MAAM,YAAY,CAAC;AAoCzF,eAAO,MAAM,qBAAqB;;;;;;;;;2BAKhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAUrE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG;IAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBrG;AAID,eAAO,MAAM,uBAAuB;;;;;;iBAMlC,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;iBAO7B,CAAC;AAIH,eAAO,MAAM,wBAAwB;;;;;;;;iBAQnC,CAAC;AAwBH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuEhC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,CASxE"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAyC,MAAM,YAAY,CAAC;AAoCzF,eAAO,MAAM,qBAAqB;;;;;;;;;2BAKhC,CAAC;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAUrE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG;IAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAgBrG;AAID,eAAO,MAAM,uBAAuB;;;;;;iBAMlC,CAAC;AAIH,eAAO,MAAM,kBAAkB;;;;;;;iBAO7B,CAAC;AAIH,eAAO,MAAM,wBAAwB;;;;;;;;iBAQnC,CAAC;AAwBH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuEhC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAI1E,eAAO,MAAM,eAAe;;iBAE1B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;mBAM/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAc3B,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAM5C,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA8B/B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkElC,CAAC;AAEH,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAoC3C,CAAC;AAEJ,eAAO,MAAM,cAAc;;;;;;;iBAIzB,CAAC;AAyBH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoBhC,CAAC;AAEH;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,qBAAqB,CASxE"}