@oomol-lab/open-flow 0.1.0-beta.3 → 0.1.0-beta.31

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 (123) hide show
  1. package/dist/browser/{_virtual_open-flow-twemoji-DJwKsM_w.js → _virtual_open-flow-twemoji-CpHJOEsk.js} +4028 -2
  2. package/dist/browser/carbon-Cn-DTyjG.js +54 -0
  3. package/dist/browser/createResourceDialog-FBRnCMK6.js +110 -0
  4. package/dist/browser/{dist-DWADUsVB.js → dist-By46o5UV.js} +47 -47
  5. package/dist/browser/dist-CoszrK7m.js +4 -0
  6. package/dist/browser/{dist-CPuF50D9.js → dist-D1VYgicl.js} +426 -305
  7. package/dist/browser/dist-DSe6KRsr.js +1224 -0
  8. package/dist/browser/dist-DYjIVIZC.js +795 -0
  9. package/dist/browser/{dist-3Mj8q8Pr.js → dist-DmuE3M0R.js} +53 -54
  10. package/dist/browser/{dist-BN4ZCyOB.js → dist-DpDLsYtO.js} +14 -15
  11. package/dist/browser/{dist-CJpzJrLM.js → dist-DwvhuMxw.js} +894 -895
  12. package/dist/browser/dist-DxahK_I8.js +2688 -0
  13. package/dist/browser/{dist-C46JByB-.js → dist-Dz6Nglsd.js} +61 -61
  14. package/dist/browser/{dist-DUzA0Ukh.js → dist-TJfrvoIQ.js} +141 -142
  15. package/dist/browser/editorComponent-CyH2o-Ji.js +14811 -0
  16. package/dist/browser/{esm-C2UUqIUP.js → esm-B7A42FzW.js} +68 -59
  17. package/dist/browser/event-sources.d.ts +30 -0
  18. package/dist/browser/flow-authoring-module.d.ts +2 -2
  19. package/dist/browser/flow-authoring-node.d.ts +26 -8
  20. package/dist/browser/flow-authoring.d.ts +1 -1
  21. package/dist/browser/flow-authoring.js +5278 -313
  22. package/dist/browser/flow-change-schema.d.ts +11 -0
  23. package/dist/browser/flow-change.d.ts +193 -18
  24. package/dist/browser/flow-change.js +5196 -137
  25. package/dist/browser/flow-notifications.d.ts +11 -2
  26. package/dist/browser/flowChanges-ScpWTKtQ.js +12293 -0
  27. package/dist/browser/{flowRunInputEditorStore-CwvOiIiU.js → flowRunInputEditorStore-CTORQcA2.js} +864 -4000
  28. package/dist/browser/flowWorkspace-CY1r6dwz.js +153101 -0
  29. package/dist/browser/host-conformance.d.ts +7 -0
  30. package/dist/browser/host-conformance.js +39 -0
  31. package/dist/browser/inputValues-C21gYJuc.js +43 -0
  32. package/dist/browser/licenses.md +195 -662
  33. package/dist/browser/lite-BuKZ8joP.js +8545 -0
  34. package/dist/browser/main-BDnNHhkU.js +50 -0
  35. package/dist/browser/{markdownContent-DUfLdnUt.js → markdownContent-D2oHGWc6.js} +53 -53
  36. package/dist/browser/theme.css +527 -34
  37. package/dist/browser/{typeScriptSession-mPCiA9sV.js → typeScriptSession-DnAmJCzu.js} +70 -71
  38. package/dist/browser/ui-input.d.ts +5 -0
  39. package/dist/browser/ui-label.d.ts +3 -0
  40. package/dist/browser/ui-textarea.d.ts +3 -0
  41. package/dist/browser/ui.css +2 -0
  42. package/dist/browser/ui.css.d.ts +1 -0
  43. package/dist/browser/ui.d.ts +34 -0
  44. package/dist/browser/ui.js +2632 -0
  45. package/dist/browser/value-DPg_9yXB.js +93 -0
  46. package/dist/browser/warmCodeTheme-DVv4-rDO.js +35 -0
  47. package/dist/browser/workbench-contract.d.ts +27 -2
  48. package/dist/browser/workbench.css +1 -1
  49. package/dist/browser/workbench.d.ts +2 -0
  50. package/dist/browser/workbench.js +2767 -1406
  51. package/dist/browser/workbenchSelect-DAaGuZwP.js +5971 -0
  52. package/dist/common/authoringExamples.d.ts +28 -0
  53. package/dist/common/control-api-conformance.d.ts +7 -0
  54. package/dist/common/control-api-conformance.js +5570 -171
  55. package/dist/common/control-api-errors.d.ts +37 -0
  56. package/dist/common/control-api.d.ts +408 -47
  57. package/dist/common/control-api.js +6071 -569
  58. package/dist/common/control-requests.d.ts +104 -0
  59. package/dist/common/control-requests.js +5401 -0
  60. package/dist/common/cron-trigger.d.ts +2 -1
  61. package/dist/common/cron-trigger.js +27 -24
  62. package/dist/common/draftOperations.d.ts +14 -0
  63. package/dist/common/engine-contract.d.ts +3 -1
  64. package/dist/common/event-sources.d.ts +50 -0
  65. package/dist/common/feishu-events.d.ts +20 -0
  66. package/dist/common/feishu-subscriptions.d.ts +10 -0
  67. package/dist/common/flow-agent.d.ts +10 -0
  68. package/dist/common/flow-encoding.d.ts +16 -2
  69. package/dist/common/flow-encoding.js +5097 -68
  70. package/dist/common/flow-graph.d.ts +52 -0
  71. package/dist/common/flow-json.d.ts +2 -0
  72. package/dist/common/flow-modules.d.ts +20 -0
  73. package/dist/common/flow-notifications.d.ts +11 -2
  74. package/dist/common/flow-schema.d.ts +17 -0
  75. package/dist/common/flow-semantics.d.ts +12 -6
  76. package/dist/common/flow-semantics.js +15875 -9676
  77. package/dist/common/flowInspection.d.ts +16 -0
  78. package/dist/common/fr-iv1541dF.js +93 -0
  79. package/dist/common/integration-trigger.d.ts +29 -2
  80. package/dist/common/integration-trigger.js +192 -56
  81. package/dist/common/ja-Bq-ZDOD4.js +93 -0
  82. package/dist/common/ko-Z-k9R2c6.js +93 -0
  83. package/dist/common/localization.d.ts +2 -0
  84. package/dist/common/localization.js +37 -1
  85. package/dist/common/mcp-conformance.d.ts +2 -0
  86. package/dist/common/mcp.d.ts +768 -0
  87. package/dist/common/mcp.js +6739 -0
  88. package/dist/common/poll-trigger.d.ts +5 -0
  89. package/dist/common/poll-trigger.js +26 -22
  90. package/dist/common/provider-triggers.d.ts +4 -0
  91. package/dist/common/provider-triggers.js +7312 -1737
  92. package/dist/common/ru-B4gFecYZ.js +93 -0
  93. package/dist/common/run-events.d.ts +2 -2
  94. package/dist/common/run-events.js +13 -17
  95. package/dist/common/run-lifecycle.d.ts +21 -2
  96. package/dist/common/run-lifecycle.js +83 -2
  97. package/dist/common/run-results.d.ts +57 -0
  98. package/dist/common/runtime-contract.d.ts +38 -3
  99. package/dist/common/runtime-contract.js +291 -19
  100. package/dist/common/scheduler.d.ts +103 -19
  101. package/dist/common/scheduler.js +8240 -261
  102. package/dist/common/trigger-catalog.d.ts +17 -0
  103. package/dist/common/trigger-config-options.d.ts +13 -0
  104. package/dist/common/trigger-contract.d.ts +5 -0
  105. package/dist/common/trigger-localization.d.ts +7 -0
  106. package/dist/common/webhook-trigger.d.ts +3 -3
  107. package/dist/common/webhook-trigger.js +64 -18
  108. package/dist/common/zh-CN-ByQ6nYam.js +93 -0
  109. package/dist/common/zh-TW-QjIarvX9.js +93 -0
  110. package/dist/index.d.ts +6 -5
  111. package/package.json +21 -1
  112. package/dist/browser/carbon-DMCVsjHo.js +0 -53
  113. package/dist/browser/createResourceDialog-BkZns-oZ.js +0 -504
  114. package/dist/browser/diagnostics-SDCyFuxm.js +0 -11634
  115. package/dist/browser/dist-BMqL-qR5.js +0 -1894
  116. package/dist/browser/dist-BpopSHwP.js +0 -1543
  117. package/dist/browser/dist-CP0883sY.js +0 -4
  118. package/dist/browser/dist-CUSrALSX.js +0 -1620
  119. package/dist/browser/flowWorkspace-BZ_eiQNR.js +0 -45393
  120. package/dist/browser/getPseudoElementBounds-ESJExRFX.js +0 -7642
  121. package/dist/browser/languages-DgJehE1g.js +0 -62
  122. package/dist/browser/main-DmjVyuWr.js +0 -76
  123. package/dist/browser/workbenchSelect-B2s1HV-Y.js +0 -1374
@@ -0,0 +1,93 @@
1
+ //#region src/trigger/providers/airtable/locales/ru.json
2
+ var e = { "airtable.on_record_changed": {
3
+ displayName: "Создание или изменение записи",
4
+ description: "Периодически проверяет таблицу Airtable и срабатывает при создании или изменении записи, упорядочивая записи по полю времени."
5
+ } }, t = { "feishu_app_bot.on_event": {
6
+ displayName: "Событие приложения",
7
+ description: "Получает выбранные события Feishu через общий источник."
8
+ } }, n = {
9
+ "github.on_repo_event": {
10
+ displayName: "Событие репозитория",
11
+ description: "Срабатывает при выбранных событиях webhook GitHub в репозитории."
12
+ },
13
+ "github.watch_pull_request": {
14
+ displayName: "Наблюдение за пул-реквестом",
15
+ description: "Следит за одним пул-реквестом через уведомления и периодические проверки. Начинает с текущего состояния и сообщает о наблюдаемых изменениях, а не обо всех промежуточных переходах или событиях ревью."
16
+ }
17
+ }, r = { "gitlab.on_project_event": {
18
+ displayName: "Событие проекта",
19
+ description: "Срабатывает при выбранных событиях webhook GitLab в проекте."
20
+ } }, i = { "gmail.on_message_received": {
21
+ displayName: "Новое письмо",
22
+ description: "Периодически проверяет почтовый ящик Gmail и срабатывает при получении нового письма."
23
+ } }, a = { "googlecalendar.on_event_changed": {
24
+ displayName: "Изменение события календаря",
25
+ description: "Периодически проверяет Google Calendar и срабатывает при создании, изменении или отмене события."
26
+ } }, o = {
27
+ "googledrive.changes_detected": {
28
+ displayName: "Обнаружение изменений",
29
+ description: "Использует канал Google Drive changes.watch и срабатывает, когда доступны изменения Диска."
30
+ },
31
+ "googledrive.watch_changes": {
32
+ displayName: "Наблюдение за изменениями",
33
+ description: "Отслеживает изменения Диска через уведомления и периодическое сканирование одного и того же потока изменений."
34
+ },
35
+ "googledrive.on_file_change": {
36
+ displayName: "Изменение файла или папки внутри папки",
37
+ description: "Периодически проверяет одну папку Google Drive и срабатывает при создании или изменении файлов и папок непосредственно в ней."
38
+ }
39
+ }, s = { "googlesheets.on_row_added": {
40
+ displayName: "Добавление строки",
41
+ description: "Периодически проверяет лист и срабатывает один раз для каждой новой строки, добавленной ниже последней ранее обнаруженной строки."
42
+ } }, c = { "linear.on_issue_changed": {
43
+ displayName: "Создание или изменение задачи",
44
+ description: "Периодически проверяет новые и изменённые задачи команды Linear. Начинает с текущего момента, не запуская существующие задачи. Сообщает о наблюдаемых текущих состояниях, но не об удалениях или каждом промежуточном изменении статуса."
45
+ } }, l = { "notion.on_database_page_event": {
46
+ displayName: "Добавление или изменение страницы базы данных",
47
+ description: "Периодически проверяет базу данных Notion и срабатывает при добавлении страницы или редактировании существующей."
48
+ } }, u = { "one_drive.on_item_changed": {
49
+ displayName: "Изменение файла или папки",
50
+ description: "Периодически проверяет поток изменений OneDrive и срабатывает при создании, изменении или удалении файла или папки."
51
+ } }, d = { "outlook.on_message_received": {
52
+ displayName: "Новое письмо",
53
+ description: "Периодически проверяет почтовую папку Microsoft Outlook и срабатывает при поступлении нового письма."
54
+ } }, f = { "shopify.on_shop_event": {
55
+ displayName: "Событие магазина",
56
+ description: "Срабатывает при событиях выбранных тем webhook Shopify в подключённом магазине."
57
+ } }, p = { "slack.on_message_posted": {
58
+ displayName: "Новое сообщение канала",
59
+ description: "Периодически проверяет один разговор Slack и срабатывает при появлении нового сообщения."
60
+ } }, m = { "stripe.on_event": {
61
+ displayName: "Событие аккаунта",
62
+ description: "Срабатывает при выбранных событиях Stripe в подключённом аккаунте."
63
+ } }, h = { "telegram.on_update": {
64
+ displayName: "Обновление бота",
65
+ description: "Срабатывает, когда подключённый бот Telegram получает выбранное обновление."
66
+ } }, g = { "woocommerce.on_store_event": {
67
+ displayName: "Событие магазина",
68
+ description: "Срабатывает при выбранных событиях магазина WooCommerce."
69
+ } }, _ = { "zendesk.on_event": {
70
+ displayName: "Подписка на события",
71
+ description: "Срабатывает при любом из выбранных событий аккаунта Zendesk."
72
+ } }, v = {
73
+ ...e,
74
+ ...t,
75
+ ...n,
76
+ ...r,
77
+ ...i,
78
+ ...a,
79
+ ...o,
80
+ ...s,
81
+ ...c,
82
+ ...l,
83
+ ...u,
84
+ ...d,
85
+ ...f,
86
+ ...p,
87
+ ...m,
88
+ ...h,
89
+ ...g,
90
+ ..._
91
+ };
92
+ //#endregion
93
+ export { v as default };
@@ -1,9 +1,9 @@
1
1
  export type ProjectedRunEvent = {
2
- readonly kind: 'node.output';
2
+ readonly kind: 'node.completed';
3
3
  readonly payload: Readonly<Record<string, unknown>>;
4
4
  readonly value: unknown;
5
5
  } | {
6
- readonly kind: 'node.artifact' | 'node.completed' | 'node.failed' | 'node.log' | 'node.progress' | 'node.started' | 'run.progress' | 'run.started';
6
+ readonly kind: 'node.artifact' | 'node.failed' | 'node.log' | 'node.progress' | 'node.started' | 'run.progress' | 'run.started';
7
7
  readonly payload: Readonly<Record<string, unknown>>;
8
8
  };
9
9
  export declare function createEventProjector(platformRunId: string, nodeFailureCodes: ReadonlySet<string>): (event: unknown) => Promise<ProjectedRunEvent | undefined>;
@@ -1,11 +1,14 @@
1
1
  //#region src/execution/common/events.ts
2
2
  var e = new TextEncoder(), t = /* @__PURE__ */ new Set([
3
+ "agent",
4
+ "approval",
3
5
  "condition",
4
6
  "connector",
5
7
  "javascript",
6
8
  "llm",
7
9
  "subflow",
8
- "value"
10
+ "value",
11
+ "wait"
9
12
  ]);
10
13
  function n(e, t) {
11
14
  if (typeof e != "object" || !e || Array.isArray(e)) throw TypeError(`${t} must be an object.`);
@@ -105,25 +108,22 @@ function f(e, t) {
105
108
  }
106
109
  });
107
110
  }
108
- if (_ == "node.cache-hit" || _ == "node.preview" || _ == "run.completed" || _ == "run.failed" || _ == "run.output") {
111
+ if (_ == "run.completed" || _ == "run.failed") {
109
112
  o(g);
110
113
  return;
111
114
  }
112
- if (_ == "node.started" || _ == "node.output" || _ == "node.progress" || _ == "node.artifact" || _ == "node.log" || _ == "node.completed" || _ == "node.failed") {
113
- let n = s(g, f, e), o = await n.executionId, m = {
115
+ if (_ == "node.started" || _ == "node.progress" || _ == "node.artifact" || _ == "node.log" || _ == "node.completed" || _ == "node.failed") {
116
+ let r = s(g, f, e), o = await r.executionId, m = {
114
117
  executionId: o,
115
- flowId: n.flowId,
116
- nodeId: n.nodeId,
117
- scopeId: await c("scope", e, n.rawRunId)
118
+ flowId: r.flowId,
119
+ nodeId: r.nodeId,
120
+ scopeId: await c("scope", e, r.rawRunId)
118
121
  };
119
122
  switch (_) {
120
- case "node.output": return {
123
+ case "node.completed": return {
121
124
  kind: _,
122
- payload: {
123
- ...m,
124
- handle: r(g.handle, "Runtime node.output handle")
125
- },
126
- value: g.value
125
+ payload: m,
126
+ value: n(g.outputs, "Runtime node.completed outputs")
127
127
  };
128
128
  case "node.started": {
129
129
  let e = a(g.nodeKind), t = i(g.nodeTitle, "Runtime node.started nodeTitle"), n = i(g.operation, "Runtime node.started operation");
@@ -169,10 +169,6 @@ function f(e, t) {
169
169
  message: l(g.message)
170
170
  }
171
171
  };
172
- case "node.completed": return {
173
- kind: _,
174
- payload: m
175
- };
176
172
  case "node.failed": return {
177
173
  kind: _,
178
174
  payload: {
@@ -1,11 +1,17 @@
1
1
  export declare const runTerminalStatuses: readonly ['canceled', 'completed', 'failed', 'indeterminate'];
2
- export declare const runStatuses: readonly ["canceled", "completed", "failed", "indeterminate", "queued", "running", "starting"];
2
+ export declare const runStatuses: readonly ["canceled", "completed", "failed", "indeterminate", "queued", "running", "starting", "waiting"];
3
3
  export type RunStatus = (typeof runStatuses)[number];
4
4
  export type RunTerminalStatus = (typeof runTerminalStatuses)[number];
5
5
  export type RunOperation = {
6
6
  readonly kind: 'claim';
7
7
  } | {
8
8
  readonly kind: 'start';
9
+ } | {
10
+ readonly kind: 'wait';
11
+ } | {
12
+ readonly kind: 'resolve';
13
+ } | {
14
+ readonly kind: 'fail-start' | 'fail-resume';
9
15
  } | {
10
16
  readonly kind: 'commit';
11
17
  readonly status: RunTerminalStatus;
@@ -16,6 +22,9 @@ export type RunTransition = {
16
22
  } | {
17
23
  readonly kind: 'running';
18
24
  readonly status: 'running';
25
+ } | {
26
+ readonly kind: 'waiting';
27
+ readonly status: 'waiting';
19
28
  } | {
20
29
  readonly kind: 'terminal';
21
30
  readonly status: RunTerminalStatus;
@@ -28,12 +37,18 @@ export type RunTransition = {
28
37
  } | {
29
38
  readonly kind: 'committed';
30
39
  readonly status: RunTerminalStatus;
40
+ } | {
41
+ readonly kind: 'waited';
42
+ readonly status: 'waiting';
43
+ } | {
44
+ readonly kind: 'resolved';
45
+ readonly status: 'queued' | 'starting' | 'running';
31
46
  } | {
32
47
  readonly kind: 'stale';
33
48
  readonly status: RunStatus;
34
49
  };
35
50
  export type RunClaim = Extract<RunTransition, {
36
- readonly kind: 'ready' | 'running' | 'terminal';
51
+ readonly kind: 'ready' | 'running' | 'terminal' | 'waiting';
37
52
  }>;
38
53
  export type RunStart = Extract<RunTransition, {
39
54
  readonly kind: 'already-started' | 'started' | 'stale';
@@ -59,8 +74,12 @@ export interface RunLifecycleHarness {
59
74
  }): Promise<RunAcceptance>;
60
75
  claim(runId: string): Promise<RunClaim>;
61
76
  commit(runId: string, status: RunTerminalStatus): Promise<boolean>;
77
+ failStarting(runId: string): Promise<boolean>;
78
+ failResume(runId: string): Promise<boolean>;
62
79
  observe(runId: string): Promise<RunObservation>;
80
+ resolve(runId: string): Promise<boolean>;
63
81
  start(runId: string): Promise<RunStart>;
82
+ wait(runId: string): Promise<boolean>;
64
83
  }
65
84
  export interface RunLifecycleConformanceCase {
66
85
  readonly name: string;
@@ -28,7 +28,8 @@ var n = [
28
28
  ...n,
29
29
  "queued",
30
30
  "running",
31
- "starting"
31
+ "starting",
32
+ "waiting"
32
33
  ];
33
34
  function i(e) {
34
35
  return e == "canceled" || e == "completed" || e == "failed" || e == "indeterminate";
@@ -45,6 +46,10 @@ function a(e, t) {
45
46
  kind: "running",
46
47
  status: e
47
48
  };
49
+ case "waiting": return {
50
+ kind: "waiting",
51
+ status: e
52
+ };
48
53
  case "canceled":
49
54
  case "completed":
50
55
  case "failed":
@@ -63,6 +68,7 @@ function a(e, t) {
63
68
  status: e
64
69
  };
65
70
  case "queued":
71
+ case "waiting":
66
72
  case "canceled":
67
73
  case "completed":
68
74
  case "failed":
@@ -71,10 +77,32 @@ function a(e, t) {
71
77
  status: e
72
78
  };
73
79
  }
80
+ case "wait": return e == "running" ? {
81
+ kind: "waited",
82
+ status: "waiting"
83
+ } : {
84
+ kind: "stale",
85
+ status: e
86
+ };
87
+ case "resolve": return i(e) ? {
88
+ kind: "stale",
89
+ status: e
90
+ } : {
91
+ kind: "resolved",
92
+ status: e == "waiting" ? "queued" : e
93
+ };
94
+ case "fail-start":
95
+ case "fail-resume": return e == "starting" ? {
96
+ kind: "committed",
97
+ status: t.kind == "fail-start" ? "failed" : "indeterminate"
98
+ } : {
99
+ kind: "stale",
100
+ status: e
101
+ };
74
102
  case "commit": return i(e) ? {
75
103
  kind: "stale",
76
104
  status: e
77
- } : t.status == "canceled" || e == "running" ? {
105
+ } : t.status == "canceled" || e == "running" || t.status == "failed" ? {
78
106
  kind: "committed",
79
107
  status: t.status
80
108
  } : {
@@ -95,6 +123,59 @@ async function s(e, t = "request", n = "request-a") {
95
123
  return r.runId;
96
124
  }
97
125
  var c = [
126
+ {
127
+ name: "rejects startup failures outside the start barrier and preserves their terminal",
128
+ async verify(e) {
129
+ for (let t of ["failStarting", "failResume"]) {
130
+ let n = await s(e, t);
131
+ o(await e[t](n), !1, "Failure before claim"), await e.claim(n), o(await e.commit(n, "completed"), !1, "Completion before start"), o(await e[t](n), !0, "Startup failure");
132
+ let r = t == "failStarting" ? "failed" : "indeterminate";
133
+ o(await e.observe(n), {
134
+ status: r,
135
+ terminalEvents: [r]
136
+ }, "Startup terminal"), o(await e[t](n), !1, "Repeated startup failure"), o(await e.start(n), {
137
+ kind: "stale",
138
+ status: r
139
+ }, "Start after failure"), o(await e.commit(n, "canceled"), !1, "Cancellation after failure");
140
+ }
141
+ let t = await s(e, "running");
142
+ await e.claim(t), await e.start(t), o(await e.failStarting(t), !1, "Startup failure after start"), o(await e.failResume(t), !1, "Resume failure after start"), o(await e.observe(t), {
143
+ status: "running",
144
+ terminalEvents: []
145
+ }, "Running observation");
146
+ }
147
+ },
148
+ {
149
+ name: "pauses and resumes the same Run through the ordinary start barrier",
150
+ async verify(e) {
151
+ let t = await s(e), n = await e.claim(t);
152
+ if (n.kind != "ready") throw Error("Initial Run claim was not ready.");
153
+ o(await e.start(t), a(n.status, { kind: "start" }), "Initial start"), o(await e.wait(t), !0, "Wait commit"), o(await e.observe(t), {
154
+ status: "waiting",
155
+ terminalEvents: []
156
+ }, "Waiting Run observation"), o(await e.claim(t), a("waiting", { kind: "claim" }), "Claim while waiting"), o(await e.resolve(t), !0, "Wait resolution"), o(await e.resolve(t), !1, "Repeated Wait resolution");
157
+ let r = await e.claim(t);
158
+ if (r.kind != "ready") throw Error("Resolved Run claim was not ready.");
159
+ o(await e.start(t), a(r.status, { kind: "start" }), "Resume start"), o(await e.commit(t, "completed"), !0, "Completion after resume"), o(await e.observe(t), {
160
+ status: "completed",
161
+ terminalEvents: ["completed"]
162
+ }, "Resumed Run observation");
163
+ }
164
+ },
165
+ {
166
+ name: "allows cancellation and expiry failure while waiting",
167
+ async verify(e) {
168
+ let t = await s(e, "cancel-wait");
169
+ if ((await e.claim(t)).kind != "ready") throw Error("Canceled Run claim was not ready.");
170
+ await e.start(t), o(await e.wait(t), !0, "Canceled Run Wait commit"), o(await e.commit(t, "canceled"), !0, "Waiting cancellation"), o(await e.resolve(t), !1, "Resolution after cancellation");
171
+ let n = await s(e, "expire-wait");
172
+ if ((await e.claim(n)).kind != "ready") throw Error("Expired Run claim was not ready.");
173
+ await e.start(n), o(await e.wait(n), !0, "Expired Run Wait commit"), o(await e.commit(n, "failed"), !0, "Waiting expiry failure"), o(await e.observe(n), {
174
+ status: "failed",
175
+ terminalEvents: ["failed"]
176
+ }, "Expired Run observation");
177
+ }
178
+ },
98
179
  {
99
180
  name: "replays idempotent acceptance and rejects a conflicting request",
100
181
  async verify(e) {
@@ -0,0 +1,57 @@
1
+ import type { JsonValue } from '../browser/flow-change.js';
2
+ export type ResultCall = {
3
+ readonly id: string;
4
+ readonly kind: 'connector';
5
+ readonly action: string;
6
+ readonly connectionId?: string;
7
+ } | {
8
+ readonly id: string;
9
+ readonly kind: 'code';
10
+ };
11
+ export interface ResultInfo {
12
+ readonly resultId: string;
13
+ readonly callId: string;
14
+ readonly toolId: string;
15
+ readonly source: {
16
+ readonly kind: 'connector';
17
+ readonly action: string;
18
+ } | {
19
+ readonly kind: 'code';
20
+ };
21
+ readonly bytes: number;
22
+ readonly digest: string;
23
+ readonly createdAt: string;
24
+ }
25
+ interface ResultEntry {
26
+ readonly pointer: string;
27
+ readonly type: 'object' | 'array' | 'string' | 'number' | 'boolean' | 'null';
28
+ readonly length?: number;
29
+ readonly complete: boolean;
30
+ readonly value?: JsonValue;
31
+ }
32
+ export interface ResultPage extends ResultEntry {
33
+ readonly offset: number;
34
+ readonly nextOffset?: number;
35
+ readonly entries?: readonly ResultEntry[];
36
+ }
37
+ export interface ResultQuery {
38
+ readonly pointer?: string;
39
+ readonly offset?: number;
40
+ readonly limit?: number;
41
+ readonly maxBytes?: number;
42
+ }
43
+ export declare function parseResultQuery(value: unknown): Required<ResultQuery>;
44
+ export declare function decodeResultList(value: unknown): {
45
+ readonly version: 1;
46
+ readonly runId: string;
47
+ readonly results: readonly ResultInfo[];
48
+ readonly nextAfter?: string;
49
+ };
50
+ export declare function decodeResultRead(value: unknown): {
51
+ readonly version: 1;
52
+ readonly runId: string;
53
+ readonly result: ResultInfo;
54
+ readonly page: ResultPage;
55
+ };
56
+ export declare function readResult(value: JsonValue, query?: ResultQuery): ResultPage;
57
+ export {};
@@ -1,6 +1,9 @@
1
- import type { CodeModule, JsonValue } from '../browser/flow-change.js';
2
- export { currentEngineContract, findEngineContract, type EngineContract } from './engine-contract.js';
1
+ import type { CodeModule, ConnectorCapability, JsonValue } from '../browser/flow-change.js';
2
+ export { currentEngineContract, nodejsEngineContract, findEngineContract, type EngineContract } from './engine-contract.js';
3
3
  export type RuntimeModule = Pick<CodeModule, 'imports' | 'source'>;
4
+ /** Snapshot a Task result before JSON transport can discard or coerce invalid values. */
5
+ export declare function snapshotRuntimeResult(value: unknown): JsonValue | undefined;
6
+ export declare const nodejsRuntimeConformanceCases: readonly RuntimeConformanceCase[];
4
7
  export interface RuntimeProgram {
5
8
  readonly engineContract: string;
6
9
  readonly engineDigest: string;
@@ -8,6 +11,7 @@ export interface RuntimeProgram {
8
11
  readonly modules: Readonly<Record<string, RuntimeModule>>;
9
12
  }
10
13
  export interface RuntimeCapabilityCall {
14
+ readonly callId: string;
11
15
  readonly invocationId: string;
12
16
  readonly kind: string;
13
17
  readonly payload: JsonValue;
@@ -35,7 +39,32 @@ export type LlmTaskResult = {
35
39
  readonly version: 1;
36
40
  };
37
41
  export type InvokeLlmTask = (invocation: LlmTaskInvocation) => Promise<LlmTaskResult>;
42
+ export interface AgentCheckpoint {
43
+ readonly state: JsonValue;
44
+ readonly callId: string;
45
+ readonly toolId: string;
46
+ readonly input: Readonly<Record<string, JsonValue>>;
47
+ readonly rounds: number;
48
+ readonly version: 1;
49
+ }
50
+ export type AgentResult = {
51
+ readonly kind: 'completed';
52
+ readonly output: JsonValue;
53
+ } | {
54
+ readonly kind: 'suspended';
55
+ readonly checkpoint: AgentCheckpoint;
56
+ };
57
+ export interface AgentInvocation {
58
+ readonly input: Readonly<Record<string, JsonValue>>;
59
+ readonly invocationId: string;
60
+ readonly signal: AbortSignal;
61
+ readonly resume?: {
62
+ readonly action: 'approve' | 'reject';
63
+ readonly checkpoint: AgentCheckpoint;
64
+ };
65
+ }
38
66
  export interface RuntimeInvocation {
67
+ readonly capabilities?: readonly ConnectorCapability[];
39
68
  readonly capability: (call: RuntimeCapabilityCall) => Promise<RuntimeCapabilityResponse>;
40
69
  readonly input: JsonValue;
41
70
  readonly invocationId: string;
@@ -44,10 +73,16 @@ export interface RuntimeInvocation {
44
73
  }
45
74
  export interface RuntimeHarness {
46
75
  readonly engineDigest: string;
47
- invoke(invocation: RuntimeInvocation): Promise<JsonValue>;
76
+ invoke(invocation: RuntimeInvocation): Promise<JsonValue | undefined>;
48
77
  }
49
78
  export interface RuntimeConformanceCase {
50
79
  readonly name: string;
51
80
  verify(harness: RuntimeHarness): Promise<void>;
52
81
  }
53
82
  export declare const runtimeConformanceCases: readonly RuntimeConformanceCase[];
83
+ export declare function createActions(declarations: readonly ConnectorCapability[], invoke: (payload: JsonValue) => Promise<RuntimeCapabilityResponse>): Readonly<Record<string, unknown>>;
84
+ export declare function resolveAction(declarations: readonly ConnectorCapability[], payload: unknown): {
85
+ readonly action: string;
86
+ readonly connectionId?: string;
87
+ readonly input: Readonly<Record<string, JsonValue>>;
88
+ };