@fragno-dev/pi-fragment 0.0.1 → 0.0.3

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 (98) hide show
  1. package/README.md +39 -3
  2. package/dist/browser/client/react.d.ts +44 -36
  3. package/dist/browser/client/react.d.ts.map +1 -1
  4. package/dist/browser/client/react.js +105 -22
  5. package/dist/browser/client/react.js.map +1 -1
  6. package/dist/browser/client/solid.d.ts +42 -36
  7. package/dist/browser/client/solid.d.ts.map +1 -1
  8. package/dist/browser/client/solid.js +27 -13
  9. package/dist/browser/client/solid.js.map +1 -1
  10. package/dist/browser/client/svelte.d.ts +42 -36
  11. package/dist/browser/client/svelte.d.ts.map +1 -1
  12. package/dist/browser/client/svelte.js +14 -6
  13. package/dist/browser/client/svelte.js.map +1 -1
  14. package/dist/browser/client/vanilla.d.ts +99 -39
  15. package/dist/browser/client/vanilla.d.ts.map +1 -1
  16. package/dist/browser/client/vanilla.js +151 -3
  17. package/dist/browser/client/vanilla.js.map +1 -1
  18. package/dist/browser/client/vue.d.ts +54 -38
  19. package/dist/browser/client/vue.d.ts.map +1 -1
  20. package/dist/browser/client/vue.js +25 -17
  21. package/dist/browser/client/vue.js.map +1 -1
  22. package/dist/browser/{factory-DKoO_lRA.js → clients-BscY_HVe.js} +1051 -799
  23. package/dist/browser/clients-BscY_HVe.js.map +1 -0
  24. package/dist/browser/index.d.ts +3 -776
  25. package/dist/browser/index.js +801 -2
  26. package/dist/browser/index.js.map +1 -0
  27. package/dist/browser/routes-CpL_YGWK.d.ts +1560 -0
  28. package/dist/browser/routes-CpL_YGWK.d.ts.map +1 -0
  29. package/dist/cli/mod.d.ts.map +1 -1
  30. package/dist/cli/mod.js +245 -7
  31. package/dist/cli/mod.js.map +1 -1
  32. package/dist/node/{pi → client}/clients.d.ts +46 -36
  33. package/dist/node/client/clients.d.ts.map +1 -0
  34. package/dist/node/client/clients.js +54 -0
  35. package/dist/node/client/clients.js.map +1 -0
  36. package/dist/node/client/session-controller.d.ts +31 -0
  37. package/dist/node/client/session-controller.d.ts.map +1 -0
  38. package/dist/node/client/session-controller.js +33 -0
  39. package/dist/node/client/session-controller.js.map +1 -0
  40. package/dist/node/client/session-store.d.ts +71 -0
  41. package/dist/node/client/session-store.d.ts.map +1 -0
  42. package/dist/node/client/session-store.js +637 -0
  43. package/dist/node/client/session-store.js.map +1 -0
  44. package/dist/node/debug-log.d.ts +9 -0
  45. package/dist/node/debug-log.d.ts.map +1 -0
  46. package/dist/node/debug-log.js +58 -0
  47. package/dist/node/debug-log.js.map +1 -0
  48. package/dist/node/index.d.ts +5 -4
  49. package/dist/node/index.js +5 -3
  50. package/dist/node/pi/definition.d.ts +1 -1
  51. package/dist/node/pi/definition.d.ts.map +1 -1
  52. package/dist/node/pi/dsl.d.ts +5 -2
  53. package/dist/node/pi/dsl.d.ts.map +1 -1
  54. package/dist/node/pi/dsl.js +22 -3
  55. package/dist/node/pi/dsl.js.map +1 -1
  56. package/dist/node/pi/factory.d.ts +37 -34
  57. package/dist/node/pi/factory.d.ts.map +1 -1
  58. package/dist/node/pi/factory.js.map +1 -1
  59. package/dist/node/pi/mappers.js +0 -1
  60. package/dist/node/pi/mappers.js.map +1 -1
  61. package/dist/node/pi/route-schemas.js +42 -10
  62. package/dist/node/pi/route-schemas.js.map +1 -1
  63. package/dist/node/pi/types.d.ts +155 -7
  64. package/dist/node/pi/types.d.ts.map +1 -1
  65. package/dist/node/pi/types.js +6 -0
  66. package/dist/node/pi/types.js.map +1 -0
  67. package/dist/node/pi/workflow/active-session.d.ts +2 -0
  68. package/dist/node/pi/workflow/active-session.js +107 -0
  69. package/dist/node/pi/workflow/active-session.js.map +1 -0
  70. package/dist/node/pi/workflow/agent-runner.d.ts +13 -0
  71. package/dist/node/pi/workflow/agent-runner.d.ts.map +1 -0
  72. package/dist/node/pi/workflow/agent-runner.js +228 -0
  73. package/dist/node/pi/workflow/agent-runner.js.map +1 -0
  74. package/dist/node/pi/workflow/tool-journal.js +157 -0
  75. package/dist/node/pi/workflow/tool-journal.js.map +1 -0
  76. package/dist/node/pi/workflow/workflow.d.ts +29 -0
  77. package/dist/node/pi/workflow/workflow.d.ts.map +1 -0
  78. package/dist/node/pi/workflow/workflow.js +219 -0
  79. package/dist/node/pi/workflow/workflow.js.map +1 -0
  80. package/dist/node/routes.d.ts +38 -35
  81. package/dist/node/routes.d.ts.map +1 -1
  82. package/dist/node/routes.js +203 -132
  83. package/dist/node/routes.js.map +1 -1
  84. package/dist/node/schema.js +1 -1
  85. package/dist/node/schema.js.map +1 -1
  86. package/package.json +30 -29
  87. package/dist/browser/client-Bk-J98pf.d.ts +0 -679
  88. package/dist/browser/client-Bk-J98pf.d.ts.map +0 -1
  89. package/dist/browser/factory-DKoO_lRA.js.map +0 -1
  90. package/dist/browser/index.d.ts.map +0 -1
  91. package/dist/node/pi/clients.d.ts.map +0 -1
  92. package/dist/node/pi/clients.js +0 -18
  93. package/dist/node/pi/clients.js.map +0 -1
  94. package/dist/node/pi/workflow.d.ts +0 -31
  95. package/dist/node/pi/workflow.d.ts.map +0 -1
  96. package/dist/node/pi/workflow.js +0 -242
  97. package/dist/node/pi/workflow.js.map +0 -1
  98. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -2,12 +2,16 @@ import { SESSION_STATUSES, STEERING_MODES } from "./constants.js";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/pi/route-schemas.ts
5
+ const AGENT_LOOP_PHASES = [
6
+ "waiting-for-user",
7
+ "running-agent",
8
+ "complete"
9
+ ];
5
10
  const sessionBaseSchema = z.object({
6
11
  id: z.string(),
7
12
  name: z.string().nullable(),
8
13
  status: z.enum(SESSION_STATUSES),
9
14
  agent: z.string(),
10
- workflowInstanceId: z.string().nullable(),
11
15
  steeringMode: z.enum(STEERING_MODES),
12
16
  metadata: z.any().nullable(),
13
17
  tags: z.array(z.string()),
@@ -36,12 +40,13 @@ const ToolCallSchema = z.object({
36
40
  arguments: z.record(z.string(), z.unknown()),
37
41
  thoughtSignature: z.string().optional()
38
42
  });
39
- const ContentSchema = z.union([
43
+ const UserContentSchema = z.union([TextContentSchema, ImageContentSchema]);
44
+ const AssistantContentSchema = z.union([
40
45
  TextContentSchema,
41
46
  ThinkingContentSchema,
42
- ImageContentSchema,
43
47
  ToolCallSchema
44
48
  ]);
49
+ const ToolResultContentSchema = z.union([TextContentSchema, ImageContentSchema]);
45
50
  const UsageSchema = z.object({
46
51
  input: z.number(),
47
52
  output: z.number(),
@@ -59,17 +64,23 @@ const UsageSchema = z.object({
59
64
  const MessageSchema = z.union([
60
65
  z.object({
61
66
  role: z.literal("user"),
62
- content: z.union([z.string(), z.array(ContentSchema)]),
67
+ content: z.union([z.string(), z.array(UserContentSchema)]),
63
68
  timestamp: z.number()
64
69
  }),
65
70
  z.object({
66
71
  role: z.literal("assistant"),
67
- content: z.array(ContentSchema),
72
+ content: z.array(AssistantContentSchema),
68
73
  api: z.string(),
69
74
  provider: z.string(),
70
75
  model: z.string(),
71
76
  usage: UsageSchema,
72
- stopReason: z.string(),
77
+ stopReason: z.enum([
78
+ "stop",
79
+ "length",
80
+ "toolUse",
81
+ "error",
82
+ "aborted"
83
+ ]),
73
84
  errorMessage: z.string().optional(),
74
85
  timestamp: z.number()
75
86
  }),
@@ -77,16 +88,32 @@ const MessageSchema = z.union([
77
88
  role: z.literal("toolResult"),
78
89
  toolCallId: z.string(),
79
90
  toolName: z.string(),
80
- content: z.array(ContentSchema),
91
+ content: z.array(ToolResultContentSchema),
81
92
  details: z.unknown().optional(),
82
93
  isError: z.boolean(),
83
94
  timestamp: z.number()
84
95
  })
85
96
  ]);
86
- const TraceSchema = z.object({
97
+ const TraceSchema = z.custom();
98
+ const EventSchema = z.object({
99
+ id: z.string(),
100
+ runNumber: z.number().nullable().optional(),
87
101
  type: z.string(),
88
- timestamp: z.number().optional()
102
+ payload: z.unknown().nullable(),
103
+ createdAt: z.date(),
104
+ deliveredAt: z.date().nullable(),
105
+ consumedByStepKey: z.string().nullable()
89
106
  });
107
+ const WaitingForSchema = z.union([z.object({
108
+ type: z.literal("user_message"),
109
+ turn: z.number(),
110
+ stepKey: z.string(),
111
+ timeoutMs: z.number().nullable()
112
+ }), z.object({
113
+ type: z.literal("assistant"),
114
+ turn: z.number(),
115
+ stepKey: z.string()
116
+ })]).nullable();
90
117
  const workflowStatusSchema = z.object({
91
118
  status: z.enum(SESSION_STATUSES),
92
119
  error: z.object({
@@ -98,7 +125,11 @@ const workflowStatusSchema = z.object({
98
125
  const sessionDetailSchema = sessionBaseSchema.extend({
99
126
  workflow: workflowStatusSchema,
100
127
  messages: z.array(MessageSchema),
128
+ events: z.array(EventSchema),
101
129
  trace: z.array(TraceSchema),
130
+ turn: z.number(),
131
+ phase: z.enum(AGENT_LOOP_PHASES),
132
+ waitingFor: WaitingForSchema,
102
133
  summaries: z.array(z.object({
103
134
  turn: z.number(),
104
135
  assistant: z.any().nullable(),
@@ -106,7 +137,8 @@ const sessionDetailSchema = sessionBaseSchema.extend({
106
137
  }))
107
138
  });
108
139
  const messageAckSchema = z.object({ status: z.enum(SESSION_STATUSES) });
140
+ const activeSessionStreamItemSchema = z.custom();
109
141
 
110
142
  //#endregion
111
- export { messageAckSchema, sessionBaseSchema, sessionDetailSchema };
143
+ export { activeSessionStreamItemSchema, messageAckSchema, sessionBaseSchema, sessionDetailSchema };
112
144
  //# sourceMappingURL=route-schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-schemas.js","names":[],"sources":["../../../src/pi/route-schemas.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { SESSION_STATUSES, STEERING_MODES } from \"./constants\";\n\nconst sessionBaseSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n status: z.enum(SESSION_STATUSES),\n agent: z.string(),\n workflowInstanceId: z.string().nullable(),\n steeringMode: z.enum(STEERING_MODES),\n metadata: z.any().nullable(),\n tags: z.array(z.string()),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nconst TextContentSchema = z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n textSignature: z.string().optional(),\n});\n\nconst ThinkingContentSchema = z.object({\n type: z.literal(\"thinking\"),\n thinking: z.string(),\n thinkingSignature: z.string().optional(),\n});\n\nconst ImageContentSchema = z.object({\n type: z.literal(\"image\"),\n data: z.string(),\n mimeType: z.string(),\n});\n\nconst ToolCallSchema = z.object({\n type: z.literal(\"toolCall\"),\n id: z.string(),\n name: z.string(),\n arguments: z.record(z.string(), z.unknown()),\n thoughtSignature: z.string().optional(),\n});\n\nconst ContentSchema = z.union([\n TextContentSchema,\n ThinkingContentSchema,\n ImageContentSchema,\n ToolCallSchema,\n]);\n\nconst UsageSchema = z.object({\n input: z.number(),\n output: z.number(),\n cacheRead: z.number(),\n cacheWrite: z.number(),\n totalTokens: z.number(),\n cost: z.object({\n input: z.number(),\n output: z.number(),\n cacheRead: z.number(),\n cacheWrite: z.number(),\n total: z.number(),\n }),\n});\n\nconst MessageSchema = z.union([\n z.object({\n role: z.literal(\"user\"),\n content: z.union([z.string(), z.array(ContentSchema)]),\n timestamp: z.number(),\n }),\n z.object({\n role: z.literal(\"assistant\"),\n content: z.array(ContentSchema),\n api: z.string(),\n provider: z.string(),\n model: z.string(),\n usage: UsageSchema,\n stopReason: z.string(),\n errorMessage: z.string().optional(),\n timestamp: z.number(),\n }),\n z.object({\n role: z.literal(\"toolResult\"),\n toolCallId: z.string(),\n toolName: z.string(),\n content: z.array(ContentSchema),\n details: z.unknown().optional(),\n isError: z.boolean(),\n timestamp: z.number(),\n }),\n]);\n\nconst TraceSchema = z.object({\n type: z.string(),\n timestamp: z.number().optional(),\n});\n\nconst workflowStatusSchema = z.object({\n status: z.enum(SESSION_STATUSES),\n error: z\n .object({\n name: z.string(),\n message: z.string(),\n })\n .optional(),\n output: z.any().optional(),\n});\n\nconst sessionDetailSchema = sessionBaseSchema.extend({\n workflow: workflowStatusSchema,\n messages: z.array(MessageSchema),\n trace: z.array(TraceSchema),\n summaries: z.array(\n z.object({\n turn: z.number(),\n assistant: z.any().nullable(),\n summary: z.string().nullable(),\n }),\n ),\n});\n\nconst messageAckSchema = z.object({\n status: z.enum(SESSION_STATUSES),\n});\n\nexport { messageAckSchema, sessionBaseSchema, sessionDetailSchema, workflowStatusSchema };\n"],"mappings":"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"}
1
+ {"version":3,"file":"route-schemas.js","names":[],"sources":["../../../src/pi/route-schemas.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport type { AgentEvent } from \"@mariozechner/pi-agent-core\";\n\nimport { SESSION_STATUSES, STEERING_MODES } from \"./constants\";\nimport type { PiActiveSessionProtocolMessage } from \"./types\";\n\nconst AGENT_LOOP_PHASES = [\"waiting-for-user\", \"running-agent\", \"complete\"] as const;\n\nconst sessionBaseSchema = z.object({\n id: z.string(),\n name: z.string().nullable(),\n status: z.enum(SESSION_STATUSES),\n agent: z.string(),\n steeringMode: z.enum(STEERING_MODES),\n metadata: z.any().nullable(),\n tags: z.array(z.string()),\n createdAt: z.date(),\n updatedAt: z.date(),\n});\n\nconst TextContentSchema = z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n textSignature: z.string().optional(),\n});\n\nconst ThinkingContentSchema = z.object({\n type: z.literal(\"thinking\"),\n thinking: z.string(),\n thinkingSignature: z.string().optional(),\n});\n\nconst ImageContentSchema = z.object({\n type: z.literal(\"image\"),\n data: z.string(),\n mimeType: z.string(),\n});\n\nconst ToolCallSchema = z.object({\n type: z.literal(\"toolCall\"),\n id: z.string(),\n name: z.string(),\n arguments: z.record(z.string(), z.unknown()),\n thoughtSignature: z.string().optional(),\n});\n\n// Per-role content unions matching the actual AgentMessage types from @mariozechner/pi-ai:\n// - UserMessage.content: string | (TextContent | ImageContent)[]\n// - AssistantMessage.content: (TextContent | ThinkingContent | ToolCall)[]\n// - ToolResultMessage.content:(TextContent | ImageContent)[]\nconst UserContentSchema = z.union([TextContentSchema, ImageContentSchema]);\nconst AssistantContentSchema = z.union([TextContentSchema, ThinkingContentSchema, ToolCallSchema]);\nconst ToolResultContentSchema = z.union([TextContentSchema, ImageContentSchema]);\n\nconst UsageSchema = z.object({\n input: z.number(),\n output: z.number(),\n cacheRead: z.number(),\n cacheWrite: z.number(),\n totalTokens: z.number(),\n cost: z.object({\n input: z.number(),\n output: z.number(),\n cacheRead: z.number(),\n cacheWrite: z.number(),\n total: z.number(),\n }),\n});\n\nconst MessageSchema = z.union([\n z.object({\n role: z.literal(\"user\"),\n content: z.union([z.string(), z.array(UserContentSchema)]),\n timestamp: z.number(),\n }),\n z.object({\n role: z.literal(\"assistant\"),\n content: z.array(AssistantContentSchema),\n api: z.string(),\n provider: z.string(),\n model: z.string(),\n usage: UsageSchema,\n stopReason: z.enum([\"stop\", \"length\", \"toolUse\", \"error\", \"aborted\"]),\n errorMessage: z.string().optional(),\n timestamp: z.number(),\n }),\n z.object({\n role: z.literal(\"toolResult\"),\n toolCallId: z.string(),\n toolName: z.string(),\n content: z.array(ToolResultContentSchema),\n details: z.unknown().optional(),\n isError: z.boolean(),\n timestamp: z.number(),\n }),\n]);\n\n// AgentEvent is a discriminated union that recursively contains AgentMessage[],\n// making a full structural Zod schema impractical.\nconst TraceSchema: z.ZodType<AgentEvent> = z.custom<AgentEvent>();\n\nconst EventSchema = z.object({\n id: z.string(),\n runNumber: z.number().nullable().optional(),\n type: z.string(),\n payload: z.unknown().nullable(),\n createdAt: z.date(),\n deliveredAt: z.date().nullable(),\n consumedByStepKey: z.string().nullable(),\n});\n\nconst WaitingForSchema = z\n .union([\n z.object({\n type: z.literal(\"user_message\"),\n turn: z.number(),\n stepKey: z.string(),\n timeoutMs: z.number().nullable(),\n }),\n z.object({\n type: z.literal(\"assistant\"),\n turn: z.number(),\n stepKey: z.string(),\n }),\n ])\n .nullable();\n\nconst workflowStatusSchema = z.object({\n status: z.enum(SESSION_STATUSES),\n error: z\n .object({\n name: z.string(),\n message: z.string(),\n })\n .optional(),\n output: z.any().optional(),\n});\n\nconst sessionDetailSchema = sessionBaseSchema.extend({\n workflow: workflowStatusSchema,\n messages: z.array(MessageSchema),\n events: z.array(EventSchema),\n trace: z.array(TraceSchema),\n turn: z.number(),\n phase: z.enum(AGENT_LOOP_PHASES),\n waitingFor: WaitingForSchema,\n summaries: z.array(\n z.object({\n turn: z.number(),\n assistant: z.any().nullable(),\n summary: z.string().nullable(),\n }),\n ),\n});\n\nconst messageAckSchema = z.object({\n status: z.enum(SESSION_STATUSES),\n});\n\nconst activeSessionStreamItemSchema: z.ZodType<PiActiveSessionProtocolMessage> =\n z.custom<PiActiveSessionProtocolMessage>();\n\nexport {\n activeSessionStreamItemSchema,\n messageAckSchema,\n sessionBaseSchema,\n sessionDetailSchema,\n workflowStatusSchema,\n};\n"],"mappings":"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"}
@@ -1,18 +1,18 @@
1
+ import { PiLoggerConfig } from "../debug-log.js";
1
2
  import { PiSessionStatus, PiSteeringMode } from "./constants.js";
2
- import { InstantiatedFragmentFromDefinition } from "@fragno-dev/core";
3
+ import { PiWorkflowsRegistry } from "./workflow/workflow.js";
3
4
  import { TxResult } from "@fragno-dev/db";
5
+ import { InstanceStatus, WorkflowsFragmentServices, WorkflowsHistoryStep } from "@fragno-dev/workflows";
4
6
  import { AgentEvent, AgentMessage, AgentOptions, AgentTool, StreamFn, ThinkingLevel } from "@mariozechner/pi-agent-core";
5
- import { Api, Model } from "@mariozechner/pi-ai";
6
- import { InstanceStatus, WorkflowsHistoryStep, workflowsFragmentDefinition } from "@fragno-dev/workflows";
7
+ import { Api, ImageContent, Model, TextContent } from "@mariozechner/pi-ai";
7
8
 
8
9
  //#region src/pi/types.d.ts
9
- type WorkflowsService = InstantiatedFragmentFromDefinition<typeof workflowsFragmentDefinition>["services"];
10
+ type WorkflowsService = WorkflowsFragmentServices<PiWorkflowsRegistry>;
10
11
  type PiSession = {
11
12
  id: string;
12
13
  name: string | null;
13
14
  status: PiSessionStatus;
14
15
  agent: string;
15
- workflowInstanceId: string | null;
16
16
  steeringMode: PiSteeringMode;
17
17
  metadata: unknown;
18
18
  tags: string[];
@@ -24,9 +24,88 @@ type PiTurnSummary = {
24
24
  assistant: AgentMessage | null;
25
25
  summary: string | null;
26
26
  };
27
+ type PiSessionDetailEvent = {
28
+ id: string;
29
+ type: string;
30
+ payload: unknown | null;
31
+ createdAt: Date;
32
+ deliveredAt: Date | null;
33
+ consumedByStepKey: string | null;
34
+ runNumber?: number | null;
35
+ };
36
+ type PiAgentLoopPhase = "waiting-for-user" | "running-agent" | "complete";
37
+ type PiActiveSessionStreamItem = AgentEvent;
38
+ type PiActiveSessionSettledStatus = "waiting-for-user" | "complete" | "errored";
39
+ type PiActiveSessionUpdate = {
40
+ type: "event";
41
+ turn: number;
42
+ event: PiActiveSessionStreamItem;
43
+ } | {
44
+ type: "settled";
45
+ turn: number;
46
+ status: PiActiveSessionSettledStatus;
47
+ };
48
+ type PiActiveSessionSubscriber = (update: PiActiveSessionUpdate) => void;
49
+ type PiActiveSessionReplayBufferEntry = {
50
+ turn: number;
51
+ updates: PiActiveSessionUpdate[];
52
+ };
53
+ type PiActiveSessionReplayBuffer = PiActiveSessionReplayBufferEntry[];
54
+ type PiActiveSessionState = {
55
+ subscribe: (listener: PiActiveSessionSubscriber) => () => void;
56
+ publishEvent: (turn: number, event: PiActiveSessionStreamItem) => void;
57
+ settleTurn: (turn: number, status: PiActiveSessionSettledStatus) => void;
58
+ replayTurn: (turn: number) => PiActiveSessionUpdate[];
59
+ exportReplayBuffer: () => PiActiveSessionReplayBuffer;
60
+ importReplayBuffer: (buffer: PiActiveSessionReplayBuffer) => void;
61
+ listenerCount: () => number;
62
+ };
63
+ type PiAgentLoopWaitingFor = {
64
+ type: "user_message";
65
+ turn: number;
66
+ stepKey: string;
67
+ timeoutMs: number | null;
68
+ } | {
69
+ type: "assistant";
70
+ turn: number;
71
+ stepKey: string;
72
+ } | null;
73
+ type PiAgentLoopSerializableState = {
74
+ messages: AgentMessage[];
75
+ events: PiSessionDetailEvent[];
76
+ trace: AgentEvent[];
77
+ summaries: PiTurnSummary[];
78
+ turn: number;
79
+ phase: PiAgentLoopPhase;
80
+ waitingFor: PiAgentLoopWaitingFor;
81
+ };
82
+ type PiAgentLoopPersistedState = PiAgentLoopSerializableState & {
83
+ activeSessionUpdatesByTurn: PiActiveSessionReplayBuffer;
84
+ };
85
+ type PiSessionWorkflowStatus = {
86
+ status: PiSessionStatus;
87
+ error?: {
88
+ name: string;
89
+ message: string;
90
+ };
91
+ output?: unknown;
92
+ };
93
+ type PiSessionDetail = PiSession & {
94
+ workflow: PiSessionWorkflowStatus;
95
+ messages: AgentMessage[];
96
+ events: PiSessionDetailEvent[];
97
+ trace: AgentEvent[];
98
+ summaries: PiTurnSummary[];
99
+ turn: number;
100
+ phase: PiAgentLoopPhase;
101
+ waitingFor: PiAgentLoopWaitingFor;
102
+ };
103
+ type PiAgentLoopState = PiAgentLoopPersistedState & {
104
+ activeSession?: PiActiveSessionState;
105
+ };
27
106
  type PiWorkflowsInstanceStatus = InstanceStatus;
28
107
  type PiWorkflowHistoryStep = WorkflowsHistoryStep;
29
- type PiWorkflowsService = Pick<WorkflowsService, "createInstance" | "getInstanceStatus" | "getInstanceRunNumber" | "sendEvent" | "listHistory"> & {
108
+ type PiWorkflowsService = Pick<WorkflowsService, "createInstance" | "getInstanceStatus" | "getLiveInstanceState" | "restoreInstanceState" | "sendEvent"> & {
30
109
  getInstanceStatusBatch?: (workflowName: string, instanceIds: string[]) => TxResult<PiWorkflowsInstanceStatus[], PiWorkflowsInstanceStatus[]>;
31
110
  };
32
111
  type PiAgentDefinition = {
@@ -49,11 +128,75 @@ type PiAgentDefinition = {
49
128
  }) => void;
50
129
  };
51
130
  type PiAgentRegistry = Record<string, PiAgentDefinition>;
131
+ declare const PI_TOOL_JOURNAL_VERSION: 1;
132
+ type PiToolJournalVersion = typeof PI_TOOL_JOURNAL_VERSION;
133
+ type PiToolCallStableKey = string;
134
+ type PiPersistedToolResult = {
135
+ content: Array<TextContent | ImageContent>;
136
+ details: unknown;
137
+ };
138
+ type PiPersistedToolCallSource = "executed" | "replay";
139
+ type PiPersistedToolCallV1 = {
140
+ version: PiToolJournalVersion;
141
+ key: PiToolCallStableKey;
142
+ sessionId: string;
143
+ turnId: string;
144
+ toolCallId: string;
145
+ toolName: string;
146
+ args: Record<string, unknown>;
147
+ result: PiPersistedToolResult;
148
+ isError: boolean;
149
+ source: PiPersistedToolCallSource;
150
+ capturedAt: number;
151
+ seq: number;
152
+ };
153
+ type PiActiveSessionSystemMessage = {
154
+ layer: "system";
155
+ type: "snapshot";
156
+ turn: number;
157
+ phase: PiAgentLoopPhase;
158
+ waitingFor: PiAgentLoopWaitingFor;
159
+ replayCount: number;
160
+ } | {
161
+ layer: "system";
162
+ type: "settled";
163
+ turn: number;
164
+ status: PiActiveSessionSettledStatus;
165
+ } | {
166
+ layer: "system";
167
+ type: "inactive";
168
+ reason: "session-complete" | "session-idle";
169
+ turn: number;
170
+ phase: PiAgentLoopPhase;
171
+ waitingFor: PiAgentLoopWaitingFor;
172
+ };
173
+ type PiActiveSessionProtocolMessage = PiActiveSessionSystemMessage | {
174
+ layer: "pi";
175
+ type: "event";
176
+ turn: number;
177
+ source: "replay" | "live";
178
+ event: PiActiveSessionStreamItem;
179
+ };
180
+ type PiPersistedToolCall = PiPersistedToolCallV1;
181
+ type PiToolReplayCache = Map<PiToolCallStableKey, PiPersistedToolCall>;
182
+ type PiToolSideEffectReducerContext = {
183
+ key: PiToolCallStableKey;
184
+ sessionId: string;
185
+ turnId: string;
186
+ };
187
+ type PiToolSideEffectReducer = (state: unknown, entry: PiPersistedToolCall, ctx: PiToolSideEffectReducerContext) => unknown;
188
+ type PiToolSideEffectReducerRegistry = Record<string, PiToolSideEffectReducer>;
189
+ type PiToolReplayContext = {
190
+ cache: PiToolReplayCache;
191
+ journal: PiPersistedToolCall[];
192
+ sideEffects: Record<string, unknown>;
193
+ };
52
194
  type PiToolFactoryContext = {
53
195
  session: PiSession;
54
196
  turnId: string;
55
197
  toolConfig: unknown;
56
198
  messages: AgentMessage[];
199
+ replay: PiToolReplayContext;
57
200
  };
58
201
  type PiToolFactory = AgentTool | ((ctx: PiToolFactoryContext) => AgentTool | Promise<AgentTool>);
59
202
  type PiToolRegistry = Record<string, PiToolFactory>;
@@ -61,7 +204,12 @@ interface PiFragmentConfig {
61
204
  agents: PiAgentRegistry;
62
205
  tools: PiToolRegistry;
63
206
  defaultSteeringMode?: PiSteeringMode;
207
+ toolSideEffectReducers?: PiToolSideEffectReducerRegistry;
208
+ /**
209
+ * Optional logging config for internal pi-fragment diagnostics.
210
+ */
211
+ logging?: PiLoggerConfig;
64
212
  }
65
213
  //#endregion
66
- export { PiAgentDefinition, PiAgentRegistry, PiFragmentConfig, PiSession, PiToolFactory, PiToolFactoryContext, PiToolRegistry, PiTurnSummary, PiWorkflowHistoryStep, PiWorkflowsInstanceStatus, PiWorkflowsService };
214
+ export { PI_TOOL_JOURNAL_VERSION, PiActiveSessionProtocolMessage, PiActiveSessionStreamItem, PiAgentDefinition, PiAgentLoopState, PiAgentRegistry, PiFragmentConfig, PiPersistedToolCall, PiPersistedToolCallSource, PiPersistedToolResult, PiSession, PiSessionDetail, PiToolFactory, PiToolFactoryContext, PiToolRegistry, PiToolReplayCache, PiToolReplayContext, PiToolSideEffectReducer, PiToolSideEffectReducerContext, PiToolSideEffectReducerRegistry, PiTurnSummary, PiWorkflowHistoryStep, PiWorkflowsInstanceStatus, PiWorkflowsService };
67
215
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/pi/types.ts"],"mappings":";;;;;;;;KAoBY,gBAAA,GAAmB,kCAAA,QACtB,2BAAA;AAAA,KAGG,SAAA;EACV,EAAA;EACA,IAAA;EACA,MAAA,EAAQ,eAAA;EACR,KAAA;EACA,kBAAA;EACA,YAAA,EAAc,cAAA;EACd,QAAA;EACA,IAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;AAAA;AAAA,KAGD,aAAA;EACV,IAAA;EACA,SAAA,EAAW,YAAA;EACX,OAAA;AAAA;AAAA,KAGU,yBAAA,GAA4B,cAAA;AAAA,KAE5B,qBAAA,GAAwB,oBAAA;AAAA,KAExB,kBAAA,GAAqB,IAAA,CAC/B,gBAAA;EAGA,sBAAA,IACE,YAAA,UACA,WAAA,eACG,QAAA,CAAS,yBAAA,IAA6B,yBAAA;AAAA;AAAA,KAGjC,iBAAA;EACV,IAAA;EACA,YAAA;EACA,KAAA,EAAO,KAAA,CAAM,GAAA;EACb,aAAA,GAAgB,aAAA;EAChB,KAAA;EACA,UAAA;EACA,cAAA;EACA,QAAA,GAAW,QAAA;EACX,YAAA,GAAe,YAAA;EACf,gBAAA,GAAmB,YAAA;EACnB,SAAA,GAAY,YAAA;EACZ,eAAA,GAAkB,YAAA;EAClB,eAAA,GAAkB,YAAA;EAClB,OAAA,IAAW,KAAA,EAAO,UAAA,EAAY,GAAA;IAAO,SAAA;IAAmB,MAAA;EAAA;AAAA;AAAA,KAG9C,eAAA,GAAkB,MAAA,SAAe,iBAAA;AAAA,KAEjC,oBAAA;EACV,OAAA,EAAS,SAAA;EACT,MAAA;EACA,UAAA;EACA,QAAA,EAAU,YAAA;AAAA;AAAA,KAGA,aAAA,GACR,SAAA,KACE,GAAA,EAAK,oBAAA,KAAyB,SAAA,GAAY,OAAA,CAAQ,SAAA;AAAA,KAE5C,cAAA,GAAiB,MAAA,SAAe,aAAA;AAAA,UAE3B,gBAAA;EACf,MAAA,EAAQ,eAAA;EACR,KAAA,EAAO,cAAA;EACP,mBAAA,GAAsB,cAAA;AAAA"}
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../../src/pi/types.ts"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ //#region src/pi/types.ts
2
+ const PI_TOOL_JOURNAL_VERSION = 1;
3
+
4
+ //#endregion
5
+ export { PI_TOOL_JOURNAL_VERSION };
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/pi/types.ts"],"sourcesContent":["import type { TxResult } from \"@fragno-dev/db\";\nimport type {\n InstanceStatus,\n WorkflowsFragmentServices,\n WorkflowsHistory,\n WorkflowsHistoryStep,\n} from \"@fragno-dev/workflows\";\n\nimport type {\n AgentEvent,\n AgentMessage,\n AgentOptions,\n AgentTool,\n StreamFn,\n ThinkingLevel,\n} from \"@mariozechner/pi-agent-core\";\nimport type { Api, ImageContent, Model, TextContent } from \"@mariozechner/pi-ai\";\n\nimport type { PiLoggerConfig } from \"../debug-log\";\nimport type { PiSessionStatus, PiSteeringMode } from \"./constants\";\nimport type { PiWorkflowsRegistry } from \"./workflow/workflow\";\n\nexport type WorkflowsService = WorkflowsFragmentServices<PiWorkflowsRegistry>;\n\nexport type PiSession = {\n id: string;\n name: string | null;\n status: PiSessionStatus;\n agent: string;\n steeringMode: PiSteeringMode;\n metadata: unknown;\n tags: string[];\n createdAt: Date;\n updatedAt: Date;\n};\n\nexport type PiTurnSummary = {\n turn: number;\n assistant: AgentMessage | null;\n summary: string | null;\n};\n\nexport type PiSessionDetailEvent = {\n id: string;\n type: string;\n payload: unknown | null;\n createdAt: Date;\n deliveredAt: Date | null;\n consumedByStepKey: string | null;\n runNumber?: number | null;\n};\n\nexport type PiAgentLoopPhase = \"waiting-for-user\" | \"running-agent\" | \"complete\";\n\nexport type PiActiveSessionStreamItem = AgentEvent;\n\nexport type PiActiveSessionSettledStatus = \"waiting-for-user\" | \"complete\" | \"errored\";\n\nexport type PiActiveSessionUpdate =\n | {\n type: \"event\";\n turn: number;\n event: PiActiveSessionStreamItem;\n }\n | {\n type: \"settled\";\n turn: number;\n status: PiActiveSessionSettledStatus;\n };\n\nexport type PiActiveSessionSubscriber = (update: PiActiveSessionUpdate) => void;\n\nexport type PiActiveSessionReplayBufferEntry = {\n turn: number;\n updates: PiActiveSessionUpdate[];\n};\n\nexport type PiActiveSessionReplayBuffer = PiActiveSessionReplayBufferEntry[];\n\nexport type PiActiveSessionState = {\n subscribe: (listener: PiActiveSessionSubscriber) => () => void;\n publishEvent: (turn: number, event: PiActiveSessionStreamItem) => void;\n settleTurn: (turn: number, status: PiActiveSessionSettledStatus) => void;\n replayTurn: (turn: number) => PiActiveSessionUpdate[];\n exportReplayBuffer: () => PiActiveSessionReplayBuffer;\n importReplayBuffer: (buffer: PiActiveSessionReplayBuffer) => void;\n listenerCount: () => number;\n};\n\nexport type PiAgentLoopWaitingFor =\n | {\n type: \"user_message\";\n turn: number;\n stepKey: string;\n timeoutMs: number | null;\n }\n | {\n type: \"assistant\";\n turn: number;\n stepKey: string;\n }\n | null;\n\nexport type PiAgentLoopSerializableState = {\n messages: AgentMessage[];\n events: PiSessionDetailEvent[];\n trace: AgentEvent[];\n summaries: PiTurnSummary[];\n turn: number;\n phase: PiAgentLoopPhase;\n waitingFor: PiAgentLoopWaitingFor;\n};\n\nexport type PiAgentLoopPersistedState = PiAgentLoopSerializableState & {\n activeSessionUpdatesByTurn: PiActiveSessionReplayBuffer;\n};\n\nexport type PiSessionWorkflowStatus = {\n status: PiSessionStatus;\n error?: { name: string; message: string };\n output?: unknown;\n};\n\nexport type PiSessionDetail = PiSession & {\n workflow: PiSessionWorkflowStatus;\n messages: AgentMessage[];\n events: PiSessionDetailEvent[];\n trace: AgentEvent[];\n summaries: PiTurnSummary[];\n turn: number;\n phase: PiAgentLoopPhase;\n waitingFor: PiAgentLoopWaitingFor;\n};\n\nexport type PiAgentLoopState = PiAgentLoopPersistedState & {\n activeSession?: PiActiveSessionState;\n};\n\nexport type PiWorkflowsInstanceStatus = InstanceStatus;\nexport type PiWorkflowsHistoryPage = WorkflowsHistory;\nexport type PiWorkflowHistoryStep = WorkflowsHistoryStep;\n\nexport type PiWorkflowsService = Pick<\n WorkflowsService,\n | \"createInstance\"\n | \"getInstanceStatus\"\n | \"getLiveInstanceState\"\n | \"restoreInstanceState\"\n | \"sendEvent\"\n> & {\n getInstanceStatusBatch?: (\n workflowName: string,\n instanceIds: string[],\n ) => TxResult<PiWorkflowsInstanceStatus[], PiWorkflowsInstanceStatus[]>;\n};\n\nexport type PiAgentDefinition = {\n name: string;\n systemPrompt: string;\n model: Model<Api>;\n thinkingLevel?: ThinkingLevel;\n tools?: string[];\n toolConfig?: unknown;\n maxTraceEvents?: number;\n streamFn?: StreamFn;\n convertToLlm?: AgentOptions[\"convertToLlm\"];\n transformContext?: AgentOptions[\"transformContext\"];\n getApiKey?: AgentOptions[\"getApiKey\"];\n thinkingBudgets?: AgentOptions[\"thinkingBudgets\"];\n maxRetryDelayMs?: AgentOptions[\"maxRetryDelayMs\"];\n onEvent?: (event: AgentEvent, ctx: { sessionId: string; turnId: string }) => void;\n};\n\nexport type PiAgentRegistry = Record<string, PiAgentDefinition>;\n\nexport const PI_TOOL_JOURNAL_VERSION = 1 as const;\n\nexport type PiToolJournalVersion = typeof PI_TOOL_JOURNAL_VERSION;\n\nexport type PiToolCallStableKey = string;\n\nexport type PiPersistedToolResult = {\n content: Array<TextContent | ImageContent>;\n details: unknown;\n};\n\nexport type PiPersistedToolCallSource = \"executed\" | \"replay\";\n\nexport type PiPersistedToolCallV1 = {\n version: PiToolJournalVersion;\n key: PiToolCallStableKey;\n sessionId: string;\n turnId: string;\n toolCallId: string;\n toolName: string;\n args: Record<string, unknown>;\n result: PiPersistedToolResult;\n isError: boolean;\n source: PiPersistedToolCallSource;\n capturedAt: number;\n seq: number;\n};\n\nexport type PiActiveSessionSystemMessage =\n | {\n layer: \"system\";\n type: \"snapshot\";\n turn: number;\n phase: PiAgentLoopPhase;\n waitingFor: PiAgentLoopWaitingFor;\n replayCount: number;\n }\n | {\n layer: \"system\";\n type: \"settled\";\n turn: number;\n status: PiActiveSessionSettledStatus;\n }\n | {\n layer: \"system\";\n type: \"inactive\";\n reason: \"session-complete\" | \"session-idle\";\n turn: number;\n phase: PiAgentLoopPhase;\n waitingFor: PiAgentLoopWaitingFor;\n };\n\nexport type PiActiveSessionProtocolMessage =\n | PiActiveSessionSystemMessage\n | {\n layer: \"pi\";\n type: \"event\";\n turn: number;\n source: \"replay\" | \"live\";\n event: PiActiveSessionStreamItem;\n };\n\nexport type PiPersistedToolCall = PiPersistedToolCallV1;\n\nexport type PiToolReplayCache = Map<PiToolCallStableKey, PiPersistedToolCall>;\n\nexport type PiToolSideEffectReducerContext = {\n key: PiToolCallStableKey;\n sessionId: string;\n turnId: string;\n};\n\nexport type PiToolSideEffectReducer = (\n state: unknown,\n entry: PiPersistedToolCall,\n ctx: PiToolSideEffectReducerContext,\n) => unknown;\n\nexport type PiToolSideEffectReducerRegistry = Record<string, PiToolSideEffectReducer>;\n\nexport type PiToolReplayContext = {\n cache: PiToolReplayCache;\n journal: PiPersistedToolCall[];\n sideEffects: Record<string, unknown>;\n};\n\nexport type PiToolFactoryContext = {\n session: PiSession;\n turnId: string;\n toolConfig: unknown;\n messages: AgentMessage[];\n replay: PiToolReplayContext;\n};\n\nexport type PiToolFactory =\n | AgentTool\n | ((ctx: PiToolFactoryContext) => AgentTool | Promise<AgentTool>);\n\nexport type PiToolRegistry = Record<string, PiToolFactory>;\n\nexport interface PiFragmentConfig {\n agents: PiAgentRegistry;\n tools: PiToolRegistry;\n defaultSteeringMode?: PiSteeringMode;\n toolSideEffectReducers?: PiToolSideEffectReducerRegistry;\n /**\n * Optional logging config for internal pi-fragment diagnostics.\n */\n logging?: PiLoggerConfig;\n}\n"],"mappings":";AA+KA,MAAa,0BAA0B"}
@@ -0,0 +1,2 @@
1
+ import "../types.js";
2
+ import { AgentMessage } from "@mariozechner/pi-agent-core";
@@ -0,0 +1,107 @@
1
+ //#region src/pi/workflow/active-session.ts
2
+ const WAIT_FOR_USER_TIMEOUT_MS = 3600 * 1e3;
3
+ const buildWaitingForUser = (turn) => ({
4
+ type: "user_message",
5
+ turn,
6
+ stepKey: `waitForEvent:wait-user-${turn}`,
7
+ timeoutMs: WAIT_FOR_USER_TIMEOUT_MS
8
+ });
9
+ const getActiveSessionReplayBuffer = (state) => {
10
+ const replayBuffer = state.activeSessionUpdatesByTurn;
11
+ return Array.isArray(replayBuffer) ? structuredClone(replayBuffer) : [];
12
+ };
13
+ const createPiActiveSessionState = (options) => {
14
+ const listeners = /* @__PURE__ */ new Set();
15
+ const updatesByTurn = /* @__PURE__ */ new Map();
16
+ const trimPreviousTurns = (turn) => {
17
+ for (const previousTurn of updatesByTurn.keys()) if (previousTurn < turn - 1) updatesByTurn.delete(previousTurn);
18
+ };
19
+ const appendUpdate = (turn, update) => {
20
+ const existing = updatesByTurn.get(turn) ?? [];
21
+ updatesByTurn.set(turn, [...existing, structuredClone(update)]);
22
+ trimPreviousTurns(turn);
23
+ };
24
+ const exportReplayBuffer = () => structuredClone([...updatesByTurn.entries()].sort(([leftTurn], [rightTurn]) => leftTurn - rightTurn).map(([turn, updates]) => ({
25
+ turn,
26
+ updates
27
+ })));
28
+ const syncReplayBuffer = () => {
29
+ options?.onReplayBufferChange?.(exportReplayBuffer());
30
+ };
31
+ const importReplayBuffer = (buffer) => {
32
+ updatesByTurn.clear();
33
+ for (const entry of structuredClone(buffer)) for (const update of entry.updates) appendUpdate(entry.turn, update);
34
+ syncReplayBuffer();
35
+ };
36
+ if (options?.replayBuffer) importReplayBuffer(options.replayBuffer);
37
+ const notify = (update) => {
38
+ for (const listener of Array.from(listeners)) try {
39
+ listener(update);
40
+ } catch (error) {
41
+ console.warn("Pi active-session listener failed.", {
42
+ error,
43
+ updateType: update.type
44
+ });
45
+ }
46
+ };
47
+ return {
48
+ subscribe(listener) {
49
+ listeners.add(listener);
50
+ return () => {
51
+ listeners.delete(listener);
52
+ };
53
+ },
54
+ publishEvent(turn, event) {
55
+ const update = {
56
+ type: "event",
57
+ turn,
58
+ event
59
+ };
60
+ appendUpdate(turn, update);
61
+ syncReplayBuffer();
62
+ notify(update);
63
+ },
64
+ settleTurn(turn, status) {
65
+ const update = {
66
+ type: "settled",
67
+ turn,
68
+ status
69
+ };
70
+ appendUpdate(turn, update);
71
+ syncReplayBuffer();
72
+ notify(update);
73
+ },
74
+ replayTurn(turn) {
75
+ return structuredClone(updatesByTurn.get(turn) ?? []);
76
+ },
77
+ exportReplayBuffer,
78
+ importReplayBuffer,
79
+ listenerCount: () => listeners.size
80
+ };
81
+ };
82
+ const createInitialPiAgentLoopState = (messages = []) => ({
83
+ messages,
84
+ events: [],
85
+ trace: [],
86
+ summaries: [],
87
+ turn: 0,
88
+ phase: "waiting-for-user",
89
+ waitingFor: buildWaitingForUser(0),
90
+ activeSessionUpdatesByTurn: []
91
+ });
92
+ const ensurePiActiveSessionState = (state) => {
93
+ if (state.activeSession) return state.activeSession;
94
+ const activeSession = createPiActiveSessionState({
95
+ replayBuffer: getActiveSessionReplayBuffer(state),
96
+ onReplayBufferChange: (replayBuffer) => {
97
+ state.activeSessionUpdatesByTurn = replayBuffer;
98
+ }
99
+ });
100
+ state.activeSessionUpdatesByTurn = activeSession.exportReplayBuffer();
101
+ state.activeSession = activeSession;
102
+ return activeSession;
103
+ };
104
+
105
+ //#endregion
106
+ export { createInitialPiAgentLoopState, createPiActiveSessionState, ensurePiActiveSessionState };
107
+ //# sourceMappingURL=active-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-session.js","names":[],"sources":["../../../../src/pi/workflow/active-session.ts"],"sourcesContent":["import type { AgentMessage } from \"@mariozechner/pi-agent-core\";\n\nimport type {\n PiActiveSessionReplayBuffer,\n PiActiveSessionState,\n PiActiveSessionSubscriber,\n PiActiveSessionUpdate,\n PiAgentLoopState,\n PiAgentLoopWaitingFor,\n} from \"../types\";\n\nconst WAIT_FOR_USER_TIMEOUT_MS = 60 * 60 * 1000;\n\nconst buildWaitingForUser = (turn: number): NonNullable<PiAgentLoopWaitingFor> => ({\n type: \"user_message\",\n turn,\n stepKey: `waitForEvent:wait-user-${turn}`,\n timeoutMs: WAIT_FOR_USER_TIMEOUT_MS,\n});\n\nconst getActiveSessionReplayBuffer = (state: PiAgentLoopState): PiActiveSessionReplayBuffer => {\n const replayBuffer = (state as { activeSessionUpdatesByTurn?: unknown })\n .activeSessionUpdatesByTurn;\n return Array.isArray(replayBuffer)\n ? structuredClone(replayBuffer as PiActiveSessionReplayBuffer)\n : [];\n};\n\nexport const createPiActiveSessionState = (options?: {\n replayBuffer?: PiActiveSessionReplayBuffer;\n onReplayBufferChange?: (buffer: PiActiveSessionReplayBuffer) => void;\n}): PiActiveSessionState => {\n const listeners = new Set<PiActiveSessionSubscriber>();\n const updatesByTurn = new Map<number, PiActiveSessionUpdate[]>();\n\n const trimPreviousTurns = (turn: number) => {\n for (const previousTurn of updatesByTurn.keys()) {\n if (previousTurn < turn - 1) {\n updatesByTurn.delete(previousTurn);\n }\n }\n };\n\n const appendUpdate = (turn: number, update: PiActiveSessionUpdate) => {\n const existing = updatesByTurn.get(turn) ?? [];\n updatesByTurn.set(turn, [...existing, structuredClone(update)]);\n trimPreviousTurns(turn);\n };\n\n const exportReplayBuffer = (): PiActiveSessionReplayBuffer =>\n structuredClone(\n [...updatesByTurn.entries()]\n .sort(([leftTurn], [rightTurn]) => leftTurn - rightTurn)\n .map(([turn, updates]) => ({ turn, updates })),\n );\n\n const syncReplayBuffer = () => {\n options?.onReplayBufferChange?.(exportReplayBuffer());\n };\n\n const importReplayBuffer = (buffer: PiActiveSessionReplayBuffer) => {\n updatesByTurn.clear();\n for (const entry of structuredClone(buffer)) {\n for (const update of entry.updates) {\n appendUpdate(entry.turn, update);\n }\n }\n syncReplayBuffer();\n };\n\n if (options?.replayBuffer) {\n importReplayBuffer(options.replayBuffer);\n }\n\n const notify = (update: PiActiveSessionUpdate) => {\n for (const listener of Array.from(listeners)) {\n try {\n listener(update);\n } catch (error) {\n console.warn(\"Pi active-session listener failed.\", { error, updateType: update.type });\n }\n }\n };\n\n return {\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n publishEvent(turn, event) {\n const update: PiActiveSessionUpdate = { type: \"event\", turn, event };\n appendUpdate(turn, update);\n syncReplayBuffer();\n notify(update);\n },\n settleTurn(turn, status) {\n const update: PiActiveSessionUpdate = { type: \"settled\", turn, status };\n appendUpdate(turn, update);\n syncReplayBuffer();\n notify(update);\n },\n replayTurn(turn) {\n return structuredClone(updatesByTurn.get(turn) ?? []);\n },\n exportReplayBuffer,\n importReplayBuffer,\n listenerCount: () => listeners.size,\n };\n};\n\nexport const createInitialPiAgentLoopState = (messages: AgentMessage[] = []): PiAgentLoopState => ({\n messages,\n events: [],\n trace: [],\n summaries: [],\n turn: 0,\n phase: \"waiting-for-user\",\n waitingFor: buildWaitingForUser(0),\n activeSessionUpdatesByTurn: [],\n});\n\nexport const ensurePiActiveSessionState = (state: PiAgentLoopState): PiActiveSessionState => {\n if (state.activeSession) {\n return state.activeSession;\n }\n\n const activeSession = createPiActiveSessionState({\n replayBuffer: getActiveSessionReplayBuffer(state),\n onReplayBufferChange: (replayBuffer) => {\n state.activeSessionUpdatesByTurn = replayBuffer;\n },\n });\n state.activeSessionUpdatesByTurn = activeSession.exportReplayBuffer();\n state.activeSession = activeSession;\n return activeSession;\n};\n"],"mappings":";AAWA,MAAM,2BAA2B,OAAU;AAE3C,MAAM,uBAAuB,UAAsD;CACjF,MAAM;CACN;CACA,SAAS,0BAA0B;CACnC,WAAW;CACZ;AAED,MAAM,gCAAgC,UAAyD;CAC7F,MAAM,eAAgB,MACnB;AACH,QAAO,MAAM,QAAQ,aAAa,GAC9B,gBAAgB,aAA4C,GAC5D,EAAE;;AAGR,MAAa,8BAA8B,YAGf;CAC1B,MAAM,4BAAY,IAAI,KAAgC;CACtD,MAAM,gCAAgB,IAAI,KAAsC;CAEhE,MAAM,qBAAqB,SAAiB;AAC1C,OAAK,MAAM,gBAAgB,cAAc,MAAM,CAC7C,KAAI,eAAe,OAAO,EACxB,eAAc,OAAO,aAAa;;CAKxC,MAAM,gBAAgB,MAAc,WAAkC;EACpE,MAAM,WAAW,cAAc,IAAI,KAAK,IAAI,EAAE;AAC9C,gBAAc,IAAI,MAAM,CAAC,GAAG,UAAU,gBAAgB,OAAO,CAAC,CAAC;AAC/D,oBAAkB,KAAK;;CAGzB,MAAM,2BACJ,gBACE,CAAC,GAAG,cAAc,SAAS,CAAC,CACzB,MAAM,CAAC,WAAW,CAAC,eAAe,WAAW,UAAU,CACvD,KAAK,CAAC,MAAM,cAAc;EAAE;EAAM;EAAS,EAAE,CACjD;CAEH,MAAM,yBAAyB;AAC7B,WAAS,uBAAuB,oBAAoB,CAAC;;CAGvD,MAAM,sBAAsB,WAAwC;AAClE,gBAAc,OAAO;AACrB,OAAK,MAAM,SAAS,gBAAgB,OAAO,CACzC,MAAK,MAAM,UAAU,MAAM,QACzB,cAAa,MAAM,MAAM,OAAO;AAGpC,oBAAkB;;AAGpB,KAAI,SAAS,aACX,oBAAmB,QAAQ,aAAa;CAG1C,MAAM,UAAU,WAAkC;AAChD,OAAK,MAAM,YAAY,MAAM,KAAK,UAAU,CAC1C,KAAI;AACF,YAAS,OAAO;WACT,OAAO;AACd,WAAQ,KAAK,sCAAsC;IAAE;IAAO,YAAY,OAAO;IAAM,CAAC;;;AAK5F,QAAO;EACL,UAAU,UAAU;AAClB,aAAU,IAAI,SAAS;AACvB,gBAAa;AACX,cAAU,OAAO,SAAS;;;EAG9B,aAAa,MAAM,OAAO;GACxB,MAAM,SAAgC;IAAE,MAAM;IAAS;IAAM;IAAO;AACpE,gBAAa,MAAM,OAAO;AAC1B,qBAAkB;AAClB,UAAO,OAAO;;EAEhB,WAAW,MAAM,QAAQ;GACvB,MAAM,SAAgC;IAAE,MAAM;IAAW;IAAM;IAAQ;AACvE,gBAAa,MAAM,OAAO;AAC1B,qBAAkB;AAClB,UAAO,OAAO;;EAEhB,WAAW,MAAM;AACf,UAAO,gBAAgB,cAAc,IAAI,KAAK,IAAI,EAAE,CAAC;;EAEvD;EACA;EACA,qBAAqB,UAAU;EAChC;;AAGH,MAAa,iCAAiC,WAA2B,EAAE,MAAwB;CACjG;CACA,QAAQ,EAAE;CACV,OAAO,EAAE;CACT,WAAW,EAAE;CACb,MAAM;CACN,OAAO;CACP,YAAY,oBAAoB,EAAE;CAClC,4BAA4B,EAAE;CAC/B;AAED,MAAa,8BAA8B,UAAkD;AAC3F,KAAI,MAAM,cACR,QAAO,MAAM;CAGf,MAAM,gBAAgB,2BAA2B;EAC/C,cAAc,6BAA6B,MAAM;EACjD,uBAAuB,iBAAiB;AACtC,SAAM,6BAA6B;;EAEtC,CAAC;AACF,OAAM,6BAA6B,cAAc,oBAAoB;AACrE,OAAM,gBAAgB;AACtB,QAAO"}
@@ -0,0 +1,13 @@
1
+ import "../types.js";
2
+ import { AgentEvent, AgentMessage } from "@mariozechner/pi-agent-core";
3
+
4
+ //#region src/pi/workflow/agent-runner.d.ts
5
+ type AgentLoopParams = {
6
+ sessionId: string;
7
+ agentName: string;
8
+ systemPrompt?: string;
9
+ initialMessages?: AgentMessage[];
10
+ };
11
+ //#endregion
12
+ export { AgentLoopParams };
13
+ //# sourceMappingURL=agent-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-runner.d.ts","names":[],"sources":["../../../../src/pi/workflow/agent-runner.ts"],"mappings":";;;;KA+BY,eAAA;EACV,SAAA;EACA,SAAA;EACA,YAAA;EACA,eAAA,GAAkB,YAAA;AAAA"}