@fragno-dev/pi-harness 0.0.0-stage → 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 (140) hide show
  1. package/LICENSE.md +16 -0
  2. package/README.md +181 -2
  3. package/dist/browser/agent-harness-event-protocol-CuKubox1.js +666 -0
  4. package/dist/browser/agent-harness-event-protocol-CuKubox1.js.map +1 -0
  5. package/dist/browser/agent-harness-event-protocol-d6mH_9n3.d.ts +261 -0
  6. package/dist/browser/agent-harness-event-protocol-d6mH_9n3.d.ts.map +1 -0
  7. package/dist/browser/client/clients.d.ts +2 -0
  8. package/dist/browser/client/clients.js +2 -0
  9. package/dist/browser/client/pi-workflow-emission-stream.d.ts +13 -0
  10. package/dist/browser/client/pi-workflow-emission-stream.d.ts.map +1 -0
  11. package/dist/browser/client/pi-workflow-emission-stream.js +29 -0
  12. package/dist/browser/client/pi-workflow-emission-stream.js.map +1 -0
  13. package/dist/browser/client/react.d.ts +147 -0
  14. package/dist/browser/client/react.d.ts.map +1 -0
  15. package/dist/browser/client/react.js +187 -0
  16. package/dist/browser/client/react.js.map +1 -0
  17. package/dist/browser/client/solid.d.ts +150 -0
  18. package/dist/browser/client/solid.d.ts.map +1 -0
  19. package/dist/browser/client/solid.js +130 -0
  20. package/dist/browser/client/solid.js.map +1 -0
  21. package/dist/browser/client/svelte.d.ts +150 -0
  22. package/dist/browser/client/svelte.d.ts.map +1 -0
  23. package/dist/browser/client/svelte.js +132 -0
  24. package/dist/browser/client/svelte.js.map +1 -0
  25. package/dist/browser/client/vanilla.d.ts +177 -0
  26. package/dist/browser/client/vanilla.d.ts.map +1 -0
  27. package/dist/browser/client/vanilla.js +159 -0
  28. package/dist/browser/client/vanilla.js.map +1 -0
  29. package/dist/browser/client/vue.d.ts +150 -0
  30. package/dist/browser/client/vue.d.ts.map +1 -0
  31. package/dist/browser/client/vue.js +128 -0
  32. package/dist/browser/client/vue.js.map +1 -0
  33. package/dist/browser/client/workflow-lofi-session-projection.d.ts +17 -0
  34. package/dist/browser/client/workflow-lofi-session-projection.d.ts.map +1 -0
  35. package/dist/browser/client/workflow-lofi-session-projection.js +107 -0
  36. package/dist/browser/client/workflow-lofi-session-projection.js.map +1 -0
  37. package/dist/browser/clients-DYXj19je.d.ts +247 -0
  38. package/dist/browser/clients-DYXj19je.d.ts.map +1 -0
  39. package/dist/browser/clients-pIAk6ClP.js +1853 -0
  40. package/dist/browser/clients-pIAk6ClP.js.map +1 -0
  41. package/dist/browser/pi/context-usage.d.ts +20 -0
  42. package/dist/browser/pi/context-usage.d.ts.map +1 -0
  43. package/dist/browser/pi/context-usage.js +84 -0
  44. package/dist/browser/pi/context-usage.js.map +1 -0
  45. package/dist/browser/pi/harness/agent-harness-event-protocol.d.ts +2 -0
  46. package/dist/browser/pi/harness/agent-harness-event-protocol.js +2 -0
  47. package/dist/browser/pi/route-schemas.d.ts +2 -0
  48. package/dist/browser/pi/route-schemas.js +130 -0
  49. package/dist/browser/pi/route-schemas.js.map +1 -0
  50. package/dist/browser/pi/workflow-session-projection.d.ts +2 -0
  51. package/dist/browser/pi/workflow-session-projection.js +2 -0
  52. package/dist/browser/route-schemas-DQB5ZR1E.d.ts +109 -0
  53. package/dist/browser/route-schemas-DQB5ZR1E.d.ts.map +1 -0
  54. package/dist/browser/types-8q4RWFXT.js +23 -0
  55. package/dist/browser/types-8q4RWFXT.js.map +1 -0
  56. package/dist/browser/types-Dk856kV1.d.ts +527 -0
  57. package/dist/browser/types-Dk856kV1.d.ts.map +1 -0
  58. package/dist/browser/workflow-session-projection-CJ4MUkpJ.js +443 -0
  59. package/dist/browser/workflow-session-projection-CJ4MUkpJ.js.map +1 -0
  60. package/dist/browser/workflow-session-projection-Dj_a79GF.d.ts +93 -0
  61. package/dist/browser/workflow-session-projection-Dj_a79GF.d.ts.map +1 -0
  62. package/dist/node/pi/compact-command-outcome-projection.js +41 -0
  63. package/dist/node/pi/compact-command-outcome-projection.js.map +1 -0
  64. package/dist/node/pi/context-usage.d.ts +20 -0
  65. package/dist/node/pi/context-usage.d.ts.map +1 -0
  66. package/dist/node/pi/context-usage.js +84 -0
  67. package/dist/node/pi/context-usage.js.map +1 -0
  68. package/dist/node/pi/definition.d.ts +535 -0
  69. package/dist/node/pi/definition.d.ts.map +1 -0
  70. package/dist/node/pi/definition.js +71 -0
  71. package/dist/node/pi/definition.js.map +1 -0
  72. package/dist/node/pi/factory.d.ts +142 -0
  73. package/dist/node/pi/factory.d.ts.map +1 -0
  74. package/dist/node/pi/factory.js +22 -0
  75. package/dist/node/pi/factory.js.map +1 -0
  76. package/dist/node/pi/harness/agent-harness-event-protocol.d.ts +261 -0
  77. package/dist/node/pi/harness/agent-harness-event-protocol.d.ts.map +1 -0
  78. package/dist/node/pi/harness/agent-harness-event-protocol.js +588 -0
  79. package/dist/node/pi/harness/agent-harness-event-protocol.js.map +1 -0
  80. package/dist/node/pi/harness/json-value.js +82 -0
  81. package/dist/node/pi/harness/json-value.js.map +1 -0
  82. package/dist/node/pi/harness/pi-operation-completed.d.ts +16 -0
  83. package/dist/node/pi/harness/pi-operation-completed.d.ts.map +1 -0
  84. package/dist/node/pi/harness/pi-operation-completed.js +71 -0
  85. package/dist/node/pi/harness/pi-operation-completed.js.map +1 -0
  86. package/dist/node/pi/harness/session-storage.d.ts +62 -0
  87. package/dist/node/pi/harness/session-storage.d.ts.map +1 -0
  88. package/dist/node/pi/harness/session-storage.js +174 -0
  89. package/dist/node/pi/harness/session-storage.js.map +1 -0
  90. package/dist/node/pi/pi-jsonl-export.d.ts +11 -0
  91. package/dist/node/pi/pi-jsonl-export.d.ts.map +1 -0
  92. package/dist/node/pi/pi-jsonl-export.js +31 -0
  93. package/dist/node/pi/pi-jsonl-export.js.map +1 -0
  94. package/dist/node/pi/route-schemas.d.ts +109 -0
  95. package/dist/node/pi/route-schemas.d.ts.map +1 -0
  96. package/dist/node/pi/route-schemas.js +130 -0
  97. package/dist/node/pi/route-schemas.js.map +1 -0
  98. package/dist/node/pi/session-command-protocol.d.ts +14 -0
  99. package/dist/node/pi/session-command-protocol.d.ts.map +1 -0
  100. package/dist/node/pi/session-command-protocol.js +25 -0
  101. package/dist/node/pi/session-command-protocol.js.map +1 -0
  102. package/dist/node/pi/session-entry-projection.js +79 -0
  103. package/dist/node/pi/session-entry-projection.js.map +1 -0
  104. package/dist/node/pi/skills.d.ts +70 -0
  105. package/dist/node/pi/skills.d.ts.map +1 -0
  106. package/dist/node/pi/skills.js +150 -0
  107. package/dist/node/pi/skills.js.map +1 -0
  108. package/dist/node/pi/tools.d.ts +12 -0
  109. package/dist/node/pi/tools.d.ts.map +1 -0
  110. package/dist/node/pi/tools.js +8 -0
  111. package/dist/node/pi/tools.js.map +1 -0
  112. package/dist/node/pi/types.d.ts +165 -0
  113. package/dist/node/pi/types.d.ts.map +1 -0
  114. package/dist/node/pi/types.js +49 -0
  115. package/dist/node/pi/types.js.map +1 -0
  116. package/dist/node/pi/wait-for-command-step.js +46 -0
  117. package/dist/node/pi/wait-for-command-step.js.map +1 -0
  118. package/dist/node/pi/workflow-session-live-projection.js +220 -0
  119. package/dist/node/pi/workflow-session-live-projection.js.map +1 -0
  120. package/dist/node/pi/workflow-session-projection.d.ts +84 -0
  121. package/dist/node/pi/workflow-session-projection.d.ts.map +1 -0
  122. package/dist/node/pi/workflow-session-projection.js +100 -0
  123. package/dist/node/pi/workflow-session-projection.js.map +1 -0
  124. package/dist/node/pi/workflows/interactive-chat-workflow.d.ts +37 -0
  125. package/dist/node/pi/workflows/interactive-chat-workflow.d.ts.map +1 -0
  126. package/dist/node/pi/workflows/interactive-chat-workflow.js +219 -0
  127. package/dist/node/pi/workflows/interactive-chat-workflow.js.map +1 -0
  128. package/dist/node/pi/workflows/workflow-agent-harness.d.ts +142 -0
  129. package/dist/node/pi/workflows/workflow-agent-harness.d.ts.map +1 -0
  130. package/dist/node/pi/workflows/workflow-agent-harness.js +450 -0
  131. package/dist/node/pi/workflows/workflow-agent-harness.js.map +1 -0
  132. package/dist/node/routes.d.ts +631 -0
  133. package/dist/node/routes.d.ts.map +1 -0
  134. package/dist/node/routes.js +355 -0
  135. package/dist/node/routes.js.map +1 -0
  136. package/dist/node/schema.d.ts +5 -0
  137. package/dist/node/schema.d.ts.map +1 -0
  138. package/dist/node/schema.js +7 -0
  139. package/dist/node/schema.js.map +1 -0
  140. package/package.json +175 -3
@@ -0,0 +1,142 @@
1
+ import { PiHarnessFrontendAgentMessage } from "./harness/agent-harness-event-protocol.js";
2
+ import { PiFragmentConfig, PiSession } from "./types.js";
3
+ import { PiHarnessHooksMap } from "./definition.js";
4
+ import { FragnoPublicConfigWithDatabase } from "@fragno-dev/db";
5
+ import { WorkflowRegistryEntry, WorkflowsRegistry } from "@fragno-dev/workflows/workflow";
6
+ import { WorkflowsFragmentServices } from "@fragno-dev/workflows";
7
+ //#region src/pi/factory.d.ts
8
+ type PiFragmentServices = {
9
+ workflows: WorkflowsFragmentServices;
10
+ };
11
+ type WorkflowsOptions = {
12
+ logging?: PiFragmentConfig["logging"];
13
+ workflows?: WorkflowRegistryEntry[];
14
+ };
15
+ declare const createPiWorkflows: (options: WorkflowsOptions) => WorkflowsRegistry;
16
+ declare function createPiFragment<TRequestContext = never>(config: PiFragmentConfig, options: FragnoPublicConfigWithDatabase, services: PiFragmentServices): import("@fragno-dev/core").FragnoInstantiatedFragment<readonly [import("@fragno-dev/core").FragnoRouteConfig<"POST", "/workflows/:workflowName/sessions", import("zod").ZodObject<{
17
+ name: import("zod").ZodOptional<import("zod").ZodString>;
18
+ metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
19
+ input: import("zod").ZodOptional<import("zod").ZodUnknown>;
20
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
21
+ id: import("zod").ZodString;
22
+ name: import("zod").ZodNullable<import("zod").ZodString>;
23
+ metadata: import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
24
+ workflowName: import("zod").ZodString;
25
+ createdAt: import("zod").ZodDate;
26
+ updatedAt: import("zod").ZodDate;
27
+ }, import("zod/v4/core").$strip>, "WORKFLOW_NOT_FOUND" | "WORKFLOW_PARAMS_INVALID" | "WORKFLOW_CREATE_FAILED", string, import("@fragno-dev/db").DatabaseRequestContext<PiHarnessHooksMap>>, import("@fragno-dev/core").FragnoRouteConfig<"GET", "/workflows/:workflowName/sessions", import("@standard-schema/spec").StandardSchemaV1<unknown, unknown> | undefined, import("zod").ZodArray<import("zod").ZodObject<{
28
+ id: import("zod").ZodString;
29
+ name: import("zod").ZodNullable<import("zod").ZodString>;
30
+ metadata: import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
31
+ workflowName: import("zod").ZodString;
32
+ createdAt: import("zod").ZodDate;
33
+ updatedAt: import("zod").ZodDate;
34
+ }, import("zod/v4/core").$strip>>, "SESSION_DATA_INTEGRITY_ERROR", "limit", import("@fragno-dev/db").DatabaseRequestContext<PiHarnessHooksMap>>, import("@fragno-dev/core").FragnoRouteConfig<"GET", "/workflows/:workflowName/sessions/:sessionId", import("@standard-schema/spec").StandardSchemaV1<unknown, unknown> | undefined, import("zod").ZodObject<{
35
+ id: import("zod").ZodString;
36
+ name: import("zod").ZodNullable<import("zod").ZodString>;
37
+ metadata: import("zod").ZodNullable<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
38
+ workflowName: import("zod").ZodString;
39
+ createdAt: import("zod").ZodDate;
40
+ updatedAt: import("zod").ZodDate;
41
+ workflow: import("zod").ZodObject<{
42
+ status: import("zod").ZodEnum<{
43
+ active: "active";
44
+ paused: "paused";
45
+ errored: "errored";
46
+ terminated: "terminated";
47
+ complete: "complete";
48
+ waiting: "waiting";
49
+ }>;
50
+ error: import("zod").ZodOptional<import("zod").ZodObject<{
51
+ name: import("zod").ZodString;
52
+ message: import("zod").ZodString;
53
+ }, import("zod/v4/core").$strip>>;
54
+ output: import("zod").ZodOptional<import("zod").ZodAny>;
55
+ }, import("zod/v4/core").$strip>;
56
+ agent: import("zod").ZodObject<{
57
+ state: import("zod").ZodObject<{
58
+ messages: import("zod").ZodArray<import("zod").ZodType<PiHarnessFrontendAgentMessage, unknown, import("zod/v4/core").$ZodTypeInternals<PiHarnessFrontendAgentMessage, unknown>>>;
59
+ }, import("zod/v4/core").$strip>;
60
+ }, import("zod/v4/core").$strip>;
61
+ }, import("zod/v4/core").$strip>, "SESSION_DATA_INTEGRITY_ERROR" | "SESSION_NOT_FOUND" | "SESSION_DATA_UNAVAILABLE" | "WORKFLOW_INSTANCE_MISSING", string, import("@fragno-dev/db").DatabaseRequestContext<PiHarnessHooksMap>>, import("@fragno-dev/core").FragnoRouteConfig<"GET", "/workflows/:workflowName/sessions/:sessionId/export/pi-jsonl", import("@standard-schema/spec").StandardSchemaV1<unknown, unknown> | undefined, import("@standard-schema/spec").StandardSchemaV1<unknown, unknown> | undefined, "SESSION_DATA_INTEGRITY_ERROR" | "SESSION_NOT_FOUND" | "SESSION_DATA_UNAVAILABLE" | "WORKFLOW_INSTANCE_MISSING", string, import("@fragno-dev/db").DatabaseRequestContext<PiHarnessHooksMap>>, import("@fragno-dev/core").FragnoRouteConfig<"GET", "/workflows/:workflowName/sessions/:sessionId/commands/:commandId/wait", import("@standard-schema/spec").StandardSchemaV1<unknown, unknown> | undefined, import("@standard-schema/spec").StandardSchemaV1<unknown, unknown> | undefined, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING" | "INVALID_COMMAND_ID" | "COMMAND_NOT_WAITABLE" | "COMMAND_STEP_TIMEOUT" | "COMMAND_STEP_FAILED" | "COMMAND_WORKFLOW_TERMINAL", "timeoutMs", import("@fragno-dev/db").DatabaseRequestContext<PiHarnessHooksMap>>, import("@fragno-dev/core").FragnoRouteConfig<"POST", "/workflows/:workflowName/sessions/:sessionId/command", import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
62
+ kind: import("zod").ZodLiteral<"prompt">;
63
+ input: import("zod").ZodObject<{
64
+ text: import("zod").ZodString;
65
+ images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
66
+ type: import("zod").ZodLiteral<"image">;
67
+ data: import("zod").ZodBase64;
68
+ mimeType: import("zod").ZodString;
69
+ }, import("zod/v4/core").$strip>>>;
70
+ }, import("zod/v4/core").$strip>;
71
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
72
+ kind: import("zod").ZodLiteral<"skill">;
73
+ input: import("zod").ZodObject<{
74
+ name: import("zod").ZodString;
75
+ additionalInstructions: import("zod").ZodOptional<import("zod").ZodString>;
76
+ }, import("zod/v4/core").$strip>;
77
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
78
+ kind: import("zod").ZodLiteral<"promptFromTemplate">;
79
+ input: import("zod").ZodObject<{
80
+ name: import("zod").ZodString;
81
+ args: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
82
+ }, import("zod/v4/core").$strip>;
83
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
84
+ kind: import("zod").ZodLiteral<"compact">;
85
+ input: import("zod").ZodObject<{
86
+ customInstructions: import("zod").ZodOptional<import("zod").ZodString>;
87
+ }, import("zod/v4/core").$strip>;
88
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
89
+ kind: import("zod").ZodLiteral<"abort">;
90
+ reason: import("zod").ZodOptional<import("zod").ZodString>;
91
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
92
+ kind: import("zod").ZodLiteral<"steer">;
93
+ input: import("zod").ZodObject<{
94
+ text: import("zod").ZodString;
95
+ images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
96
+ type: import("zod").ZodLiteral<"image">;
97
+ data: import("zod").ZodBase64;
98
+ mimeType: import("zod").ZodString;
99
+ }, import("zod/v4/core").$strip>>>;
100
+ }, import("zod/v4/core").$strip>;
101
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
102
+ kind: import("zod").ZodLiteral<"followUp">;
103
+ input: import("zod").ZodObject<{
104
+ text: import("zod").ZodString;
105
+ images: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
106
+ type: import("zod").ZodLiteral<"image">;
107
+ data: import("zod").ZodBase64;
108
+ mimeType: import("zod").ZodString;
109
+ }, import("zod/v4/core").$strip>>>;
110
+ }, import("zod/v4/core").$strip>;
111
+ }, import("zod/v4/core").$strip>], "kind">, import("zod").ZodObject<{
112
+ accepted: import("zod").ZodLiteral<true>;
113
+ commandId: import("zod").ZodString;
114
+ status: import("zod").ZodEnum<{
115
+ active: "active";
116
+ paused: "paused";
117
+ errored: "errored";
118
+ terminated: "terminated";
119
+ complete: "complete";
120
+ waiting: "waiting";
121
+ }>;
122
+ }, import("zod/v4/core").$strip>, "SESSION_NOT_FOUND" | "WORKFLOW_INSTANCE_MISSING", string, import("@fragno-dev/db").DatabaseRequestContext<PiHarnessHooksMap>>], import("@fragno-dev/db").ImplicitDatabaseDependencies<import("@fragno-dev/db/schema").Schema<{}>>, import("@fragno-dev/core").BoundServices<{
123
+ getSessionDetailSnapshot: (workflowName: string, sessionId: string) => import("@fragno-dev/db").TxResult<{
124
+ session: PiSession;
125
+ workflowStatus: import("@fragno-dev/workflows/workflow").InstanceStatus;
126
+ messages: PiHarnessFrontendAgentMessage[];
127
+ sessionEntries: import("@earendil-works/pi-agent-core").SessionTreeEntry[];
128
+ }, []>;
129
+ createWorkflowSession: (values: {
130
+ id: string;
131
+ workflowName: string;
132
+ name?: string;
133
+ params?: Record<string, unknown>;
134
+ }) => import("@fragno-dev/db").TxResult<{
135
+ id: string;
136
+ details: import("@fragno-dev/workflows/workflow").InstanceStatus;
137
+ }[], []>;
138
+ }>, import("@fragno-dev/db").DatabaseServiceContext<PiHarnessHooksMap>, import("@fragno-dev/db").DatabaseRequestContext<PiHarnessHooksMap>, import("@fragno-dev/db/fragment-definition-builder").DatabaseRequestStorage, FragnoPublicConfigWithDatabase, TRequestContext>;
139
+ declare const createPiHarness: typeof createPiFragment;
140
+ //#endregion
141
+ export { createPiFragment, createPiHarness, createPiWorkflows };
142
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","names":[],"sources":["../../../src/pi/factory.ts"],"mappings":";;;;;;;KAWK;EACH,WAAW;;KAGR;EACH,UAAU;EACV,YAAY;;cAGD,oBAAqB,SAAS,qBAAgB;iBAkB3C,iBAAiB,yBAC/B,QAAQ,kBACR,SAAS,gCACT,UAAU,gDAAkB,gEAAA,6EAAA;;;;;;;;;;;uKAAlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aAY63F;;;;;oDAAA;cAD53F,wBAAe"}
@@ -0,0 +1,22 @@
1
+ import { piHarnessDefinition } from "./definition.js";
2
+ import { piRoutesFactory } from "../routes.js";
3
+ import { instantiate } from "@fragno-dev/core";
4
+ import { WorkflowsLogger } from "@fragno-dev/workflows/debug-log";
5
+ //#region src/pi/factory.ts
6
+ const createPiWorkflows = (options) => {
7
+ if (options.logging) WorkflowsLogger.configure(options.logging);
8
+ const registry = {};
9
+ for (const workflow of options.workflows ?? []) {
10
+ if (registry[workflow.name]) throw new Error(`Duplicate Pi workflow name '${workflow.name}'.`);
11
+ registry[workflow.name] = workflow;
12
+ }
13
+ return registry;
14
+ };
15
+ function createPiFragment(config, options, services) {
16
+ return instantiate(piHarnessDefinition).withConfig(config).withRoutes([piRoutesFactory]).withOptions(options).withServices(services).withRequestContext().build();
17
+ }
18
+ const createPiHarness = createPiFragment;
19
+ //#endregion
20
+ export { createPiFragment, createPiHarness, createPiWorkflows };
21
+
22
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","names":[],"sources":["../../../src/pi/factory.ts"],"sourcesContent":["import { WorkflowsLogger } from \"@fragno-dev/workflows/debug-log\";\nimport type { WorkflowRegistryEntry, WorkflowsRegistry } from \"@fragno-dev/workflows/workflow\";\n\nimport { instantiate } from \"@fragno-dev/core\";\nimport type { FragnoPublicConfigWithDatabase } from \"@fragno-dev/db\";\nimport type { WorkflowsFragmentServices } from \"@fragno-dev/workflows\";\n\nimport { piRoutesFactory } from \"../routes\";\nimport { piHarnessDefinition } from \"./definition\";\nimport type { PiFragmentConfig } from \"./types\";\n\ntype PiFragmentServices = {\n workflows: WorkflowsFragmentServices;\n};\n\ntype WorkflowsOptions = {\n logging?: PiFragmentConfig[\"logging\"];\n workflows?: WorkflowRegistryEntry[];\n};\n\nexport const createPiWorkflows = (options: WorkflowsOptions) => {\n if (options.logging) {\n WorkflowsLogger.configure(options.logging);\n }\n\n const registry: WorkflowsRegistry = {};\n\n for (const workflow of options.workflows ?? []) {\n if (registry[workflow.name]) {\n throw new Error(`Duplicate Pi workflow name '${workflow.name}'.`);\n }\n\n registry[workflow.name] = workflow;\n }\n\n return registry;\n};\n\nexport function createPiFragment<TRequestContext = never>(\n config: PiFragmentConfig,\n options: FragnoPublicConfigWithDatabase,\n services: PiFragmentServices,\n) {\n return instantiate(piHarnessDefinition)\n .withConfig(config)\n .withRoutes([piRoutesFactory])\n .withOptions(options)\n .withServices(services)\n .withRequestContext<TRequestContext>()\n .build();\n}\n\nexport const createPiHarness = createPiFragment;\n"],"mappings":";;;;;AAoBA,MAAa,qBAAqB,YAA8B;CAC9D,IAAI,QAAQ,SACV,gBAAgB,UAAU,QAAQ,OAAO;CAG3C,MAAM,WAA8B,CAAC;CAErC,KAAK,MAAM,YAAY,QAAQ,aAAa,CAAC,GAAG;EAC9C,IAAI,SAAS,SAAS,OACpB,MAAM,IAAI,MAAM,+BAA+B,SAAS,KAAK,GAAG;EAGlE,SAAS,SAAS,QAAQ;CAC5B;CAEA,OAAO;AACT;AAEA,SAAgB,iBACd,QACA,SACA,UACA;CACA,OAAO,YAAY,mBAAmB,CAAC,CACpC,WAAW,MAAM,CAAC,CAClB,WAAW,CAAC,eAAe,CAAC,CAAC,CAC7B,YAAY,OAAO,CAAC,CACpB,aAAa,QAAQ,CAAC,CACtB,mBAAoC,CAAC,CACrC,MAAM;AACX;AAEA,MAAa,kBAAkB"}
@@ -0,0 +1,261 @@
1
+ import { AgentHarnessEvent, AgentMessage } from "@earendil-works/pi-agent-core";
2
+ import { AssistantMessage, ToolCall } from "@earendil-works/pi-ai";
3
+ //#region src/pi/harness/agent-harness-event-protocol.d.ts
4
+ interface PiHarnessEventStreamEncoder<TEncodedEvent> {
5
+ encode(event: AgentHarnessEvent): TEncodedEvent;
6
+ }
7
+ type PiHarnessProjectedEvent = {
8
+ readonly type: AgentHarnessEvent["type"];
9
+ };
10
+ type PiHarnessFrontendToolCall = Omit<ToolCall, "thoughtSignature">;
11
+ type PiHarnessFrontendAssistantContent = Omit<Extract<AssistantMessage["content"][number], {
12
+ type: "text";
13
+ }>, "textSignature"> | Omit<Extract<AssistantMessage["content"][number], {
14
+ type: "thinking";
15
+ }>, "thinkingSignature"> | PiHarnessFrontendToolCall;
16
+ type PiHarnessFrontendAssistantMessage = Omit<AssistantMessage, "api" | "provider" | "model" | "responseModel" | "responseId" | "diagnostics" | "content"> & {
17
+ readonly content: PiHarnessFrontendAssistantContent[];
18
+ };
19
+ type PiHarnessFrontendMessage<TMessage> = TMessage extends AssistantMessage ? PiHarnessFrontendAssistantMessage : TMessage;
20
+ type PiHarnessFrontendAgentMessage = PiHarnessFrontendMessage<AgentMessage>;
21
+ type PiHarnessFrontendAssistantMessageEvent<TEvent> = TEvent extends {
22
+ partial: AssistantMessage;
23
+ } ? Omit<TEvent, "partial" | "toolCall"> & {
24
+ readonly partial: PiHarnessFrontendAssistantMessage;
25
+ } & (TEvent extends {
26
+ toolCall: ToolCall;
27
+ } ? {
28
+ readonly toolCall: PiHarnessFrontendToolCall;
29
+ } : object) : TEvent;
30
+ type PiHarnessFrontendEventFields<TEvent> = { readonly [TKey in keyof TEvent]: TKey extends "message" ? PiHarnessFrontendMessage<TEvent[TKey]> : TKey extends "messages" | "toolResults" | "steer" | "followUp" | "nextTurn" | "clearedSteer" | "clearedFollowUp" ? TEvent[TKey] extends readonly (infer TMessage)[] ? PiHarnessFrontendMessage<TMessage>[] : TEvent[TKey] : TKey extends "assistantMessageEvent" ? PiHarnessFrontendAssistantMessageEvent<TEvent[TKey]> : TEvent[TKey]; };
31
+ /** The frontend projection preserves every event while omitting provider-owned message metadata. */
32
+ type PiHarnessFrontendEvent = AgentHarnessEvent extends (infer TEvent) ? TEvent extends PiHarnessProjectedEvent ? PiHarnessFrontendEventFields<TEvent> : never : never;
33
+ interface PiHarnessEventStreamDecoder<TEncodedEvent> {
34
+ decode(event: TEncodedEvent): PiHarnessFrontendEvent;
35
+ }
36
+ /** Projects each AgentHarness event into one frontend-safe event with the same event type. */
37
+ interface PiHarnessEventProtocol {
38
+ createEncoder(): PiHarnessEventStreamEncoder<unknown>;
39
+ createDecoder(): PiHarnessEventStreamDecoder<unknown>;
40
+ eventType(event: unknown): PiHarnessFrontendEvent["type"];
41
+ }
42
+ declare const piToolCallArgumentsText: (toolCall: ToolCall) => string | undefined;
43
+ type PiHarnessSubscribedEvent = Exclude<AgentHarnessEvent, {
44
+ type: "before_agent_start";
45
+ } | {
46
+ type: "context";
47
+ } | {
48
+ type: "before_provider_request";
49
+ } | {
50
+ type: "before_provider_payload";
51
+ } | {
52
+ type: "tool_call";
53
+ } | {
54
+ type: "tool_result";
55
+ } | {
56
+ type: "session_before_compact";
57
+ } | {
58
+ type: "session_before_tree";
59
+ }>;
60
+ type EncodedValue<TValue = unknown> = {
61
+ readonly kind: "value";
62
+ readonly id: number;
63
+ readonly value: TValue;
64
+ } | {
65
+ readonly kind: "reference";
66
+ readonly id: number;
67
+ };
68
+ type ProjectedAgentMessage = Exclude<AgentMessage, AssistantMessage> | PiHarnessFrontendAssistantMessage;
69
+ type EncodedMessage = {
70
+ readonly kind: "message";
71
+ readonly id: number;
72
+ readonly message: ProjectedAgentMessage;
73
+ } | {
74
+ readonly kind: "reference";
75
+ readonly id: number;
76
+ };
77
+ type CompactAssistantMessageEvent = {
78
+ readonly type: "text_start";
79
+ readonly contentIndex: number;
80
+ } | {
81
+ readonly type: "text_delta";
82
+ readonly contentIndex: number;
83
+ readonly delta: string;
84
+ } | {
85
+ readonly type: "text_end";
86
+ readonly contentIndex: number;
87
+ readonly content: string;
88
+ } | {
89
+ readonly type: "thinking_start";
90
+ readonly contentIndex: number;
91
+ readonly redacted?: boolean;
92
+ } | {
93
+ readonly type: "thinking_delta";
94
+ readonly contentIndex: number;
95
+ readonly delta: string;
96
+ readonly redacted?: boolean;
97
+ } | {
98
+ readonly type: "thinking_end";
99
+ readonly contentIndex: number;
100
+ readonly content: string;
101
+ readonly redacted?: boolean;
102
+ } | {
103
+ readonly type: "toolcall_start";
104
+ readonly contentIndex: number;
105
+ readonly toolCall: PiHarnessFrontendToolCall;
106
+ } | {
107
+ readonly type: "toolcall_delta";
108
+ readonly contentIndex: number;
109
+ readonly delta: string;
110
+ } | {
111
+ readonly type: "toolcall_end";
112
+ readonly contentIndex: number;
113
+ readonly toolCall: PiHarnessFrontendToolCall;
114
+ };
115
+ type CompactAssistantMessageMetadataUpdate = {
116
+ readonly usage?: AssistantMessage["usage"];
117
+ readonly stopReason?: AssistantMessage["stopReason"];
118
+ readonly errorMessage?: string | null;
119
+ readonly timestamp?: number;
120
+ };
121
+ type CompactMessageUpdate = {
122
+ readonly type: "message_update";
123
+ readonly update: CompactAssistantMessageEvent;
124
+ readonly metadata?: CompactAssistantMessageMetadataUpdate;
125
+ };
126
+ type PiHarnessCompactEvent = {
127
+ readonly type: "raw";
128
+ readonly event: PiHarnessSubscribedEvent;
129
+ } | {
130
+ readonly type: "agent_start";
131
+ } | {
132
+ readonly type: "agent_end";
133
+ readonly messages: readonly EncodedMessage[];
134
+ } | {
135
+ readonly type: "turn_start";
136
+ } | {
137
+ readonly type: "turn_end";
138
+ readonly message: EncodedMessage;
139
+ readonly toolResults: readonly EncodedMessage[];
140
+ } | {
141
+ readonly type: "message_start";
142
+ readonly message: EncodedMessage;
143
+ } | CompactMessageUpdate | {
144
+ readonly type: "message_end";
145
+ readonly message: EncodedMessage;
146
+ } | {
147
+ readonly type: "tool_execution_start";
148
+ readonly toolCallId: string;
149
+ readonly toolName: string;
150
+ readonly args: EncodedValue;
151
+ } | {
152
+ readonly type: "tool_execution_update";
153
+ readonly toolCallId: string;
154
+ readonly toolName: string;
155
+ readonly args: EncodedValue;
156
+ readonly partialResult: EncodedValue;
157
+ } | {
158
+ readonly type: "tool_execution_end";
159
+ readonly toolCallId: string;
160
+ readonly toolName: string;
161
+ readonly result: EncodedValue;
162
+ readonly isError: boolean;
163
+ } | {
164
+ readonly type: "queue_update";
165
+ readonly steer: readonly EncodedMessage[];
166
+ readonly followUp: readonly EncodedMessage[];
167
+ readonly nextTurn: readonly EncodedMessage[];
168
+ } | {
169
+ readonly type: "save_point";
170
+ readonly hadPendingMutations: boolean;
171
+ } | {
172
+ readonly type: "abort";
173
+ readonly clearedSteer: readonly EncodedMessage[];
174
+ readonly clearedFollowUp: readonly EncodedMessage[];
175
+ } | {
176
+ readonly type: "settled";
177
+ readonly nextTurnCount: number;
178
+ } | {
179
+ readonly type: "after_provider_response";
180
+ readonly status: number;
181
+ readonly headers: EncodedValue<SubscribedEvent<"after_provider_response">["headers"]>;
182
+ } | {
183
+ readonly type: "session_compact";
184
+ readonly compactionEntry: EncodedValue<SubscribedEvent<"session_compact">["compactionEntry"]>;
185
+ readonly fromHook: boolean;
186
+ } | {
187
+ readonly type: "session_tree";
188
+ readonly newLeafId: string | null;
189
+ readonly oldLeafId: string | null;
190
+ readonly summaryEntry?: EncodedValue<NonNullable<SubscribedEvent<"session_tree">["summaryEntry"]>>;
191
+ readonly fromHook?: boolean;
192
+ } | {
193
+ readonly type: "retry_scheduled";
194
+ readonly operation: "compaction" | "branch_summary";
195
+ readonly attempt: number;
196
+ readonly maxAttempts: number;
197
+ readonly delayMs: number;
198
+ readonly errorMessage: string;
199
+ } | {
200
+ readonly type: "retry_attempt_start" | "retry_finished";
201
+ readonly operation: "compaction" | "branch_summary";
202
+ } | {
203
+ readonly type: "model_update";
204
+ readonly model: EncodedValue<SubscribedEvent<"model_update">["model"]>;
205
+ readonly previousModel?: EncodedValue<NonNullable<SubscribedEvent<"model_update">["previousModel"]>>;
206
+ readonly source: "set" | "restore";
207
+ } | {
208
+ readonly type: "thinking_level_update";
209
+ readonly level: SubscribedEvent<"thinking_level_update">["level"];
210
+ readonly previousLevel: SubscribedEvent<"thinking_level_update">["previousLevel"];
211
+ } | {
212
+ readonly type: "tools_update";
213
+ readonly toolNames: readonly string[];
214
+ readonly previousToolNames: readonly string[];
215
+ readonly activeToolNames: readonly string[];
216
+ readonly previousActiveToolNames: readonly string[];
217
+ readonly source: "set" | "restore";
218
+ } | {
219
+ readonly type: "resources_update";
220
+ readonly resources: EncodedValue<SubscribedEvent<"resources_update">["resources"]>;
221
+ readonly previousResources: EncodedValue<SubscribedEvent<"resources_update">["previousResources"]>;
222
+ };
223
+ type SubscribedEvent<TType extends PiHarnessSubscribedEvent["type"]> = Extract<PiHarnessSubscribedEvent, {
224
+ type: TType;
225
+ }>;
226
+ type PiHarnessEncodedEvent = {
227
+ readonly protocol: "pi-harness-event";
228
+ readonly version: 2;
229
+ readonly event: PiHarnessCompactEvent;
230
+ };
231
+ type PiHarnessEncodedEventEmission = {
232
+ readonly kind: "harness-event";
233
+ readonly event: PiHarnessEncodedEvent;
234
+ };
235
+ type PiHarnessEventStreamIdentity = {
236
+ readonly stepKey: string;
237
+ readonly executionId: string;
238
+ readonly epoch: string;
239
+ };
240
+ declare class PiHarnessEventEncoder {
241
+ #private;
242
+ encode(event: PiHarnessSubscribedEvent): PiHarnessEncodedEvent;
243
+ }
244
+ declare const piHarnessEventProtocol: {
245
+ createEncoder: () => PiHarnessEventEncoder;
246
+ createDecoder: () => PiHarnessEventDecoder;
247
+ eventType: (value: unknown) => "abort" | "agent_start" | "agent_end" | "turn_start" | "turn_end" | "message_start" | "message_update" | "message_end" | "tool_execution_start" | "tool_execution_update" | "tool_execution_end" | "queue_update" | "save_point" | "settled" | "after_provider_response" | "session_compact" | "session_tree" | "retry_scheduled" | "retry_attempt_start" | "retry_finished" | "model_update" | "thinking_level_update" | "tools_update" | "resources_update";
248
+ };
249
+ declare class PiHarnessEventDecoder {
250
+ #private;
251
+ decode(value: unknown): PiHarnessFrontendEvent;
252
+ }
253
+ declare class PiHarnessEventStreamDecoders {
254
+ #private;
255
+ start(identity: PiHarnessEventStreamIdentity): void;
256
+ finish(identity: PiHarnessEventStreamIdentity): void;
257
+ decode(identity: PiHarnessEventStreamIdentity, event: unknown): PiHarnessFrontendEvent;
258
+ }
259
+ //#endregion
260
+ export { PiHarnessCompactEvent, PiHarnessEncodedEvent, PiHarnessEncodedEventEmission, PiHarnessEventDecoder, PiHarnessEventEncoder, PiHarnessEventProtocol, PiHarnessEventStreamDecoder, PiHarnessEventStreamDecoders, PiHarnessEventStreamEncoder, PiHarnessEventStreamIdentity, PiHarnessFrontendAgentMessage, PiHarnessFrontendAssistantContent, PiHarnessFrontendAssistantMessage, PiHarnessFrontendEvent, PiHarnessFrontendMessage, PiHarnessFrontendToolCall, PiHarnessProjectedEvent, PiHarnessSubscribedEvent, piHarnessEventProtocol, piToolCallArgumentsText };
261
+ //# sourceMappingURL=agent-harness-event-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-harness-event-protocol.d.ts","names":[],"sources":["../../../../src/pi/harness/agent-harness-event-protocol.ts"],"mappings":";;;UAGiB,4BAA4B;EAC3C,OAAO,OAAO,oBAAoB;;KAGxB;WACD,MAAM;;KAGL,4BAA4B,KAAK;KAEjC,oCACR,KAAK,QAAQ;EAAuC;uBACpD,KAAK,QAAQ;EAAuC;2BACpD;KAEQ,oCAAoC,KAC9C;WAGS,SAAS;;KAGR,yBAAyB,YAAY,iBAAiB,mBAC9D,oCACA;KAEQ,gCAAgC,yBAAyB;KAEhE,uCAAuC,UAAU;EACpD,SAAS;IAEP,KAAK;WACM,SAAS;KACf;EAAiB,UAAU;;WACf,UAAU;cAE3B;KAEC,6BAA6B,sBACtB,cAAc,SAAS,yBAC7B,yBAAyB,OAAO,SAChC,mHAQE,OAAO,8BAA8B,cACnC,yBAAyB,cACzB,OAAO,QACT,uCACE,uCAAuC,OAAO,SAC9C,OAAO;;KAIL,yBAAyB,iCAAgC,UACjE,eAAe,0BACb,6BAA6B;UAIlB,4BAA4B;EAC3C,OAAO,OAAO,gBAAgB;;;UAIf;EACf,iBAAiB;EACjB,iBAAiB;EACjB,UAAU,iBAAiB;;cAGhB,0BAA2B,UAAU;KAWtC,2BAA2B,QACrC;EACI;;EACA;;EACA;;EACA;;EACA;;EACA;;EACA;;EACA;;KAGD,aAAa;WACH;WAAwB;WAAqB,OAAO;;WACpD;WAA4B;;KAEtC,wBACD,QAAQ,cAAc,oBACtB;KAEC;WAEU;WACA;WACA,SAAS;;WAET;WAA4B;;KAkBtC;WAEU;WACA;;WAGA;WACA;WACA;;WAGA;WACA;WACA;;WAGA;WACA;WACA;;WAGA;WACA;WACA;WACA;;WAGA;WACA;WACA;WACA;;WAGA;WACA;WACA,UAAU;;WAGV;WACA;WACA;;WAGA;WACA;WACA,UAAU;;KAGpB;WACM,QAAQ;WACR,aAAa;WACb;WACA;;KAGN;WACM;WACA,QAAQ;WACR,WAAW;;KAGV;WACG;WAAsB,OAAO;;WAC7B;;WACA;WAA4B,mBAAmB;;WAC/C;;WAEA;WACA,SAAS;WACT,sBAAsB;;WAEtB;WAAgC,SAAS;IACpD;WACW;WAA8B,SAAS;;WAEvC;WACA;WACA;WACA,MAAM;;WAGN;WACA;WACA;WACA,MAAM;WACN,eAAe;;WAGf;WACA;WACA;WACA,QAAQ;WACR;;WAGA;WACA,gBAAgB;WAChB,mBAAmB;WACnB,mBAAmB;;WAEnB;WAA6B;;WAE7B;WACA,uBAAuB;WACvB,0BAA0B;;WAE1B;WAA0B;;WAE1B;WACA;WACA,SAAS,aAAa;;WAGtB;WACA,iBAAiB,aAAa;WAC9B;;WAGA;WACA;WACA;WACA,eAAe,aACtB,YAAY;WAEL;;WAGA;WACA;WACA;WACA;WACA;WACA;;WAGA;WACA;;WAGA;WACA,OAAO,aAAa;WACpB,gBAAgB,aACvB,YAAY;WAEL;;WAGA;WACA,OAAO;WACP,eAAe;;WAGf;WACA;WACA;WACA;WACA;WACA;;WAGA;WACA,WAAW,aAAa;WACxB,mBAAmB,aAC1B;;KAIH,gBAAgB,cAAc,oCAAoC,QACrE;EACE,MAAM;;KAqbE;WACD;WACA;WACA,OAAO;;KAGN;WACD;WACA,OAAO;;KAGN;WACD;WACA;WACA;;cA4BE;;EAKX,OAAO,OAAO,2BAA2B;;cAoK9B;uBAAA;uBAAA;;;cASA;;EAMX,OAAO,iBAAiB;;cA+Ib;;EAGX,MAAM,UAAU;EAIhB,OAAO,UAAU;EAIjB,OAAO,UAAU,8BAA8B,iBAAiB"}