aimeat 1.23.3 → 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 (108) hide show
  1. package/dist/locales/en.json +44 -0
  2. package/dist/locales/fi.json +44 -0
  3. package/dist/public/css/views/workflows.css +111 -0
  4. package/dist/public/js/services/workflows.js +57 -0
  5. package/dist/public/llms-template.txt +7 -0
  6. package/dist/public/spa.html +3 -1
  7. package/dist/public/views/profile/landing-page.js +1 -0
  8. package/dist/public/views/profile/workflows-form.js +220 -0
  9. package/dist/public/views/profile/workflows-tab.js +244 -0
  10. package/dist/public/views/profile.js +2 -0
  11. package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
  12. package/dist/src/cli/connect/mcp/tools/index.js +2 -0
  13. package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
  14. package/dist/src/cli/connect/mcp/tools/workflows.d.ts +12 -0
  15. package/dist/src/cli/connect/mcp/tools/workflows.d.ts.map +1 -0
  16. package/dist/src/cli/connect/mcp/tools/workflows.js +37 -0
  17. package/dist/src/cli/connect/mcp/tools/workflows.js.map +1 -0
  18. package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
  19. package/dist/src/cli/connect/tool-call.js +37 -0
  20. package/dist/src/cli/connect/tool-call.js.map +1 -1
  21. package/dist/src/generated/api-types.d.ts +569 -0
  22. package/dist/src/generated/api-types.d.ts.map +1 -1
  23. package/dist/src/mcp/annotations.d.ts.map +1 -1
  24. package/dist/src/mcp/annotations.js +3 -0
  25. package/dist/src/mcp/annotations.js.map +1 -1
  26. package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
  27. package/dist/src/mcp/catalog/definitions.js +27 -0
  28. package/dist/src/mcp/catalog/definitions.js.map +1 -1
  29. package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
  30. package/dist/src/mcp/catalog/scopes.js +5 -1
  31. package/dist/src/mcp/catalog/scopes.js.map +1 -1
  32. package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
  33. package/dist/src/mcp/catalog/surfaces.js +1 -0
  34. package/dist/src/mcp/catalog/surfaces.js.map +1 -1
  35. package/dist/src/mcp/index.d.ts.map +1 -1
  36. package/dist/src/mcp/index.js +2 -0
  37. package/dist/src/mcp/index.js.map +1 -1
  38. package/dist/src/mcp/workflows.d.ts +18 -0
  39. package/dist/src/mcp/workflows.d.ts.map +1 -0
  40. package/dist/src/mcp/workflows.js +68 -0
  41. package/dist/src/mcp/workflows.js.map +1 -0
  42. package/dist/src/models/offer-schemas.d.ts +7 -0
  43. package/dist/src/models/offer-schemas.d.ts.map +1 -1
  44. package/dist/src/models/offer-schemas.js +12 -0
  45. package/dist/src/models/offer-schemas.js.map +1 -1
  46. package/dist/src/models/workflow-schemas.d.ts +220 -0
  47. package/dist/src/models/workflow-schemas.d.ts.map +1 -0
  48. package/dist/src/models/workflow-schemas.js +102 -0
  49. package/dist/src/models/workflow-schemas.js.map +1 -0
  50. package/dist/src/routes/agent-tasks.d.ts.map +1 -1
  51. package/dist/src/routes/agent-tasks.js +16 -0
  52. package/dist/src/routes/agent-tasks.js.map +1 -1
  53. package/dist/src/routes/memory.d.ts.map +1 -1
  54. package/dist/src/routes/memory.js +5 -0
  55. package/dist/src/routes/memory.js.map +1 -1
  56. package/dist/src/routes/stats.d.ts.map +1 -1
  57. package/dist/src/routes/stats.js +13 -0
  58. package/dist/src/routes/stats.js.map +1 -1
  59. package/dist/src/routes/workflows.d.ts +30 -0
  60. package/dist/src/routes/workflows.d.ts.map +1 -0
  61. package/dist/src/routes/workflows.js +178 -0
  62. package/dist/src/routes/workflows.js.map +1 -0
  63. package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
  64. package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
  65. package/dist/src/server-bootstrap/routes-loader.js +7 -1
  66. package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
  67. package/dist/src/server-bootstrap/service-init.d.ts +2 -0
  68. package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
  69. package/dist/src/server-bootstrap/service-init.js +6 -0
  70. package/dist/src/server-bootstrap/service-init.js.map +1 -1
  71. package/dist/src/server.d.ts.map +1 -1
  72. package/dist/src/server.js +1 -0
  73. package/dist/src/server.js.map +1 -1
  74. package/dist/src/services/handbooks/agent.d.ts +1 -1
  75. package/dist/src/services/handbooks/agent.d.ts.map +1 -1
  76. package/dist/src/services/handbooks/agent.js +10 -0
  77. package/dist/src/services/handbooks/agent.js.map +1 -1
  78. package/dist/src/services/scheduler.d.ts +6 -0
  79. package/dist/src/services/scheduler.d.ts.map +1 -1
  80. package/dist/src/services/scheduler.js +22 -0
  81. package/dist/src/services/scheduler.js.map +1 -1
  82. package/dist/src/services/schema-validator.d.ts +9 -0
  83. package/dist/src/services/schema-validator.d.ts.map +1 -1
  84. package/dist/src/services/schema-validator.js +16 -0
  85. package/dist/src/services/schema-validator.js.map +1 -1
  86. package/dist/src/services/workflow/engine.d.ts +84 -0
  87. package/dist/src/services/workflow/engine.d.ts.map +1 -0
  88. package/dist/src/services/workflow/engine.js +545 -0
  89. package/dist/src/services/workflow/engine.js.map +1 -0
  90. package/dist/src/services/workflow/eval-context.d.ts +23 -0
  91. package/dist/src/services/workflow/eval-context.d.ts.map +1 -0
  92. package/dist/src/services/workflow/eval-context.js +52 -0
  93. package/dist/src/services/workflow/eval-context.js.map +1 -0
  94. package/dist/src/services/workflow/lifecycle.d.ts +38 -0
  95. package/dist/src/services/workflow/lifecycle.d.ts.map +1 -0
  96. package/dist/src/services/workflow/lifecycle.js +99 -0
  97. package/dist/src/services/workflow/lifecycle.js.map +1 -0
  98. package/dist/src/services/workflow/signal-eval.d.ts +70 -0
  99. package/dist/src/services/workflow/signal-eval.d.ts.map +1 -0
  100. package/dist/src/services/workflow/signal-eval.js +174 -0
  101. package/dist/src/services/workflow/signal-eval.js.map +1 -0
  102. package/dist/src/services/workflow/store.d.ts +89 -0
  103. package/dist/src/services/workflow/store.d.ts.map +1 -0
  104. package/dist/src/services/workflow/store.js +284 -0
  105. package/dist/src/services/workflow/store.js.map +1 -0
  106. package/dist/src/storage/interface.d.ts +2 -2
  107. package/dist/src/storage/interface.d.ts.map +1 -1
  108. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ import { z } from 'zod';
2
+ import { annotationsFor } from './annotations.js';
3
+ import { descriptionFor } from './catalog/shape.js';
4
+ import { parseGAII } from '../utils/gaii.js';
5
+ import { getActiveScheduler } from '../services/scheduler.js';
6
+ import { getActiveWorkflowEngine } from '../services/workflow/engine.js';
7
+ import { saveWorkflow, getWorkflow, listWorkflows, listRuns, validateWorkflow, buildBlueprint, } from '../services/workflow/store.js';
8
+ import { syncWorkflowTriggers } from '../services/workflow/lifecycle.js';
9
+ export function registerWorkflowTools(mcp, storage, config, getAgentGaii) {
10
+ const agentGaii = getAgentGaii();
11
+ const owner = parseGAII(agentGaii)?.owner ?? '';
12
+ const ownerGhii = `${owner}@${config.nodeId}`;
13
+ const text = (data) => ({ content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] });
14
+ const err = (msg) => ({ content: [{ type: 'text', text: msg }], isError: true });
15
+ // ── aimeat_workflow_save ──
16
+ mcp.tool('aimeat_workflow_save', descriptionFor('aimeat_workflow_save'), {
17
+ id: z.string().describe('Workflow id (lowercase slug). Creating with an existing id updates it.'),
18
+ definition: z.record(z.string(), z.unknown()).describe('The workflow descriptor: { title, description (both localized string | {locale:text}), trigger {kind:"schedule"|"manual"|"event", cron?, timezone?, on?, match?}, vars[], steps[{id, agent, offer, after?, description, required_to_function?, success_signal?, retry?, timeout_min}], on_step_fail:"inspect", llm?{approved} }. Signals/deliverable.location are inherited from each step\'s offer; a step using an `llm` signal leaf requires llm.approved=true. Rejected if the graph is not a DAG or an offer is not workflow-compatible.'),
19
+ }, annotationsFor('aimeat_workflow_save'), async (a) => {
20
+ if (!owner)
21
+ return err('Could not resolve caller owner');
22
+ const result = await saveWorkflow(storage, config, ownerGhii, owner, a.id, a.definition, agentGaii);
23
+ if (!result.ok)
24
+ return err(`Validation failed:\n- ${(result.errors ?? []).join('\n- ')}`);
25
+ const scheduler = getActiveScheduler();
26
+ if (scheduler)
27
+ await syncWorkflowTriggers(storage, scheduler, config.nodeId, result.def, ownerGhii, agentGaii);
28
+ return text({ saved: true, id: a.id, trigger: result.def.trigger.kind, steps: result.def.steps.length });
29
+ });
30
+ // ── aimeat_workflow_get ──
31
+ mcp.tool('aimeat_workflow_get', descriptionFor('aimeat_workflow_get'), {
32
+ id: z.string().optional().describe('Omit to list all your workflows; pass an id for its definition + derived blueprint + recent runs.'),
33
+ }, annotationsFor('aimeat_workflow_get'), async (a) => {
34
+ if (!a.id) {
35
+ const defs = await listWorkflows(storage, ownerGhii);
36
+ return text({ workflows: defs.map(d => ({ id: d.id, trigger: d.trigger.kind, steps: d.steps.length })), count: defs.length });
37
+ }
38
+ const def = await getWorkflow(storage, ownerGhii, a.id);
39
+ if (!def)
40
+ return err(`Workflow "${a.id}" not found`);
41
+ const v = await validateWorkflow(storage, config, owner, def);
42
+ const blueprint = v.ok && v.resolved ? buildBlueprint(def, v.resolved) : { stale: true, errors: v.errors };
43
+ const runs = (await listRuns(storage, ownerGhii, a.id)).slice(0, 5)
44
+ .map(r => ({ runId: r.runId, status: r.status, mode: r.mode, startedAt: r.startedAt }));
45
+ return text({ definition: def, blueprint, recentRuns: runs });
46
+ });
47
+ // ── aimeat_workflow_run ──
48
+ mcp.tool('aimeat_workflow_run', descriptionFor('aimeat_workflow_run'), {
49
+ id: z.string().describe('The workflow id.'),
50
+ mode: z.enum(['signals-only', 'full']).describe('signals-only = evaluate every step\'s signals against existing memory (no dispatch — an instant health check); full = execute the steps live.'),
51
+ }, annotationsFor('aimeat_workflow_run'), async (a) => {
52
+ const engine = getActiveWorkflowEngine();
53
+ if (!engine)
54
+ return err('Workflow engine not started');
55
+ const result = await engine.startRun(ownerGhii, owner, a.id, { mode: a.mode === 'full' ? 'full-live' : 'signals-only' });
56
+ if ('error' in result)
57
+ return err(`Could not start run:\n- ${result.error.join('\n- ')}`);
58
+ // For signals-only the run completes synchronously — return the per-step verdicts inline.
59
+ if (a.mode === 'signals-only') {
60
+ const runs = await listRuns(storage, ownerGhii, a.id);
61
+ const run = runs.find(r => r.runId === result.runId);
62
+ const steps = run ? Object.fromEntries(Object.entries(run.steps).map(([k, s]) => [k, s.state])) : {};
63
+ return text({ runId: result.runId, status: run?.status, steps });
64
+ }
65
+ return text({ runId: result.runId, mode: 'full', note: 'Dispatched; poll aimeat_workflow_get for run status.' });
66
+ });
67
+ }
68
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../../src/mcp/workflows.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,9 @@
18
18
  * different owner invokes it. `visibility:'public'` lists it in the catalogue; `callable` binds it
19
19
  * to a machine-invocable action/webhook. All v2 fields optional → v1 docs validate unchanged.
20
20
  * See docs/plans/2026-06-12-services-to-offers-migration.md.
21
+ * v2.1.0 -- 2026-06-13 -- Agent Workflows: optional `success_signal` + `required_to_function`
22
+ * (the producer/consumer signal contract a workflow step inherits). Both optional → existing
23
+ * offer docs validate unchanged. See docs/plans/2026-06-13-agent-workflows-node-plan.md.
21
24
  */
22
25
  import { z } from 'zod';
23
26
  export declare const OfferSchema: z.ZodObject<{
@@ -100,6 +103,8 @@ export declare const OfferSchema: z.ZodObject<{
100
103
  }, z.core.$strip>>;
101
104
  sample: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodLiteral<"untested">]>>;
102
105
  }, z.core.$strip>;
106
+ success_signal: z.ZodOptional<z.ZodType<import("./workflow-schemas.js").Signal, unknown, z.core.$ZodTypeInternals<import("./workflow-schemas.js").Signal, unknown>>>;
107
+ required_to_function: z.ZodOptional<z.ZodType<import("./workflow-schemas.js").Signal, unknown, z.core.$ZodTypeInternals<import("./workflow-schemas.js").Signal, unknown>>>;
103
108
  price: z.ZodOptional<z.ZodNullable<z.ZodObject<{
104
109
  morsels: z.ZodNumber;
105
110
  unit: z.ZodOptional<z.ZodEnum<{
@@ -203,6 +208,8 @@ export declare const OffersDocSchema: z.ZodObject<{
203
208
  }, z.core.$strip>>;
204
209
  sample: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodLiteral<"untested">]>>;
205
210
  }, z.core.$strip>;
211
+ success_signal: z.ZodOptional<z.ZodType<import("./workflow-schemas.js").Signal, unknown, z.core.$ZodTypeInternals<import("./workflow-schemas.js").Signal, unknown>>>;
212
+ required_to_function: z.ZodOptional<z.ZodType<import("./workflow-schemas.js").Signal, unknown, z.core.$ZodTypeInternals<import("./workflow-schemas.js").Signal, unknown>>>;
206
213
  price: z.ZodOptional<z.ZodNullable<z.ZodObject<{
207
214
  morsels: z.ZodNumber;
208
215
  unit: z.ZodOptional<z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"offer-schemas.d.ts","sourceRoot":"","sources":["../../../src/models/offer-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2DxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoBtB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI1B,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"offer-schemas.d.ts","sourceRoot":"","sources":["../../../src/models/offer-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4DxB,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4BtB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI1B,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -18,8 +18,12 @@
18
18
  * different owner invokes it. `visibility:'public'` lists it in the catalogue; `callable` binds it
19
19
  * to a machine-invocable action/webhook. All v2 fields optional → v1 docs validate unchanged.
20
20
  * See docs/plans/2026-06-12-services-to-offers-migration.md.
21
+ * v2.1.0 -- 2026-06-13 -- Agent Workflows: optional `success_signal` + `required_to_function`
22
+ * (the producer/consumer signal contract a workflow step inherits). Both optional → existing
23
+ * offer docs validate unchanged. See docs/plans/2026-06-13-agent-workflows-node-plan.md.
21
24
  */
22
25
  import { z } from 'zod';
26
+ import { SignalSchema } from './workflow-schemas.js';
23
27
  // ── v2: billable / listable / callable ──────────────────────────────────────
24
28
  // Concrete morsel price for cross-owner invocation. `null`/absent = not for sale (self-use only).
25
29
  // Distinct from the qualitative `cost` ('free'|'cheap'|'expensive') hint, which stays for goal-search.
@@ -87,6 +91,14 @@ export const OfferSchema = z.object({
87
91
  inputs: z.array(z.object({ name: z.string().max(80), required: z.boolean().optional() })).max(20).optional(),
88
92
  consequences: z.array(ConsequenceSchema).max(20).optional(),
89
93
  deliverable: DeliverableSchema,
94
+ // ── Workflow signals (Agent Workflows; all optional → v1/v2 docs validate unchanged) ──
95
+ // The producer contract ("my output is OK") and the consumer precondition ("the input I need to
96
+ // start"). A workflow step naming this agent+offer inherits these as its success_signal /
97
+ // required_to_function defaults (overridable per step). An agent is "workflow-compatible" exactly
98
+ // when its offer declares these + deliverable.location. See
99
+ // docs/plans/2026-06-13-agent-workflows-node-plan.md §5.
100
+ success_signal: SignalSchema.optional(),
101
+ required_to_function: SignalSchema.optional(),
90
102
  // ── v2 billable/listable/callable (all optional; default to private, not-for-sale, human-driven) ──
91
103
  price: PriceSchema.optional(),
92
104
  visibility: z.enum(['private', 'unlisted', 'public']).optional(), // default 'private' at read/list time
@@ -1 +1 @@
1
- {"version":3,"file":"offer-schemas.js","sourceRoot":"","sources":["../../../src/models/offer-schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"offer-schemas.js","sourceRoot":"","sources":["../../../src/models/offer-schemas.ts"],"names":[],"mappings":"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"}
@@ -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,CAqvCtH"}
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
  *