@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
@@ -1,12 +1,19 @@
1
+ import { PiActiveSessionProtocolMessage } from "../pi/types.js";
2
+ import { PiSessionStoreHookArgs, PiSessionStoreView } from "./session-controller.js";
3
+ import "../index.js";
1
4
  import * as _fragno_dev_core_client0 from "@fragno-dev/core/client";
2
5
  import { FragnoPublicClientConfig } from "@fragno-dev/core/client";
3
6
  import * as zod from "zod";
7
+ import * as _mariozechner_pi_agent_core0 from "@mariozechner/pi-agent-core";
4
8
  import * as zod_v4_core0 from "zod/v4/core";
5
9
  import * as _fragno_dev_core_api0 from "@fragno-dev/core/api";
6
10
  import * as _standard_schema_spec0 from "@standard-schema/spec";
7
11
 
8
- //#region src/pi/clients.d.ts
9
- declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig): {
12
+ //#region src/client/clients.d.ts
13
+ type PiFragmentClientConfig = FragnoPublicClientConfig & {
14
+ debugActiveSession?: boolean;
15
+ };
16
+ declare function createPiFragmentClients(fragnoConfig: PiFragmentClientConfig): {
10
17
  useSessions: _fragno_dev_core_client0.FragnoClientHookData<"GET", "/sessions", zod.ZodArray<zod.ZodObject<{
11
18
  id: zod.ZodString;
12
19
  name: zod.ZodNullable<zod.ZodString>;
@@ -19,7 +26,6 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
19
26
  waiting: "waiting";
20
27
  }>;
21
28
  agent: zod.ZodString;
22
- workflowInstanceId: zod.ZodNullable<zod.ZodString>;
23
29
  steeringMode: zod.ZodEnum<{
24
30
  all: "all";
25
31
  "one-at-a-time": "one-at-a-time";
@@ -29,7 +35,7 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
29
35
  createdAt: zod.ZodDate;
30
36
  updatedAt: zod.ZodDate;
31
37
  }, zod_v4_core0.$strip>>, string, "limit">;
32
- useSession: _fragno_dev_core_client0.FragnoClientHookData<"GET", "/sessions/:sessionId", zod.ZodObject<{
38
+ useSessionDetail: _fragno_dev_core_client0.FragnoClientHookData<"GET", "/sessions/:sessionId", zod.ZodObject<{
33
39
  id: zod.ZodString;
34
40
  name: zod.ZodNullable<zod.ZodString>;
35
41
  status: zod.ZodEnum<{
@@ -41,7 +47,6 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
41
47
  waiting: "waiting";
42
48
  }>;
43
49
  agent: zod.ZodString;
44
- workflowInstanceId: zod.ZodNullable<zod.ZodString>;
45
50
  steeringMode: zod.ZodEnum<{
46
51
  all: "all";
47
52
  "one-at-a-time": "one-at-a-time";
@@ -71,20 +76,10 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
71
76
  type: zod.ZodLiteral<"text">;
72
77
  text: zod.ZodString;
73
78
  textSignature: zod.ZodOptional<zod.ZodString>;
74
- }, zod_v4_core0.$strip>, zod.ZodObject<{
75
- type: zod.ZodLiteral<"thinking">;
76
- thinking: zod.ZodString;
77
- thinkingSignature: zod.ZodOptional<zod.ZodString>;
78
79
  }, zod_v4_core0.$strip>, zod.ZodObject<{
79
80
  type: zod.ZodLiteral<"image">;
80
81
  data: zod.ZodString;
81
82
  mimeType: zod.ZodString;
82
- }, zod_v4_core0.$strip>, zod.ZodObject<{
83
- type: zod.ZodLiteral<"toolCall">;
84
- id: zod.ZodString;
85
- name: zod.ZodString;
86
- arguments: zod.ZodRecord<zod.ZodString, zod.ZodUnknown>;
87
- thoughtSignature: zod.ZodOptional<zod.ZodString>;
88
83
  }, zod_v4_core0.$strip>]>>]>;
89
84
  timestamp: zod.ZodNumber;
90
85
  }, zod_v4_core0.$strip>, zod.ZodObject<{
@@ -97,10 +92,6 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
97
92
  type: zod.ZodLiteral<"thinking">;
98
93
  thinking: zod.ZodString;
99
94
  thinkingSignature: zod.ZodOptional<zod.ZodString>;
100
- }, zod_v4_core0.$strip>, zod.ZodObject<{
101
- type: zod.ZodLiteral<"image">;
102
- data: zod.ZodString;
103
- mimeType: zod.ZodString;
104
95
  }, zod_v4_core0.$strip>, zod.ZodObject<{
105
96
  type: zod.ZodLiteral<"toolCall">;
106
97
  id: zod.ZodString;
@@ -125,7 +116,13 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
125
116
  total: zod.ZodNumber;
126
117
  }, zod_v4_core0.$strip>;
127
118
  }, zod_v4_core0.$strip>;
128
- stopReason: zod.ZodString;
119
+ stopReason: zod.ZodEnum<{
120
+ length: "length";
121
+ error: "error";
122
+ stop: "stop";
123
+ toolUse: "toolUse";
124
+ aborted: "aborted";
125
+ }>;
129
126
  errorMessage: zod.ZodOptional<zod.ZodString>;
130
127
  timestamp: zod.ZodNumber;
131
128
  }, zod_v4_core0.$strip>, zod.ZodObject<{
@@ -136,38 +133,52 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
136
133
  type: zod.ZodLiteral<"text">;
137
134
  text: zod.ZodString;
138
135
  textSignature: zod.ZodOptional<zod.ZodString>;
139
- }, zod_v4_core0.$strip>, zod.ZodObject<{
140
- type: zod.ZodLiteral<"thinking">;
141
- thinking: zod.ZodString;
142
- thinkingSignature: zod.ZodOptional<zod.ZodString>;
143
136
  }, zod_v4_core0.$strip>, zod.ZodObject<{
144
137
  type: zod.ZodLiteral<"image">;
145
138
  data: zod.ZodString;
146
139
  mimeType: zod.ZodString;
147
- }, zod_v4_core0.$strip>, zod.ZodObject<{
148
- type: zod.ZodLiteral<"toolCall">;
149
- id: zod.ZodString;
150
- name: zod.ZodString;
151
- arguments: zod.ZodRecord<zod.ZodString, zod.ZodUnknown>;
152
- thoughtSignature: zod.ZodOptional<zod.ZodString>;
153
140
  }, zod_v4_core0.$strip>]>>;
154
141
  details: zod.ZodOptional<zod.ZodUnknown>;
155
142
  isError: zod.ZodBoolean;
156
143
  timestamp: zod.ZodNumber;
157
144
  }, zod_v4_core0.$strip>]>>;
158
- trace: zod.ZodArray<zod.ZodObject<{
145
+ events: zod.ZodArray<zod.ZodObject<{
146
+ id: zod.ZodString;
147
+ runNumber: zod.ZodOptional<zod.ZodNullable<zod.ZodNumber>>;
159
148
  type: zod.ZodString;
160
- timestamp: zod.ZodOptional<zod.ZodNumber>;
149
+ payload: zod.ZodNullable<zod.ZodUnknown>;
150
+ createdAt: zod.ZodDate;
151
+ deliveredAt: zod.ZodNullable<zod.ZodDate>;
152
+ consumedByStepKey: zod.ZodNullable<zod.ZodString>;
161
153
  }, zod_v4_core0.$strip>>;
154
+ trace: zod.ZodArray<zod.ZodType<_mariozechner_pi_agent_core0.AgentEvent, unknown, zod_v4_core0.$ZodTypeInternals<_mariozechner_pi_agent_core0.AgentEvent, unknown>>>;
155
+ turn: zod.ZodNumber;
156
+ phase: zod.ZodEnum<{
157
+ complete: "complete";
158
+ "waiting-for-user": "waiting-for-user";
159
+ "running-agent": "running-agent";
160
+ }>;
161
+ waitingFor: zod.ZodNullable<zod.ZodUnion<readonly [zod.ZodObject<{
162
+ type: zod.ZodLiteral<"user_message">;
163
+ turn: zod.ZodNumber;
164
+ stepKey: zod.ZodString;
165
+ timeoutMs: zod.ZodNullable<zod.ZodNumber>;
166
+ }, zod_v4_core0.$strip>, zod.ZodObject<{
167
+ type: zod.ZodLiteral<"assistant">;
168
+ turn: zod.ZodNumber;
169
+ stepKey: zod.ZodString;
170
+ }, zod_v4_core0.$strip>]>>;
162
171
  summaries: zod.ZodArray<zod.ZodObject<{
163
172
  turn: zod.ZodNumber;
164
173
  assistant: zod.ZodNullable<zod.ZodAny>;
165
174
  summary: zod.ZodNullable<zod.ZodString>;
166
175
  }, zod_v4_core0.$strip>>;
167
- }, zod_v4_core0.$strip>, "WORKFLOWS_REQUIRED" | "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", string>;
176
+ }, zod_v4_core0.$strip>, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", "events" | "trace" | "summaries">;
177
+ useSession: _fragno_dev_core_client0.FragnoStoreFactoryData<PiSessionStoreView, [args: PiSessionStoreHookArgs]>;
168
178
  useCreateSession: _fragno_dev_core_client0.FragnoClientMutatorData<_fragno_dev_core_api0.NonGetHTTPMethod, "/sessions", _standard_schema_spec0.StandardSchemaV1<unknown, unknown> | zod.ZodObject<{
169
179
  agent: zod.ZodString;
170
180
  name: zod.ZodOptional<zod.ZodString>;
181
+ systemMessage: zod.ZodOptional<zod.ZodString>;
171
182
  metadata: zod.ZodOptional<zod.ZodAny>;
172
183
  tags: zod.ZodOptional<zod.ZodArray<zod.ZodString>>;
173
184
  steeringMode: zod.ZodOptional<zod.ZodEnum<{
@@ -186,7 +197,6 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
186
197
  waiting: "waiting";
187
198
  }>;
188
199
  agent: zod.ZodString;
189
- workflowInstanceId: zod.ZodNullable<zod.ZodString>;
190
200
  steeringMode: zod.ZodEnum<{
191
201
  all: "all";
192
202
  "one-at-a-time": "one-at-a-time";
@@ -207,7 +217,6 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
207
217
  waiting: "waiting";
208
218
  }>;
209
219
  agent: zod.ZodString;
210
- workflowInstanceId: zod.ZodNullable<zod.ZodString>;
211
220
  steeringMode: zod.ZodEnum<{
212
221
  all: "all";
213
222
  "one-at-a-time": "one-at-a-time";
@@ -217,6 +226,7 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
217
226
  createdAt: zod.ZodDate;
218
227
  updatedAt: zod.ZodDate;
219
228
  }, zod_v4_core0.$strip>> | undefined, string, string>;
229
+ useActiveSession: _fragno_dev_core_client0.FragnoClientHookData<"GET", "/sessions/:sessionId/active", zod.ZodArray<zod.ZodType<PiActiveSessionProtocolMessage, unknown, zod_v4_core0.$ZodTypeInternals<PiActiveSessionProtocolMessage, unknown>>>, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", string>;
220
230
  useSendMessage: _fragno_dev_core_client0.FragnoClientMutatorData<_fragno_dev_core_api0.NonGetHTTPMethod, "/sessions/:sessionId/messages", zod.ZodObject<{
221
231
  text: zod.ZodString;
222
232
  done: zod.ZodOptional<zod.ZodBoolean>;
@@ -233,7 +243,7 @@ declare function createPiFragmentClients(fragnoConfig: FragnoPublicClientConfig)
233
243
  complete: "complete";
234
244
  waiting: "waiting";
235
245
  }>;
236
- }, zod_v4_core0.$strip> | undefined, "WORKFLOWS_REQUIRED" | "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", string>;
246
+ }, zod_v4_core0.$strip> | undefined, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING" | "SESSION_NOT_READY", string>;
237
247
  };
238
248
  //#endregion
239
249
  export { createPiFragmentClients };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.d.ts","names":[],"sources":["../../../src/client/clients.ts"],"mappings":";;;;;;;;;;;;KAOY,sBAAA,GAAyB,wBAAA;EACnC,kBAAA;AAAA;AAAA,iBAec,uBAAA,CAAwB,YAAA,EAAc,sBAAA;;QAAsB,GAAA,CAAA,SAAA"}
@@ -0,0 +1,54 @@
1
+ import { piFragmentDefinition } from "../pi/definition.js";
2
+ import { piRoutesFactory } from "../routes.js";
3
+ import { createPiSessionControllerStore } from "./session-controller.js";
4
+ import { createClientBuilder } from "@fragno-dev/core/client";
5
+
6
+ //#region src/client/clients.ts
7
+ const createActiveSessionLogger = (enabled) => {
8
+ if (!enabled) return;
9
+ return (event, details) => {
10
+ console.log(`[pi-active] ${event}`, details ?? {});
11
+ };
12
+ };
13
+ function createPiFragmentClients(fragnoConfig) {
14
+ const builder = createClientBuilder(piFragmentDefinition, fragnoConfig, [piRoutesFactory]);
15
+ const useSessionDetail = builder.createHook("/sessions/:sessionId");
16
+ const useSendMessage = builder.createMutator("POST", "/sessions/:sessionId/messages", (invalidate, params) => {
17
+ const sessionId = params.pathParams.sessionId;
18
+ if (!sessionId) return;
19
+ invalidate("GET", "/sessions/:sessionId", { pathParams: { sessionId } });
20
+ invalidate("GET", "/sessions", {});
21
+ });
22
+ const { fetcher, defaultOptions } = builder.getFetcher();
23
+ const sessionStoreDependencies = {
24
+ createDetailStore: (sessionId) => useSessionDetail.store({ path: { sessionId } }),
25
+ sendMessage: ({ sessionId, text, done, steeringMode }) => useSendMessage.mutateQuery({
26
+ path: { sessionId },
27
+ body: {
28
+ text,
29
+ done,
30
+ steeringMode
31
+ }
32
+ }).then((result) => {
33
+ if (!result) throw new Error("The message mutation did not return a status response.");
34
+ return result;
35
+ }),
36
+ buildActiveUrl: (sessionId) => builder.buildUrl("/sessions/:sessionId/active", { path: { sessionId } }),
37
+ fetcher,
38
+ defaultOptions,
39
+ enableActiveStream: typeof window === "undefined" ? false : void 0,
40
+ activeLogger: createActiveSessionLogger(fragnoConfig.debugActiveSession)
41
+ };
42
+ return {
43
+ useSessions: builder.createHook("/sessions"),
44
+ useSessionDetail,
45
+ useSession: builder.createStore(createPiSessionControllerStore(sessionStoreDependencies)),
46
+ useCreateSession: builder.createMutator("POST", "/sessions"),
47
+ useActiveSession: builder.createHook("/sessions/:sessionId/active"),
48
+ useSendMessage
49
+ };
50
+ }
51
+
52
+ //#endregion
53
+ export { createPiFragmentClients };
54
+ //# sourceMappingURL=clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.js","names":[],"sources":["../../../src/client/clients.ts"],"sourcesContent":["import { createClientBuilder, type FragnoPublicClientConfig } from \"@fragno-dev/core/client\";\n\nimport { piFragmentDefinition } from \"../pi/definition\";\nimport { piRoutesFactory } from \"../routes\";\nimport { createPiSessionControllerStore } from \"./session-controller\";\nimport type { CreatePiSessionStoreDependencies } from \"./session-store\";\n\nexport type PiFragmentClientConfig = FragnoPublicClientConfig & {\n debugActiveSession?: boolean;\n};\n\nconst createActiveSessionLogger = (\n enabled: boolean | undefined,\n): CreatePiSessionStoreDependencies[\"activeLogger\"] => {\n if (!enabled) {\n return undefined;\n }\n\n return (event, details) => {\n console.log(`[pi-active] ${event}`, details ?? {});\n };\n};\n\nexport function createPiFragmentClients(fragnoConfig: PiFragmentClientConfig) {\n const builder = createClientBuilder(piFragmentDefinition, fragnoConfig, [piRoutesFactory]);\n const useSessionDetail = builder.createHook(\"/sessions/:sessionId\");\n const useSendMessage = builder.createMutator(\n \"POST\",\n \"/sessions/:sessionId/messages\",\n (invalidate, params) => {\n const sessionId = params.pathParams.sessionId;\n if (!sessionId) {\n return;\n }\n\n invalidate(\"GET\", \"/sessions/:sessionId\", {\n pathParams: { sessionId },\n });\n invalidate(\"GET\", \"/sessions\", {});\n },\n );\n const { fetcher, defaultOptions } = builder.getFetcher();\n const sessionStoreDependencies = {\n createDetailStore: (sessionId) =>\n useSessionDetail.store({ path: { sessionId } }) as ReturnType<\n CreatePiSessionStoreDependencies[\"createDetailStore\"]\n >,\n sendMessage: ({ sessionId, text, done, steeringMode }) =>\n useSendMessage\n .mutateQuery({\n path: { sessionId },\n body: {\n text,\n done,\n steeringMode,\n },\n })\n .then((result) => {\n if (!result) {\n throw new Error(\"The message mutation did not return a status response.\");\n }\n return result;\n }),\n buildActiveUrl: (sessionId) =>\n builder.buildUrl(\"/sessions/:sessionId/active\", {\n path: { sessionId },\n }),\n fetcher,\n defaultOptions,\n enableActiveStream: typeof window === \"undefined\" ? false : undefined,\n activeLogger: createActiveSessionLogger(fragnoConfig.debugActiveSession),\n } satisfies CreatePiSessionStoreDependencies;\n return {\n useSessions: builder.createHook(\"/sessions\"),\n useSessionDetail,\n useSession: builder.createStore(createPiSessionControllerStore(sessionStoreDependencies)),\n useCreateSession: builder.createMutator(\"POST\", \"/sessions\"),\n useActiveSession: builder.createHook(\"/sessions/:sessionId/active\"),\n useSendMessage,\n };\n}\n"],"mappings":";;;;;;AAWA,MAAM,6BACJ,YACqD;AACrD,KAAI,CAAC,QACH;AAGF,SAAQ,OAAO,YAAY;AACzB,UAAQ,IAAI,eAAe,SAAS,WAAW,EAAE,CAAC;;;AAItD,SAAgB,wBAAwB,cAAsC;CAC5E,MAAM,UAAU,oBAAoB,sBAAsB,cAAc,CAAC,gBAAgB,CAAC;CAC1F,MAAM,mBAAmB,QAAQ,WAAW,uBAAuB;CACnE,MAAM,iBAAiB,QAAQ,cAC7B,QACA,kCACC,YAAY,WAAW;EACtB,MAAM,YAAY,OAAO,WAAW;AACpC,MAAI,CAAC,UACH;AAGF,aAAW,OAAO,wBAAwB,EACxC,YAAY,EAAE,WAAW,EAC1B,CAAC;AACF,aAAW,OAAO,aAAa,EAAE,CAAC;GAErC;CACD,MAAM,EAAE,SAAS,mBAAmB,QAAQ,YAAY;CACxD,MAAM,2BAA2B;EAC/B,oBAAoB,cAClB,iBAAiB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;EAGjD,cAAc,EAAE,WAAW,MAAM,MAAM,mBACrC,eACG,YAAY;GACX,MAAM,EAAE,WAAW;GACnB,MAAM;IACJ;IACA;IACA;IACD;GACF,CAAC,CACD,MAAM,WAAW;AAChB,OAAI,CAAC,OACH,OAAM,IAAI,MAAM,yDAAyD;AAE3E,UAAO;IACP;EACN,iBAAiB,cACf,QAAQ,SAAS,+BAA+B,EAC9C,MAAM,EAAE,WAAW,EACpB,CAAC;EACJ;EACA;EACA,oBAAoB,OAAO,WAAW,cAAc,QAAQ;EAC5D,cAAc,0BAA0B,aAAa,mBAAmB;EACzE;AACD,QAAO;EACL,aAAa,QAAQ,WAAW,YAAY;EAC5C;EACA,YAAY,QAAQ,YAAY,+BAA+B,yBAAyB,CAAC;EACzF,kBAAkB,QAAQ,cAAc,QAAQ,YAAY;EAC5D,kBAAkB,QAAQ,WAAW,8BAA8B;EACnE;EACD"}
@@ -0,0 +1,31 @@
1
+ import { PiSessionDetail } from "../pi/types.js";
2
+ import { PiSessionStoreController, PiSessionStoreState } from "./session-store.js";
3
+ import { AgentEvent, AgentMessage } from "@mariozechner/pi-agent-core";
4
+ import { ReadableAtom } from "nanostores";
5
+
6
+ //#region src/client/session-controller.d.ts
7
+ type PiSessionStoreHookArgs = {
8
+ path: {
9
+ sessionId: string;
10
+ };
11
+ initialData?: PiSessionDetail | null;
12
+ };
13
+ type PiSessionStoreView = {
14
+ loading: ReadableAtom<PiSessionStoreState["loading"]>;
15
+ session: ReadableAtom<PiSessionStoreState["session"]>;
16
+ messages: ReadableAtom<AgentMessage[]>;
17
+ traceEvents: ReadableAtom<AgentEvent[]>;
18
+ runningTools: ReadableAtom<PiSessionStoreState["runningTools"]>;
19
+ connection: ReadableAtom<PiSessionStoreState["connection"]>;
20
+ statusText: ReadableAtom<PiSessionStoreState["statusText"]>;
21
+ readyForInput: ReadableAtom<PiSessionStoreState["readyForInput"]>;
22
+ sending: ReadableAtom<PiSessionStoreState["sending"]>;
23
+ error: ReadableAtom<PiSessionStoreState["error"]>;
24
+ sendError: ReadableAtom<PiSessionStoreState["sendError"]>;
25
+ sendMessage: PiSessionStoreController["sendMessage"];
26
+ refetch: PiSessionStoreController["refetch"];
27
+ [Symbol.dispose]: () => void;
28
+ };
29
+ //#endregion
30
+ export { PiSessionStoreHookArgs, PiSessionStoreView };
31
+ //# sourceMappingURL=session-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-controller.d.ts","names":[],"sources":["../../../src/client/session-controller.ts"],"mappings":";;;;;;KAYY,sBAAA;EACV,IAAA;IAAQ,SAAA;EAAA;EACR,WAAA,GAAc,eAAA;AAAA;AAAA,KAGJ,kBAAA;EACV,OAAA,EAAS,YAAA,CAAa,mBAAA;EACtB,OAAA,EAAS,YAAA,CAAa,mBAAA;EACtB,QAAA,EAAU,YAAA,CAAa,YAAA;EACvB,WAAA,EAAa,YAAA,CAAa,UAAA;EAC1B,YAAA,EAAc,YAAA,CAAa,mBAAA;EAC3B,UAAA,EAAY,YAAA,CAAa,mBAAA;EACzB,UAAA,EAAY,YAAA,CAAa,mBAAA;EACzB,aAAA,EAAe,YAAA,CAAa,mBAAA;EAC5B,OAAA,EAAS,YAAA,CAAa,mBAAA;EACtB,KAAA,EAAO,YAAA,CAAa,mBAAA;EACpB,SAAA,EAAW,YAAA,CAAa,mBAAA;EACxB,WAAA,EAAa,wBAAA;EACb,OAAA,EAAS,wBAAA;EAAA,CACR,MAAA,CAAO,OAAA;AAAA"}
@@ -0,0 +1,33 @@
1
+ import { createPiSessionStore } from "./session-store.js";
2
+ import { computed } from "nanostores";
3
+
4
+ //#region src/client/session-controller.ts
5
+ const select = (store, selector) => computed(store, selector);
6
+ function createPiSessionControllerStore(input) {
7
+ return ({ path, initialData }) => {
8
+ const controller = createPiSessionStore(input, {
9
+ sessionId: path.sessionId,
10
+ initialData
11
+ });
12
+ return {
13
+ loading: select(controller.store, (state) => state.loading),
14
+ session: select(controller.store, (state) => state.session),
15
+ messages: select(controller.store, (state) => state.messages),
16
+ traceEvents: select(controller.store, (state) => state.traceEvents),
17
+ runningTools: select(controller.store, (state) => state.runningTools),
18
+ connection: select(controller.store, (state) => state.connection),
19
+ statusText: select(controller.store, (state) => state.statusText),
20
+ readyForInput: select(controller.store, (state) => state.readyForInput),
21
+ sending: select(controller.store, (state) => state.sending),
22
+ error: select(controller.store, (state) => state.error),
23
+ sendError: select(controller.store, (state) => state.sendError),
24
+ sendMessage: controller.sendMessage,
25
+ refetch: controller.refetch,
26
+ [Symbol.dispose]: controller.deactivate
27
+ };
28
+ };
29
+ }
30
+
31
+ //#endregion
32
+ export { createPiSessionControllerStore };
33
+ //# sourceMappingURL=session-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-controller.js","names":[],"sources":["../../../src/client/session-controller.ts"],"sourcesContent":["import { computed, type ReadableAtom } from \"nanostores\";\n\nimport type { AgentEvent, AgentMessage } from \"@mariozechner/pi-agent-core\";\n\nimport type { PiSessionDetail } from \"../pi/types\";\nimport {\n createPiSessionStore,\n type CreatePiSessionStoreDependencies,\n type PiSessionStoreController,\n type PiSessionStoreState,\n} from \"./session-store\";\n\nexport type PiSessionStoreHookArgs = {\n path: { sessionId: string };\n initialData?: PiSessionDetail | null;\n};\n\nexport type PiSessionStoreView = {\n loading: ReadableAtom<PiSessionStoreState[\"loading\"]>;\n session: ReadableAtom<PiSessionStoreState[\"session\"]>;\n messages: ReadableAtom<AgentMessage[]>;\n traceEvents: ReadableAtom<AgentEvent[]>;\n runningTools: ReadableAtom<PiSessionStoreState[\"runningTools\"]>;\n connection: ReadableAtom<PiSessionStoreState[\"connection\"]>;\n statusText: ReadableAtom<PiSessionStoreState[\"statusText\"]>;\n readyForInput: ReadableAtom<PiSessionStoreState[\"readyForInput\"]>;\n sending: ReadableAtom<PiSessionStoreState[\"sending\"]>;\n error: ReadableAtom<PiSessionStoreState[\"error\"]>;\n sendError: ReadableAtom<PiSessionStoreState[\"sendError\"]>;\n sendMessage: PiSessionStoreController[\"sendMessage\"];\n refetch: PiSessionStoreController[\"refetch\"];\n [Symbol.dispose]: () => void;\n};\n\nconst select = <T>(\n store: ReadableAtom<PiSessionStoreState>,\n selector: (state: PiSessionStoreState) => T,\n) => computed(store, selector);\n\nexport function createPiSessionControllerStore(\n input: CreatePiSessionStoreDependencies,\n): (args: PiSessionStoreHookArgs) => PiSessionStoreView {\n return ({ path, initialData }) => {\n const controller = createPiSessionStore(input, {\n sessionId: path.sessionId,\n initialData,\n });\n\n return {\n loading: select(controller.store, (state) => state.loading),\n session: select(controller.store, (state) => state.session),\n messages: select(controller.store, (state) => state.messages),\n traceEvents: select(controller.store, (state) => state.traceEvents),\n runningTools: select(controller.store, (state) => state.runningTools),\n connection: select(controller.store, (state) => state.connection),\n statusText: select(controller.store, (state) => state.statusText),\n readyForInput: select(controller.store, (state) => state.readyForInput),\n sending: select(controller.store, (state) => state.sending),\n error: select(controller.store, (state) => state.error),\n sendError: select(controller.store, (state) => state.sendError),\n sendMessage: controller.sendMessage,\n refetch: controller.refetch,\n // React store factories may dispose during dev StrictMode or transitional rerenders.\n // Use the lighter controller cleanup here so live subscriptions are torn down without\n // permanently poisoning the session store instance.\n [Symbol.dispose]: controller.deactivate,\n };\n };\n}\n"],"mappings":";;;;AAkCA,MAAM,UACJ,OACA,aACG,SAAS,OAAO,SAAS;AAE9B,SAAgB,+BACd,OACsD;AACtD,SAAQ,EAAE,MAAM,kBAAkB;EAChC,MAAM,aAAa,qBAAqB,OAAO;GAC7C,WAAW,KAAK;GAChB;GACD,CAAC;AAEF,SAAO;GACL,SAAS,OAAO,WAAW,QAAQ,UAAU,MAAM,QAAQ;GAC3D,SAAS,OAAO,WAAW,QAAQ,UAAU,MAAM,QAAQ;GAC3D,UAAU,OAAO,WAAW,QAAQ,UAAU,MAAM,SAAS;GAC7D,aAAa,OAAO,WAAW,QAAQ,UAAU,MAAM,YAAY;GACnE,cAAc,OAAO,WAAW,QAAQ,UAAU,MAAM,aAAa;GACrE,YAAY,OAAO,WAAW,QAAQ,UAAU,MAAM,WAAW;GACjE,YAAY,OAAO,WAAW,QAAQ,UAAU,MAAM,WAAW;GACjE,eAAe,OAAO,WAAW,QAAQ,UAAU,MAAM,cAAc;GACvE,SAAS,OAAO,WAAW,QAAQ,UAAU,MAAM,QAAQ;GAC3D,OAAO,OAAO,WAAW,QAAQ,UAAU,MAAM,MAAM;GACvD,WAAW,OAAO,WAAW,QAAQ,UAAU,MAAM,UAAU;GAC/D,aAAa,WAAW;GACxB,SAAS,WAAW;IAInB,OAAO,UAAU,WAAW;GAC9B"}
@@ -0,0 +1,71 @@
1
+ import { PiSessionStatus } from "../pi/constants.js";
2
+ import { PiSessionDetail } from "../pi/types.js";
3
+ import { AgentEvent, AgentMessage } from "@mariozechner/pi-agent-core";
4
+ import { ReadableAtom } from "nanostores";
5
+
6
+ //#region src/client/session-store.d.ts
7
+ type QueryStoreValue<T> = {
8
+ loading: boolean;
9
+ data?: T;
10
+ error?: {
11
+ message?: string;
12
+ };
13
+ };
14
+ type QueryStore<T> = ReadableAtom<QueryStoreValue<T>> & {
15
+ revalidate: () => void;
16
+ };
17
+ type PiLiveToolExecution = {
18
+ toolCallId: string;
19
+ toolName: string;
20
+ args: unknown;
21
+ partialResult: unknown | null;
22
+ };
23
+ type PiSessionConnectionState = "idle" | "connecting" | "listening" | "reconnecting" | "error";
24
+ type PiSessionStoreState = {
25
+ loading: boolean;
26
+ session: PiSessionDetail | null;
27
+ messages: AgentMessage[];
28
+ traceEvents: AgentEvent[];
29
+ runningTools: PiLiveToolExecution[];
30
+ connection: PiSessionConnectionState;
31
+ statusText: string | null;
32
+ readyForInput: boolean;
33
+ sending: boolean;
34
+ error: string | null;
35
+ sendError: string | null;
36
+ };
37
+ type CreatePiSessionStoreArgs = {
38
+ sessionId: string;
39
+ initialData?: PiSessionDetail | null;
40
+ };
41
+ type PiSessionStoreController = {
42
+ store: ReadableAtom<PiSessionStoreState>;
43
+ sendMessage: (input: {
44
+ text: string;
45
+ done?: boolean;
46
+ steeringMode?: "all" | "one-at-a-time";
47
+ }) => boolean;
48
+ refetch: () => void;
49
+ deactivate: () => void;
50
+ destroy: () => void;
51
+ };
52
+ type CreatePiSessionStoreDependencies = {
53
+ createDetailStore: (sessionId: string) => QueryStore<PiSessionDetail>;
54
+ sendMessage: (options: {
55
+ sessionId: string;
56
+ text: string;
57
+ done?: boolean;
58
+ steeringMode?: "all" | "one-at-a-time";
59
+ }) => Promise<{
60
+ status: PiSessionStatus;
61
+ }>;
62
+ buildActiveUrl: (sessionId: string) => string;
63
+ fetcher: typeof fetch;
64
+ defaultOptions?: RequestInit;
65
+ enableActiveStream?: boolean;
66
+ activeLogger?: (event: string, details?: Record<string, unknown>) => void;
67
+ };
68
+ declare function createPiSessionStore(deps: CreatePiSessionStoreDependencies, args: CreatePiSessionStoreArgs): PiSessionStoreController;
69
+ //#endregion
70
+ export { CreatePiSessionStoreArgs, PiLiveToolExecution, PiSessionConnectionState, PiSessionStoreController, PiSessionStoreState, createPiSessionStore };
71
+ //# sourceMappingURL=session-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.d.ts","names":[],"sources":["../../../src/client/session-store.ts"],"mappings":";;;;;;KAYK,eAAA;EACH,OAAA;EACA,IAAA,GAAO,CAAA;EACP,KAAA;IAAU,OAAA;EAAA;AAAA;AAAA,KAGP,UAAA,MAAgB,YAAA,CAAa,eAAA,CAAgB,CAAA;EAChD,UAAA;AAAA;AAAA,KAuBU,mBAAA;EACV,UAAA;EACA,QAAA;EACA,IAAA;EACA,aAAA;AAAA;AAAA,KAGU,wBAAA;AAAA,KAqCA,mBAAA;EACV,OAAA;EACA,OAAA,EAAS,eAAA;EACT,QAAA,EAAU,YAAA;EACV,WAAA,EAAa,UAAA;EACb,YAAA,EAAc,mBAAA;EACd,UAAA,EAAY,wBAAA;EACZ,UAAA;EACA,aAAA;EACA,OAAA;EACA,KAAA;EACA,SAAA;AAAA;AAAA,KAGU,wBAAA;EACV,SAAA;EACA,WAAA,GAAc,eAAA;AAAA;AAAA,KAGJ,wBAAA;EACV,KAAA,EAAO,YAAA,CAAa,mBAAA;EACpB,WAAA,GAAc,KAAA;IACZ,IAAA;IACA,IAAA;IACA,YAAA;EAAA;EAEF,OAAA;EACA,UAAA;EACA,OAAA;AAAA;AAAA,KAGU,gCAAA;EACV,iBAAA,GAAoB,SAAA,aAAsB,UAAA,CAAW,eAAA;EACrD,WAAA,GAAc,OAAA;IACZ,SAAA;IACA,IAAA;IACA,IAAA;IACA,YAAA;EAAA,MACI,OAAA;IAAU,MAAA,EAAQ,eAAA;EAAA;EACxB,cAAA,GAAiB,SAAA;EACjB,OAAA,SAAgB,KAAA;EAChB,cAAA,GAAiB,WAAA;EACjB,kBAAA;EACA,YAAA,IAAgB,KAAA,UAAe,OAAA,GAAU,MAAA;AAAA;AAAA,iBAogB3B,oBAAA,CACd,IAAA,EAAM,gCAAA,EACN,IAAA,EAAM,wBAAA,GACL,wBAAA"}