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.
- package/dist/locales/en.json +580 -21
- package/dist/locales/fi.json +592 -33
- package/dist/public/components/ContactCard.js +28 -0
- package/dist/public/css/views/admin.css +12 -0
- package/dist/public/css/views/agents-detail.css +62 -10
- package/dist/public/css/views/landing.css +87 -0
- package/dist/public/css/views/offers.css +96 -0
- package/dist/public/css/views/portfolio.css +18 -0
- package/dist/public/css/views/profile.css +153 -8
- package/dist/public/css/views/start.css +96 -0
- package/dist/public/css/views/workflows.css +111 -0
- package/dist/public/img/business-hero.png +0 -0
- package/dist/public/img/toimitus.png +0 -0
- package/dist/public/js/components/tag-cloud.js +46 -31
- package/dist/public/js/components/tag-editor.js +2 -2
- package/dist/public/js/recents.js +40 -0
- package/dist/public/js/services/admin.js +6 -0
- package/dist/public/js/services/agents.js +34 -0
- package/dist/public/js/services/offers.js +152 -0
- package/dist/public/js/services/packages.js +1 -0
- package/dist/public/js/services/workflows.js +57 -0
- package/dist/public/llms-template.txt +7 -0
- package/dist/public/spa.html +35 -3
- package/dist/public/views/admin/subdomains-tab.js +182 -0
- package/dist/public/views/admin.js +2 -0
- package/dist/public/views/business.js +119 -0
- package/dist/public/views/how-it-works.js +159 -0
- package/dist/public/views/landing.js +235 -0
- package/dist/public/views/portfolio.js +120 -23
- package/dist/public/views/pricing.js +75 -0
- package/dist/public/views/profile/access-tab.js +124 -51
- package/dist/public/views/profile/agents/agent-card.js +68 -37
- package/dist/public/views/profile/agents/shared-board.js +56 -22
- package/dist/public/views/profile/agents/tab-activity.js +24 -12
- package/dist/public/views/profile/agents/tab-agent-config.js +31 -1
- package/dist/public/views/profile/agents/tab-data-access.js +9 -13
- package/dist/public/views/profile/agents/tab-integration.js +27 -1
- package/dist/public/views/profile/agents/tab-messages.js +6 -11
- package/dist/public/views/profile/agents/tab-quality.js +45 -5
- package/dist/public/views/profile/agents-tab.js +41 -6
- package/dist/public/views/profile/apps-tab.js +7 -1
- package/dist/public/views/profile/knowledge-tab.js +4 -1
- package/dist/public/views/profile/landing-page.js +428 -123
- package/dist/public/views/profile/memory-tab.js +409 -211
- package/dist/public/views/profile/nodes-tab.js +18 -3
- package/dist/public/views/profile/offers-tab.js +310 -0
- package/dist/public/views/profile/organisms-tab.js +289 -28
- package/dist/public/views/profile/packages-tab.js +152 -16
- package/dist/public/views/profile/portfolio-tab.js +98 -31
- package/dist/public/views/profile/workflows-form.js +220 -0
- package/dist/public/views/profile/workflows-tab.js +244 -0
- package/dist/public/views/profile.js +4 -0
- package/dist/public/views/start-flows.js +281 -0
- package/dist/public/views/start.js +258 -0
- package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/index.js +2 -0
- package/dist/src/cli/connect/mcp/tools/index.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/workflows.d.ts +12 -0
- package/dist/src/cli/connect/mcp/tools/workflows.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/workflows.js +37 -0
- package/dist/src/cli/connect/mcp/tools/workflows.js.map +1 -0
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +37 -0
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +1474 -66
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/generated/prisma-postgres/edge.js +15 -3
- package/dist/src/generated/prisma-postgres/index-browser.js +12 -0
- package/dist/src/generated/prisma-postgres/index.d.ts +1476 -160
- package/dist/src/generated/prisma-postgres/index.js +15 -3
- package/dist/src/generated/prisma-postgres/package.json +1 -1
- package/dist/src/generated/prisma-postgres/schema.prisma +11 -0
- package/dist/src/generated/prisma-postgres/wasm.js +15 -3
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +3 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/catalog/definitions.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions.js +27 -0
- package/dist/src/mcp/catalog/definitions.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +5 -1
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +1 -0
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +2 -0
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/workflows.d.ts +18 -0
- package/dist/src/mcp/workflows.d.ts.map +1 -0
- package/dist/src/mcp/workflows.js +68 -0
- package/dist/src/mcp/workflows.js.map +1 -0
- package/dist/src/middleware/subdomain.d.ts +28 -0
- package/dist/src/middleware/subdomain.d.ts.map +1 -0
- package/dist/src/middleware/subdomain.js +32 -0
- package/dist/src/middleware/subdomain.js.map +1 -0
- package/dist/src/models/offer-schemas.d.ts +236 -0
- package/dist/src/models/offer-schemas.d.ts.map +1 -0
- package/dist/src/models/offer-schemas.js +112 -0
- package/dist/src/models/offer-schemas.js.map +1 -0
- package/dist/src/models/workflow-schemas.d.ts +220 -0
- package/dist/src/models/workflow-schemas.d.ts.map +1 -0
- package/dist/src/models/workflow-schemas.js +102 -0
- package/dist/src/models/workflow-schemas.js.map +1 -0
- package/dist/src/routes/agent-tasks.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks.js +49 -0
- package/dist/src/routes/agent-tasks.js.map +1 -1
- package/dist/src/routes/agents.d.ts.map +1 -1
- package/dist/src/routes/agents.js +146 -1
- package/dist/src/routes/agents.js.map +1 -1
- package/dist/src/routes/apps-backup.d.ts +20 -0
- package/dist/src/routes/apps-backup.d.ts.map +1 -0
- package/dist/src/routes/apps-backup.js +165 -0
- package/dist/src/routes/apps-backup.js.map +1 -0
- package/dist/src/routes/ghii.d.ts.map +1 -1
- package/dist/src/routes/ghii.js +4 -0
- package/dist/src/routes/ghii.js.map +1 -1
- package/dist/src/routes/instances.d.ts +2 -1
- package/dist/src/routes/instances.d.ts.map +1 -1
- package/dist/src/routes/instances.js +59 -1
- package/dist/src/routes/instances.js.map +1 -1
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +5 -0
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/packages.d.ts.map +1 -1
- package/dist/src/routes/packages.js +32 -0
- package/dist/src/routes/packages.js.map +1 -1
- package/dist/src/routes/permissions.d.ts +12 -0
- package/dist/src/routes/permissions.d.ts.map +1 -1
- package/dist/src/routes/permissions.js +35 -3
- package/dist/src/routes/permissions.js.map +1 -1
- package/dist/src/routes/portal.d.ts +3 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +12 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/public-stats.d.ts +15 -0
- package/dist/src/routes/public-stats.d.ts.map +1 -0
- package/dist/src/routes/public-stats.js +90 -0
- package/dist/src/routes/public-stats.js.map +1 -0
- package/dist/src/routes/sse.d.ts +7 -2
- package/dist/src/routes/sse.d.ts.map +1 -1
- package/dist/src/routes/sse.js +35 -5
- package/dist/src/routes/sse.js.map +1 -1
- package/dist/src/routes/stats.d.ts.map +1 -1
- package/dist/src/routes/stats.js +13 -0
- package/dist/src/routes/stats.js.map +1 -1
- package/dist/src/routes/subdomains.d.ts +33 -0
- package/dist/src/routes/subdomains.d.ts.map +1 -0
- package/dist/src/routes/subdomains.js +208 -0
- package/dist/src/routes/subdomains.js.map +1 -0
- package/dist/src/routes/workflows.d.ts +30 -0
- package/dist/src/routes/workflows.d.ts.map +1 -0
- package/dist/src/routes/workflows.js +178 -0
- package/dist/src/routes/workflows.js.map +1 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +19 -2
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts +2 -0
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +6 -0
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +5 -0
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/apps-backup-export.d.ts +22 -0
- package/dist/src/services/apps-backup-export.d.ts.map +1 -0
- package/dist/src/services/apps-backup-export.js +136 -0
- package/dist/src/services/apps-backup-export.js.map +1 -0
- package/dist/src/services/apps-backup-import.d.ts +120 -0
- package/dist/src/services/apps-backup-import.d.ts.map +1 -0
- package/dist/src/services/apps-backup-import.js +259 -0
- package/dist/src/services/apps-backup-import.js.map +1 -0
- package/dist/src/services/component-registrar.d.ts +17 -0
- package/dist/src/services/component-registrar.d.ts.map +1 -1
- package/dist/src/services/component-registrar.js +63 -5
- package/dist/src/services/component-registrar.js.map +1 -1
- package/dist/src/services/handbooks/agent.d.ts +1 -1
- package/dist/src/services/handbooks/agent.d.ts.map +1 -1
- package/dist/src/services/handbooks/agent.js +10 -0
- package/dist/src/services/handbooks/agent.js.map +1 -1
- package/dist/src/services/handbooks/appdev.d.ts +1 -1
- package/dist/src/services/handbooks/appdev.d.ts.map +1 -1
- package/dist/src/services/handbooks/appdev.js +5 -2
- package/dist/src/services/handbooks/appdev.js.map +1 -1
- package/dist/src/services/scheduler.d.ts +6 -0
- package/dist/src/services/scheduler.d.ts.map +1 -1
- package/dist/src/services/scheduler.js +22 -0
- package/dist/src/services/scheduler.js.map +1 -1
- package/dist/src/services/schema-validator.d.ts +9 -0
- package/dist/src/services/schema-validator.d.ts.map +1 -1
- package/dist/src/services/schema-validator.js +16 -0
- package/dist/src/services/schema-validator.js.map +1 -1
- package/dist/src/services/workflow/engine.d.ts +84 -0
- package/dist/src/services/workflow/engine.d.ts.map +1 -0
- package/dist/src/services/workflow/engine.js +545 -0
- package/dist/src/services/workflow/engine.js.map +1 -0
- package/dist/src/services/workflow/eval-context.d.ts +23 -0
- package/dist/src/services/workflow/eval-context.d.ts.map +1 -0
- package/dist/src/services/workflow/eval-context.js +52 -0
- package/dist/src/services/workflow/eval-context.js.map +1 -0
- package/dist/src/services/workflow/lifecycle.d.ts +38 -0
- package/dist/src/services/workflow/lifecycle.d.ts.map +1 -0
- package/dist/src/services/workflow/lifecycle.js +99 -0
- package/dist/src/services/workflow/lifecycle.js.map +1 -0
- package/dist/src/services/workflow/signal-eval.d.ts +70 -0
- package/dist/src/services/workflow/signal-eval.d.ts.map +1 -0
- package/dist/src/services/workflow/signal-eval.js +174 -0
- package/dist/src/services/workflow/signal-eval.js.map +1 -0
- package/dist/src/services/workflow/store.d.ts +89 -0
- package/dist/src/services/workflow/store.d.ts.map +1 -0
- package/dist/src/services/workflow/store.js +284 -0
- package/dist/src/services/workflow/store.js.map +1 -0
- package/dist/src/storage/interface.d.ts +13 -3
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/interface.js.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +10 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +76 -0
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +8 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +61 -0
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +11 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/index.d.ts +1 -0
- package/dist/src/storage/repositories/index.d.ts.map +1 -1
- package/dist/src/storage/repositories/package.repository.d.ts +2 -0
- package/dist/src/storage/repositories/package.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/subdomain-site.repository.d.ts +19 -0
- package/dist/src/storage/repositories/subdomain-site.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/subdomain-site.repository.js +2 -0
- package/dist/src/storage/repositories/subdomain-site.repository.js.map +1 -0
- package/dist/static/app-catalog.html +1139 -28
- package/package.json +1 -1
- package/prisma/schema.postgres.prisma +11 -0
- 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":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,qBAAqB,2EAGhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAQpE,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,UAAU,CAAA;CAAE,GAC1E;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAC7F;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC9G;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEnJ,MAAM,MAAM,SAAS,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,MAAM,MAAM,MAAM,GACd,mBAAmB,GACnB,SAAS,GACT;IAAE,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,GACjB;IAAE,GAAG,EAAE,MAAM,EAAE,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA8BnC,eAAO,MAAM,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAQrB,CAAC;AAKvB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,eAAe,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,eAAe,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C;2GACuG;IACvG,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,cAAc,GAAG,eAAe,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAE3F,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,eAAe,CAAC;IACvB,WAAW,EAAE,eAAe,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,EAAE,SAAS,CAAC;IACxB,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,SAAS,GACjB,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,IAAI,EAAE,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,cAAc,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IAChE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvC,sGAAsG;IACtG,WAAW,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqCD,+FAA+F;AAC/F,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASjC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,yFAAyF;AACzF,eAAO,MAAM,cAAc,QAAsC,CAAC"}
|
|
@@ -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;
|
|
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
|