aimeat 1.23.2 → 1.24.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 (239) hide show
  1. package/dist/locales/en.json +580 -21
  2. package/dist/locales/fi.json +592 -33
  3. package/dist/public/components/ContactCard.js +28 -0
  4. package/dist/public/css/views/admin.css +12 -0
  5. package/dist/public/css/views/agents-detail.css +62 -10
  6. package/dist/public/css/views/landing.css +87 -0
  7. package/dist/public/css/views/offers.css +96 -0
  8. package/dist/public/css/views/portfolio.css +18 -0
  9. package/dist/public/css/views/profile.css +153 -8
  10. package/dist/public/css/views/start.css +96 -0
  11. package/dist/public/css/views/workflows.css +111 -0
  12. package/dist/public/img/business-hero.png +0 -0
  13. package/dist/public/img/toimitus.png +0 -0
  14. package/dist/public/js/components/tag-cloud.js +46 -31
  15. package/dist/public/js/components/tag-editor.js +2 -2
  16. package/dist/public/js/recents.js +40 -0
  17. package/dist/public/js/services/admin.js +6 -0
  18. package/dist/public/js/services/agents.js +34 -0
  19. package/dist/public/js/services/offers.js +152 -0
  20. package/dist/public/js/services/packages.js +1 -0
  21. package/dist/public/js/services/workflows.js +57 -0
  22. package/dist/public/llms-template.txt +7 -0
  23. package/dist/public/spa.html +35 -3
  24. package/dist/public/views/admin/subdomains-tab.js +182 -0
  25. package/dist/public/views/admin.js +2 -0
  26. package/dist/public/views/business.js +119 -0
  27. package/dist/public/views/how-it-works.js +159 -0
  28. package/dist/public/views/landing.js +235 -0
  29. package/dist/public/views/portfolio.js +120 -23
  30. package/dist/public/views/pricing.js +75 -0
  31. package/dist/public/views/profile/access-tab.js +124 -51
  32. package/dist/public/views/profile/agents/agent-card.js +68 -37
  33. package/dist/public/views/profile/agents/shared-board.js +56 -22
  34. package/dist/public/views/profile/agents/tab-activity.js +24 -12
  35. package/dist/public/views/profile/agents/tab-agent-config.js +31 -1
  36. package/dist/public/views/profile/agents/tab-data-access.js +9 -13
  37. package/dist/public/views/profile/agents/tab-integration.js +27 -1
  38. package/dist/public/views/profile/agents/tab-messages.js +6 -11
  39. package/dist/public/views/profile/agents/tab-quality.js +45 -5
  40. package/dist/public/views/profile/agents-tab.js +41 -6
  41. package/dist/public/views/profile/apps-tab.js +7 -1
  42. package/dist/public/views/profile/knowledge-tab.js +4 -1
  43. package/dist/public/views/profile/landing-page.js +428 -123
  44. package/dist/public/views/profile/memory-tab.js +409 -211
  45. package/dist/public/views/profile/nodes-tab.js +18 -3
  46. package/dist/public/views/profile/offers-tab.js +310 -0
  47. package/dist/public/views/profile/organisms-tab.js +289 -28
  48. package/dist/public/views/profile/packages-tab.js +152 -16
  49. package/dist/public/views/profile/portfolio-tab.js +98 -31
  50. package/dist/public/views/profile/workflows-form.js +220 -0
  51. package/dist/public/views/profile/workflows-tab.js +244 -0
  52. package/dist/public/views/profile.js +4 -0
  53. package/dist/public/views/start-flows.js +281 -0
  54. package/dist/public/views/start.js +258 -0
  55. package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
  56. package/dist/src/cli/connect/mcp/tools/index.js +2 -0
  57. package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
  58. package/dist/src/cli/connect/mcp/tools/workflows.d.ts +12 -0
  59. package/dist/src/cli/connect/mcp/tools/workflows.d.ts.map +1 -0
  60. package/dist/src/cli/connect/mcp/tools/workflows.js +37 -0
  61. package/dist/src/cli/connect/mcp/tools/workflows.js.map +1 -0
  62. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  63. package/dist/src/cli/connect/tool-call.js +37 -0
  64. package/dist/src/cli/connect/tool-call.js.map +1 -1
  65. package/dist/src/generated/api-types.d.ts +1474 -66
  66. package/dist/src/generated/api-types.d.ts.map +1 -1
  67. package/dist/src/generated/prisma-postgres/edge.js +15 -3
  68. package/dist/src/generated/prisma-postgres/index-browser.js +12 -0
  69. package/dist/src/generated/prisma-postgres/index.d.ts +1476 -160
  70. package/dist/src/generated/prisma-postgres/index.js +15 -3
  71. package/dist/src/generated/prisma-postgres/package.json +1 -1
  72. package/dist/src/generated/prisma-postgres/schema.prisma +11 -0
  73. package/dist/src/generated/prisma-postgres/wasm.js +15 -3
  74. package/dist/src/mcp/annotations.d.ts.map +1 -1
  75. package/dist/src/mcp/annotations.js +3 -0
  76. package/dist/src/mcp/annotations.js.map +1 -1
  77. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  78. package/dist/src/mcp/catalog/definitions.js +27 -0
  79. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  80. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  81. package/dist/src/mcp/catalog/scopes.js +5 -1
  82. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  83. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  84. package/dist/src/mcp/catalog/surfaces.js +1 -0
  85. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  86. package/dist/src/mcp/index.d.ts.map +1 -1
  87. package/dist/src/mcp/index.js +2 -0
  88. package/dist/src/mcp/index.js.map +1 -1
  89. package/dist/src/mcp/workflows.d.ts +18 -0
  90. package/dist/src/mcp/workflows.d.ts.map +1 -0
  91. package/dist/src/mcp/workflows.js +68 -0
  92. package/dist/src/mcp/workflows.js.map +1 -0
  93. package/dist/src/middleware/subdomain.d.ts +28 -0
  94. package/dist/src/middleware/subdomain.d.ts.map +1 -0
  95. package/dist/src/middleware/subdomain.js +32 -0
  96. package/dist/src/middleware/subdomain.js.map +1 -0
  97. package/dist/src/models/offer-schemas.d.ts +236 -0
  98. package/dist/src/models/offer-schemas.d.ts.map +1 -0
  99. package/dist/src/models/offer-schemas.js +112 -0
  100. package/dist/src/models/offer-schemas.js.map +1 -0
  101. package/dist/src/models/workflow-schemas.d.ts +220 -0
  102. package/dist/src/models/workflow-schemas.d.ts.map +1 -0
  103. package/dist/src/models/workflow-schemas.js +102 -0
  104. package/dist/src/models/workflow-schemas.js.map +1 -0
  105. package/dist/src/routes/agent-tasks.d.ts.map +1 -1
  106. package/dist/src/routes/agent-tasks.js +49 -0
  107. package/dist/src/routes/agent-tasks.js.map +1 -1
  108. package/dist/src/routes/agents.d.ts.map +1 -1
  109. package/dist/src/routes/agents.js +146 -1
  110. package/dist/src/routes/agents.js.map +1 -1
  111. package/dist/src/routes/apps-backup.d.ts +20 -0
  112. package/dist/src/routes/apps-backup.d.ts.map +1 -0
  113. package/dist/src/routes/apps-backup.js +165 -0
  114. package/dist/src/routes/apps-backup.js.map +1 -0
  115. package/dist/src/routes/ghii.d.ts.map +1 -1
  116. package/dist/src/routes/ghii.js +4 -0
  117. package/dist/src/routes/ghii.js.map +1 -1
  118. package/dist/src/routes/instances.d.ts +2 -1
  119. package/dist/src/routes/instances.d.ts.map +1 -1
  120. package/dist/src/routes/instances.js +59 -1
  121. package/dist/src/routes/instances.js.map +1 -1
  122. package/dist/src/routes/memory.d.ts.map +1 -1
  123. package/dist/src/routes/memory.js +5 -0
  124. package/dist/src/routes/memory.js.map +1 -1
  125. package/dist/src/routes/packages.d.ts.map +1 -1
  126. package/dist/src/routes/packages.js +32 -0
  127. package/dist/src/routes/packages.js.map +1 -1
  128. package/dist/src/routes/permissions.d.ts +12 -0
  129. package/dist/src/routes/permissions.d.ts.map +1 -1
  130. package/dist/src/routes/permissions.js +35 -3
  131. package/dist/src/routes/permissions.js.map +1 -1
  132. package/dist/src/routes/portal.d.ts +3 -0
  133. package/dist/src/routes/portal.d.ts.map +1 -1
  134. package/dist/src/routes/portal.js +12 -0
  135. package/dist/src/routes/portal.js.map +1 -1
  136. package/dist/src/routes/public-stats.d.ts +15 -0
  137. package/dist/src/routes/public-stats.d.ts.map +1 -0
  138. package/dist/src/routes/public-stats.js +90 -0
  139. package/dist/src/routes/public-stats.js.map +1 -0
  140. package/dist/src/routes/sse.d.ts +7 -2
  141. package/dist/src/routes/sse.d.ts.map +1 -1
  142. package/dist/src/routes/sse.js +35 -5
  143. package/dist/src/routes/sse.js.map +1 -1
  144. package/dist/src/routes/stats.d.ts.map +1 -1
  145. package/dist/src/routes/stats.js +13 -0
  146. package/dist/src/routes/stats.js.map +1 -1
  147. package/dist/src/routes/subdomains.d.ts +33 -0
  148. package/dist/src/routes/subdomains.d.ts.map +1 -0
  149. package/dist/src/routes/subdomains.js +208 -0
  150. package/dist/src/routes/subdomains.js.map +1 -0
  151. package/dist/src/routes/workflows.d.ts +30 -0
  152. package/dist/src/routes/workflows.d.ts.map +1 -0
  153. package/dist/src/routes/workflows.js +178 -0
  154. package/dist/src/routes/workflows.js.map +1 -0
  155. package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
  156. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  157. package/dist/src/server-bootstrap/routes-loader.js +19 -2
  158. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  159. package/dist/src/server-bootstrap/service-init.d.ts +2 -0
  160. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  161. package/dist/src/server-bootstrap/service-init.js +6 -0
  162. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  163. package/dist/src/server.d.ts.map +1 -1
  164. package/dist/src/server.js +5 -0
  165. package/dist/src/server.js.map +1 -1
  166. package/dist/src/services/apps-backup-export.d.ts +22 -0
  167. package/dist/src/services/apps-backup-export.d.ts.map +1 -0
  168. package/dist/src/services/apps-backup-export.js +136 -0
  169. package/dist/src/services/apps-backup-export.js.map +1 -0
  170. package/dist/src/services/apps-backup-import.d.ts +120 -0
  171. package/dist/src/services/apps-backup-import.d.ts.map +1 -0
  172. package/dist/src/services/apps-backup-import.js +259 -0
  173. package/dist/src/services/apps-backup-import.js.map +1 -0
  174. package/dist/src/services/component-registrar.d.ts +17 -0
  175. package/dist/src/services/component-registrar.d.ts.map +1 -1
  176. package/dist/src/services/component-registrar.js +63 -5
  177. package/dist/src/services/component-registrar.js.map +1 -1
  178. package/dist/src/services/handbooks/agent.d.ts +1 -1
  179. package/dist/src/services/handbooks/agent.d.ts.map +1 -1
  180. package/dist/src/services/handbooks/agent.js +10 -0
  181. package/dist/src/services/handbooks/agent.js.map +1 -1
  182. package/dist/src/services/handbooks/appdev.d.ts +1 -1
  183. package/dist/src/services/handbooks/appdev.d.ts.map +1 -1
  184. package/dist/src/services/handbooks/appdev.js +5 -2
  185. package/dist/src/services/handbooks/appdev.js.map +1 -1
  186. package/dist/src/services/scheduler.d.ts +6 -0
  187. package/dist/src/services/scheduler.d.ts.map +1 -1
  188. package/dist/src/services/scheduler.js +22 -0
  189. package/dist/src/services/scheduler.js.map +1 -1
  190. package/dist/src/services/schema-validator.d.ts +9 -0
  191. package/dist/src/services/schema-validator.d.ts.map +1 -1
  192. package/dist/src/services/schema-validator.js +16 -0
  193. package/dist/src/services/schema-validator.js.map +1 -1
  194. package/dist/src/services/workflow/engine.d.ts +84 -0
  195. package/dist/src/services/workflow/engine.d.ts.map +1 -0
  196. package/dist/src/services/workflow/engine.js +545 -0
  197. package/dist/src/services/workflow/engine.js.map +1 -0
  198. package/dist/src/services/workflow/eval-context.d.ts +23 -0
  199. package/dist/src/services/workflow/eval-context.d.ts.map +1 -0
  200. package/dist/src/services/workflow/eval-context.js +52 -0
  201. package/dist/src/services/workflow/eval-context.js.map +1 -0
  202. package/dist/src/services/workflow/lifecycle.d.ts +38 -0
  203. package/dist/src/services/workflow/lifecycle.d.ts.map +1 -0
  204. package/dist/src/services/workflow/lifecycle.js +99 -0
  205. package/dist/src/services/workflow/lifecycle.js.map +1 -0
  206. package/dist/src/services/workflow/signal-eval.d.ts +70 -0
  207. package/dist/src/services/workflow/signal-eval.d.ts.map +1 -0
  208. package/dist/src/services/workflow/signal-eval.js +174 -0
  209. package/dist/src/services/workflow/signal-eval.js.map +1 -0
  210. package/dist/src/services/workflow/store.d.ts +89 -0
  211. package/dist/src/services/workflow/store.d.ts.map +1 -0
  212. package/dist/src/services/workflow/store.js +284 -0
  213. package/dist/src/services/workflow/store.js.map +1 -0
  214. package/dist/src/storage/interface.d.ts +13 -3
  215. package/dist/src/storage/interface.d.ts.map +1 -1
  216. package/dist/src/storage/interface.js.map +1 -1
  217. package/dist/src/storage/providers/mongodb/index.d.ts +10 -1
  218. package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
  219. package/dist/src/storage/providers/mongodb/index.js +76 -0
  220. package/dist/src/storage/providers/mongodb/index.js.map +1 -1
  221. package/dist/src/storage/providers/sqlite/index.d.ts +8 -1
  222. package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
  223. package/dist/src/storage/providers/sqlite/index.js +61 -0
  224. package/dist/src/storage/providers/sqlite/index.js.map +1 -1
  225. package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
  226. package/dist/src/storage/providers/sqlite/schema.js +11 -0
  227. package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
  228. package/dist/src/storage/repositories/index.d.ts +1 -0
  229. package/dist/src/storage/repositories/index.d.ts.map +1 -1
  230. package/dist/src/storage/repositories/package.repository.d.ts +2 -0
  231. package/dist/src/storage/repositories/package.repository.d.ts.map +1 -1
  232. package/dist/src/storage/repositories/subdomain-site.repository.d.ts +19 -0
  233. package/dist/src/storage/repositories/subdomain-site.repository.d.ts.map +1 -0
  234. package/dist/src/storage/repositories/subdomain-site.repository.js +2 -0
  235. package/dist/src/storage/repositories/subdomain-site.repository.js.map +1 -0
  236. package/dist/static/app-catalog.html +1139 -28
  237. package/package.json +1 -1
  238. package/prisma/schema.postgres.prisma +11 -0
  239. package/prisma/schema.prisma +11 -0
@@ -0,0 +1,220 @@
1
+ /**
2
+ * @file workflow-schemas.ts
3
+ * @description The shared contract for Agent Workflows — the signal grammar and the workflow
4
+ * descriptor types. A "signal" is a tree evaluated against owner memory (deterministic-first,
5
+ * with a sparingly-used node-OpenRouter `llm` leaf); both an agent's offer (success_signal /
6
+ * required_to_function) and a workflow step build to this same grammar. The deterministic engine
7
+ * is node-owned; the non-deterministic inspector is crew-owned. See
8
+ * docs/plans/2026-06-13-agent-workflows-node-plan.md and the crew spec (dev-organism
9
+ * Development workspace, note doc-mqbukpqskhzq).
10
+ * @structure
11
+ * - LocalizedStringSchema — string | { [locale]: text }
12
+ * - SignalSchema / Signal — the recursive signal grammar (deterministic | llm | all | any | when)
13
+ * - WorkflowVar / WorkflowStep / WorkflowDef / WorkflowRun — descriptor + run-record TS types
14
+ * (Zod validation for the descriptor is added in Phase 3 with the CRUD routes)
15
+ * @usage import { SignalSchema, type Signal } from '../models/workflow-schemas.js';
16
+ * @version-history
17
+ * v1.0.0 — 2026-06-13 — Initial: signal grammar (shared with offers) + descriptor/run types.
18
+ * v1.1.0 — 2026-06-13 — Phase 3: Zod for the descriptor (WorkflowDefInputSchema) — CRUD validation.
19
+ */
20
+ import { z } from 'zod';
21
+ export declare const LocalizedStringSchema: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>;
22
+ export type LocalizedString = z.infer<typeof LocalizedStringSchema>;
23
+ export type DeterministicSignal = {
24
+ kind: 'deterministic';
25
+ key?: string;
26
+ key_glob?: string;
27
+ op: 'exists';
28
+ } | {
29
+ kind: 'deterministic';
30
+ key?: string;
31
+ key_glob?: string;
32
+ op: 'nonempty';
33
+ } | {
34
+ kind: 'deterministic';
35
+ key?: string;
36
+ key_glob?: string;
37
+ op: 'json_valid';
38
+ } | {
39
+ kind: 'deterministic';
40
+ key?: string;
41
+ key_glob?: string;
42
+ op: 'count_nonempty';
43
+ min: number;
44
+ } | {
45
+ kind: 'deterministic';
46
+ key?: string;
47
+ key_glob?: string;
48
+ op: 'json_schema';
49
+ schema: Record<string, unknown>;
50
+ } | {
51
+ kind: 'deterministic';
52
+ key?: string;
53
+ key_glob?: string;
54
+ op: 'json_field';
55
+ path: string;
56
+ min?: number;
57
+ equals?: unknown;
58
+ nonempty?: boolean;
59
+ };
60
+ export type LlmSignal = {
61
+ kind: 'llm';
62
+ key?: string;
63
+ key_glob?: string;
64
+ ask: string;
65
+ };
66
+ export type Signal = DeterministicSignal | LlmSignal | {
67
+ all: Signal[];
68
+ } | {
69
+ any: Signal[];
70
+ } | {
71
+ when: Signal;
72
+ then: Signal;
73
+ };
74
+ export declare const SignalSchema: z.ZodType<Signal>;
75
+ export interface WorkflowVar {
76
+ name: string;
77
+ type: string;
78
+ description: LocalizedString;
79
+ default?: string;
80
+ example?: string;
81
+ }
82
+ export interface WorkflowStep {
83
+ id: string;
84
+ agent: string | string[];
85
+ offer: string;
86
+ after?: string[];
87
+ description: LocalizedString;
88
+ required_to_function?: Signal | 'none';
89
+ success_signal?: Signal;
90
+ retry?: {
91
+ max: number;
92
+ backoff_min: number;
93
+ };
94
+ /** Max minutes to WAIT for this step's success signal before declaring it timed-out. A step may
95
+ * legitimately run for many minutes; this only bounds how long we wait for its output. Default 60. */
96
+ timeout_min?: number;
97
+ }
98
+ export type WorkflowTrigger = {
99
+ kind: 'schedule';
100
+ cron: string;
101
+ timezone?: string;
102
+ } | {
103
+ kind: 'manual';
104
+ } | {
105
+ kind: 'event';
106
+ on: 'memory.write' | 'offer.ordered';
107
+ match: Record<string, string>;
108
+ };
109
+ export interface WorkflowDef {
110
+ id: string;
111
+ title: LocalizedString;
112
+ description: LocalizedString;
113
+ trigger: WorkflowTrigger;
114
+ vars: WorkflowVar[];
115
+ steps: WorkflowStep[];
116
+ on_step_fail: 'inspect';
117
+ llm?: {
118
+ approved: boolean;
119
+ };
120
+ costCapMorsels?: number | null;
121
+ createdBy: string;
122
+ createdAt: string;
123
+ updatedAt: string;
124
+ }
125
+ export type StepState = 'pending' | 'input-red' | 'dispatched' | 'green' | 'output-red' | 'timed-out' | 'skipped';
126
+ export interface WorkflowRunStep {
127
+ state: StepState;
128
+ attempt: number;
129
+ taskIds?: string[];
130
+ inputObserved?: unknown;
131
+ outputObserved?: unknown;
132
+ reads: string[];
133
+ writes: string[];
134
+ startedAt?: string;
135
+ endedAt?: string;
136
+ /** Retry backoff: the engine won't (re-)dispatch this pending step before this ISO time. */
137
+ notBefore?: string;
138
+ }
139
+ /**
140
+ * The effective signals for a step, resolved from its offer AT START TIME and pinned into the run.
141
+ * The engine evaluates against THIS, never re-resolving against current offers mid-run — so editing
142
+ * or deleting an offer while a run is in flight can't silently turn a step's check into a false pass.
143
+ */
144
+ export interface ResolvedStepSignals {
145
+ stepId: string;
146
+ agents: string[];
147
+ offerId: string;
148
+ success_signal?: Signal;
149
+ required_to_function?: Signal | 'none';
150
+ deliverableKey?: string;
151
+ }
152
+ export interface WorkflowRun {
153
+ runId: string;
154
+ workflowId: string;
155
+ defSnapshot: WorkflowDef;
156
+ resolved: ResolvedStepSignals[];
157
+ vars: Record<string, string>;
158
+ mode: 'full-live' | 'full-sandbox' | 'signals-only';
159
+ keyPrefix?: string;
160
+ status: 'running' | 'waiting-step' | 'red' | 'partial' | 'done';
161
+ steps: Record<string, WorkflowRunStep>;
162
+ /** Inspector tasks dispatched on RED steps (best-effort enrichment; the owner push is guaranteed). */
163
+ inspections?: Array<{
164
+ stepId: string;
165
+ taskId: string;
166
+ reason: string;
167
+ at: string;
168
+ }>;
169
+ startedAt: string;
170
+ endedAt?: string;
171
+ }
172
+ /** The accepted PUT body — server fills id (from the URL), createdBy, createdAt, updatedAt. */
173
+ export declare const WorkflowDefInputSchema: z.ZodObject<{
174
+ title: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>;
175
+ description: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>;
176
+ trigger: z.ZodDiscriminatedUnion<[z.ZodObject<{
177
+ kind: z.ZodLiteral<"schedule">;
178
+ cron: z.ZodString;
179
+ timezone: z.ZodOptional<z.ZodString>;
180
+ }, z.core.$strip>, z.ZodObject<{
181
+ kind: z.ZodLiteral<"manual">;
182
+ }, z.core.$strip>, z.ZodObject<{
183
+ kind: z.ZodLiteral<"event">;
184
+ on: z.ZodEnum<{
185
+ "memory.write": "memory.write";
186
+ "offer.ordered": "offer.ordered";
187
+ }>;
188
+ match: z.ZodRecord<z.ZodString, z.ZodString>;
189
+ }, z.core.$strip>], "kind">;
190
+ vars: z.ZodArray<z.ZodObject<{
191
+ name: z.ZodString;
192
+ type: z.ZodString;
193
+ description: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>;
194
+ default: z.ZodOptional<z.ZodString>;
195
+ example: z.ZodOptional<z.ZodString>;
196
+ }, z.core.$strip>>;
197
+ steps: z.ZodArray<z.ZodObject<{
198
+ id: z.ZodString;
199
+ agent: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
200
+ offer: z.ZodString;
201
+ after: z.ZodOptional<z.ZodArray<z.ZodString>>;
202
+ description: z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodString>]>;
203
+ required_to_function: z.ZodOptional<z.ZodUnion<readonly [z.ZodType<Signal, unknown, z.core.$ZodTypeInternals<Signal, unknown>>, z.ZodLiteral<"none">]>>;
204
+ success_signal: z.ZodOptional<z.ZodType<Signal, unknown, z.core.$ZodTypeInternals<Signal, unknown>>>;
205
+ retry: z.ZodOptional<z.ZodObject<{
206
+ max: z.ZodNumber;
207
+ backoff_min: z.ZodNumber;
208
+ }, z.core.$strip>>;
209
+ timeout_min: z.ZodOptional<z.ZodNumber>;
210
+ }, z.core.$strip>>;
211
+ on_step_fail: z.ZodLiteral<"inspect">;
212
+ llm: z.ZodOptional<z.ZodObject<{
213
+ approved: z.ZodBoolean;
214
+ }, z.core.$strip>>;
215
+ costCapMorsels: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
216
+ }, z.core.$strip>;
217
+ export type WorkflowDefInput = z.infer<typeof WorkflowDefInputSchema>;
218
+ /** Workflow id: lowercase slug, used directly in the memory key `workflows.def.<id>`. */
219
+ export declare const WORKFLOW_ID_RE: RegExp;
220
+ //# sourceMappingURL=workflow-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-schemas.d.ts","sourceRoot":"","sources":["../../../src/models/workflow-schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @file workflow-schemas.ts
3
+ * @description The shared contract for Agent Workflows — the signal grammar and the workflow
4
+ * descriptor types. A "signal" is a tree evaluated against owner memory (deterministic-first,
5
+ * with a sparingly-used node-OpenRouter `llm` leaf); both an agent's offer (success_signal /
6
+ * required_to_function) and a workflow step build to this same grammar. The deterministic engine
7
+ * is node-owned; the non-deterministic inspector is crew-owned. See
8
+ * docs/plans/2026-06-13-agent-workflows-node-plan.md and the crew spec (dev-organism
9
+ * Development workspace, note doc-mqbukpqskhzq).
10
+ * @structure
11
+ * - LocalizedStringSchema — string | { [locale]: text }
12
+ * - SignalSchema / Signal — the recursive signal grammar (deterministic | llm | all | any | when)
13
+ * - WorkflowVar / WorkflowStep / WorkflowDef / WorkflowRun — descriptor + run-record TS types
14
+ * (Zod validation for the descriptor is added in Phase 3 with the CRUD routes)
15
+ * @usage import { SignalSchema, type Signal } from '../models/workflow-schemas.js';
16
+ * @version-history
17
+ * v1.0.0 — 2026-06-13 — Initial: signal grammar (shared with offers) + descriptor/run types.
18
+ * v1.1.0 — 2026-06-13 — Phase 3: Zod for the descriptor (WorkflowDefInputSchema) — CRUD validation.
19
+ */
20
+ import { z } from 'zod';
21
+ // ── Localized string ─────────────────────────────────────────────────────────
22
+ // A plain string, or a { locale: text } map (e.g. { en_US: "…", fi_FI: "…" }).
23
+ export const LocalizedStringSchema = z.union([
24
+ z.string().max(2000),
25
+ z.record(z.string().max(20), z.string().max(2000)),
26
+ ]);
27
+ // Common leaf fields — a leaf targets exactly one of key | key_glob (enforced by the evaluator).
28
+ const leafTarget = {
29
+ key: z.string().max(400).optional(),
30
+ key_glob: z.string().max(400).optional(),
31
+ };
32
+ const DeterministicLeafSchema = z.discriminatedUnion('op', [
33
+ z.object({ kind: z.literal('deterministic'), ...leafTarget, op: z.literal('exists') }),
34
+ z.object({ kind: z.literal('deterministic'), ...leafTarget, op: z.literal('nonempty') }),
35
+ z.object({ kind: z.literal('deterministic'), ...leafTarget, op: z.literal('json_valid') }),
36
+ z.object({ kind: z.literal('deterministic'), ...leafTarget, op: z.literal('count_nonempty'), min: z.number().int().nonnegative() }),
37
+ z.object({ kind: z.literal('deterministic'), ...leafTarget, op: z.literal('json_schema'), schema: z.record(z.string(), z.unknown()) }),
38
+ z.object({
39
+ kind: z.literal('deterministic'), ...leafTarget, op: z.literal('json_field'),
40
+ path: z.string().min(1).max(200),
41
+ min: z.number().optional(),
42
+ equals: z.unknown().optional(),
43
+ nonempty: z.boolean().optional(),
44
+ }),
45
+ ]);
46
+ const LlmLeafSchema = z.object({
47
+ kind: z.literal('llm'),
48
+ ...leafTarget,
49
+ ask: z.string().min(1).max(2000),
50
+ });
51
+ // Recursive: composites nest signals. z.lazy breaks the cycle.
52
+ export const SignalSchema = z.lazy(() => z.union([
53
+ DeterministicLeafSchema,
54
+ LlmLeafSchema,
55
+ z.object({ all: z.array(SignalSchema).min(1).max(50) }),
56
+ z.object({ any: z.array(SignalSchema).min(1).max(50) }),
57
+ z.object({ when: SignalSchema, then: SignalSchema }),
58
+ ]));
59
+ // ── Zod for the descriptor (Phase 3 — CRUD validation) ─────────────────────────
60
+ // The PUT body shape: server-managed fields (id from the URL, createdBy + timestamps) are added by
61
+ // the store, not accepted from the client.
62
+ const RetrySchema = z.object({
63
+ max: z.number().int().min(0).max(10),
64
+ backoff_min: z.number().min(0).max(1440),
65
+ });
66
+ const WorkflowVarSchema = z.object({
67
+ name: z.string().min(1).max(80).regex(/^[a-zA-Z0-9_]+$/, 'var name must be [a-zA-Z0-9_]'),
68
+ type: z.string().min(1).max(40),
69
+ description: LocalizedStringSchema,
70
+ default: z.string().max(500).optional(),
71
+ example: z.string().max(500).optional(),
72
+ });
73
+ const WorkflowStepSchema = z.object({
74
+ id: z.string().min(1).max(100),
75
+ agent: z.union([z.string().min(1).max(100), z.array(z.string().min(1).max(100)).min(1).max(20)]),
76
+ offer: z.string().min(1).max(100),
77
+ after: z.array(z.string().min(1).max(100)).max(50).optional(),
78
+ description: LocalizedStringSchema,
79
+ required_to_function: z.union([SignalSchema, z.literal('none')]).optional(),
80
+ success_signal: SignalSchema.optional(),
81
+ retry: RetrySchema.optional(),
82
+ timeout_min: z.number().int().min(1).max(10080).optional(), // minutes to wait for the signal; default 60 (engine), max 7 days
83
+ });
84
+ const WorkflowTriggerSchema = z.discriminatedUnion('kind', [
85
+ z.object({ kind: z.literal('schedule'), cron: z.string().min(1).max(120), timezone: z.string().max(60).optional() }),
86
+ z.object({ kind: z.literal('manual') }),
87
+ z.object({ kind: z.literal('event'), on: z.enum(['memory.write', 'offer.ordered']), match: z.record(z.string().max(120), z.string().max(400)) }),
88
+ ]);
89
+ /** The accepted PUT body — server fills id (from the URL), createdBy, createdAt, updatedAt. */
90
+ export const WorkflowDefInputSchema = z.object({
91
+ title: LocalizedStringSchema,
92
+ description: LocalizedStringSchema,
93
+ trigger: WorkflowTriggerSchema,
94
+ vars: z.array(WorkflowVarSchema).max(30),
95
+ steps: z.array(WorkflowStepSchema).min(1).max(50),
96
+ on_step_fail: z.literal('inspect'),
97
+ llm: z.object({ approved: z.boolean() }).optional(),
98
+ costCapMorsels: z.number().int().nonnegative().nullable().optional(),
99
+ });
100
+ /** Workflow id: lowercase slug, used directly in the memory key `workflows.def.<id>`. */
101
+ export const WORKFLOW_ID_RE = /^[a-z0-9][a-z0-9-]{0,98}[a-z0-9]$/;
102
+ //# sourceMappingURL=workflow-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-schemas.js","sourceRoot":"","sources":["../../../src/models/workflow-schemas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-tasks.d.ts","sourceRoot":"","sources":["../../../src/routes/agent-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAA8E,MAAM,yBAAyB,CAAC;AAYnI,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAsBpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAotCtH"}
1
+ {"version":3,"file":"agent-tasks.d.ts","sourceRoot":"","sources":["../../../src/routes/agent-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAA8E,MAAM,yBAAyB,CAAC;AAcnI,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAEjF,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAsBpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAmwCtH"}
@@ -37,6 +37,8 @@ import { success, error } from '../middleware/envelope.js';
37
37
  import { requireAuth, requireRole, agentNotFoundResponse } from '../auth/middleware.js';
38
38
  import { resolveIdentity, buildGAII } from '../utils/gaii.js';
39
39
  import { emitChange, emitDelivery } from '../services/event-bus.js';
40
+ import { getActiveWorkflowEngine } from '../services/workflow/engine.js';
41
+ import { logger } from '../utils/logger.js';
40
42
  import { emitResourceUpdated } from '../mcp/index.js';
41
43
  import { recordTaskStarted, recordTaskCompleted, recordTaskFailed } from '../services/activity-recorder.js';
42
44
  import { recomputeAndCacheStatistics } from '../services/agent-statistics.js';
@@ -229,6 +231,15 @@ export function agentTasksRouter(config, storage, webhookDispatcher) {
229
231
  { description: 'List events', method: 'GET', url: `/v1/agents/${agentName}/tasks/${id}/events` },
230
232
  ]));
231
233
  emitChange('agent-tasks');
234
+ // Event-triggered workflows: a USER ordering an offer (the offers Ask flow tags the task with an
235
+ // `offer_id` scope) may start a workflow. The workflow engine's OWN dispatched tasks go through
236
+ // storage.createAgentTask directly (NOT this route) and use a different scope, so they don't fire
237
+ // this — only genuine user/agent orders do.
238
+ const orderedOfferId = record.scope?.find((s) => s.name === 'offer_id')?.value;
239
+ if (orderedOfferId) {
240
+ getActiveWorkflowEngine()?.onOfferOrdered(record.ownerGaii, orderedOfferId)
241
+ .catch(e => logger.error('workflow event trigger (offer.ordered) failed', { offerId: orderedOfferId, error: String(e) }));
242
+ }
232
243
  });
233
244
  /* ── GET /v1/agents/:name/tasks -- List tasks for an agent ──
234
245
  *
@@ -915,6 +926,9 @@ export function agentTasksRouter(config, storage, webhookDispatcher) {
915
926
  await recordTaskCompleted(storage, task.agentGaii, task.telemetry);
916
927
  res.json(success(config.nodeId, { task: updated }));
917
928
  emitChange('agent-tasks');
929
+ // If this task was dispatched by a workflow, advance that run (output check → next step).
930
+ getActiveWorkflowEngine()?.onTaskTerminal(task, 'done')
931
+ .catch(e => logger.error('workflow advance on task done failed', { taskId: id, error: String(e) }));
918
932
  });
919
933
  /* ── POST /v1/agents/:name/tasks/:id/fail -- Fail task (active -> failed) ── */
920
934
  router.post('/v1/agents/:name/tasks/:id/fail', requireAuth(), async (req, res) => {
@@ -953,6 +967,8 @@ export function agentTasksRouter(config, storage, webhookDispatcher) {
953
967
  await recordTaskFailed(storage, task.agentGaii);
954
968
  res.json(success(config.nodeId, { task: updated }));
955
969
  emitChange('agent-tasks');
970
+ getActiveWorkflowEngine()?.onTaskTerminal(task, 'failed')
971
+ .catch(e => logger.error('workflow advance on task fail failed', { taskId: id, error: String(e) }));
956
972
  });
957
973
  /* ── POST /v1/agents/:name/tasks/:id/rate -- Review a completed task's deliverable ──
958
974
  *
@@ -1160,6 +1176,39 @@ export function agentTasksRouter(config, storage, webhookDispatcher) {
1160
1176
  per_page: perPage,
1161
1177
  }));
1162
1178
  });
1179
+ /* ── GET /v1/deliverables — the Offers "Inbox": everything that came back, across ALL agents ──
1180
+ * Owner aggregate of non-draft tasks (queued/active/done/failed/…), newest first, with provenance
1181
+ * (agent, status, timestamps), the deliverable key, the verification expectation, and any existing
1182
+ * rating. The follow-up half of the Offers surface — check + rate without clicking through agents.
1183
+ * Failures are included AS failures (status='failed'); rate the deliverable via the locked
1184
+ * POST /v1/agents/:name/tasks/:id/rate. */
1185
+ router.get('/v1/deliverables', requireAuth(), requireRole('owner'), async (req, res) => {
1186
+ const owner = resolve(req);
1187
+ const all = [];
1188
+ for (let p = 1; p <= 10; p++) {
1189
+ const r = await storage.listAgentTasksByOwner(owner, { page: p, perPage: 200 });
1190
+ all.push(...r.tasks);
1191
+ if (r.tasks.length < 200)
1192
+ break;
1193
+ }
1194
+ const deliverables = all
1195
+ .filter(t => t.status !== 'draft')
1196
+ .sort((a, b) => String(b.updatedAt).localeCompare(String(a.updatedAt)))
1197
+ .slice(0, 100)
1198
+ .map(t => ({
1199
+ task_id: t.id,
1200
+ agent: t.agentGaii.split('#')[0],
1201
+ agent_gaii: t.agentGaii, // full GAII so the Inbox can read the agent's memory namespace
1202
+ title: t.title,
1203
+ status: t.status,
1204
+ completed_at: t.completedAt ?? null,
1205
+ updated_at: t.updatedAt,
1206
+ deliverable_key: t.deliverableKey ?? null,
1207
+ verification: t.verification?.userExpects ?? null,
1208
+ rating: t.rating ?? null,
1209
+ }));
1210
+ res.json(success(config.nodeId, { deliverables, total: deliverables.length }));
1211
+ });
1163
1212
  return router;
1164
1213
  }
1165
1214
  //# sourceMappingURL=agent-tasks.js.map