@ykurilov/agent-chat-flows 0.0.0-stage → 0.55.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 (151) hide show
  1. package/CHANGELOG.md +252 -0
  2. package/LICENSE +21 -0
  3. package/README.md +124 -2
  4. package/agent-flow.schema.json +1020 -0
  5. package/dist/chunk-3PTJI2XY.js +100 -0
  6. package/dist/chunk-3PTJI2XY.js.map +1 -0
  7. package/dist/chunk-BNMQUNSI.js +9 -0
  8. package/dist/chunk-BNMQUNSI.js.map +1 -0
  9. package/dist/chunk-BOV6FJGU.js +1288 -0
  10. package/dist/chunk-BOV6FJGU.js.map +1 -0
  11. package/dist/chunk-CKY5KG7N.js +165 -0
  12. package/dist/chunk-CKY5KG7N.js.map +1 -0
  13. package/dist/chunk-DCTRMCGV.js +34 -0
  14. package/dist/chunk-DCTRMCGV.js.map +1 -0
  15. package/dist/format.js +147 -0
  16. package/dist/format.js.map +1 -0
  17. package/dist/index.js +3197 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/postgres.js +387 -0
  20. package/dist/postgres.js.map +1 -0
  21. package/dist/react.js +2650 -0
  22. package/dist/react.js.map +1 -0
  23. package/dist/sqlite.js +319 -0
  24. package/dist/sqlite.js.map +1 -0
  25. package/dist/types/check/app-checks.d.ts +16 -0
  26. package/dist/types/check/check-flow.d.ts +8 -0
  27. package/dist/types/check/index.d.ts +2 -0
  28. package/dist/types/engine/data-conditions.d.ts +10 -0
  29. package/dist/types/engine/day-frame.d.ts +17 -0
  30. package/dist/types/engine/first-messages.d.ts +21 -0
  31. package/dist/types/engine/flow-days.d.ts +39 -0
  32. package/dist/types/engine/flow-graph.d.ts +26 -0
  33. package/dist/types/engine/flow-run.d.ts +130 -0
  34. package/dist/types/engine/index.d.ts +14 -0
  35. package/dist/types/engine/migrate-run.d.ts +11 -0
  36. package/dist/types/engine/next-transition.d.ts +40 -0
  37. package/dist/types/engine/nudges.d.ts +78 -0
  38. package/dist/types/engine/run-updates.d.ts +37 -0
  39. package/dist/types/engine/side-questions.d.ts +26 -0
  40. package/dist/types/engine/side-tasks.d.ts +44 -0
  41. package/dist/types/engine/targets.d.ts +9 -0
  42. package/dist/types/engine/timers.d.ts +61 -0
  43. package/dist/types/engine/zoned-time.d.ts +27 -0
  44. package/dist/types/format/catalog-events.d.ts +5 -0
  45. package/dist/types/format/compact-flow.d.ts +8 -0
  46. package/dist/types/format/flow-format.d.ts +286 -0
  47. package/dist/types/format/flow-json-schema.d.ts +2 -0
  48. package/dist/types/format/flow-schema.d.ts +605 -0
  49. package/dist/types/format/index.d.ts +7 -0
  50. package/dist/types/format/migrate-flow.d.ts +4 -0
  51. package/dist/types/format/parse-flow.d.ts +6 -0
  52. package/dist/types/format.d.ts +3 -0
  53. package/dist/types/index.d.ts +4 -0
  54. package/dist/types/labels/client-card.d.ts +20 -0
  55. package/dist/types/labels/editor.d.ts +261 -0
  56. package/dist/types/labels/index.d.ts +14 -0
  57. package/dist/types/labels/migrate.d.ts +19 -0
  58. package/dist/types/labels/test-chat.d.ts +28 -0
  59. package/dist/types/not-yet.d.ts +2 -0
  60. package/dist/types/postgres.d.ts +10 -0
  61. package/dist/types/prompt/client-card-block.d.ts +16 -0
  62. package/dist/types/prompt/flow-rules.d.ts +9 -0
  63. package/dist/types/prompt/rules/after-end.d.ts +3 -0
  64. package/dist/types/prompt/rules/client-facts.d.ts +2 -0
  65. package/dist/types/prompt/rules/day-frame.d.ts +2 -0
  66. package/dist/types/prompt/rules/link-views.d.ts +4 -0
  67. package/dist/types/prompt/rules/rule-part.d.ts +3 -0
  68. package/dist/types/prompt/rules/side-tasks.d.ts +2 -0
  69. package/dist/types/prompt/rules/time-zone.d.ts +2 -0
  70. package/dist/types/prompt/state-card.d.ts +14 -0
  71. package/dist/types/react/client-card/client-card-panel.d.ts +8 -0
  72. package/dist/types/react/client-card/index.d.ts +2 -0
  73. package/dist/types/react/client-card/use-client-card.d.ts +19 -0
  74. package/dist/types/react/client-card-skin.d.ts +27 -0
  75. package/dist/types/react/editor/board-space.d.ts +51 -0
  76. package/dist/types/react/editor/board-styles.d.ts +1 -0
  77. package/dist/types/react/editor/editor-model.d.ts +60 -0
  78. package/dist/types/react/editor/exit-text.d.ts +11 -0
  79. package/dist/types/react/editor/flow-board.d.ts +11 -0
  80. package/dist/types/react/editor/flow-editor.d.ts +13 -0
  81. package/dist/types/react/editor/flow-simulation.d.ts +44 -0
  82. package/dist/types/react/editor/index.d.ts +6 -0
  83. package/dist/types/react/editor/schedule-model.d.ts +47 -0
  84. package/dist/types/react/editor/side-task-model.d.ts +18 -0
  85. package/dist/types/react/editor/use-flow-editor.d.ts +120 -0
  86. package/dist/types/react/flow-editor-skin.d.ts +453 -0
  87. package/dist/types/react/flow-labels.d.ts +8 -0
  88. package/dist/types/react/index.d.ts +6 -0
  89. package/dist/types/react/test-chat/flow-test-chat.d.ts +22 -0
  90. package/dist/types/react/test-chat/index.d.ts +2 -0
  91. package/dist/types/react/test-chat/use-flow-test-chat.d.ts +50 -0
  92. package/dist/types/react.d.ts +3 -0
  93. package/dist/types/runtime/admit.d.ts +15 -0
  94. package/dist/types/runtime/agent-flow.d.ts +20 -0
  95. package/dist/types/runtime/client-card.d.ts +9 -0
  96. package/dist/types/runtime/client-facts.d.ts +22 -0
  97. package/dist/types/runtime/close-day-tool.d.ts +3 -0
  98. package/dist/types/runtime/decisions-client.d.ts +33 -0
  99. package/dist/types/runtime/extra-tool.d.ts +16 -0
  100. package/dist/types/runtime/first-message-retry.d.ts +4 -0
  101. package/dist/types/runtime/first-message-rules.d.ts +55 -0
  102. package/dist/types/runtime/first-reasons-notice.d.ts +9 -0
  103. package/dist/types/runtime/flow-delivery.d.ts +53 -0
  104. package/dist/types/runtime/flow-events.d.ts +126 -0
  105. package/dist/types/runtime/flow-finish.d.ts +68 -0
  106. package/dist/types/runtime/flow-known-texts.d.ts +11 -0
  107. package/dist/types/runtime/flow-signals.d.ts +12 -0
  108. package/dist/types/runtime/flow-timers.d.ts +55 -0
  109. package/dist/types/runtime/flow-tools.d.ts +23 -0
  110. package/dist/types/runtime/flow-types.d.ts +547 -0
  111. package/dist/types/runtime/held-messages.d.ts +25 -0
  112. package/dist/types/runtime/index.d.ts +11 -0
  113. package/dist/types/runtime/judge-context.d.ts +36 -0
  114. package/dist/types/runtime/judge.d.ts +21 -0
  115. package/dist/types/runtime/migrate-chats.d.ts +20 -0
  116. package/dist/types/runtime/note-tools.d.ts +15 -0
  117. package/dist/types/runtime/pause.d.ts +21 -0
  118. package/dist/types/runtime/prepare-turn.d.ts +12 -0
  119. package/dist/types/runtime/side-task-tool.d.ts +5 -0
  120. package/dist/types/runtime/step-tail.d.ts +11 -0
  121. package/dist/types/runtime/tail/day-line.d.ts +2 -0
  122. package/dist/types/runtime/tail/frame-line.d.ts +2 -0
  123. package/dist/types/runtime/tail/side-tasks-line.d.ts +2 -0
  124. package/dist/types/runtime/tail/tail-part.d.ts +21 -0
  125. package/dist/types/runtime/test-clock.d.ts +26 -0
  126. package/dist/types/runtime/time-zone-tool.d.ts +3 -0
  127. package/dist/types/runtime/turn-gate.d.ts +8 -0
  128. package/dist/types/sqlite.d.ts +9 -0
  129. package/dist/types/store/flow-store-shared.d.ts +20 -0
  130. package/dist/types/store/flow-store.d.ts +240 -0
  131. package/dist/types/store/memory.d.ts +3 -0
  132. package/dist/types/store/migration-settings.d.ts +7 -0
  133. package/dist/types/store/postgres-schema.d.ts +775 -0
  134. package/dist/types/store/postgres.d.ts +15 -0
  135. package/dist/types/store/sqlite-schema.d.ts +824 -0
  136. package/dist/types/store/sqlite.d.ts +9 -0
  137. package/drizzle/postgres/0000_init.sql +45 -0
  138. package/drizzle/postgres/0001_days_pause_side_tasks.sql +21 -0
  139. package/drizzle/postgres/0002_chat_placement.sql +1 -0
  140. package/drizzle/postgres/meta/0000_snapshot.json +317 -0
  141. package/drizzle/postgres/meta/0001_snapshot.json +439 -0
  142. package/drizzle/postgres/meta/0002_snapshot.json +445 -0
  143. package/drizzle/postgres/meta/_journal.json +27 -0
  144. package/drizzle/sqlite/0000_init.sql +44 -0
  145. package/drizzle/sqlite/0001_days_pause_side_tasks.sql +21 -0
  146. package/drizzle/sqlite/0002_chat_placement.sql +1 -0
  147. package/drizzle/sqlite/meta/0000_snapshot.json +297 -0
  148. package/drizzle/sqlite/meta/0001_snapshot.json +427 -0
  149. package/drizzle/sqlite/meta/0002_snapshot.json +434 -0
  150. package/drizzle/sqlite/meta/_journal.json +27 -0
  151. package/package.json +98 -3
@@ -0,0 +1,286 @@
1
+ /** Поле `format` у каждого сценария: по нему JSON узнаётся как сценарий агента. */
2
+ export declare const AGENT_FLOW_FORMAT = "agent-flow";
3
+ /** Версия формата, которую понимает этот SDK. Старые версии `parseFlow` переводит сам (`migrate-flow.ts`). */
4
+ export declare const AGENT_FLOW_FORMAT_VERSION = 2;
5
+ /** Особая цель перехода: вернуться в последнее основное состояние (после напоминаний и касаний). */
6
+ export declare const RETURN_TARGET = "@return";
7
+ /** Ключ места «Из любого состояния» в `layout`. */
8
+ export declare const ANY_STATE_LAYOUT_KEY = "@any";
9
+ /** `boolean` — «да/нет» (с версии 2): хранится `true` / `false`. */
10
+ export declare const FLOW_FIELD_TYPES: readonly ["text", "number", "choice", "boolean"];
11
+ export type FlowFieldType = (typeof FLOW_FIELD_TYPES)[number];
12
+ /** `ne` — «≠» (с версии 2), пока только для «да/нет». */
13
+ export declare const FLOW_DATA_OPS: readonly ["filled", "eq", "ne", "gt", "lt", "contains"];
14
+ export type FlowDataOp = (typeof FLOW_DATA_OPS)[number];
15
+ /** Какие сравнения подходят к типу поля. Остальные — ошибка проверки графа. */
16
+ export declare const FLOW_OPS_BY_FIELD_TYPE: Readonly<Record<FlowFieldType, readonly FlowDataOp[]>>;
17
+ export declare const FLOW_EVENT_TYPES: readonly ["message", "button", "tool", "app"];
18
+ export type FlowEventType = (typeof FLOW_EVENT_TYPES)[number];
19
+ export declare const FLOW_TIMER_UNITS: readonly ["min", "h", "d"];
20
+ export type FlowTimerUnit = (typeof FLOW_TIMER_UNITS)[number];
21
+ /** Откуда считается срок: время в состоянии, тишина человека, с начала чата. */
22
+ export declare const FLOW_TIMER_SPANS: readonly ["in_state", "silence", "since_start"];
23
+ export type FlowTimerSpan = (typeof FLOW_TIMER_SPANS)[number];
24
+ /** Заметка чата: живёт весь чат, в следующем чате не помнится. */
25
+ export interface FlowField {
26
+ id: string;
27
+ name: string;
28
+ /** Что это и когда уместно спросить. Видит модель. */
29
+ about: string;
30
+ type: FlowFieldType;
31
+ /** Варианты для `choice`; у остальных типов пусто. */
32
+ options: string[];
33
+ }
34
+ /** Поле карточки клиента: долгая память о человеке, переживает чаты. */
35
+ export interface ClientCardField extends FlowField {
36
+ /** Через сколько месяцев мягко уточнить; `null` — не устаревает. */
37
+ refreshAfterMonths: number | null;
38
+ }
39
+ /** Условие словами: решает судья по разговору. */
40
+ export interface JudgeCondition {
41
+ type: "judge";
42
+ text: string;
43
+ }
44
+ /** Условие по данным: поле карточки или заметки чата. При `filled` значения нет; у «да/нет» значение — `true` / `false`. */
45
+ export interface DataCondition {
46
+ type: "data";
47
+ field: string;
48
+ op: FlowDataOp;
49
+ value?: string | number | boolean;
50
+ }
51
+ /** Событие: сообщение человека, кнопка, вызов инструмента или событие приложения — по именам, которые объявило приложение. */
52
+ export interface EventCondition {
53
+ type: "event";
54
+ event: FlowEventType;
55
+ name?: string;
56
+ }
57
+ export interface SpanTimerCondition {
58
+ type: "timer";
59
+ from: FlowTimerSpan;
60
+ amount: number;
61
+ unit: FlowTimerUnit;
62
+ }
63
+ /** Наступило время суток (в поясе человека), `at` — «ЧЧ:ММ». */
64
+ export interface TimeOfDayTimerCondition {
65
+ type: "timer";
66
+ from: "time_of_day";
67
+ at: string;
68
+ }
69
+ /** Нода длится `days` дней сценария: срок — начало дня «день входа + days» (`schedule.dayStart`). С версии 2. */
70
+ export interface StateDaysTimerCondition {
71
+ type: "timer";
72
+ from: "state_days";
73
+ days: number;
74
+ }
75
+ /**
76
+ * Наступил день `day` сценария: начало этого дня (`schedule.dayStart`) по часам человека, по той же нумерации, что день в
77
+ * `readRun`. Нода вошла в день `day` или позже — выход сразу. Дополнение к версии 2 (0.55).
78
+ */
79
+ export interface ProgramDayTimerCondition {
80
+ type: "timer";
81
+ from: "program_day";
82
+ day: number;
83
+ }
84
+ export type TimerCondition = SpanTimerCondition | TimeOfDayTimerCondition | StateDaysTimerCondition | ProgramDayTimerCondition;
85
+ export type FlowCondition = JudgeCondition | DataCondition | EventCondition | TimerCondition;
86
+ export type FlowConditionType = FlowCondition["type"];
87
+ export interface FlowExit {
88
+ /** Постоянный адрес условия: на него ссылаются история переходов и таймеры. */
89
+ id: string;
90
+ when: FlowCondition;
91
+ /** `id` состояния или `RETURN_TARGET`; `null` — цель ещё не выбрана. */
92
+ to: string | null;
93
+ }
94
+ export interface FlowState {
95
+ id: string;
96
+ /** Зарезервировано под подсценарии. */
97
+ kind: "state";
98
+ title: string;
99
+ /** Первая строка — цель (её видно на доске), дальше — как себя вести. */
100
+ instructions: string;
101
+ /** Что написать при входе в состояние; `null` — агент пишет сам. */
102
+ firstMessage: string | null;
103
+ /** Поля карточки и заметок, которые нужно узнать здесь. */
104
+ learn: string[];
105
+ /** Не задавать вопросов между делом. */
106
+ noSideQuestions: boolean;
107
+ /** Инструменты приложения, доступные в этом состоянии. */
108
+ tools: string[];
109
+ /** Метки перехода в это состояние: приходят в `onTransition`. */
110
+ tags: string[];
111
+ /** Состояние без условий — конец сценария. */
112
+ exits: FlowExit[];
113
+ /** Свои касания ноды; `"off"` — без касаний; нет — общие `schedule.nudges`, затем `nudges` сценария. С версии 2. */
114
+ nudges?: FlowStateNudges | "off";
115
+ }
116
+ /** Общие переходы: работают из любого состояния, кроме перечисленных. */
117
+ export interface FlowAnyState {
118
+ except: string[];
119
+ exits: FlowExit[];
120
+ }
121
+ export interface FlowPace {
122
+ /** Как часто можно спросить между делом: раз в столько сообщений человека. */
123
+ sideQuestionEveryMessages: number;
124
+ }
125
+ export interface FlowPoint {
126
+ x: number;
127
+ y: number;
128
+ }
129
+ /** Срок словами формата: «15 min», «4 h», «3 d» (d = 24 ч). */
130
+ export interface FlowDuration {
131
+ amount: number;
132
+ unit: FlowTimerUnit;
133
+ }
134
+ /** Касания — ход агента в той же ноде, когда человек молчит. И у сценария, и у ноды. */
135
+ export interface FlowNudges {
136
+ /** Ряд сроков тишины от последнего ответа агента; сообщение человека начинает ряд сначала. */
137
+ afterSilence: FlowDuration[];
138
+ /** После ряда — касания в эти часы («ЧЧ:ММ») каждый день. */
139
+ dailyAt?: string[];
140
+ /** Столько тишины — конец разговора «не завершил», без сообщения. */
141
+ giveUpAfter?: FlowDuration;
142
+ }
143
+ /** Свои касания ноды: можно ограничить первыми днями в ноде. */
144
+ export interface FlowStateNudges extends FlowNudges {
145
+ /**
146
+ * Свой ряд действует столько дней сценария, считая день входа в ноду (1 — только день входа). Потом — общие касания
147
+ * (`schedule.nudges`, затем `nudges` сценария), их ряд с начала. Нет — всё время в ноде. С 0.55.
148
+ */
149
+ days?: number;
150
+ }
151
+ /** Порог позднего старта по умолчанию: до ночи меньше 3 ч — первым днём считается завтра. */
152
+ export declare const DEFAULT_LATE_START_HOURS = 3;
153
+ /** «Дни и время»: дни сценария, ночь, срок, касания, рамки дня. С версии 2. */
154
+ export interface FlowSchedule {
155
+ /** Начало дня, оно же утреннее касание: «09:00». */
156
+ dayStart: string;
157
+ /** Начало ночи: ночь = [nightFrom, dayStart). Нет — ночь из настроек приложения. */
158
+ nightFrom?: string;
159
+ /** Пришёл позже, чем за столько часов до ночи, — первый день завтра. 0 — день старта всегда первый. */
160
+ lateStartHours: number;
161
+ /** Общий срок в днях, 1–60. */
162
+ lengthDays?: number;
163
+ /** Куда перейти при «срок вышел» перед концом. */
164
+ deadlineState?: string;
165
+ /** При «срок вышел» агент пишет одно прощальное сообщение по правилам «писать первым» (→ В5). */
166
+ farewellOnDeadline: boolean;
167
+ /** Готовый текст прощания: уходит слово в слово, без модели. Нет — прощание пишет модель. */
168
+ farewellText?: string;
169
+ firstMessages?: {
170
+ /** Нет — из настроек приложения. */
171
+ maxPerDay?: number;
172
+ /** Писать в начале дня; нет — да, если задан `lengthDays`. */
173
+ morning?: boolean;
174
+ /** Утреннее пропускается, если человек писал за столько минут до него; нет — 180. */
175
+ skipMorningIfHumanWithinMin?: number;
176
+ };
177
+ /** Общее правило касаний. */
178
+ nudges?: FlowNudges;
179
+ /** Рамки дня по числу сообщений человека: мягкая с `softFrom`, жёсткая на `hardAt`. */
180
+ dayFrame?: {
181
+ softFrom?: number;
182
+ hardAt?: number;
183
+ hardText?: string;
184
+ };
185
+ }
186
+ /** Попытки попутной задачи по умолчанию. */
187
+ export declare const DEFAULT_SIDE_TASK_MAX_ATTEMPTS = 2;
188
+ /** Попутная задача: агент делает её между делом, в общем темпе вопросов между делом. С версии 2. */
189
+ export interface FlowSideTask {
190
+ id: string;
191
+ /** Что сделать, словами для агента. */
192
+ text: string;
193
+ /** Когда уместно, словами. */
194
+ when?: string;
195
+ /** Поле карточки или заметки: задача решена, когда оно известно. */
196
+ field?: string;
197
+ maxAttempts: number;
198
+ /** Попытки считаются в каждом разговоре заново; иначе — на человека. */
199
+ perConversation: boolean;
200
+ }
201
+ /** Что делать с сообщением человека после конца разговора (→ В6): `reply` — агент отвечает по общей части, `silent` — молчит. */
202
+ export declare const FLOW_AFTER_END_MODES: readonly ["reply", "silent"];
203
+ export type FlowAfterEnd = (typeof FLOW_AFTER_END_MODES)[number];
204
+ /** Сценарий поведения агента после `parseFlow`: все значения по умолчанию на месте. */
205
+ export interface AgentFlow {
206
+ format: typeof AGENT_FLOW_FORMAT;
207
+ version: typeof AGENT_FLOW_FORMAT_VERSION;
208
+ id: string;
209
+ name: string;
210
+ /** Начальное состояние; `null` — не выбрано (ошибка проверки графа). */
211
+ start: string | null;
212
+ /** Общее для всех состояний: роль, тон, цены, условия, ссылки. */
213
+ common: string;
214
+ pace: FlowPace;
215
+ clientCard: ClientCardField[];
216
+ chatNotes: FlowField[];
217
+ /** Имена инструментов приложения, которыми пользуется сценарий. */
218
+ tools: string[];
219
+ anyState: FlowAnyState;
220
+ states: FlowState[];
221
+ /** Места на доске по `id` состояния (и `ANY_STATE_LAYOUT_KEY`). Движок их не читает. */
222
+ layout: Record<string, FlowPoint>;
223
+ /** «Дни и время». Нет — сценарий без дней, как в версии 1. */
224
+ schedule?: FlowSchedule;
225
+ /**
226
+ * Касания на весь сценарий без «Дней и времени» (0.50): нодам без своих касаний. Есть `schedule.nudges` — действуют
227
+ * они. Нет — как в 0.49.
228
+ */
229
+ nudges?: FlowNudges;
230
+ /** Попутные задачи. */
231
+ sideTasks?: FlowSideTask[];
232
+ /**
233
+ * После конца разговора (→ В6). Нет — `reply`. Задан он или «Дни и время» — вход в конечную ноду закрывает разговор;
234
+ * иначе, как в 0.48, конечная нода только сообщает `onFinish`.
235
+ */
236
+ afterEnd?: FlowAfterEnd;
237
+ }
238
+ export interface FlowFormatError {
239
+ /** Место в JSON: `states[0].exits[1].when.amount`. Пусто — весь документ. */
240
+ path: string;
241
+ message: string;
242
+ }
243
+ export type ParseFlowResult = {
244
+ ok: true;
245
+ flow: AgentFlow;
246
+ } | {
247
+ ok: false;
248
+ errors: FlowFormatError[];
249
+ };
250
+ /** Что объявило приложение: по этим именам сценарий ссылается на инструменты, события и виджеты. */
251
+ export interface FlowCatalog {
252
+ tools: readonly string[];
253
+ /** Кнопки и события приложения: имя или `{ name, label }` — подпись видна на доске вместо имени. */
254
+ events: readonly FlowCatalogEvent[];
255
+ widgets: readonly string[];
256
+ /** Словарь полей приложения: редактор предлагает их в карточке, заметках и попутных задачах. */
257
+ fields?: readonly FlowCatalogField[];
258
+ }
259
+ /** Кнопка или событие приложения: просто имя или имя с подписью для доски («paid» → «Оплачено»). Объект — с 0.55. */
260
+ export type FlowCatalogEvent = string | {
261
+ name: string;
262
+ label?: string;
263
+ };
264
+ /** Поле из словаря приложения. */
265
+ export interface FlowCatalogField {
266
+ id: string;
267
+ title: string;
268
+ type: FlowFieldType;
269
+ options?: readonly string[];
270
+ }
271
+ /** Ошибка не даёт запустить сценарий, замечание — подсказка автору. */
272
+ export type FlowIssueLevel = "error" | "warning";
273
+ /** Находка `checkFlow`: одна и та же в редакторе и при загрузке сценария на сервере. */
274
+ export interface FlowIssue {
275
+ level: FlowIssueLevel;
276
+ /** Постоянный код находки, например `unreachable_state`. */
277
+ code: string;
278
+ message: string;
279
+ /** Где показать: состояние, условие, поле, попутная задача. */
280
+ place: {
281
+ stateId?: string;
282
+ exitId?: string;
283
+ fieldId?: string;
284
+ sideTaskId?: string;
285
+ };
286
+ }
@@ -0,0 +1,2 @@
1
+ /** JSON Schema сценария (то, что пишет автор: значения по умолчанию необязательны). Лежит в пакете: `agent-flow.schema.json`. */
2
+ export declare function flowJsonSchema(): Record<string, unknown>;