@pasko70/pibo 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/dist/agent-runtime/capabilities.js +5 -0
  2. package/dist/agent-runtime/contract.js +2 -0
  3. package/dist/agent-runtime/routed-session.js +68 -11
  4. package/dist/agent-runtimes/codex-native/adapter.js +3 -0
  5. package/dist/agent-runtimes/codex-native/thread.js +26 -4
  6. package/dist/agent-runtimes/omp/adapter.js +1 -0
  7. package/dist/agent-runtimes/pi/adapter.js +4 -0
  8. package/dist/agent-runtimes/pi/routed-session.js +53 -5
  9. package/dist/apps/chat/chat-api-routes.js +11 -37
  10. package/dist/apps/chat/chat-request-normalizers.js +8 -48
  11. package/dist/apps/chat/data/legacy-project-migration.js +492 -0
  12. package/dist/apps/chat/data/room-service.js +2 -2
  13. package/dist/apps/chat/data/workflow-session-model.js +1 -0
  14. package/dist/apps/chat/data/workflow-session-service.js +352 -0
  15. package/dist/apps/chat/rooms.js +1 -1
  16. package/dist/apps/chat/types/rooms.js +30 -0
  17. package/dist/apps/chat/web-app.js +264 -647
  18. package/dist/apps/chat/workflow-catalog.js +18 -18
  19. package/dist/apps/chat/{project-workflow-human-actions.js → workflow-human-actions.js} +14 -14
  20. package/dist/apps/chat/workflow-manual-trigger-runtime.js +5 -1
  21. package/dist/apps/chat/workflow-persistence.js +20 -28
  22. package/dist/apps/chat/{project-workflow-sessions.js → workflow-sessions.js} +18 -17
  23. package/dist/apps/chat-ui/assets/{dist-Kc3zbvQi.js → dist-AhtdAETR.js} +1 -1
  24. package/dist/apps/chat-ui/assets/{dist-CcAkJ8iv.js → dist-Bk_L1qbJ.js} +1 -1
  25. package/dist/apps/chat-ui/assets/{dist-BbCjOLiw.js → dist-Dyp6sLQn.js} +1 -1
  26. package/dist/apps/chat-ui/assets/{dist-Bd9gWCbk.js → dist-jVaiGXFD.js} +1 -1
  27. package/dist/apps/chat-ui/assets/{dist-C9a0_446.js → dist-t25moyJS.js} +1 -1
  28. package/dist/apps/chat-ui/assets/index-CZjNw-aK.js +228 -0
  29. package/dist/apps/chat-ui/assets/index-CcEjFITM.css +1 -0
  30. package/dist/apps/chat-ui/index.html +2 -2
  31. package/dist/apps/chat-vscode-web/assets/index-Spj6M0tn.js +43 -0
  32. package/dist/apps/chat-vscode-web/index.html +1 -1
  33. package/dist/compute/pool/cli.js +1 -1
  34. package/dist/compute/pool/seeds.js +2 -3
  35. package/dist/config/config.js +1 -1
  36. package/dist/core/session-router.js +7 -4
  37. package/dist/previews/cli.js +154 -79
  38. package/dist/previews/compute-worker.js +37 -0
  39. package/dist/previews/config.js +2 -1
  40. package/dist/previews/migrations/session-ownership.js +7 -0
  41. package/dist/previews/proxy.js +4 -2
  42. package/dist/previews/public-setup.js +108 -0
  43. package/dist/previews/store.js +20 -13
  44. package/dist/previews/web-app.js +12 -2
  45. package/dist/sessions/workflow-session-kind.js +0 -3
  46. package/npm-shrinkwrap.json +7 -6
  47. package/package.json +6 -2
  48. package/packages/workflows/README.md +21 -0
  49. package/packages/workflows/dist/api/index.d.ts +48 -0
  50. package/packages/workflows/dist/api/index.d.ts.map +1 -0
  51. package/packages/workflows/dist/api/index.js +96 -0
  52. package/packages/workflows/dist/api/index.js.map +1 -0
  53. package/packages/workflows/dist/definition-hash.d.ts +4 -0
  54. package/packages/workflows/dist/definition-hash.d.ts.map +1 -0
  55. package/packages/workflows/dist/definition-hash.js +27 -0
  56. package/packages/workflows/dist/definition-hash.js.map +1 -0
  57. package/packages/workflows/dist/fixtures/index.d.ts +39 -0
  58. package/packages/workflows/dist/fixtures/index.d.ts.map +1 -0
  59. package/packages/workflows/dist/fixtures/index.js +608 -0
  60. package/packages/workflows/dist/fixtures/index.js.map +1 -0
  61. package/packages/workflows/dist/index.d.ts +16 -0
  62. package/packages/workflows/dist/index.d.ts.map +1 -0
  63. package/packages/workflows/dist/index.js +10 -0
  64. package/packages/workflows/dist/index.js.map +1 -0
  65. package/packages/workflows/dist/inspection/index.d.ts +47 -0
  66. package/packages/workflows/dist/inspection/index.d.ts.map +1 -0
  67. package/packages/workflows/dist/inspection/index.js +131 -0
  68. package/packages/workflows/dist/inspection/index.js.map +1 -0
  69. package/packages/workflows/dist/registry/index.d.ts +30 -0
  70. package/packages/workflows/dist/registry/index.d.ts.map +1 -0
  71. package/packages/workflows/dist/registry/index.js +161 -0
  72. package/packages/workflows/dist/registry/index.js.map +1 -0
  73. package/packages/workflows/dist/runtime/adapter-node.d.ts +28 -0
  74. package/packages/workflows/dist/runtime/adapter-node.d.ts.map +1 -0
  75. package/packages/workflows/dist/runtime/adapter-node.js +172 -0
  76. package/packages/workflows/dist/runtime/adapter-node.js.map +1 -0
  77. package/packages/workflows/dist/runtime/agent-node.d.ts +32 -0
  78. package/packages/workflows/dist/runtime/agent-node.d.ts.map +1 -0
  79. package/packages/workflows/dist/runtime/agent-node.js +231 -0
  80. package/packages/workflows/dist/runtime/agent-node.js.map +1 -0
  81. package/packages/workflows/dist/runtime/agent-runtime.d.ts +25 -0
  82. package/packages/workflows/dist/runtime/agent-runtime.d.ts.map +1 -0
  83. package/packages/workflows/dist/runtime/agent-runtime.js +111 -0
  84. package/packages/workflows/dist/runtime/agent-runtime.js.map +1 -0
  85. package/packages/workflows/dist/runtime/code-node.d.ts +31 -0
  86. package/packages/workflows/dist/runtime/code-node.d.ts.map +1 -0
  87. package/packages/workflows/dist/runtime/code-node.js +223 -0
  88. package/packages/workflows/dist/runtime/code-node.js.map +1 -0
  89. package/packages/workflows/dist/runtime/dispatch-failures.d.ts +36 -0
  90. package/packages/workflows/dist/runtime/dispatch-failures.d.ts.map +1 -0
  91. package/packages/workflows/dist/runtime/dispatch-failures.js +80 -0
  92. package/packages/workflows/dist/runtime/dispatch-failures.js.map +1 -0
  93. package/packages/workflows/dist/runtime/edge-payloads.d.ts +3 -0
  94. package/packages/workflows/dist/runtime/edge-payloads.d.ts.map +1 -0
  95. package/packages/workflows/dist/runtime/edge-payloads.js +11 -0
  96. package/packages/workflows/dist/runtime/edge-payloads.js.map +1 -0
  97. package/packages/workflows/dist/runtime/edge-transfer.d.ts +39 -0
  98. package/packages/workflows/dist/runtime/edge-transfer.d.ts.map +1 -0
  99. package/packages/workflows/dist/runtime/edge-transfer.js +356 -0
  100. package/packages/workflows/dist/runtime/edge-transfer.js.map +1 -0
  101. package/packages/workflows/dist/runtime/human-action.d.ts +43 -0
  102. package/packages/workflows/dist/runtime/human-action.d.ts.map +1 -0
  103. package/packages/workflows/dist/runtime/human-action.js +231 -0
  104. package/packages/workflows/dist/runtime/human-action.js.map +1 -0
  105. package/packages/workflows/dist/runtime/human-node.d.ts +27 -0
  106. package/packages/workflows/dist/runtime/human-node.d.ts.map +1 -0
  107. package/packages/workflows/dist/runtime/human-node.js +126 -0
  108. package/packages/workflows/dist/runtime/human-node.js.map +1 -0
  109. package/packages/workflows/dist/runtime/ids.d.ts +2 -0
  110. package/packages/workflows/dist/runtime/ids.d.ts.map +1 -0
  111. package/packages/workflows/dist/runtime/ids.js +4 -0
  112. package/packages/workflows/dist/runtime/ids.js.map +1 -0
  113. package/packages/workflows/dist/runtime/index.d.ts +23 -0
  114. package/packages/workflows/dist/runtime/index.d.ts.map +1 -0
  115. package/packages/workflows/dist/runtime/index.js +12 -0
  116. package/packages/workflows/dist/runtime/index.js.map +1 -0
  117. package/packages/workflows/dist/runtime/manual-trigger.d.ts +51 -0
  118. package/packages/workflows/dist/runtime/manual-trigger.d.ts.map +1 -0
  119. package/packages/workflows/dist/runtime/manual-trigger.js +403 -0
  120. package/packages/workflows/dist/runtime/manual-trigger.js.map +1 -0
  121. package/packages/workflows/dist/runtime/nested-workflow-node.d.ts +48 -0
  122. package/packages/workflows/dist/runtime/nested-workflow-node.d.ts.map +1 -0
  123. package/packages/workflows/dist/runtime/nested-workflow-node.js +246 -0
  124. package/packages/workflows/dist/runtime/nested-workflow-node.js.map +1 -0
  125. package/packages/workflows/dist/runtime/one-node-agent.d.ts +34 -0
  126. package/packages/workflows/dist/runtime/one-node-agent.d.ts.map +1 -0
  127. package/packages/workflows/dist/runtime/one-node-agent.js +334 -0
  128. package/packages/workflows/dist/runtime/one-node-agent.js.map +1 -0
  129. package/packages/workflows/dist/runtime/persistence.d.ts +9 -0
  130. package/packages/workflows/dist/runtime/persistence.d.ts.map +1 -0
  131. package/packages/workflows/dist/runtime/persistence.js +67 -0
  132. package/packages/workflows/dist/runtime/persistence.js.map +1 -0
  133. package/packages/workflows/dist/runtime/pibo-routing.d.ts +126 -0
  134. package/packages/workflows/dist/runtime/pibo-routing.d.ts.map +1 -0
  135. package/packages/workflows/dist/runtime/pibo-routing.js +96 -0
  136. package/packages/workflows/dist/runtime/pibo-routing.js.map +1 -0
  137. package/packages/workflows/dist/runtime/prompts.d.ts +20 -0
  138. package/packages/workflows/dist/runtime/prompts.d.ts.map +1 -0
  139. package/packages/workflows/dist/runtime/prompts.js +235 -0
  140. package/packages/workflows/dist/runtime/prompts.js.map +1 -0
  141. package/packages/workflows/dist/runtime/retry.d.ts +35 -0
  142. package/packages/workflows/dist/runtime/retry.d.ts.map +1 -0
  143. package/packages/workflows/dist/runtime/retry.js +80 -0
  144. package/packages/workflows/dist/runtime/retry.js.map +1 -0
  145. package/packages/workflows/dist/runtime/state.d.ts +14 -0
  146. package/packages/workflows/dist/runtime/state.d.ts.map +1 -0
  147. package/packages/workflows/dist/runtime/state.js +139 -0
  148. package/packages/workflows/dist/runtime/state.js.map +1 -0
  149. package/packages/workflows/dist/runtime/time.d.ts +6 -0
  150. package/packages/workflows/dist/runtime/time.d.ts.map +1 -0
  151. package/packages/workflows/dist/runtime/time.js +42 -0
  152. package/packages/workflows/dist/runtime/time.js.map +1 -0
  153. package/packages/workflows/dist/store/catalog-records.d.ts +18 -0
  154. package/packages/workflows/dist/store/catalog-records.d.ts.map +1 -0
  155. package/packages/workflows/dist/store/catalog-records.js +59 -0
  156. package/packages/workflows/dist/store/catalog-records.js.map +1 -0
  157. package/packages/workflows/dist/store/contracts.d.ts +149 -0
  158. package/packages/workflows/dist/store/contracts.d.ts.map +1 -0
  159. package/packages/workflows/dist/store/contracts.js +2 -0
  160. package/packages/workflows/dist/store/contracts.js.map +1 -0
  161. package/packages/workflows/dist/store/draft-writes.d.ts +7 -0
  162. package/packages/workflows/dist/store/draft-writes.d.ts.map +1 -0
  163. package/packages/workflows/dist/store/draft-writes.js +18 -0
  164. package/packages/workflows/dist/store/draft-writes.js.map +1 -0
  165. package/packages/workflows/dist/store/index.d.ts +55 -0
  166. package/packages/workflows/dist/store/index.d.ts.map +1 -0
  167. package/packages/workflows/dist/store/index.js +650 -0
  168. package/packages/workflows/dist/store/index.js.map +1 -0
  169. package/packages/workflows/dist/store/list-query.d.ts +13 -0
  170. package/packages/workflows/dist/store/list-query.d.ts.map +1 -0
  171. package/packages/workflows/dist/store/list-query.js +20 -0
  172. package/packages/workflows/dist/store/list-query.js.map +1 -0
  173. package/packages/workflows/dist/store/row-mappers.d.ts +206 -0
  174. package/packages/workflows/dist/store/row-mappers.d.ts.map +1 -0
  175. package/packages/workflows/dist/store/row-mappers.js +262 -0
  176. package/packages/workflows/dist/store/row-mappers.js.map +1 -0
  177. package/packages/workflows/dist/store/schema.d.ts +13 -0
  178. package/packages/workflows/dist/store/schema.d.ts.map +1 -0
  179. package/packages/workflows/dist/store/schema.js +458 -0
  180. package/packages/workflows/dist/store/schema.js.map +1 -0
  181. package/packages/workflows/dist/store/write-values.d.ts +18 -0
  182. package/packages/workflows/dist/store/write-values.d.ts.map +1 -0
  183. package/packages/workflows/dist/store/write-values.js +227 -0
  184. package/packages/workflows/dist/store/write-values.js.map +1 -0
  185. package/packages/workflows/dist/types/index.d.ts +1202 -0
  186. package/packages/workflows/dist/types/index.d.ts.map +1 -0
  187. package/packages/workflows/dist/types/index.js +8 -0
  188. package/packages/workflows/dist/types/index.js.map +1 -0
  189. package/packages/workflows/dist/validation/diagnostics.d.ts +27 -0
  190. package/packages/workflows/dist/validation/diagnostics.d.ts.map +1 -0
  191. package/packages/workflows/dist/validation/diagnostics.js +104 -0
  192. package/packages/workflows/dist/validation/diagnostics.js.map +1 -0
  193. package/packages/workflows/dist/validation/graph-cycles.d.ts +4 -0
  194. package/packages/workflows/dist/validation/graph-cycles.d.ts.map +1 -0
  195. package/packages/workflows/dist/validation/graph-cycles.js +130 -0
  196. package/packages/workflows/dist/validation/graph-cycles.js.map +1 -0
  197. package/packages/workflows/dist/validation/graph-edges.d.ts +5 -0
  198. package/packages/workflows/dist/validation/graph-edges.d.ts.map +1 -0
  199. package/packages/workflows/dist/validation/graph-edges.js +48 -0
  200. package/packages/workflows/dist/validation/graph-edges.js.map +1 -0
  201. package/packages/workflows/dist/validation/graph-ports.d.ts +5 -0
  202. package/packages/workflows/dist/validation/graph-ports.d.ts.map +1 -0
  203. package/packages/workflows/dist/validation/graph-ports.js +55 -0
  204. package/packages/workflows/dist/validation/graph-ports.js.map +1 -0
  205. package/packages/workflows/dist/validation/index.d.ts +18 -0
  206. package/packages/workflows/dist/validation/index.d.ts.map +1 -0
  207. package/packages/workflows/dist/validation/index.js +175 -0
  208. package/packages/workflows/dist/validation/index.js.map +1 -0
  209. package/packages/workflows/dist/validation/json-schema.d.ts +12 -0
  210. package/packages/workflows/dist/validation/json-schema.d.ts.map +1 -0
  211. package/packages/workflows/dist/validation/json-schema.js +556 -0
  212. package/packages/workflows/dist/validation/json-schema.js.map +1 -0
  213. package/packages/workflows/dist/validation/registry-refs.d.ts +21 -0
  214. package/packages/workflows/dist/validation/registry-refs.d.ts.map +1 -0
  215. package/packages/workflows/dist/validation/registry-refs.js +283 -0
  216. package/packages/workflows/dist/validation/registry-refs.js.map +1 -0
  217. package/packages/workflows/dist/validation/retry-policy.d.ts +3 -0
  218. package/packages/workflows/dist/validation/retry-policy.d.ts.map +1 -0
  219. package/packages/workflows/dist/validation/retry-policy.js +114 -0
  220. package/packages/workflows/dist/validation/retry-policy.js.map +1 -0
  221. package/packages/workflows/dist/validation/schema-declarations.d.ts +5 -0
  222. package/packages/workflows/dist/validation/schema-declarations.d.ts.map +1 -0
  223. package/packages/workflows/dist/validation/schema-declarations.js +36 -0
  224. package/packages/workflows/dist/validation/schema-declarations.js.map +1 -0
  225. package/packages/workflows/dist/validation/state-access.d.ts +4 -0
  226. package/packages/workflows/dist/validation/state-access.d.ts.map +1 -0
  227. package/packages/workflows/dist/validation/state-access.js +121 -0
  228. package/packages/workflows/dist/validation/state-access.js.map +1 -0
  229. package/packages/workflows/dist/xstate/index.d.ts +73 -0
  230. package/packages/workflows/dist/xstate/index.d.ts.map +1 -0
  231. package/packages/workflows/dist/xstate/index.js +728 -0
  232. package/packages/workflows/dist/xstate/index.js.map +1 -0
  233. package/packages/workflows/package.json +23 -0
  234. package/dist/apps/chat/data/project-service.js +0 -1029
  235. package/dist/apps/chat-ui/assets/index-DWJnUye8.css +0 -1
  236. package/dist/apps/chat-ui/assets/index-exohEOUE.js +0 -228
  237. package/dist/apps/chat-vscode-web/assets/index-D1bpAUkR.js +0 -43
@@ -5,7 +5,8 @@ import { DatabaseSync } from "node:sqlite";
5
5
  import { ensurePrivatePiboHomeForPath, piboHomePath } from "../core/pibo-home.js";
6
6
  import { protectPrivateFileSync } from "../core/private-path.js";
7
7
  import { loadPreviewConfig } from "./config.js";
8
- export const PREVIEW_SCHEMA_VERSION = 4;
8
+ import { migratePreviewSessionOwnership } from "./migrations/session-ownership.js";
9
+ export const PREVIEW_SCHEMA_VERSION = 6;
9
10
  export const MAX_ACTIVE_PREVIEW_EXPOSURES = 256;
10
11
  export const MAX_ACTIVE_PREVIEW_EXPOSURES_PER_SESSION = 16;
11
12
  export const MAX_OUTSTANDING_PREVIEW_TICKETS = 32;
@@ -52,8 +53,6 @@ function validateExposureInput(input) {
52
53
  throw new Error("Pibo Session id is invalid");
53
54
  if (!input.label.trim() || input.label.length > 120)
54
55
  throw new Error("Preview label must contain 1 to 120 characters");
55
- if (input.projectId && input.projectId.length > 256)
56
- throw new Error("Preview Project id is too long");
57
56
  if (!input.workspace || input.workspace.length > 4_096)
58
57
  throw new Error("Preview workspace is invalid");
59
58
  if (!Number.isInteger(input.targetPort) || input.targetPort < 1024 || input.targetPort > 65535) {
@@ -66,13 +65,15 @@ function validateExposureInput(input) {
66
65
  if ((input.managementMode ?? "external") === "managed" && !input.startCommand) {
67
66
  throw new Error("Managed Preview definitions require a start command");
68
67
  }
68
+ if (input.proxyMode !== undefined && input.proxyMode !== "standard" && input.proxyMode !== "pibo-compute-dev-auth") {
69
+ throw new Error("Preview proxy mode is invalid");
70
+ }
69
71
  }
70
72
  function exposureFromRow(row) {
71
73
  const managementMode = row.management_mode === "managed" ? "managed" : "external";
72
74
  return {
73
75
  id: row.id,
74
76
  piboSessionId: row.pibo_session_id,
75
- projectId: row.project_id ?? undefined,
76
77
  label: row.label,
77
78
  targetHost: row.target_host,
78
79
  targetPort: row.target_port,
@@ -80,6 +81,7 @@ function exposureFromRow(row) {
80
81
  targetProcessStartTicks: row.target_process_start_ticks ?? undefined,
81
82
  workspace: row.workspace,
82
83
  managementMode,
84
+ proxyMode: row.proxy_mode === "pibo-compute-dev-auth" ? "pibo-compute-dev-auth" : "standard",
83
85
  startCommand: row.start_command ?? undefined,
84
86
  serverState: managementMode === "managed" && row.server_state !== "external" ? row.server_state : undefined,
85
87
  serverGeneration: row.server_generation ?? undefined,
@@ -107,6 +109,7 @@ function sameAuthorizationExposure(first, second) {
107
109
  return first.id === second.id &&
108
110
  first.createdAt === second.createdAt &&
109
111
  first.managementMode === second.managementMode &&
112
+ first.proxyMode === second.proxyMode &&
110
113
  first.serverGeneration === second.serverGeneration &&
111
114
  first.targetHost === second.targetHost &&
112
115
  first.targetPort === second.targetPort &&
@@ -165,7 +168,6 @@ export class PreviewStore {
165
168
  CREATE TABLE IF NOT EXISTS preview_exposures (
166
169
  id TEXT PRIMARY KEY,
167
170
  pibo_session_id TEXT NOT NULL,
168
- project_id TEXT,
169
171
  label TEXT NOT NULL,
170
172
  target_host TEXT NOT NULL CHECK (target_host IN ('127.0.0.1', '::1')),
171
173
  target_port INTEGER NOT NULL CHECK (target_port BETWEEN 1024 AND 65535),
@@ -173,6 +175,7 @@ export class PreviewStore {
173
175
  target_process_start_ticks TEXT,
174
176
  workspace TEXT NOT NULL,
175
177
  management_mode TEXT NOT NULL DEFAULT 'external' CHECK (management_mode IN ('external', 'managed')),
178
+ proxy_mode TEXT NOT NULL DEFAULT 'standard' CHECK (proxy_mode IN ('standard', 'pibo-compute-dev-auth')),
176
179
  start_command TEXT,
177
180
  server_state TEXT NOT NULL DEFAULT 'external' CHECK (server_state IN ('external', 'stopped', 'starting', 'running', 'stopping', 'error')),
178
181
  server_generation TEXT,
@@ -217,6 +220,7 @@ export class PreviewStore {
217
220
  ["target_process_id", "INTEGER"],
218
221
  ["target_process_start_ticks", "TEXT"],
219
222
  ["management_mode", "TEXT NOT NULL DEFAULT 'external'"],
223
+ ["proxy_mode", "TEXT NOT NULL DEFAULT 'standard' CHECK (proxy_mode IN ('standard', 'pibo-compute-dev-auth'))"],
220
224
  ["start_command", "TEXT"],
221
225
  ["server_state", "TEXT NOT NULL DEFAULT 'external'"],
222
226
  ["server_generation", "TEXT"],
@@ -244,7 +248,6 @@ export class PreviewStore {
244
248
  CREATE TABLE preview_exposures (
245
249
  id TEXT PRIMARY KEY,
246
250
  pibo_session_id TEXT NOT NULL,
247
- project_id TEXT,
248
251
  label TEXT NOT NULL,
249
252
  target_host TEXT NOT NULL CHECK (target_host IN ('127.0.0.1', '::1')),
250
253
  target_port INTEGER NOT NULL CHECK (target_port BETWEEN 1024 AND 65535),
@@ -252,6 +255,7 @@ export class PreviewStore {
252
255
  target_process_start_ticks TEXT,
253
256
  workspace TEXT NOT NULL,
254
257
  management_mode TEXT NOT NULL DEFAULT 'external' CHECK (management_mode IN ('external', 'managed')),
258
+ proxy_mode TEXT NOT NULL DEFAULT 'standard' CHECK (proxy_mode IN ('standard', 'pibo-compute-dev-auth')),
255
259
  start_command TEXT,
256
260
  server_state TEXT NOT NULL DEFAULT 'external' CHECK (server_state IN ('external', 'stopped', 'starting', 'running', 'stopping', 'error')),
257
261
  server_generation TEXT,
@@ -268,17 +272,17 @@ export class PreviewStore {
268
272
  closed_at TEXT
269
273
  );
270
274
  INSERT INTO preview_exposures (
271
- id, pibo_session_id, project_id, label, target_host, target_port,
275
+ id, pibo_session_id, label, target_host, target_port,
272
276
  target_process_id, target_process_start_ticks, workspace,
273
- management_mode, start_command, server_state, server_generation,
277
+ management_mode, proxy_mode, start_command, server_state, server_generation,
274
278
  server_started_at, server_stop_at, server_stopped_at, server_error,
275
279
  manager_kind, manager_id, manager_pid, manager_process_start_ticks,
276
280
  created_at, expires_at, closed_at
277
281
  )
278
282
  SELECT
279
- id, pibo_session_id, project_id, label, target_host, target_port,
283
+ id, pibo_session_id, label, target_host, target_port,
280
284
  target_process_id, target_process_start_ticks, workspace,
281
- management_mode, start_command, server_state, server_generation,
285
+ management_mode, proxy_mode, start_command, server_state, server_generation,
282
286
  server_started_at, server_stop_at, server_stopped_at, server_error,
283
287
  manager_kind, manager_id, manager_pid, manager_process_start_ticks,
284
288
  created_at, expires_at, closed_at
@@ -292,6 +296,8 @@ export class PreviewStore {
292
296
  CREATE INDEX IF NOT EXISTS preview_exposures_managed_state_idx
293
297
  ON preview_exposures (management_mode, server_state, expires_at)
294
298
  `);
299
+ if (currentVersion < 5)
300
+ migratePreviewSessionOwnership(this.db);
295
301
  this.db.exec(`PRAGMA user_version = ${PREVIEW_SCHEMA_VERSION}`);
296
302
  this.db.exec("COMMIT");
297
303
  }
@@ -314,6 +320,7 @@ export class PreviewStore {
314
320
  createExposure(input) {
315
321
  validateExposureInput(input);
316
322
  const managementMode = input.managementMode ?? "external";
323
+ const proxyMode = input.proxyMode ?? "standard";
317
324
  const serverState = managementMode === "managed" ? input.serverState ?? "stopped" : "external";
318
325
  this.db.exec("BEGIN IMMEDIATE");
319
326
  try {
@@ -327,12 +334,12 @@ export class PreviewStore {
327
334
  }
328
335
  this.db.prepare(`
329
336
  INSERT INTO preview_exposures (
330
- id, pibo_session_id, project_id, label, target_host, target_port,
337
+ id, pibo_session_id, label, target_host, target_port,
331
338
  target_process_id, target_process_start_ticks, workspace,
332
- management_mode, start_command, server_state,
339
+ management_mode, proxy_mode, start_command, server_state,
333
340
  created_at, expires_at, closed_at
334
341
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL)
335
- `).run(input.id, input.piboSessionId, input.projectId ?? null, input.label, input.targetHost, input.targetPort, input.targetProcessId ?? null, input.targetProcessStartTicks ?? null, input.workspace, managementMode, input.startCommand ?? null, serverState, input.createdAt, input.expiresAt);
342
+ `).run(input.id, input.piboSessionId, input.label, input.targetHost, input.targetPort, input.targetProcessId ?? null, input.targetProcessStartTicks ?? null, input.workspace, managementMode, proxyMode, input.startCommand ?? null, serverState, input.createdAt, input.expiresAt);
336
343
  const exposure = this.requireExposure(input.id);
337
344
  this.db.exec("COMMIT");
338
345
  return exposure;
@@ -1,6 +1,6 @@
1
1
  import { loadPiboConfig } from "../config/config.js";
2
2
  import { PiboWebHttpError, responseHtml, responseJson } from "../web/http.js";
3
- import { DEFAULT_PREVIEW_SESSION_TTL_MINUTES, DEFAULT_PREVIEW_TICKET_TTL_SECONDS, previewIdFromHostname, previewPublicURL, requirePreviewBaseURL, } from "./config.js";
3
+ import { DEFAULT_PREVIEW_SESSION_TTL_MINUTES, DEFAULT_PREVIEW_TICKET_TTL_SECONDS, PREVIEW_TLS_AUTHORIZATION_PATH, previewIdFromHostname, previewPublicURL, requirePreviewBaseURL, } from "./config.js";
4
4
  import { createDefaultPreviewProcessController, reconcileManagedPreviews, startManagedPreview, stopManagedPreview, } from "./manager.js";
5
5
  import { isPreviewTargetProcessCurrent, probePreviewTarget } from "./network.js";
6
6
  import { cookieValue, DEFAULT_MAX_PREVIEW_PROXY_CONNECTIONS, DEFAULT_MAX_PREVIEW_PROXY_CONNECTIONS_PER_PREVIEW, PreviewProxyLimiter, previewSessionCookieName, proxyPreviewHttp, proxyPreviewWebSocket, } from "./proxy.js";
@@ -59,7 +59,7 @@ async function exposureHealth(exposure) {
59
59
  return online ? "online" : "offline";
60
60
  }
61
61
  async function publicExposure(exposure, baseURL) {
62
- const { workspace: _workspace, startCommand: _startCommand, targetHost: _targetHost, targetPort: _targetPort, managementMode: _managementMode, targetProcessId: _targetProcessId, targetProcessStartTicks: _targetProcessStartTicks, serverError: _serverError, serverGeneration: _serverGeneration, managerKind: _managerKind, managerId: _managerId, managerPid: _managerPid, managerProcessStartTicks: _managerProcessStartTicks, ...publicFields } = exposure;
62
+ const { workspace: _workspace, startCommand: _startCommand, targetHost: _targetHost, targetPort: _targetPort, managementMode: _managementMode, proxyMode: _proxyMode, targetProcessId: _targetProcessId, targetProcessStartTicks: _targetProcessStartTicks, serverError: _serverError, serverGeneration: _serverGeneration, managerKind: _managerKind, managerId: _managerId, managerPid: _managerPid, managerProcessStartTicks: _managerProcessStartTicks, ...publicFields } = exposure;
63
63
  return {
64
64
  ...publicFields,
65
65
  managed: exposure.managementMode === "managed",
@@ -250,6 +250,16 @@ export function createPreviewWebApp(options = {}) {
250
250
  const url = new URL(request.url);
251
251
  if (!url.pathname.startsWith(PREVIEW_WEB_API_PREFIX))
252
252
  return undefined;
253
+ if (url.pathname === PREVIEW_TLS_AUTHORIZATION_PATH) {
254
+ if (request.method !== "GET")
255
+ return new Response(null, { status: 405, headers: { allow: "GET", "cache-control": "no-store" } });
256
+ const previewId = baseURL ? previewIdFromHostname(url.searchParams.get("domain") ?? "", baseURL) : undefined;
257
+ const allowed = previewId ? withStore(databasePath, (store) => {
258
+ const exposure = store.getExposure(previewId);
259
+ return Boolean(exposure && previewExposureState(exposure) === "active");
260
+ }) : false;
261
+ return new Response(null, { status: allowed ? 200 : 403, headers: { "cache-control": "no-store" } });
262
+ }
253
263
  await context.requireSession({ request });
254
264
  if (url.pathname === PREVIEW_WEB_API_PREFIX && request.method === "GET") {
255
265
  const piboSessionId = url.searchParams.get("piboSessionId")?.trim();
@@ -7,9 +7,6 @@ export function workflowSessionKindFromMetadata(metadata) {
7
7
  const value = metadata?.[PIBO_WORKFLOW_SESSION_KIND_METADATA_KEY];
8
8
  if (isPiboWorkflowSessionKind(value))
9
9
  return value;
10
- // Backfill the initial Project workflow metadata shape used before the stable enum.
11
- if (metadata?.projectSessionKind === "main")
12
- return "main_workflow";
13
10
  return undefined;
14
11
  }
15
12
  export function withWorkflowSessionKind(metadata, workflowSessionKind) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@pasko70/pibo",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@pasko70/pibo",
9
- "version": "3.3.0",
9
+ "version": "3.4.0",
10
10
  "workspaces": [
11
11
  "packages/workflows"
12
12
  ],
@@ -39,7 +39,8 @@
39
39
  "react-virtuoso": "^4.18.6",
40
40
  "remark-gfm": "^4.0.1",
41
41
  "tailwindcss": "^4.2.4",
42
- "typebox": "1.1.38"
42
+ "typebox": "1.1.38",
43
+ "xstate": "5.31.1"
43
44
  },
44
45
  "bin": {
45
46
  "pibo": "dist/bin/pibo.js",
@@ -11501,7 +11502,7 @@
11501
11502
  "license": "MIT",
11502
11503
  "peer": true,
11503
11504
  "funding": {
11504
- "type": "GitHub Sponsors ",
11505
+ "type": "GitHub Sponsors \u2764",
11505
11506
  "url": "https://github.com/sponsors/dmonad"
11506
11507
  }
11507
11508
  },
@@ -11780,7 +11781,7 @@
11780
11781
  "node": ">=16"
11781
11782
  },
11782
11783
  "funding": {
11783
- "type": "GitHub Sponsors ",
11784
+ "type": "GitHub Sponsors \u2764",
11784
11785
  "url": "https://github.com/sponsors/dmonad"
11785
11786
  }
11786
11787
  },
@@ -17131,7 +17132,7 @@
17131
17132
  "npm": ">=8.0.0"
17132
17133
  },
17133
17134
  "funding": {
17134
- "type": "GitHub Sponsors ",
17135
+ "type": "GitHub Sponsors \u2764",
17135
17136
  "url": "https://github.com/sponsors/dmonad"
17136
17137
  }
17137
17138
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pasko70/pibo",
3
- "version": "3.3.0",
3
+ "version": "3.4.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -10,6 +10,9 @@
10
10
  "description": "Minimal TypeScript wrapper around Pi Coding Agent.",
11
11
  "files": [
12
12
  "dist",
13
+ "packages/workflows/dist",
14
+ "!packages/workflows/dist/testing/**",
15
+ "packages/workflows/package.json",
13
16
  "!dist/apps/vscode-artifacts/**",
14
17
  "context",
15
18
  "skills/builtin/**",
@@ -106,7 +109,8 @@
106
109
  "react-virtuoso": "^4.18.6",
107
110
  "remark-gfm": "^4.0.1",
108
111
  "tailwindcss": "^4.2.4",
109
- "typebox": "1.1.38"
112
+ "typebox": "1.1.38",
113
+ "xstate": "5.31.1"
110
114
  },
111
115
  "overrides": {
112
116
  "esbuild": "$esbuild",
@@ -0,0 +1,21 @@
1
+ # Pibo Workflows
2
+
3
+ Initial package boundary for the Pibo Workflow System V1 framework.
4
+
5
+ The package is organized around the PRD-required internal submodules:
6
+
7
+ - `src/api` — public authoring helpers, builder API, object definition normalization
8
+ - `src/registry` — workflow registry and implementation lookup
9
+ - `src/types` — workflow IR, runtime, store, diagnostics, events, and utility types
10
+ - `src/validation` — definition, schema, graph, registry, capability, state, and loop validation
11
+ - `src/graph` — reserved for Pibo-owned graph indices and reusable traversal primitives
12
+ - `src/compiler` — reserved for validated definitions, execution plans, and projection metadata
13
+ - `src/runtime` — Pibo-owned deterministic scheduling, attempts, retries, waits, commands, events, and persistence
14
+ - `src/store` — `pibo-workflows.sqlite` schema/store and persistence API
15
+ - `src/xstate` — XState projection, snapshots, and inspection helpers
16
+ - `src/fixtures` — workflow fixtures for tests and manual validation
17
+ - `src/testing` — test harnesses, fake providers, and restart helpers
18
+
19
+ The workflow IR and persisted Pibo runtime facts are the execution contract and source of truth. External graph frameworks may serve as design references, but the package does not delegate scheduling or persistence to them.
20
+
21
+ The V1 JSON port schema subset is documented in `../../docs/specs/changes/pibo-workflow-system-v1/structured-outputs-json-schema-subset.md` and implemented by `src/validation`.
@@ -0,0 +1,48 @@
1
+ import type { AdapterRef, AgentProfileSelection, EdgeAdapterDefinition, JsonSchema, JsonWorkflowPort, PromptBuilderRef, RegistryRefId, SelectionPolicy, TextWorkflowPort, WorkflowPort } from "../types/index.js";
2
+ /**
3
+ * Create a text workflow port.
4
+ *
5
+ * Text ports carry plain strings across workflow, node, and adapter boundaries.
6
+ */
7
+ export declare function text(description?: string): TextWorkflowPort;
8
+ /**
9
+ * Create a JSON workflow port backed by a V1 JSON Schema subset contract.
10
+ *
11
+ * The schema is intentionally preserved as part of the workflow IR so validators,
12
+ * compilers, runtime checks, and inspection surfaces all see the same contract.
13
+ */
14
+ export declare function json(schema: JsonSchema, description?: string): JsonWorkflowPort;
15
+ export declare function isTextPort(port: WorkflowPort): port is TextWorkflowPort;
16
+ export declare function isJsonPort(port: WorkflowPort): port is JsonWorkflowPort;
17
+ /**
18
+ * Reference a registered deterministic TypeScript adapter by id.
19
+ *
20
+ * Adapter refs are stored in workflow IR for both edge adapters and visible adapter nodes;
21
+ * the Workflow Registry owns the executable TypeScript handler behind the id.
22
+ */
23
+ export declare function adapterRef(id: RegistryRefId): AdapterRef;
24
+ export declare function isAdapterRef(value: unknown): value is AdapterRef;
25
+ export declare function adapterRefId(ref: AdapterRef): RegistryRefId;
26
+ export declare function edgeAdapter(transform: AdapterRef, output: WorkflowPort): EdgeAdapterDefinition;
27
+ /**
28
+ * Reference a registered TypeScript prompt builder by id.
29
+ *
30
+ * Prompt builder refs are stored in workflow IR; the Workflow Registry owns
31
+ * the executable handler that turns workflow input/state/edge data into the
32
+ * final prompt text sent to a Pibo Runtime-backed agent node.
33
+ */
34
+ export declare function promptBuilderRef(id: RegistryRefId): PromptBuilderRef;
35
+ export declare function isPromptBuilderRef(value: unknown): value is Exclude<PromptBuilderRef, string>;
36
+ export declare function promptBuilderRefId(ref: PromptBuilderRef): RegistryRefId;
37
+ /**
38
+ * Select a fixed Agent Designer profile for a Pibo Runtime-backed agent node.
39
+ *
40
+ * V1 intentionally supports only fixed profile selection so workflow runs are
41
+ * predictable and can record the exact profile requested by each agent node.
42
+ */
43
+ export declare function fixedProfile(id: RegistryRefId): AgentProfileSelection;
44
+ export declare function inheritSelection(): SelectionPolicy;
45
+ export declare function onlySelection(ids: RegistryRefId[]): SelectionPolicy;
46
+ export declare function excludeSelection(ids: RegistryRefId[]): SelectionPolicy;
47
+ export declare function extendSelection(ids: RegistryRefId[]): SelectionPolicy;
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAE/E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,IAAI,gBAAgB,CAEvE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,IAAI,gBAAgB,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,aAAa,GAAG,UAAU,CAExD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAQhE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,aAAa,CAE3D;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,qBAAqB,CAE9F;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,gBAAgB,CAEpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAQ7F;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,aAAa,GAAG,qBAAqB,CAErE;AAED,wBAAgB,gBAAgB,IAAI,eAAe,CAElD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,eAAe,CAEnE;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,eAAe,CAEtE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,eAAe,CAErE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Create a text workflow port.
3
+ *
4
+ * Text ports carry plain strings across workflow, node, and adapter boundaries.
5
+ */
6
+ export function text(description) {
7
+ return withOptionalDescription({ kind: "text" }, description);
8
+ }
9
+ /**
10
+ * Create a JSON workflow port backed by a V1 JSON Schema subset contract.
11
+ *
12
+ * The schema is intentionally preserved as part of the workflow IR so validators,
13
+ * compilers, runtime checks, and inspection surfaces all see the same contract.
14
+ */
15
+ export function json(schema, description) {
16
+ return withOptionalDescription({ kind: "json", schema }, description);
17
+ }
18
+ export function isTextPort(port) {
19
+ return port.kind === "text";
20
+ }
21
+ export function isJsonPort(port) {
22
+ return port.kind === "json";
23
+ }
24
+ /**
25
+ * Reference a registered deterministic TypeScript adapter by id.
26
+ *
27
+ * Adapter refs are stored in workflow IR for both edge adapters and visible adapter nodes;
28
+ * the Workflow Registry owns the executable TypeScript handler behind the id.
29
+ */
30
+ export function adapterRef(id) {
31
+ return { kind: "adapter", language: "typescript", id };
32
+ }
33
+ export function isAdapterRef(value) {
34
+ return (isRecord(value) &&
35
+ value.kind === "adapter" &&
36
+ value.language === "typescript" &&
37
+ typeof value.id === "string" &&
38
+ value.id.length > 0);
39
+ }
40
+ export function adapterRefId(ref) {
41
+ return ref.id;
42
+ }
43
+ export function edgeAdapter(transform, output) {
44
+ return { kind: "edgeAdapter", transform, output };
45
+ }
46
+ /**
47
+ * Reference a registered TypeScript prompt builder by id.
48
+ *
49
+ * Prompt builder refs are stored in workflow IR; the Workflow Registry owns
50
+ * the executable handler that turns workflow input/state/edge data into the
51
+ * final prompt text sent to a Pibo Runtime-backed agent node.
52
+ */
53
+ export function promptBuilderRef(id) {
54
+ return { kind: "promptBuilder", language: "typescript", id };
55
+ }
56
+ export function isPromptBuilderRef(value) {
57
+ return (isRecord(value) &&
58
+ value.kind === "promptBuilder" &&
59
+ value.language === "typescript" &&
60
+ typeof value.id === "string" &&
61
+ value.id.length > 0);
62
+ }
63
+ export function promptBuilderRefId(ref) {
64
+ return typeof ref === "string" ? ref : ref.id;
65
+ }
66
+ /**
67
+ * Select a fixed Agent Designer profile for a Pibo Runtime-backed agent node.
68
+ *
69
+ * V1 intentionally supports only fixed profile selection so workflow runs are
70
+ * predictable and can record the exact profile requested by each agent node.
71
+ */
72
+ export function fixedProfile(id) {
73
+ return { kind: "fixed", id };
74
+ }
75
+ export function inheritSelection() {
76
+ return { kind: "inherit" };
77
+ }
78
+ export function onlySelection(ids) {
79
+ return { kind: "only", ids: [...ids] };
80
+ }
81
+ export function excludeSelection(ids) {
82
+ return { kind: "exclude", ids: [...ids] };
83
+ }
84
+ export function extendSelection(ids) {
85
+ return { kind: "extend", ids: [...ids] };
86
+ }
87
+ function withOptionalDescription(port, description) {
88
+ if (description === undefined) {
89
+ return port;
90
+ }
91
+ return { ...port, description };
92
+ }
93
+ function isRecord(value) {
94
+ return typeof value === "object" && value !== null && !Array.isArray(value);
95
+ }
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { WorkflowDefinition } from "./types/index.js";
2
+ export declare function hashWorkflowDefinition(definition: WorkflowDefinition): string;
3
+ export declare function canonicalWorkflowDefinitionJson(definition: WorkflowDefinition): string;
4
+ //# sourceMappingURL=definition-hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-hash.d.ts","sourceRoot":"","sources":["../src/definition-hash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAE7E;AAED,wBAAgB,+BAA+B,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAEtF"}
@@ -0,0 +1,27 @@
1
+ import { createHash } from "node:crypto";
2
+ export function hashWorkflowDefinition(definition) {
3
+ return `sha256:${createHash("sha256").update(canonicalWorkflowDefinitionJson(definition)).digest("hex")}`;
4
+ }
5
+ export function canonicalWorkflowDefinitionJson(definition) {
6
+ return JSON.stringify(normalizeForCanonicalJson(definition));
7
+ }
8
+ function normalizeForCanonicalJson(value) {
9
+ if (Array.isArray(value)) {
10
+ return value.map((item) => (item === undefined ? null : normalizeForCanonicalJson(item)));
11
+ }
12
+ if (value && typeof value === "object") {
13
+ const input = value;
14
+ const output = {};
15
+ for (const key of Object.keys(input).sort()) {
16
+ const normalized = normalizeForCanonicalJson(input[key]);
17
+ if (normalized !== undefined)
18
+ output[key] = normalized;
19
+ }
20
+ return output;
21
+ }
22
+ if (value === undefined || typeof value === "function" || typeof value === "symbol") {
23
+ return undefined;
24
+ }
25
+ return value;
26
+ }
27
+ //# sourceMappingURL=definition-hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-hash.js","sourceRoot":"","sources":["../src/definition-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,UAAU,sBAAsB,CAAC,UAA8B;IACnE,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5G,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,UAA8B;IAC5E,OAAO,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,KAAgC,CAAC;QAC/C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,IAAI,UAAU,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;QACzD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACpF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { WorkflowDefinition, WorkflowProviders, WorkflowSetupOptions } from "../types/index.js";
2
+ export declare const workflowFixtureRegistryRefs: {
3
+ readonly handlers: {
4
+ readonly makePlan: "fixture.handlers.makePlan";
5
+ readonly reviseDraft: "fixture.handlers.reviseDraft";
6
+ readonly summarizeDecision: "fixture.handlers.summarizeDecision";
7
+ };
8
+ readonly adapters: {
9
+ readonly textToTopic: "fixture.adapters.textToTopic";
10
+ readonly draftToSummary: "fixture.adapters.draftToSummary";
11
+ readonly decisionToSummary: "fixture.adapters.decisionToSummary";
12
+ };
13
+ readonly guards: {
14
+ readonly approved: "fixture.guards.approved";
15
+ readonly needsRevision: "fixture.guards.needsRevision";
16
+ };
17
+ readonly promptBuilders: {
18
+ readonly draftPrompt: "fixture.promptBuilders.draftPrompt";
19
+ };
20
+ readonly humanActions: {
21
+ readonly approve: "fixture.humanActions.approve";
22
+ readonly reject: "fixture.humanActions.reject";
23
+ readonly resume: "fixture.humanActions.resume";
24
+ readonly cancel: "fixture.humanActions.cancel";
25
+ };
26
+ };
27
+ export declare const minimalOneNodePiboAgentWorkflowFixture: WorkflowDefinition;
28
+ export declare const adapterWorkflowFixture: WorkflowDefinition;
29
+ export declare const humanWaitWorkflowFixture: WorkflowDefinition;
30
+ export declare const nestedChildWorkflowFixture: WorkflowDefinition;
31
+ export declare const nestedWorkflowFixture: WorkflowDefinition;
32
+ export declare const mixedNodeWorkflowFixture: WorkflowDefinition;
33
+ export declare const debugSerializationWorkflowFixture: WorkflowDefinition;
34
+ export declare const boundedReviewLoopWorkflowFixture: WorkflowDefinition;
35
+ export declare const requiredWorkflowFixtures: readonly WorkflowDefinition[];
36
+ export declare const workflowFixtureDefinitionsById: Readonly<Record<string, WorkflowDefinition>>;
37
+ export declare const workflowFixtureProviders: WorkflowProviders;
38
+ export declare const workflowFixtureSetupOptions: WorkflowSetupOptions;
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fixtures/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,kBAAkB,EAElB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AA8F3B,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;CAwB9B,CAAC;AAEX,eAAO,MAAM,sCAAsC,EAAE,kBAwBpD,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,kBAsCpC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,kBA6BtC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,kBAsBxC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,kBAuBnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,kBA0FtC,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,kBA0C/C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,kBAqF9C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,SAAS,kBAAkB,EASjE,CAAC;AAEF,eAAO,MAAM,8BAA8B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAEvF,CAAC;AAuDF,eAAO,MAAM,wBAAwB,EAAE,iBA0BtC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,oBAUzC,CAAC"}