botmux 2.33.0 → 2.33.1
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/README.en.md +12 -1
- package/README.md +45 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +11 -0
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/cli/bots-list-output.d.ts +21 -0
- package/dist/cli/bots-list-output.d.ts.map +1 -0
- package/dist/cli/bots-list-output.js +23 -0
- package/dist/cli/bots-list-output.js.map +1 -0
- package/dist/cli/workflow.d.ts +13 -0
- package/dist/cli/workflow.d.ts.map +1 -0
- package/dist/cli/workflow.js +781 -0
- package/dist/cli/workflow.js.map +1 -0
- package/dist/cli.js +69 -14
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +211 -4
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/session-manager.d.ts +6 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +22 -12
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/worker-pool.d.ts +13 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +100 -6
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +3 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +884 -3
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +36 -0
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +22 -0
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/web/app.js +20 -1
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +356 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/workflow-catalog.d.ts +2 -0
- package/dist/dashboard/web/workflow-catalog.d.ts.map +1 -0
- package/dist/dashboard/web/workflow-catalog.js +323 -0
- package/dist/dashboard/web/workflow-catalog.js.map +1 -0
- package/dist/dashboard/web/workflows.d.ts +2 -0
- package/dist/dashboard/web/workflows.d.ts.map +1 -0
- package/dist/dashboard/web/workflows.js +1618 -0
- package/dist/dashboard/web/workflows.js.map +1 -0
- package/dist/dashboard/workflow-api.d.ts +23 -0
- package/dist/dashboard/workflow-api.d.ts.map +1 -0
- package/dist/dashboard/workflow-api.js +463 -0
- package/dist/dashboard/workflow-api.js.map +1 -0
- package/dist/dashboard-web/app.js +494 -199
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard-web/style.css +160 -6
- package/dist/dashboard-web/terminal-replay.html +227 -0
- package/dist/dashboard.js +29 -12
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +12 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +12 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +3 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +27 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +19 -2
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +21 -2
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/workflow-card-handler.d.ts +50 -0
- package/dist/im/lark/workflow-card-handler.d.ts.map +1 -0
- package/dist/im/lark/workflow-card-handler.js +152 -0
- package/dist/im/lark/workflow-card-handler.js.map +1 -0
- package/dist/im/lark/workflow-cards.d.ts +46 -0
- package/dist/im/lark/workflow-cards.d.ts.map +1 -0
- package/dist/im/lark/workflow-cards.js +226 -0
- package/dist/im/lark/workflow-cards.js.map +1 -0
- package/dist/im/lark/workflow-progress-card.d.ts +76 -0
- package/dist/im/lark/workflow-progress-card.d.ts.map +1 -0
- package/dist/im/lark/workflow-progress-card.js +279 -0
- package/dist/im/lark/workflow-progress-card.js.map +1 -0
- package/dist/im/lark/workflow-slash-command.d.ts +92 -0
- package/dist/im/lark/workflow-slash-command.d.ts.map +1 -0
- package/dist/im/lark/workflow-slash-command.js +185 -0
- package/dist/im/lark/workflow-slash-command.js.map +1 -0
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +17 -4
- package/dist/services/group-creator.js.map +1 -1
- package/dist/services/groups-store.d.ts +11 -0
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +26 -0
- package/dist/services/groups-store.js.map +1 -1
- package/dist/services/jsonl-cursor.d.ts +12 -0
- package/dist/services/jsonl-cursor.d.ts.map +1 -0
- package/dist/services/jsonl-cursor.js +45 -0
- package/dist/services/jsonl-cursor.js.map +1 -0
- package/dist/services/schedule-store.d.ts +35 -0
- package/dist/services/schedule-store.d.ts.map +1 -1
- package/dist/services/schedule-store.js +108 -1
- package/dist/services/schedule-store.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +399 -0
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +4 -0
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/worker.js +118 -14
- package/dist/worker.js.map +1 -1
- package/dist/workflows/attempt-resume.d.ts +114 -0
- package/dist/workflows/attempt-resume.d.ts.map +1 -0
- package/dist/workflows/attempt-resume.js +385 -0
- package/dist/workflows/attempt-resume.js.map +1 -0
- package/dist/workflows/attempt-terminal.d.ts +21 -0
- package/dist/workflows/attempt-terminal.d.ts.map +1 -0
- package/dist/workflows/attempt-terminal.js +7 -0
- package/dist/workflows/attempt-terminal.js.map +1 -0
- package/dist/workflows/blob.d.ts +27 -0
- package/dist/workflows/blob.d.ts.map +1 -0
- package/dist/workflows/blob.js +39 -0
- package/dist/workflows/blob.js.map +1 -0
- package/dist/workflows/cancel-run.d.ts +45 -0
- package/dist/workflows/cancel-run.d.ts.map +1 -0
- package/dist/workflows/cancel-run.js +99 -0
- package/dist/workflows/cancel-run.js.map +1 -0
- package/dist/workflows/cancel.d.ts +111 -0
- package/dist/workflows/cancel.d.ts.map +1 -0
- package/dist/workflows/cancel.js +120 -0
- package/dist/workflows/cancel.js.map +1 -0
- package/dist/workflows/catalog.d.ts +60 -0
- package/dist/workflows/catalog.d.ts.map +1 -0
- package/dist/workflows/catalog.js +119 -0
- package/dist/workflows/catalog.js.map +1 -0
- package/dist/workflows/cold-attach.d.ts +30 -0
- package/dist/workflows/cold-attach.d.ts.map +1 -0
- package/dist/workflows/cold-attach.js +40 -0
- package/dist/workflows/cold-attach.js.map +1 -0
- package/dist/workflows/cold-scan.d.ts +21 -0
- package/dist/workflows/cold-scan.d.ts.map +1 -0
- package/dist/workflows/cold-scan.js +70 -0
- package/dist/workflows/cold-scan.js.map +1 -0
- package/dist/workflows/daemon-spawn.d.ts +117 -0
- package/dist/workflows/daemon-spawn.d.ts.map +1 -0
- package/dist/workflows/daemon-spawn.js +551 -0
- package/dist/workflows/daemon-spawn.js.map +1 -0
- package/dist/workflows/definition.d.ts +1309 -0
- package/dist/workflows/definition.d.ts.map +1 -0
- package/dist/workflows/definition.js +334 -0
- package/dist/workflows/definition.js.map +1 -0
- package/dist/workflows/effect-input.d.ts +4 -0
- package/dist/workflows/effect-input.d.ts.map +1 -0
- package/dist/workflows/effect-input.js +18 -0
- package/dist/workflows/effect-input.js.map +1 -0
- package/dist/workflows/events/append.d.ts +77 -0
- package/dist/workflows/events/append.d.ts.map +1 -0
- package/dist/workflows/events/append.js +214 -0
- package/dist/workflows/events/append.js.map +1 -0
- package/dist/workflows/events/idempotency.d.ts +77 -0
- package/dist/workflows/events/idempotency.d.ts.map +1 -0
- package/dist/workflows/events/idempotency.js +116 -0
- package/dist/workflows/events/idempotency.js.map +1 -0
- package/dist/workflows/events/index.d.ts +7 -0
- package/dist/workflows/events/index.d.ts.map +1 -0
- package/dist/workflows/events/index.js +7 -0
- package/dist/workflows/events/index.js.map +1 -0
- package/dist/workflows/events/payloads.d.ts +917 -0
- package/dist/workflows/events/payloads.d.ts.map +1 -0
- package/dist/workflows/events/payloads.js +337 -0
- package/dist/workflows/events/payloads.js.map +1 -0
- package/dist/workflows/events/replay.d.ts +238 -0
- package/dist/workflows/events/replay.d.ts.map +1 -0
- package/dist/workflows/events/replay.js +608 -0
- package/dist/workflows/events/replay.js.map +1 -0
- package/dist/workflows/events/schema.d.ts +5242 -0
- package/dist/workflows/events/schema.d.ts.map +1 -0
- package/dist/workflows/events/schema.js +295 -0
- package/dist/workflows/events/schema.js.map +1 -0
- package/dist/workflows/events/types.d.ts +34 -0
- package/dist/workflows/events/types.d.ts.map +1 -0
- package/dist/workflows/events/types.js +2 -0
- package/dist/workflows/events/types.js.map +1 -0
- package/dist/workflows/fanout.d.ts +36 -0
- package/dist/workflows/fanout.d.ts.map +1 -0
- package/dist/workflows/fanout.js +114 -0
- package/dist/workflows/fanout.js.map +1 -0
- package/dist/workflows/hostExecutors/botmux-schedule.d.ts +41 -0
- package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/botmux-schedule.js +121 -0
- package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -0
- package/dist/workflows/hostExecutors/feishu-im.d.ts +12 -0
- package/dist/workflows/hostExecutors/feishu-im.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/feishu-im.js +49 -0
- package/dist/workflows/hostExecutors/feishu-im.js.map +1 -0
- package/dist/workflows/hostExecutors/feishu-reply.d.ts +24 -0
- package/dist/workflows/hostExecutors/feishu-reply.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/feishu-reply.js +88 -0
- package/dist/workflows/hostExecutors/feishu-reply.js.map +1 -0
- package/dist/workflows/hostExecutors/feishu-send.d.ts +23 -0
- package/dist/workflows/hostExecutors/feishu-send.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/feishu-send.js +124 -0
- package/dist/workflows/hostExecutors/feishu-send.js.map +1 -0
- package/dist/workflows/hostExecutors/index.d.ts +8 -0
- package/dist/workflows/hostExecutors/index.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/index.js +8 -0
- package/dist/workflows/hostExecutors/index.js.map +1 -0
- package/dist/workflows/hostExecutors/protocol.d.ts +42 -0
- package/dist/workflows/hostExecutors/protocol.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/protocol.js +181 -0
- package/dist/workflows/hostExecutors/protocol.js.map +1 -0
- package/dist/workflows/hostExecutors/registry.d.ts +10 -0
- package/dist/workflows/hostExecutors/registry.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/registry.js +36 -0
- package/dist/workflows/hostExecutors/registry.js.map +1 -0
- package/dist/workflows/hostExecutors/types.d.ts +78 -0
- package/dist/workflows/hostExecutors/types.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/types.js +2 -0
- package/dist/workflows/hostExecutors/types.js.map +1 -0
- package/dist/workflows/loader.d.ts +16 -0
- package/dist/workflows/loader.d.ts.map +1 -0
- package/dist/workflows/loader.js +56 -0
- package/dist/workflows/loader.js.map +1 -0
- package/dist/workflows/loop.d.ts +50 -0
- package/dist/workflows/loop.d.ts.map +1 -0
- package/dist/workflows/loop.js +350 -0
- package/dist/workflows/loop.js.map +1 -0
- package/dist/workflows/ops-projection.d.ts +168 -0
- package/dist/workflows/ops-projection.d.ts.map +1 -0
- package/dist/workflows/ops-projection.js +707 -0
- package/dist/workflows/ops-projection.js.map +1 -0
- package/dist/workflows/orchestrator.d.ts +107 -0
- package/dist/workflows/orchestrator.d.ts.map +1 -0
- package/dist/workflows/orchestrator.js +197 -0
- package/dist/workflows/orchestrator.js.map +1 -0
- package/dist/workflows/output-binding.d.ts +70 -0
- package/dist/workflows/output-binding.d.ts.map +1 -0
- package/dist/workflows/output-binding.js +265 -0
- package/dist/workflows/output-binding.js.map +1 -0
- package/dist/workflows/params.d.ts +61 -0
- package/dist/workflows/params.d.ts.map +1 -0
- package/dist/workflows/params.js +195 -0
- package/dist/workflows/params.js.map +1 -0
- package/dist/workflows/resume.d.ts +263 -0
- package/dist/workflows/resume.d.ts.map +1 -0
- package/dist/workflows/resume.js +808 -0
- package/dist/workflows/resume.js.map +1 -0
- package/dist/workflows/run-id.d.ts +2 -0
- package/dist/workflows/run-id.d.ts.map +1 -0
- package/dist/workflows/run-id.js +7 -0
- package/dist/workflows/run-id.js.map +1 -0
- package/dist/workflows/run-init.d.ts +48 -0
- package/dist/workflows/run-init.d.ts.map +1 -0
- package/dist/workflows/run-init.js +99 -0
- package/dist/workflows/run-init.js.map +1 -0
- package/dist/workflows/runs-dir.d.ts +4 -0
- package/dist/workflows/runs-dir.d.ts.map +1 -0
- package/dist/workflows/runs-dir.js +15 -0
- package/dist/workflows/runs-dir.js.map +1 -0
- package/dist/workflows/runtime.d.ts +211 -0
- package/dist/workflows/runtime.d.ts.map +1 -0
- package/dist/workflows/runtime.js +594 -0
- package/dist/workflows/runtime.js.map +1 -0
- package/dist/workflows/spawn-bot.d.ts +165 -0
- package/dist/workflows/spawn-bot.d.ts.map +1 -0
- package/dist/workflows/spawn-bot.js +215 -0
- package/dist/workflows/spawn-bot.js.map +1 -0
- package/dist/workflows/system.d.ts +49 -0
- package/dist/workflows/system.d.ts.map +1 -0
- package/dist/workflows/system.js +48 -0
- package/dist/workflows/system.js.map +1 -0
- package/dist/workflows/trigger-run.d.ts +70 -0
- package/dist/workflows/trigger-run.d.ts.map +1 -0
- package/dist/workflows/trigger-run.js +88 -0
- package/dist/workflows/trigger-run.js.map +1 -0
- package/dist/workflows/wait.d.ts +120 -0
- package/dist/workflows/wait.d.ts.map +1 -0
- package/dist/workflows/wait.js +181 -0
- package/dist/workflows/wait.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/workflows/definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowDefinition — canonical JSON shape for v0 workflows
|
|
3
|
+
* (see /tmp/wf-ui-v0.md §3 for the spec).
|
|
4
|
+
*
|
|
5
|
+
* Two node types:
|
|
6
|
+
* - subagent — runtime spawns the bot's worker, feeds `prompt`,
|
|
7
|
+
* collects `output` JSON.
|
|
8
|
+
* - hostExecutor — runtime calls the executor registered by `executor`.
|
|
9
|
+
*
|
|
10
|
+
* The schema enforces shape; cross-field invariants (deps reachability,
|
|
11
|
+
* no cycles) are checked by `parseWorkflowDefinition`. The `revisionId`
|
|
12
|
+
* helper computes a content hash over canonical JSON so semantically
|
|
13
|
+
* equal definitions get identical ids regardless of key ordering.
|
|
14
|
+
*/
|
|
15
|
+
import { createHash } from 'node:crypto';
|
|
16
|
+
import { z } from 'zod';
|
|
17
|
+
// ─── Field schemas ─────────────────────────────────────────────────────────
|
|
18
|
+
export const ParamDefSchema = z.object({
|
|
19
|
+
type: z.enum(['string', 'number', 'boolean', 'object', 'array']),
|
|
20
|
+
format: z.string().optional(),
|
|
21
|
+
required: z.boolean().optional(),
|
|
22
|
+
default: z.unknown().optional(),
|
|
23
|
+
description: z.string().optional(),
|
|
24
|
+
});
|
|
25
|
+
export const RetryPolicySchema = z.object({
|
|
26
|
+
maxAttempts: z.number().int().positive(),
|
|
27
|
+
backoff: z.enum(['fixed', 'exponential']),
|
|
28
|
+
baseMs: z.number().int().positive(),
|
|
29
|
+
factor: z.number().positive().optional(),
|
|
30
|
+
jitter: z.boolean().optional(),
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Output binding — `{ "$ref": "<nodeId>.output.<path>" }` references the
|
|
34
|
+
* `output` of another node's most recent successful work activity.
|
|
35
|
+
*
|
|
36
|
+
* Hard constraints (all enforced at parse time):
|
|
37
|
+
* - Object MUST be exactly one key (`$ref`), strict — no extra fields.
|
|
38
|
+
* Half-parsed mixed objects are a footgun: callers might forget the
|
|
39
|
+
* `$ref` key and silently get a literal object instead of resolved data.
|
|
40
|
+
* - `$ref` must be a non-empty string; runtime `resolveRef` then enforces
|
|
41
|
+
* the `.output.` separator + path-segment safety (no `__proto__` etc).
|
|
42
|
+
*/
|
|
43
|
+
export const OutputRefSpecSchema = z.object({
|
|
44
|
+
$ref: z.string().min(1),
|
|
45
|
+
}).strict();
|
|
46
|
+
/** A string field that may either be a literal or a single `$ref`. */
|
|
47
|
+
export const BoundStringSchema = z.union([z.string(), OutputRefSpecSchema]);
|
|
48
|
+
/**
|
|
49
|
+
* Recursive JSON allowing `OutputRefSpec` to appear at any leaf or sub-tree.
|
|
50
|
+
*
|
|
51
|
+
* Refusal rule for non-strict `$ref`-bearing objects: an object that has a
|
|
52
|
+
* `$ref` key MUST be an exact strict `OutputRefSpec`. Mixing `$ref` with
|
|
53
|
+
* other keys is rejected at parse time to keep `$ref` a reserved form.
|
|
54
|
+
*/
|
|
55
|
+
export const BoundJsonValueSchema = z.lazy(() => z.union([
|
|
56
|
+
z.string(),
|
|
57
|
+
z.number(),
|
|
58
|
+
z.boolean(),
|
|
59
|
+
z.null(),
|
|
60
|
+
OutputRefSpecSchema,
|
|
61
|
+
z.array(BoundJsonValueSchema),
|
|
62
|
+
z.record(BoundJsonValueSchema).refine((obj) => !Object.prototype.hasOwnProperty.call(obj, '$ref'), { message: '`$ref` must appear in an exact `{ "$ref": <string> }` object — no extra keys allowed' }),
|
|
63
|
+
]));
|
|
64
|
+
export const HumanGateSchema = z.object({
|
|
65
|
+
// v0 only supports 'before'. after-step gate would need a different
|
|
66
|
+
// dispatch model (suspend post-success); deferred to v1+.
|
|
67
|
+
stage: z.literal('before'),
|
|
68
|
+
prompt: BoundStringSchema,
|
|
69
|
+
approvers: z.array(z.string()).optional(),
|
|
70
|
+
deadlineMs: z.number().int().positive().optional(),
|
|
71
|
+
onTimeout: z.enum(['fail', 'success']).optional(),
|
|
72
|
+
});
|
|
73
|
+
// JSON Schema is opaque to us — workflow author owns validation rules,
|
|
74
|
+
// runtime just feeds the schema to Ajv when validating output.
|
|
75
|
+
export const OutputSchemaSchema = z.record(z.unknown());
|
|
76
|
+
const NodeBaseShape = {
|
|
77
|
+
description: z.string().optional(),
|
|
78
|
+
depends: z.array(z.string()).optional(),
|
|
79
|
+
humanGate: HumanGateSchema.optional(),
|
|
80
|
+
retryPolicy: RetryPolicySchema.optional(),
|
|
81
|
+
timeoutMs: z.number().int().positive().optional(),
|
|
82
|
+
maxOutputBytes: z.number().int().positive().optional(),
|
|
83
|
+
outputSchema: OutputSchemaSchema.optional(),
|
|
84
|
+
/**
|
|
85
|
+
* Opt-in escape hatch for a side-effect hostExecutor node that *must* run
|
|
86
|
+
* without a humanGate (e.g. a system-internal cron tick, an explicitly
|
|
87
|
+
* batched send-all script). Default is unset / false → validator rejects
|
|
88
|
+
* ungated side-effect executors at parse time (`SIDE_EFFECT_EXECUTORS`).
|
|
89
|
+
*
|
|
90
|
+
* Setting this to `true` is the workflow author's audit-trail: "I know
|
|
91
|
+
* this node sends a message / writes to repo / schedules a cron with no
|
|
92
|
+
* human approval — accept the risk." Prefer `humanGate` whenever the
|
|
93
|
+
* intent is "let an operator confirm before this fires."
|
|
94
|
+
*/
|
|
95
|
+
unsafeAllowUngated: z.boolean().optional(),
|
|
96
|
+
};
|
|
97
|
+
export const SubagentNodeSchema = z.object({
|
|
98
|
+
...NodeBaseShape,
|
|
99
|
+
type: z.literal('subagent'),
|
|
100
|
+
bot: z.string().min(1),
|
|
101
|
+
prompt: BoundStringSchema,
|
|
102
|
+
workingDir: z.string().optional(),
|
|
103
|
+
modelOverrides: z
|
|
104
|
+
.object({
|
|
105
|
+
model: z.string().optional(),
|
|
106
|
+
reasoningEffort: z.string().optional(),
|
|
107
|
+
})
|
|
108
|
+
.optional(),
|
|
109
|
+
toolPolicy: z
|
|
110
|
+
.object({
|
|
111
|
+
allow: z.array(z.string()).optional(),
|
|
112
|
+
deny: z.array(z.string()).optional(),
|
|
113
|
+
})
|
|
114
|
+
.optional(),
|
|
115
|
+
});
|
|
116
|
+
export const HostExecutorNodeSchema = z.object({
|
|
117
|
+
...NodeBaseShape,
|
|
118
|
+
type: z.literal('hostExecutor'),
|
|
119
|
+
executor: z.string().min(1),
|
|
120
|
+
input: BoundJsonValueSchema,
|
|
121
|
+
});
|
|
122
|
+
/**
|
|
123
|
+
* Executors that produce externally-visible side effects: sending a Feishu
|
|
124
|
+
* message, scheduling a botmux cron task, etc. Validator requires a
|
|
125
|
+
* `humanGate.stage='before'` on any node using one of these executors, or
|
|
126
|
+
* an explicit `unsafeAllowUngated: true` opt-in (see NodeBaseShape).
|
|
127
|
+
*
|
|
128
|
+
* Add new executors here as they're registered with the dispatch table —
|
|
129
|
+
* keep this list in lockstep with `runtime.ts`'s side-effect executor
|
|
130
|
+
* registrations. Read-only / pure-computation executors do NOT belong
|
|
131
|
+
* here; only ones whose execution is observable outside the workflow.
|
|
132
|
+
*/
|
|
133
|
+
export const SIDE_EFFECT_EXECUTORS = new Set([
|
|
134
|
+
'feishu-send',
|
|
135
|
+
'feishu-reply',
|
|
136
|
+
'botmux-schedule',
|
|
137
|
+
]);
|
|
138
|
+
export function isSideEffectExecutor(executor) {
|
|
139
|
+
return SIDE_EFFECT_EXECUTORS.has(executor);
|
|
140
|
+
}
|
|
141
|
+
export const WorkflowNodeSchema = z.discriminatedUnion('type', [
|
|
142
|
+
SubagentNodeSchema,
|
|
143
|
+
HostExecutorNodeSchema,
|
|
144
|
+
]);
|
|
145
|
+
/**
|
|
146
|
+
* Node id constraint: safe path segment for use in activityId and the
|
|
147
|
+
* artifact sidecar path (UI doc §A: `runs/<runId>/attempts/<activityId>/...`).
|
|
148
|
+
* Disallow `/`, `..`, whitespace, etc. so a maliciously authored or
|
|
149
|
+
* imported workflow cannot escape the run directory.
|
|
150
|
+
*/
|
|
151
|
+
export const NODE_ID_PATTERN = /^[A-Za-z0-9_.-]+$/;
|
|
152
|
+
const NodeIdSchema = z.string().regex(NODE_ID_PATTERN, 'nodeId must match [A-Za-z0-9_.-]+ (no path separators or whitespace)');
|
|
153
|
+
export const WorkflowDefinitionSchema = z.object({
|
|
154
|
+
workflowId: z.string().min(1),
|
|
155
|
+
version: z.number().int().positive(),
|
|
156
|
+
params: z.record(ParamDefSchema).optional(),
|
|
157
|
+
defaults: z
|
|
158
|
+
.object({
|
|
159
|
+
retryPolicy: RetryPolicySchema.optional(),
|
|
160
|
+
timeoutMs: z.number().int().positive().optional(),
|
|
161
|
+
maxOutputBytes: z.number().int().positive().optional(),
|
|
162
|
+
/**
|
|
163
|
+
* Cap on concurrent dispatch actions (dispatchGate + dispatchWork)
|
|
164
|
+
* within a single runLoop tick. v0.1.3 first-cut parallelism defaults
|
|
165
|
+
* to 4 — small enough that a wide fan-out won't immediately exhaust
|
|
166
|
+
* worker / OOM headroom, large enough that ~typical 2-3 branch DAGs
|
|
167
|
+
* fully parallelize. Set higher on workflows that want more throughput.
|
|
168
|
+
*
|
|
169
|
+
* Per-bot serialization is independent of this cap; same-bot siblings
|
|
170
|
+
* still get dispatched one-per-tick regardless of the limit.
|
|
171
|
+
*/
|
|
172
|
+
maxConcurrency: z.number().int().positive().optional(),
|
|
173
|
+
})
|
|
174
|
+
.optional(),
|
|
175
|
+
nodes: z.record(NodeIdSchema, WorkflowNodeSchema),
|
|
176
|
+
});
|
|
177
|
+
// ─── Canonical JSON stringify ──────────────────────────────────────────────
|
|
178
|
+
/**
|
|
179
|
+
* Canonical JSON: object keys sorted recursively, arrays preserved in
|
|
180
|
+
* order, compact (no extra whitespace). Defined this way so that any
|
|
181
|
+
* authoring-tool round-trip (YAML→JSON, TS builder→JSON) produces an
|
|
182
|
+
* identical string when the underlying data is the same.
|
|
183
|
+
*
|
|
184
|
+
* Numbers are emitted via JSON.stringify so NaN/Infinity (illegal in
|
|
185
|
+
* JSON) round-trip to errors — caller should reject those in schema.
|
|
186
|
+
*/
|
|
187
|
+
export function canonicalJsonStringify(value) {
|
|
188
|
+
return JSON.stringify(canonicalize(value));
|
|
189
|
+
}
|
|
190
|
+
function canonicalize(value) {
|
|
191
|
+
if (value === null || typeof value !== 'object')
|
|
192
|
+
return value;
|
|
193
|
+
if (Array.isArray(value))
|
|
194
|
+
return value.map(canonicalize);
|
|
195
|
+
const obj = value;
|
|
196
|
+
const sorted = {};
|
|
197
|
+
for (const k of Object.keys(obj).sort())
|
|
198
|
+
sorted[k] = canonicalize(obj[k]);
|
|
199
|
+
return sorted;
|
|
200
|
+
}
|
|
201
|
+
// ─── revisionId ────────────────────────────────────────────────────────────
|
|
202
|
+
/**
|
|
203
|
+
* revisionId = sha256(canonicalJsonStringify(def)).
|
|
204
|
+
* Use the `version` field for human-readable semantic versions.
|
|
205
|
+
*/
|
|
206
|
+
export function computeRevisionId(def) {
|
|
207
|
+
return ('sha256:' +
|
|
208
|
+
createHash('sha256').update(canonicalJsonStringify(def)).digest('hex'));
|
|
209
|
+
}
|
|
210
|
+
// ─── Validation ────────────────────────────────────────────────────────────
|
|
211
|
+
/**
|
|
212
|
+
* Schema parse + cross-field invariants:
|
|
213
|
+
* 1. every `depends` entry references an existing node
|
|
214
|
+
* 2. graph is acyclic
|
|
215
|
+
* 3. at least one root node (no deps)
|
|
216
|
+
*
|
|
217
|
+
* Throws on any failure. Use `WorkflowDefinitionSchema.safeParse(...)`
|
|
218
|
+
* directly if you only need shape checks (no graph validation).
|
|
219
|
+
*/
|
|
220
|
+
export function parseWorkflowDefinition(raw) {
|
|
221
|
+
const def = WorkflowDefinitionSchema.parse(raw);
|
|
222
|
+
validateGraph(def);
|
|
223
|
+
return def;
|
|
224
|
+
}
|
|
225
|
+
function validateGraph(def) {
|
|
226
|
+
const ids = Object.keys(def.nodes);
|
|
227
|
+
if (ids.length === 0) {
|
|
228
|
+
throw new Error('Workflow must declare at least one node');
|
|
229
|
+
}
|
|
230
|
+
for (const nodeId of ids) {
|
|
231
|
+
// Defense-in-depth alongside NODE_ID_PATTERN: the regex permits `.`
|
|
232
|
+
// for compound names like `node.v2`, but standalone `.` or `..` —
|
|
233
|
+
// and any segment with `..` — must be banned to keep the artifact
|
|
234
|
+
// sidecar path (`runs/<runId>/attempts/<activityId>/...`) inside
|
|
235
|
+
// the run directory.
|
|
236
|
+
if (nodeId === '.' || nodeId === '..' || nodeId.includes('..')) {
|
|
237
|
+
throw new Error(`nodeId '${nodeId}' rejected: path-traversal style ids are not allowed`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
for (const [nodeId, node] of Object.entries(def.nodes)) {
|
|
241
|
+
for (const dep of node.depends ?? []) {
|
|
242
|
+
if (!def.nodes[dep]) {
|
|
243
|
+
throw new Error(`Node '${nodeId}' depends on unknown node '${dep}'`);
|
|
244
|
+
}
|
|
245
|
+
if (dep === nodeId) {
|
|
246
|
+
throw new Error(`Node '${nodeId}' depends on itself`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Safe-by-default: a hostExecutor node that runs a side-effect executor
|
|
250
|
+
// must either declare `humanGate.stage='before'` or opt into the audit
|
|
251
|
+
// trail via `unsafeAllowUngated: true`. Catches ungated `feishu-send`
|
|
252
|
+
// and friends at parse time instead of relying on author discipline.
|
|
253
|
+
if (node.type === 'hostExecutor' &&
|
|
254
|
+
isSideEffectExecutor(node.executor) &&
|
|
255
|
+
!node.humanGate &&
|
|
256
|
+
!node.unsafeAllowUngated) {
|
|
257
|
+
throw new Error(`Node '${nodeId}' runs side-effect executor '${node.executor}' without ` +
|
|
258
|
+
`a humanGate. Add humanGate.stage='before' for human approval, or set ` +
|
|
259
|
+
`unsafeAllowUngated: true to acknowledge the risk explicitly.`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
detectCycle(def);
|
|
263
|
+
const hasRoot = ids.some((id) => (def.nodes[id].depends ?? []).length === 0);
|
|
264
|
+
if (!hasRoot) {
|
|
265
|
+
throw new Error('Workflow has no root node (every node has dependencies)');
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
function detectCycle(def) {
|
|
269
|
+
const WHITE = 0;
|
|
270
|
+
const GRAY = 1;
|
|
271
|
+
const BLACK = 2;
|
|
272
|
+
const color = new Map();
|
|
273
|
+
const ids = Object.keys(def.nodes);
|
|
274
|
+
ids.forEach((id) => color.set(id, WHITE));
|
|
275
|
+
const path = [];
|
|
276
|
+
const visit = (id) => {
|
|
277
|
+
const c = color.get(id);
|
|
278
|
+
if (c === BLACK)
|
|
279
|
+
return;
|
|
280
|
+
if (c === GRAY) {
|
|
281
|
+
const start = path.indexOf(id);
|
|
282
|
+
const cycle = [...path.slice(start), id].join(' → ');
|
|
283
|
+
throw new Error(`Workflow has cycle: ${cycle}`);
|
|
284
|
+
}
|
|
285
|
+
color.set(id, GRAY);
|
|
286
|
+
path.push(id);
|
|
287
|
+
for (const dep of def.nodes[id].depends ?? [])
|
|
288
|
+
visit(dep);
|
|
289
|
+
path.pop();
|
|
290
|
+
color.set(id, BLACK);
|
|
291
|
+
};
|
|
292
|
+
for (const id of ids)
|
|
293
|
+
visit(id);
|
|
294
|
+
}
|
|
295
|
+
// ─── Topological order ────────────────────────────────────────────────────
|
|
296
|
+
/**
|
|
297
|
+
* Kahn's algorithm. Returns nodeIds in dispatch-safe order (deps before
|
|
298
|
+
* dependents). Ties broken by `Object.keys(nodes)` insertion order so
|
|
299
|
+
* the result is deterministic for a given workflow JSON.
|
|
300
|
+
*
|
|
301
|
+
* Assumes the graph is valid (no cycles); call `parseWorkflowDefinition`
|
|
302
|
+
* first or pass a definition that already came from there.
|
|
303
|
+
*/
|
|
304
|
+
export function topologicalOrder(def) {
|
|
305
|
+
const ids = Object.keys(def.nodes);
|
|
306
|
+
const indeg = new Map();
|
|
307
|
+
const children = new Map();
|
|
308
|
+
ids.forEach((id) => {
|
|
309
|
+
indeg.set(id, 0);
|
|
310
|
+
children.set(id, []);
|
|
311
|
+
});
|
|
312
|
+
for (const [id, node] of Object.entries(def.nodes)) {
|
|
313
|
+
for (const dep of node.depends ?? []) {
|
|
314
|
+
indeg.set(id, (indeg.get(id) ?? 0) + 1);
|
|
315
|
+
children.get(dep).push(id);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
const queue = [];
|
|
319
|
+
for (const id of ids)
|
|
320
|
+
if ((indeg.get(id) ?? 0) === 0)
|
|
321
|
+
queue.push(id);
|
|
322
|
+
const order = [];
|
|
323
|
+
while (queue.length > 0) {
|
|
324
|
+
const id = queue.shift();
|
|
325
|
+
order.push(id);
|
|
326
|
+
for (const child of children.get(id)) {
|
|
327
|
+
indeg.set(child, (indeg.get(child) ?? 0) - 1);
|
|
328
|
+
if ((indeg.get(child) ?? 0) === 0)
|
|
329
|
+
queue.push(child);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return order;
|
|
333
|
+
}
|
|
334
|
+
//# sourceMappingURL=definition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/workflows/definition.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { EventLog } from './events/append.js';
|
|
2
|
+
export declare function writeEffectInputSidecar(log: EventLog, activityId: string, attemptId: string, input: unknown): Promise<string>;
|
|
3
|
+
export declare function loadEffectInputSidecar(log: EventLog, activityId: string, attemptId: string): Promise<unknown>;
|
|
4
|
+
//# sourceMappingURL=effect-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-input.d.ts","sourceRoot":"","sources":["../../src/workflows/effect-input.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
export async function writeEffectInputSidecar(log, activityId, attemptId, input) {
|
|
4
|
+
const dir = await effectInputDir(log, activityId, attemptId);
|
|
5
|
+
const path = join(dir, 'effect-input.json');
|
|
6
|
+
await fs.writeFile(path, JSON.stringify(input, null, 2), 'utf-8');
|
|
7
|
+
return path;
|
|
8
|
+
}
|
|
9
|
+
export async function loadEffectInputSidecar(log, activityId, attemptId) {
|
|
10
|
+
const path = join(log.runDir, 'attempts', activityId, attemptId, 'effect-input.json');
|
|
11
|
+
return JSON.parse(await fs.readFile(path, 'utf-8'));
|
|
12
|
+
}
|
|
13
|
+
async function effectInputDir(log, activityId, attemptId) {
|
|
14
|
+
const dir = join(log.runDir, 'attempts', activityId, attemptId);
|
|
15
|
+
await fs.mkdir(dir, { recursive: true });
|
|
16
|
+
return dir;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=effect-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect-input.js","sourceRoot":"","sources":["../../src/workflows/effect-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAa,EACb,UAAkB,EAClB,SAAiB,EACjB,KAAc;IAEd,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAa,EACb,UAAkB,EAClB,SAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACtF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,GAAa,EACb,UAAkB,EAClB,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { INLINE_PAYLOAD_MAX_BYTES, PayloadRefSchema } from './schema.js';
|
|
2
|
+
import type { WorkflowEvent } from './schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* What the runtime supplies to `append`. The append path fills in
|
|
5
|
+
* `eventId` and `schemaVersion`. Callers must supply `runId`, `type`,
|
|
6
|
+
* `actor`, `payload`, and may optionally pass `timestamp` (defaults to
|
|
7
|
+
* Date.now()) and/or `payloadHash` (only when payload is a ref — see
|
|
8
|
+
* events doc §1.1).
|
|
9
|
+
*
|
|
10
|
+
* The discriminated union over WorkflowEvent distributes through Omit, so
|
|
11
|
+
* each event type's payload shape is preserved at the call site.
|
|
12
|
+
*/
|
|
13
|
+
export type EventDraft = Omit<WorkflowEvent, 'eventId' | 'schemaVersion' | 'timestamp'> & {
|
|
14
|
+
timestamp?: number;
|
|
15
|
+
};
|
|
16
|
+
export declare class EventLog {
|
|
17
|
+
readonly runId: string;
|
|
18
|
+
readonly runDir: string;
|
|
19
|
+
readonly eventsFile: string;
|
|
20
|
+
readonly blobDir: string;
|
|
21
|
+
private seq;
|
|
22
|
+
private seqLoaded;
|
|
23
|
+
private cachedMtimeMs;
|
|
24
|
+
private cachedSize;
|
|
25
|
+
constructor(runId: string, baseDir: string);
|
|
26
|
+
/**
|
|
27
|
+
* Append one event. Atomic across:
|
|
28
|
+
* 1. all EventLog instances for the same runId in this process
|
|
29
|
+
* (module-level mutex map), and
|
|
30
|
+
* 2. other OS processes touching the same events file
|
|
31
|
+
* (`withFileLock` over `events.ndjson.lock`).
|
|
32
|
+
*
|
|
33
|
+
* Codex round 4 finding 1: payload envelope MUST be inline. Large
|
|
34
|
+
* business data goes through `OutputRef`-shaped fields (e.g.
|
|
35
|
+
* `runCreated.inputRef`, `activitySucceeded.outputRef`); the caller is
|
|
36
|
+
* responsible for writing the blob and passing a fully-formed
|
|
37
|
+
* `OutputRef` inline. The append path no longer auto-spills payloads —
|
|
38
|
+
* doing so silently broke replay for any ref-payload event because the
|
|
39
|
+
* existing replay projection unconditionally skipped the ref branch.
|
|
40
|
+
*
|
|
41
|
+
* Payload-ref payloads (`{ ref, bytes, schemaVersion }`) are still
|
|
42
|
+
* supported for callers who genuinely need to ref-out the envelope
|
|
43
|
+
* payload (e.g. a custom dashboard projection), but the caller must
|
|
44
|
+
* supply both the blob and `payloadHash` upfront; this path is not
|
|
45
|
+
* exercised by the v0 runtime.
|
|
46
|
+
*/
|
|
47
|
+
append(draft: EventDraft): Promise<WorkflowEvent>;
|
|
48
|
+
private appendLocked;
|
|
49
|
+
/**
|
|
50
|
+
* Read all events in append order. Used by replay (events doc §5.2)
|
|
51
|
+
* and seq recovery on restart. Returns [] if the log doesn't exist
|
|
52
|
+
* yet.
|
|
53
|
+
*
|
|
54
|
+
* Throws if any line fails schema validation — events doc treats the
|
|
55
|
+
* log as authoritative and corruption should fail loud, not silently
|
|
56
|
+
* skip lines.
|
|
57
|
+
*/
|
|
58
|
+
readAll(): Promise<WorkflowEvent[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Read the blob referenced by a ref-payload event. Used when a caller
|
|
61
|
+
* elected to spill their own OutputRef payload to disk; not used by
|
|
62
|
+
* envelope-payload paths since v0.1.2 round-4 disallows envelope spill.
|
|
63
|
+
*/
|
|
64
|
+
readBlob(ref: string): Promise<Buffer>;
|
|
65
|
+
/** Current seq counter — exposed for tests / dashboard. */
|
|
66
|
+
currentSeq(): Promise<number>;
|
|
67
|
+
/**
|
|
68
|
+
* Refresh `this.seq` if the events file has changed since we last loaded.
|
|
69
|
+
* Stat is cheap; full re-scan only fires when the cached mtime/size differ
|
|
70
|
+
* from disk — protects against another process having appended since our
|
|
71
|
+
* last write.
|
|
72
|
+
*/
|
|
73
|
+
private refreshSeqIfStale;
|
|
74
|
+
}
|
|
75
|
+
export { PayloadRefSchema, INLINE_PAYLOAD_MAX_BYTES };
|
|
76
|
+
export type { WorkflowEvent };
|
|
77
|
+
//# sourceMappingURL=append.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"append.d.ts","sourceRoot":"","sources":["../../../src/workflows/events/append.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA6CjD;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,CAAC,GAAG;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,qBAAa,QAAQ;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAK;gBAEX,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAW1C;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;YAMzC,YAAY;IA+C1B;;;;;;;;OAQG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAsBzC;;;;OAIG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C,2DAA2D;IACrD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IASnC;;;;;OAKG;YACW,iBAAiB;CAgChC;AAID,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,CAAC"}
|