crow-central-agency 0.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/LICENSE +21 -0
- package/README.md +139 -0
- package/dist/_shared/constants/system-agent.js +4 -0
- package/dist/_shared/constants/system-circle.js +7 -0
- package/dist/_shared/index.js +22 -0
- package/dist/_shared/schemas/agent-circle.schema.js +64 -0
- package/dist/_shared/schemas/agent-message.schema.js +50 -0
- package/dist/_shared/schemas/agent-runtime-state.schema.js +74 -0
- package/dist/_shared/schemas/agent-task.schema.js +85 -0
- package/dist/_shared/schemas/agent.schema.js +209 -0
- package/dist/_shared/schemas/api-response.schema.js +19 -0
- package/dist/_shared/schemas/artifact.schema.js +49 -0
- package/dist/_shared/schemas/discord-config.schema.js +21 -0
- package/dist/_shared/schemas/feed.schema.js +10 -0
- package/dist/_shared/schemas/graph.schema.js +28 -0
- package/dist/_shared/schemas/mcp-config.schema.js +49 -0
- package/dist/_shared/schemas/message-source.schema.js +30 -0
- package/dist/_shared/schemas/permission.schema.js +24 -0
- package/dist/_shared/schemas/scheduler.schema.js +32 -0
- package/dist/_shared/schemas/sensor.schema.js +7 -0
- package/dist/_shared/schemas/system-settings.schema.js +30 -0
- package/dist/_shared/schemas/websocket.schema.js +197 -0
- package/dist/_shared/utils/apply-agent-order.js +35 -0
- package/dist/_shared/utils/resolve-model.js +14 -0
- package/dist/agents/crow-agent.js +68 -0
- package/dist/agents/crow-task-dispatcher-agent.js +65 -0
- package/dist/bin/crow.js +25 -0
- package/dist/bootstrap.js +149 -0
- package/dist/bot-connectors/discord/discord-bot-manager.js +205 -0
- package/dist/bot-connectors/discord/discord-bot-manager.types.js +2 -0
- package/dist/bot-connectors/discord/discord-message-splitter.js +75 -0
- package/dist/cli.js +40 -0
- package/dist/config/constants.js +37 -0
- package/dist/config/env.js +71 -0
- package/dist/container.js +51 -0
- package/dist/core/error/app-error.js +12 -0
- package/dist/core/error/app-error.types.js +35 -0
- package/dist/core/error/request-error.js +14 -0
- package/dist/core/event-bus/event-bus.js +60 -0
- package/dist/core/event-bus/event-bus.types.js +2 -0
- package/dist/core/store/file-object-store-provider.js +267 -0
- package/dist/core/store/folder-file-store-provider.js +182 -0
- package/dist/core/store/object-store.types.js +19 -0
- package/dist/core/store/store-entry-utils.js +12 -0
- package/dist/feed/feed-reader.js +410 -0
- package/dist/feed/simply-feed-manager.js +528 -0
- package/dist/feed/simply-feed-manager.types.js +2 -0
- package/dist/feed/simply-feed.types.js +5 -0
- package/dist/feed/system-prompts.js +73 -0
- package/dist/mcp/agents/agents-mcp-server.js +20 -0
- package/dist/mcp/agents/get-last-agent-message.js +55 -0
- package/dist/mcp/agents/invoke-agent.js +61 -0
- package/dist/mcp/agents/list-agents.js +32 -0
- package/dist/mcp/agents/super-agent-mcp-server.js +17 -0
- package/dist/mcp/artifacts/artifacts-mcp-server-utils.js +58 -0
- package/dist/mcp/artifacts/artifacts-mcp-server.js +42 -0
- package/dist/mcp/artifacts/delete-artifact.js +34 -0
- package/dist/mcp/artifacts/delete-circle-artifact.js +37 -0
- package/dist/mcp/artifacts/list-artifacts.js +56 -0
- package/dist/mcp/artifacts/list-circle-artifacts.js +47 -0
- package/dist/mcp/artifacts/read-artifact.js +51 -0
- package/dist/mcp/artifacts/read-circle-artifact.js +45 -0
- package/dist/mcp/artifacts/write-artifact.js +48 -0
- package/dist/mcp/artifacts/write-circle-artifact.js +52 -0
- package/dist/mcp/crow-mcp-manager.js +169 -0
- package/dist/mcp/crow-mcp-manager.types.js +2 -0
- package/dist/mcp/feed/feed-format-utils.js +64 -0
- package/dist/mcp/feed/feed-mcp-server.js +31 -0
- package/dist/mcp/feed/feed-tool-utils.js +18 -0
- package/dist/mcp/feed/get-feed-item-content.js +56 -0
- package/dist/mcp/feed/get-feed-items.js +42 -0
- package/dist/mcp/feed/get-recent-feed-items.js +47 -0
- package/dist/mcp/feed/list-feeds.js +34 -0
- package/dist/mcp/feed/search-feed-items.js +45 -0
- package/dist/mcp/reminders/add-reminder.js +35 -0
- package/dist/mcp/reminders/delete-reminder.js +30 -0
- package/dist/mcp/reminders/list-reminders.js +35 -0
- package/dist/mcp/reminders/reminders-mcp-server-utils.js +46 -0
- package/dist/mcp/reminders/reminders-mcp-server.js +30 -0
- package/dist/mcp/tasks/add-task.js +33 -0
- package/dist/mcp/tasks/assign-task.js +59 -0
- package/dist/mcp/tasks/get-task-result.js +35 -0
- package/dist/mcp/tasks/get-task.js +33 -0
- package/dist/mcp/tasks/super-tasks-mcp-server.js +20 -0
- package/dist/mcp/tasks/tasks-mcp-server-utils.js +49 -0
- package/dist/mcp/tasks/tasks-mcp-server.js +20 -0
- package/dist/mcp/tool-utils.js +88 -0
- package/dist/public/assets/arc-DH58vMfF.js +1 -0
- package/dist/public/assets/architecture-YZFGNWBL-1m9lqWSV.js +1 -0
- package/dist/public/assets/architectureDiagram-Q4EWVU46-BVnLkK3k.js +36 -0
- package/dist/public/assets/array-BCJ35G43.js +1 -0
- package/dist/public/assets/blockDiagram-DXYQGD6D-Co8oTplZ.js +132 -0
- package/dist/public/assets/c4Diagram-AHTNJAMY-Bes-MC9n.js +10 -0
- package/dist/public/assets/channel-Cghhd-az.js +1 -0
- package/dist/public/assets/chunk-2KRD3SAO-BUytkKyL.js +1 -0
- package/dist/public/assets/chunk-4BX2VUAB-Dn9kswJO.js +1 -0
- package/dist/public/assets/chunk-4TB4RGXK-GlWEFzeh.js +206 -0
- package/dist/public/assets/chunk-55IACEB6-CLBoivXU.js +1 -0
- package/dist/public/assets/chunk-5FUZZQ4R-SClOVjWh.js +62 -0
- package/dist/public/assets/chunk-5PVQY5BW-MIjbgwbb.js +2 -0
- package/dist/public/assets/chunk-67CJDMHE-DP8uymOi.js +1 -0
- package/dist/public/assets/chunk-7N4EOEYR-Df8rpJKH.js +1 -0
- package/dist/public/assets/chunk-AA7GKIK3-dAaNh5qt.js +1 -0
- package/dist/public/assets/chunk-BSJP7CBP-BlpmbHL-.js +1 -0
- package/dist/public/assets/chunk-CIAEETIT-B-_lfawE.js +1 -0
- package/dist/public/assets/chunk-Dlc7tRH4.js +1 -0
- package/dist/public/assets/chunk-EDXVE4YY-Dw5wmbE0.js +1 -0
- package/dist/public/assets/chunk-ENJZ2VHE-CRfHGk9R.js +10 -0
- package/dist/public/assets/chunk-FMBD7UC4-Cj8B2TLo.js +15 -0
- package/dist/public/assets/chunk-FOC6F5B3-BKFxWPAX.js +1 -0
- package/dist/public/assets/chunk-ICPOFSXX-Bip6PjY8.js +122 -0
- package/dist/public/assets/chunk-K5T4RW27-wgB9Boph.js +94 -0
- package/dist/public/assets/chunk-KGLVRYIC-B1Ey7P8o.js +1 -0
- package/dist/public/assets/chunk-LIHQZDEY-CD13S_fk.js +1 -0
- package/dist/public/assets/chunk-ORNJ4GCN-CskU_c8H.js +1 -0
- package/dist/public/assets/chunk-OYMX7WX6-Byb_3pR2.js +231 -0
- package/dist/public/assets/chunk-QZHKN3VN-C4w1Z4n9.js +1 -0
- package/dist/public/assets/chunk-U2HBQHQK-CB9lh0yj.js +70 -0
- package/dist/public/assets/chunk-X2U36JSP-BVvKoGNC.js +1 -0
- package/dist/public/assets/chunk-YZCP3GAM-BYP7VVCC.js +1 -0
- package/dist/public/assets/chunk-ZZ45TVLE-DbAqKOsS.js +1 -0
- package/dist/public/assets/classDiagram-6PBFFD2Q-CmZm1qEg.js +1 -0
- package/dist/public/assets/classDiagram-v2-HSJHXN6E-CePyYtof.js +1 -0
- package/dist/public/assets/clone-B_aOe17F.js +1 -0
- package/dist/public/assets/cose-bilkent-S5V4N54A-HrzqJ7kC.js +1 -0
- package/dist/public/assets/cytoscape.esm-DjboS31m.js +321 -0
- package/dist/public/assets/dagre-KV5264BT-DdsqPPnb.js +4 -0
- package/dist/public/assets/dagre-YF86gDQP.js +1 -0
- package/dist/public/assets/defaultLocale-CIS5GEjP.js +1 -0
- package/dist/public/assets/diagram-5BDNPKRD-wPoSJ_m2.js +10 -0
- package/dist/public/assets/diagram-G4DWMVQ6-ClQiXdaB.js +24 -0
- package/dist/public/assets/diagram-MMDJMWI5-FZdXovC4.js +43 -0
- package/dist/public/assets/diagram-TYMM5635-BeVIh0rm.js +24 -0
- package/dist/public/assets/dist-B51l2n-9.js +1 -0
- package/dist/public/assets/erDiagram-SMLLAGMA-CnpDc5GA.js +85 -0
- package/dist/public/assets/flatten-8S-tbaze.js +1 -0
- package/dist/public/assets/flowDiagram-DWJPFMVM-BR2wH3NW.js +162 -0
- package/dist/public/assets/ganttDiagram-T4ZO3ILL-BMHy4t8T.js +292 -0
- package/dist/public/assets/gitGraph-7Q5UKJZL-CQAYryJq.js +1 -0
- package/dist/public/assets/gitGraphDiagram-UUTBAWPF-C2YD7dvF.js +106 -0
- package/dist/public/assets/graphlib-Khf04Kaj.js +1 -0
- package/dist/public/assets/identity-CWMh0UL-.js +1 -0
- package/dist/public/assets/index-BntlXc11.css +1 -0
- package/dist/public/assets/index-CnjNix5l.js +472 -0
- package/dist/public/assets/info-OMHHGYJF-HGzfCS3Q.js +1 -0
- package/dist/public/assets/infoDiagram-42DDH7IO-DJN_52xe.js +2 -0
- package/dist/public/assets/init-BMBYmmUa.js +1 -0
- package/dist/public/assets/ishikawaDiagram-UXIWVN3A-BhSmtJDu.js +70 -0
- package/dist/public/assets/journeyDiagram-VCZTEJTY-we_-vp8p.js +139 -0
- package/dist/public/assets/kanban-definition-6JOO6SKY-JZ-gNRX_.js +89 -0
- package/dist/public/assets/katex-zcd3p-VM.js +261 -0
- package/dist/public/assets/line-DDxkHKyY.js +1 -0
- package/dist/public/assets/linear-d7UHSQqm.js +1 -0
- package/dist/public/assets/mermaid-parser.core-CZDxisWB.js +4 -0
- package/dist/public/assets/mindmap-definition-QFDTVHPH-B2pEMikk.js +96 -0
- package/dist/public/assets/ordinal-BDTCIhXR.js +1 -0
- package/dist/public/assets/packet-4T2RLAQJ-BRNfV5ia.js +1 -0
- package/dist/public/assets/path-CIRGLb_6.js +1 -0
- package/dist/public/assets/pie-ZZUOXDRM-C3D0dwDl.js +1 -0
- package/dist/public/assets/pieDiagram-DEJITSTG-dn2h7roR.js +30 -0
- package/dist/public/assets/quadrantDiagram-34T5L4WZ-C1-ycBAn.js +7 -0
- package/dist/public/assets/radar-PYXPWWZC-BUJUf3zT.js +1 -0
- package/dist/public/assets/reduce-CrhS_VCc.js +1 -0
- package/dist/public/assets/requirementDiagram-MS252O5E-BW9GmaKc.js +84 -0
- package/dist/public/assets/rough.esm-DtEqI08j.js +1 -0
- package/dist/public/assets/sankeyDiagram-XADWPNL6-xq9V9HTT.js +10 -0
- package/dist/public/assets/sequenceDiagram-FGHM5R23-CJ0wT8j5.js +157 -0
- package/dist/public/assets/src-Cxc1bu7b.js +1 -0
- package/dist/public/assets/stateDiagram-FHFEXIEX-BYdWutSt.js +1 -0
- package/dist/public/assets/stateDiagram-v2-QKLJ7IA2-DDx3MEjM.js +1 -0
- package/dist/public/assets/timeline-definition-GMOUNBTQ-B0-7yvBq.js +120 -0
- package/dist/public/assets/treeView-SZITEDCU-CDEBXy_i.js +1 -0
- package/dist/public/assets/treemap-W4RFUUIX-BU1LThmA.js +1 -0
- package/dist/public/assets/vennDiagram-DHZGUBPP-ns7cjxkA.js +34 -0
- package/dist/public/assets/wardley-RL74JXVD-DKwuddHn.js +1 -0
- package/dist/public/assets/wardleyDiagram-NUSXRM2D-DDEJGTVl.js +20 -0
- package/dist/public/assets/xychartDiagram-5P7HB3ND-DDwarp5t.js +7 -0
- package/dist/public/crow.png +0 -0
- package/dist/public/index.html +30 -0
- package/dist/routes/agent.routes.js +144 -0
- package/dist/routes/artifact.routes.js +112 -0
- package/dist/routes/auth.routes.js +10 -0
- package/dist/routes/circle.routes.js +96 -0
- package/dist/routes/feed.routes.js +62 -0
- package/dist/routes/generation.routes.js +27 -0
- package/dist/routes/graph.routes.js +38 -0
- package/dist/routes/health.routes.js +9 -0
- package/dist/routes/mcp.routes.js +46 -0
- package/dist/routes/route-utils.js +16 -0
- package/dist/routes/sensor.routes.js +11 -0
- package/dist/routes/system-settings.routes.js +43 -0
- package/dist/routes/task.routes.js +84 -0
- package/dist/routines/agent-loop-routine.js +32 -0
- package/dist/routines/agent-reminder-routine.js +37 -0
- package/dist/routines/discord-routine.js +49 -0
- package/dist/routines/feed-cleanup-routine.js +59 -0
- package/dist/routines/feed-new-items-routine.js +94 -0
- package/dist/routines/inter-agent-task-routine.js +367 -0
- package/dist/routines/routine-manager.js +112 -0
- package/dist/routines/routine-manager.types.js +2 -0
- package/dist/routines/task-dispatch-routine.js +75 -0
- package/dist/runner/agent-runner.js +489 -0
- package/dist/runner/agent-runner.types.js +16 -0
- package/dist/runner/stream-processor.js +193 -0
- package/dist/runner/tool-activity-parser.js +59 -0
- package/dist/sensors/capture-client-info.js +15 -0
- package/dist/sensors/geolocation-sensor.js +89 -0
- package/dist/sensors/sensor-manager.js +42 -0
- package/dist/sensors/sensor-manager.types.js +2 -0
- package/dist/sensors/weather-sensor.js +128 -0
- package/dist/server/auth-hook.js +43 -0
- package/dist/server/auth-utils.js +16 -0
- package/dist/server/create-server.js +68 -0
- package/dist/server/error-handler.js +70 -0
- package/dist/server/request-context-hook.js +52 -0
- package/dist/server/request-context.js +20 -0
- package/dist/server/request-context.types.js +2 -0
- package/dist/server/setup-websocket.js +92 -0
- package/dist/services/agent-circle-manager.js +414 -0
- package/dist/services/agent-circle-manager.types.js +2 -0
- package/dist/services/agent-registry.js +342 -0
- package/dist/services/agent-registry.types.js +2 -0
- package/dist/services/agent-task-manager.js +381 -0
- package/dist/services/agent-task-manager.types.js +2 -0
- package/dist/services/artifact/artifact-adapter/word-adapter.js +24 -0
- package/dist/services/artifact/artifact-manager.js +313 -0
- package/dist/services/artifact/artifact-manager.types.js +2 -0
- package/dist/services/crow-scheduler.js +334 -0
- package/dist/services/crow-scheduler.types.js +2 -0
- package/dist/services/message-queue-manager.js +127 -0
- package/dist/services/message-queue-manager.types.js +2 -0
- package/dist/services/runtime/agent-runtime-manager.js +656 -0
- package/dist/services/runtime/agent-runtime-manager.types.js +2 -0
- package/dist/services/runtime/permission-handler.js +107 -0
- package/dist/services/runtime/permission-handler.types.js +2 -0
- package/dist/services/session/session-manager.js +60 -0
- package/dist/services/session/session-message-transformer.js +125 -0
- package/dist/services/system-settings-manager.js +52 -0
- package/dist/services/text-generation/md-generation.js +51 -0
- package/dist/services/text-generation/provider/openai-provider.js +161 -0
- package/dist/services/text-generation/text-generation-service.js +107 -0
- package/dist/services/text-generation/text-generation-service.types.js +14 -0
- package/dist/services/ws-broadcaster.js +51 -0
- package/dist/telemetry/agent-telemetry.js +122 -0
- package/dist/telemetry/setup.js +58 -0
- package/dist/utils/agent-config-sanitizer.js +18 -0
- package/dist/utils/date-utils.js +19 -0
- package/dist/utils/fs-utils.js +166 -0
- package/dist/utils/html-sanitizer.js +21 -0
- package/dist/utils/id-utils.js +23 -0
- package/dist/utils/logger.js +13 -0
- package/dist/utils/message-template.js +92 -0
- package/dist/utils/message-template.types.js +2 -0
- package/dist/utils/mime-type.js +45 -0
- package/dist/utils/nhm-extensions/table-custom-translator.js +63 -0
- package/dist/utils/validation.js +38 -0
- package/package.json +104 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { DiscordConfigSchema } from "./discord-config.schema.js";
|
|
3
|
+
import { DayOfWeekSchema, SchedulerTimeSchema, TIME_MODE, TimeModeSchema } from "./scheduler.schema.js";
|
|
4
|
+
export const CLAUDE_MODELS = {
|
|
5
|
+
HAIKU: "claude-haiku-4-5",
|
|
6
|
+
SONNET: "claude-sonnet-4-6",
|
|
7
|
+
SONNET_4_5: "claude-sonnet-4-5",
|
|
8
|
+
OPUS: "claude-opus-4-7",
|
|
9
|
+
OPUS_4_6: "claude-opus-4-6",
|
|
10
|
+
OPUS_4_5: "claude-opus-4-5",
|
|
11
|
+
};
|
|
12
|
+
export const CLAUDE_CODE_MODEL_OPTIONS = [
|
|
13
|
+
{ value: CLAUDE_MODELS.SONNET, label: "Claude Sonnet 4.6" },
|
|
14
|
+
{ value: CLAUDE_MODELS.OPUS, label: "Claude Opus 4.7" },
|
|
15
|
+
{ value: CLAUDE_MODELS.HAIKU, label: "Claude Haiku 4.5" },
|
|
16
|
+
];
|
|
17
|
+
/** Default model for new agents */
|
|
18
|
+
export const DEFAULT_MODEL = CLAUDE_MODELS.SONNET;
|
|
19
|
+
/**
|
|
20
|
+
* Tool configuration modes for agent tool availability.
|
|
21
|
+
*/
|
|
22
|
+
export const TOOL_MODE = {
|
|
23
|
+
/** All tools available - pass undefined to SDK */
|
|
24
|
+
UNRESTRICTED: "unrestricted",
|
|
25
|
+
/** User-selected tool subset - pass explicit string[] to SDK */
|
|
26
|
+
RESTRICTED: "restricted",
|
|
27
|
+
};
|
|
28
|
+
/** The SDK tool name used to launch a subagent */
|
|
29
|
+
export const SUBAGENT_TOOL_NAME = "Agent";
|
|
30
|
+
/**
|
|
31
|
+
* Default available tools for new agent creation.
|
|
32
|
+
*/
|
|
33
|
+
export const DEFAULT_AVAILABLE_TOOLS = [
|
|
34
|
+
"AskUserQuestion",
|
|
35
|
+
"Bash",
|
|
36
|
+
"Glob",
|
|
37
|
+
"Grep",
|
|
38
|
+
"Read",
|
|
39
|
+
"Edit",
|
|
40
|
+
"Write",
|
|
41
|
+
"WebFetch",
|
|
42
|
+
"WebSearch",
|
|
43
|
+
"Task",
|
|
44
|
+
"TaskOutput",
|
|
45
|
+
"TaskStop",
|
|
46
|
+
"TodoWrite",
|
|
47
|
+
"NotebookEdit",
|
|
48
|
+
"Skill",
|
|
49
|
+
"EnterPlanMode",
|
|
50
|
+
"ExitPlanMode",
|
|
51
|
+
"EnterWorktree",
|
|
52
|
+
"ExitWorktree",
|
|
53
|
+
"CronCreate",
|
|
54
|
+
"CronDelete",
|
|
55
|
+
"CronList",
|
|
56
|
+
"ToolSearch",
|
|
57
|
+
];
|
|
58
|
+
/**
|
|
59
|
+
* Setting sources matching SDK SettingSource type.
|
|
60
|
+
* Controls which SDK configuration sources are included in agent queries.
|
|
61
|
+
*/
|
|
62
|
+
export const SETTING_SOURCE = {
|
|
63
|
+
USER: "user",
|
|
64
|
+
PROJECT: "project",
|
|
65
|
+
LOCAL: "local",
|
|
66
|
+
};
|
|
67
|
+
/** Default setting sources for new agent creation */
|
|
68
|
+
export const DEFAULT_SETTING_SOURCES = [
|
|
69
|
+
SETTING_SOURCE.USER,
|
|
70
|
+
SETTING_SOURCE.PROJECT,
|
|
71
|
+
SETTING_SOURCE.LOCAL,
|
|
72
|
+
];
|
|
73
|
+
/**
|
|
74
|
+
* Permission modes matching SDK PermissionMode type.
|
|
75
|
+
* Controls how tool permissions are handled during agent execution.
|
|
76
|
+
*/
|
|
77
|
+
export const PERMISSION_MODE = {
|
|
78
|
+
DEFAULT: "default",
|
|
79
|
+
ACCEPT_EDITS: "acceptEdits",
|
|
80
|
+
BYPASS_PERMISSIONS: "bypassPermissions",
|
|
81
|
+
PLAN: "plan",
|
|
82
|
+
DONT_ASK: "dontAsk",
|
|
83
|
+
};
|
|
84
|
+
export const AGENT_TYPE = {
|
|
85
|
+
CLAUDE_CODE: "CLAUDE_CODE",
|
|
86
|
+
};
|
|
87
|
+
export const AgentIdSchema = z.uuid();
|
|
88
|
+
/** Maximum number of time entries allowed in a loop config */
|
|
89
|
+
export const MAX_LOOP_TIMES = 6;
|
|
90
|
+
/** Loop configuration */
|
|
91
|
+
export const LoopConfigSchema = z.object({
|
|
92
|
+
enabled: z.boolean().default(false),
|
|
93
|
+
daysOfWeek: z.array(DayOfWeekSchema).default([]),
|
|
94
|
+
timeMode: TimeModeSchema.default(TIME_MODE.EVERY),
|
|
95
|
+
times: z.array(SchedulerTimeSchema).min(1).max(MAX_LOOP_TIMES).default([{}]),
|
|
96
|
+
prompt: z.string(),
|
|
97
|
+
});
|
|
98
|
+
export const ConfiguredFeedSchema = z.object({
|
|
99
|
+
feedId: z.string(),
|
|
100
|
+
isNotify: z.boolean().optional(),
|
|
101
|
+
});
|
|
102
|
+
export const PermissionModeSchema = z.enum([
|
|
103
|
+
PERMISSION_MODE.DEFAULT,
|
|
104
|
+
PERMISSION_MODE.ACCEPT_EDITS,
|
|
105
|
+
PERMISSION_MODE.BYPASS_PERMISSIONS,
|
|
106
|
+
PERMISSION_MODE.PLAN,
|
|
107
|
+
PERMISSION_MODE.DONT_ASK,
|
|
108
|
+
]);
|
|
109
|
+
export const SettingSourceSchema = z.enum([SETTING_SOURCE.USER, SETTING_SOURCE.PROJECT, SETTING_SOURCE.LOCAL]);
|
|
110
|
+
/**
|
|
111
|
+
* Tool configuration for agent
|
|
112
|
+
*/
|
|
113
|
+
export const ToolConfigSchema = z.object({
|
|
114
|
+
mode: z.enum([TOOL_MODE.UNRESTRICTED, TOOL_MODE.RESTRICTED]).default(TOOL_MODE.UNRESTRICTED),
|
|
115
|
+
tools: z.array(z.string()).optional(),
|
|
116
|
+
autoApprovedTools: z.array(z.string()).optional(),
|
|
117
|
+
disallowedTools: z.array(z.string()).optional(),
|
|
118
|
+
});
|
|
119
|
+
/**
|
|
120
|
+
* Full agent configuration - persisted to disk in agents.json
|
|
121
|
+
*/
|
|
122
|
+
export const AgentConfigSchema = z.object({
|
|
123
|
+
id: AgentIdSchema,
|
|
124
|
+
type: z.enum([AGENT_TYPE.CLAUDE_CODE]),
|
|
125
|
+
name: z.string().min(1).max(64),
|
|
126
|
+
description: z.string().optional(),
|
|
127
|
+
workspace: z.string().min(1).optional(),
|
|
128
|
+
persona: z.string().optional(),
|
|
129
|
+
model: z.string().default(DEFAULT_MODEL),
|
|
130
|
+
permissionMode: PermissionModeSchema.default(PERMISSION_MODE.DEFAULT),
|
|
131
|
+
settingSources: z.array(SettingSourceSchema).default([...DEFAULT_SETTING_SOURCES]),
|
|
132
|
+
availableTools: z.array(z.string()).optional(),
|
|
133
|
+
toolConfig: ToolConfigSchema.default({ mode: TOOL_MODE.UNRESTRICTED }),
|
|
134
|
+
/** IDs of user-configured MCP servers enabled for this agent */
|
|
135
|
+
mcpServerIds: z.array(z.string()).optional(),
|
|
136
|
+
configuredFeeds: z.array(ConfiguredFeedSchema).optional(),
|
|
137
|
+
sensorIds: z.array(z.string()).optional(),
|
|
138
|
+
loop: LoopConfigSchema.optional(),
|
|
139
|
+
discordConfig: DiscordConfigSchema.optional(),
|
|
140
|
+
persistSession: z.boolean().optional(),
|
|
141
|
+
isPinned: z.boolean().optional(),
|
|
142
|
+
excludeClaudeCodeSystemPrompt: z.boolean().optional(),
|
|
143
|
+
/** System agents are built-in and cannot be edited, deleted, or persisted */
|
|
144
|
+
isSystemAgent: z.boolean().optional(),
|
|
145
|
+
/** Background agents does not show up in the list */
|
|
146
|
+
isBackgroundAgent: z.boolean().optional(),
|
|
147
|
+
createdAt: z.iso.datetime({ offset: true }),
|
|
148
|
+
updatedAt: z.iso.datetime({ offset: true }),
|
|
149
|
+
});
|
|
150
|
+
/**
|
|
151
|
+
* Input for creating a new agent - only required fields
|
|
152
|
+
*/
|
|
153
|
+
export const CreateAgentInputSchema = z.object({
|
|
154
|
+
name: z.string().min(1).max(50),
|
|
155
|
+
description: z.string().optional(),
|
|
156
|
+
workspace: z.string().min(1).optional(),
|
|
157
|
+
persona: z.string().optional(),
|
|
158
|
+
model: z.string().optional(),
|
|
159
|
+
permissionMode: PermissionModeSchema.optional(),
|
|
160
|
+
settingSources: z.array(SettingSourceSchema).optional(),
|
|
161
|
+
toolConfig: ToolConfigSchema.optional(),
|
|
162
|
+
mcpServerIds: z.array(z.string()).optional(),
|
|
163
|
+
configuredFeeds: z.array(ConfiguredFeedSchema).optional(),
|
|
164
|
+
sensorIds: z.array(z.string()).optional(),
|
|
165
|
+
loop: LoopConfigSchema.optional(),
|
|
166
|
+
discordConfig: DiscordConfigSchema.optional(),
|
|
167
|
+
excludeClaudeCodeSystemPrompt: z.boolean().optional(),
|
|
168
|
+
agentMd: z.string().optional(),
|
|
169
|
+
});
|
|
170
|
+
/**
|
|
171
|
+
* Input for updating an existing agent - all fields optional
|
|
172
|
+
*/
|
|
173
|
+
export const UpdateAgentInputSchema = z.object({
|
|
174
|
+
name: z.string().min(1).max(50).optional(),
|
|
175
|
+
description: z.string().optional(),
|
|
176
|
+
workspace: z.string().optional(),
|
|
177
|
+
persona: z.string().optional(),
|
|
178
|
+
model: z.string().optional(),
|
|
179
|
+
permissionMode: PermissionModeSchema.optional(),
|
|
180
|
+
settingSources: z.array(SettingSourceSchema).optional(),
|
|
181
|
+
toolConfig: ToolConfigSchema.optional(),
|
|
182
|
+
mcpServerIds: z.array(z.string()).optional(),
|
|
183
|
+
configuredFeeds: z.array(ConfiguredFeedSchema).optional(),
|
|
184
|
+
sensorIds: z.array(z.string()).optional(),
|
|
185
|
+
loop: LoopConfigSchema.optional(),
|
|
186
|
+
discordConfig: DiscordConfigSchema.optional(),
|
|
187
|
+
isPinned: z.boolean().optional(),
|
|
188
|
+
excludeClaudeCodeSystemPrompt: z.boolean().optional(),
|
|
189
|
+
agentMd: z.string().optional(),
|
|
190
|
+
});
|
|
191
|
+
export const AgentConfigTemplateSchema = AgentConfigSchema.pick({
|
|
192
|
+
description: true,
|
|
193
|
+
workspace: true,
|
|
194
|
+
persona: true,
|
|
195
|
+
model: true,
|
|
196
|
+
permissionMode: true,
|
|
197
|
+
settingSources: true,
|
|
198
|
+
availableTools: true,
|
|
199
|
+
toolConfig: true,
|
|
200
|
+
mcpServerIds: true,
|
|
201
|
+
configuredFeeds: true,
|
|
202
|
+
sensorIds: true,
|
|
203
|
+
loop: true,
|
|
204
|
+
}).extend({
|
|
205
|
+
templateId: z.uuid(),
|
|
206
|
+
templateName: z.string().min(1).max(64),
|
|
207
|
+
agentMd: z.string().optional(),
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=agent.schema.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Standard API success response wrapper
|
|
4
|
+
*/
|
|
5
|
+
export const createApiSuccessSchema = (dataSchema) => z.object({
|
|
6
|
+
success: z.literal(true),
|
|
7
|
+
data: dataSchema,
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Standard API error response
|
|
11
|
+
*/
|
|
12
|
+
export const ApiErrorSchema = z.object({
|
|
13
|
+
success: z.literal(false),
|
|
14
|
+
error: z.object({
|
|
15
|
+
code: z.string(),
|
|
16
|
+
message: z.string(),
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=api-response.schema.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EntityTypeSchema } from "./agent-circle.schema.js";
|
|
3
|
+
import { AgentTaskSourceSchema } from "./agent-task.schema.js";
|
|
4
|
+
/**
|
|
5
|
+
* TODO: layered memory system via artifacts.
|
|
6
|
+
*/
|
|
7
|
+
export const ARTIFACT_TYPE = {
|
|
8
|
+
STANDARD: "STANDARD",
|
|
9
|
+
TEMPORARY: "TEMPORARY",
|
|
10
|
+
STRONG: "STRONG",
|
|
11
|
+
NEAR: "NEAR",
|
|
12
|
+
LOOSE: "LOOSE",
|
|
13
|
+
USER: "USER",
|
|
14
|
+
};
|
|
15
|
+
export const ARTIFACT_CONTENT_TYPE = {
|
|
16
|
+
TEXT: "TEXT",
|
|
17
|
+
BINARY: "BINARY",
|
|
18
|
+
IMAGE: "IMAGE",
|
|
19
|
+
AUDIO: "AUDIO",
|
|
20
|
+
};
|
|
21
|
+
export const ArtifactTypeSchema = z.enum([
|
|
22
|
+
ARTIFACT_TYPE.STANDARD,
|
|
23
|
+
ARTIFACT_TYPE.TEMPORARY,
|
|
24
|
+
ARTIFACT_TYPE.STRONG,
|
|
25
|
+
ARTIFACT_TYPE.NEAR,
|
|
26
|
+
ARTIFACT_TYPE.LOOSE,
|
|
27
|
+
ARTIFACT_TYPE.USER,
|
|
28
|
+
]);
|
|
29
|
+
export const ArtifactContentTypeSchema = z.enum([
|
|
30
|
+
ARTIFACT_CONTENT_TYPE.TEXT,
|
|
31
|
+
ARTIFACT_CONTENT_TYPE.BINARY,
|
|
32
|
+
ARTIFACT_CONTENT_TYPE.IMAGE,
|
|
33
|
+
ARTIFACT_CONTENT_TYPE.AUDIO,
|
|
34
|
+
]);
|
|
35
|
+
/**
|
|
36
|
+
* Schema for artifact file metadata
|
|
37
|
+
*/
|
|
38
|
+
export const ArtifactMetadataSchema = z.object({
|
|
39
|
+
filename: z.string(),
|
|
40
|
+
type: ArtifactTypeSchema,
|
|
41
|
+
contentType: ArtifactContentTypeSchema,
|
|
42
|
+
entityId: z.string(),
|
|
43
|
+
entityType: EntityTypeSchema,
|
|
44
|
+
size: z.number(),
|
|
45
|
+
createdTimestamp: z.number(),
|
|
46
|
+
updatedTimestamp: z.number(),
|
|
47
|
+
createdBy: AgentTaskSourceSchema,
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=artifact.schema.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Discord bot configuration for an agent.
|
|
4
|
+
* When present on an agent config, a discord.js bot is created for that agent.
|
|
5
|
+
* By default (no channelIds), the bot only responds to direct messages.
|
|
6
|
+
*/
|
|
7
|
+
export const DiscordConfigSchema = z.object({
|
|
8
|
+
/** Whether the Discord bot is active */
|
|
9
|
+
enabled: z.boolean().default(false),
|
|
10
|
+
/** Discord bot token from the Discord Developer Portal */
|
|
11
|
+
botToken: z.string().optional(),
|
|
12
|
+
/** Optional guild channel IDs the bot listens in. If omitted, bot only responds to DMs. */
|
|
13
|
+
channelIds: z.array(z.string().min(1)).optional(),
|
|
14
|
+
/** Optional Discord user IDs allowed to interact. If omitted, any user can interact. */
|
|
15
|
+
allowedUserIds: z.array(z.string().min(1)).optional(),
|
|
16
|
+
/** When true, the bot only responds when @mentioned in guild channels (does not affect DMs). */
|
|
17
|
+
respondToMentionsOnly: z.boolean().default(false),
|
|
18
|
+
/** When true, sync the Discord bot username to match the agent name. */
|
|
19
|
+
syncBotName: z.boolean().default(false),
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=discord-config.schema.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Input schema for adding a new feed by URL */
|
|
3
|
+
export const AddFeedInputSchema = z.object({
|
|
4
|
+
feedUrl: z.url(),
|
|
5
|
+
});
|
|
6
|
+
/** Input schema for detecting feeds advertised on a page */
|
|
7
|
+
export const DetectFeedsInputSchema = z.object({
|
|
8
|
+
url: z.url(),
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=feed.schema.js.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { EntityTypeSchema, RelationshipTypeSchema } from "./agent-circle.schema.js";
|
|
3
|
+
import { AGENT_STATUS } from "./agent-runtime-state.schema.js";
|
|
4
|
+
/** A node in the relationship graph — represents either an agent or a circle */
|
|
5
|
+
export const GraphNodeSchema = z.object({
|
|
6
|
+
id: z.string(),
|
|
7
|
+
name: z.string(),
|
|
8
|
+
entityType: EntityTypeSchema,
|
|
9
|
+
isSystemAgent: z.boolean().optional(),
|
|
10
|
+
isPinned: z.boolean().optional(),
|
|
11
|
+
isSystemCircle: z.boolean().optional(),
|
|
12
|
+
status: z
|
|
13
|
+
.enum([AGENT_STATUS.IDLE, AGENT_STATUS.ACTIVATING, AGENT_STATUS.STREAMING, AGENT_STATUS.COMPACTING])
|
|
14
|
+
.optional(),
|
|
15
|
+
});
|
|
16
|
+
/** An edge in the relationship graph — represents a membership relationship */
|
|
17
|
+
export const GraphEdgeSchema = z.object({
|
|
18
|
+
id: z.string(),
|
|
19
|
+
source: z.string(),
|
|
20
|
+
target: z.string(),
|
|
21
|
+
relationshipType: RelationshipTypeSchema,
|
|
22
|
+
});
|
|
23
|
+
/** Complete graph data returned by GET /api/graph */
|
|
24
|
+
export const GraphDataSchema = z.object({
|
|
25
|
+
nodes: z.array(GraphNodeSchema),
|
|
26
|
+
edges: z.array(GraphEdgeSchema),
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=graph.schema.js.map
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** MCP server configuration transport types */
|
|
3
|
+
export const MCP_CONFIG_TYPE = {
|
|
4
|
+
STDIO: "stdio",
|
|
5
|
+
SSE: "sse",
|
|
6
|
+
HTTP: "http",
|
|
7
|
+
};
|
|
8
|
+
/** Zod schema for local (stdio) MCP server config */
|
|
9
|
+
const LocalMcpConfigSchema = z.object({
|
|
10
|
+
type: z.literal(MCP_CONFIG_TYPE.STDIO),
|
|
11
|
+
id: z.uuid(),
|
|
12
|
+
name: z.string().min(1).max(64),
|
|
13
|
+
description: z.string().optional(),
|
|
14
|
+
isDisabled: z.boolean().optional(),
|
|
15
|
+
/** When true, this server is automatically available to the Crow system agent */
|
|
16
|
+
enableForCrow: z.boolean().optional(),
|
|
17
|
+
command: z.string().min(1),
|
|
18
|
+
args: z.array(z.string()).optional(),
|
|
19
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
20
|
+
});
|
|
21
|
+
/** Zod schema for remote (SSE/HTTP) MCP server config */
|
|
22
|
+
const RemoteMcpConfigSchema = z.object({
|
|
23
|
+
type: z.enum([MCP_CONFIG_TYPE.SSE, MCP_CONFIG_TYPE.HTTP]),
|
|
24
|
+
id: z.uuid(),
|
|
25
|
+
name: z.string().min(1).max(64),
|
|
26
|
+
description: z.string().optional(),
|
|
27
|
+
isDisabled: z.boolean().optional(),
|
|
28
|
+
/** When true, this server is automatically available to the Crow system agent */
|
|
29
|
+
enableForCrow: z.boolean().optional(),
|
|
30
|
+
url: z.url(),
|
|
31
|
+
headers: z.record(z.string(), z.string()).optional(),
|
|
32
|
+
});
|
|
33
|
+
/** Discriminated union schema for any MCP server config */
|
|
34
|
+
export const McpServerConfigSchema = z.discriminatedUnion("type", [LocalMcpConfigSchema, RemoteMcpConfigSchema]);
|
|
35
|
+
/** Input for creating a new MCP config - id is generated server-side */
|
|
36
|
+
const CreateLocalMcpConfigInputSchema = LocalMcpConfigSchema.omit({ id: true });
|
|
37
|
+
const CreateRemoteMcpConfigInputSchema = RemoteMcpConfigSchema.omit({ id: true });
|
|
38
|
+
export const CreateMcpConfigInputSchema = z.discriminatedUnion("type", [
|
|
39
|
+
CreateLocalMcpConfigInputSchema,
|
|
40
|
+
CreateRemoteMcpConfigInputSchema,
|
|
41
|
+
]);
|
|
42
|
+
/** Input for updating an existing MCP config - partial fields, type required for discrimination */
|
|
43
|
+
const UpdateLocalMcpConfigInputSchema = CreateLocalMcpConfigInputSchema.partial().required({ type: true });
|
|
44
|
+
const UpdateRemoteMcpConfigInputSchema = CreateRemoteMcpConfigInputSchema.partial().required({ type: true });
|
|
45
|
+
export const UpdateMcpConfigInputSchema = z.discriminatedUnion("type", [
|
|
46
|
+
UpdateLocalMcpConfigInputSchema,
|
|
47
|
+
UpdateRemoteMcpConfigInputSchema,
|
|
48
|
+
]);
|
|
49
|
+
//# sourceMappingURL=mcp-config.schema.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Source type identifiers for messages */
|
|
3
|
+
export const MESSAGE_SOURCE_TYPE = {
|
|
4
|
+
USER: "USER",
|
|
5
|
+
LOOP: "LOOP",
|
|
6
|
+
AGENT: "AGENT",
|
|
7
|
+
TASK: "TASK",
|
|
8
|
+
TASK_RESULT: "TASK_RESULT",
|
|
9
|
+
RECOVERY: "RECOVERY",
|
|
10
|
+
NOTIFICATION: "NOTIFICATION",
|
|
11
|
+
DISCORD: "DISCORD",
|
|
12
|
+
};
|
|
13
|
+
/** Zod schema for message source — identifies who originated a message */
|
|
14
|
+
export const MessageSourceSchema = z.discriminatedUnion("sourceType", [
|
|
15
|
+
z.object({ sourceType: z.literal(MESSAGE_SOURCE_TYPE.USER) }),
|
|
16
|
+
z.object({ sourceType: z.literal(MESSAGE_SOURCE_TYPE.LOOP) }),
|
|
17
|
+
z.object({ sourceType: z.literal(MESSAGE_SOURCE_TYPE.AGENT), agentId: z.string() }),
|
|
18
|
+
z.object({ sourceType: z.literal(MESSAGE_SOURCE_TYPE.TASK), taskId: z.string() }),
|
|
19
|
+
z.object({ sourceType: z.literal(MESSAGE_SOURCE_TYPE.TASK_RESULT), taskId: z.string() }),
|
|
20
|
+
z.object({ sourceType: z.literal(MESSAGE_SOURCE_TYPE.RECOVERY) }),
|
|
21
|
+
z.object({ sourceType: z.literal(MESSAGE_SOURCE_TYPE.NOTIFICATION) }),
|
|
22
|
+
z.object({
|
|
23
|
+
sourceType: z.literal(MESSAGE_SOURCE_TYPE.DISCORD),
|
|
24
|
+
channelId: z.string(),
|
|
25
|
+
discordUserId: z.string(),
|
|
26
|
+
discordUsername: z.string(),
|
|
27
|
+
isDm: z.boolean(),
|
|
28
|
+
}),
|
|
29
|
+
]);
|
|
30
|
+
//# sourceMappingURL=message-source.schema.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Valid decisions for a permission request */
|
|
3
|
+
export const PERMISSION_DECISION = {
|
|
4
|
+
ALLOW: "allow",
|
|
5
|
+
DENY: "deny",
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Schema for a permission request broadcast to clients
|
|
9
|
+
*/
|
|
10
|
+
export const PermissionRequestSchema = z.object({
|
|
11
|
+
requestId: z.string(),
|
|
12
|
+
agentId: z.string(),
|
|
13
|
+
toolName: z.string(),
|
|
14
|
+
input: z.record(z.string(), z.unknown()).optional(),
|
|
15
|
+
timestamp: z.iso.datetime({ offset: true }),
|
|
16
|
+
});
|
|
17
|
+
/**
|
|
18
|
+
* Schema for a permission response from a client
|
|
19
|
+
*/
|
|
20
|
+
export const PermissionResponseSchema = z.object({
|
|
21
|
+
requestId: z.string(),
|
|
22
|
+
decision: z.enum([PERMISSION_DECISION.ALLOW, PERMISSION_DECISION.DENY]),
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=permission.schema.js.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const DAY_OF_WEEK = {
|
|
3
|
+
MONDAY: "monday",
|
|
4
|
+
TUESDAY: "tuesday",
|
|
5
|
+
WEDNESDAY: "wednesday",
|
|
6
|
+
THURSDAY: "thursday",
|
|
7
|
+
FRIDAY: "friday",
|
|
8
|
+
SATURDAY: "saturday",
|
|
9
|
+
SUNDAY: "sunday",
|
|
10
|
+
};
|
|
11
|
+
/** Zod schema for DayOfWeek values */
|
|
12
|
+
export const DayOfWeekSchema = z.enum([
|
|
13
|
+
DAY_OF_WEEK.MONDAY,
|
|
14
|
+
DAY_OF_WEEK.TUESDAY,
|
|
15
|
+
DAY_OF_WEEK.WEDNESDAY,
|
|
16
|
+
DAY_OF_WEEK.THURSDAY,
|
|
17
|
+
DAY_OF_WEEK.FRIDAY,
|
|
18
|
+
DAY_OF_WEEK.SATURDAY,
|
|
19
|
+
DAY_OF_WEEK.SUNDAY,
|
|
20
|
+
]);
|
|
21
|
+
/** Zod schema for TimeMode values */
|
|
22
|
+
export const TimeModeSchema = z.enum(["AT", "EVERY"]);
|
|
23
|
+
export const TIME_MODE = TimeModeSchema.enum;
|
|
24
|
+
/**
|
|
25
|
+
* A single time point - hour and minute pair.
|
|
26
|
+
* Both are optional to allow partial specs (e.g. minute-only for "every N minutes").
|
|
27
|
+
*/
|
|
28
|
+
export const SchedulerTimeSchema = z.object({
|
|
29
|
+
hour: z.number().int().min(0).max(23).optional(),
|
|
30
|
+
minute: z.number().int().min(0).max(59).optional(),
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=scheduler.schema.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ConfiguredFeedSchema } from "./agent.schema.js";
|
|
3
|
+
/** Settings scoped to the Super Crow system agent. */
|
|
4
|
+
export const SuperCrowSettingsSchema = z.object({
|
|
5
|
+
configuredFeeds: z.array(ConfiguredFeedSchema).default([]),
|
|
6
|
+
});
|
|
7
|
+
/** Partial update payload for super-crow settings. */
|
|
8
|
+
export const UpdateSuperCrowSettingsInputSchema = z.object({
|
|
9
|
+
configuredFeeds: z.array(ConfiguredFeedSchema).optional(),
|
|
10
|
+
});
|
|
11
|
+
/** Dashboard UX preferences — persisted user settings for the dashboard view. */
|
|
12
|
+
export const DashboardSettingsSchema = z.object({
|
|
13
|
+
/**
|
|
14
|
+
* Per-circle custom agent ordering. Key = circleId, value = agentId[] in
|
|
15
|
+
* display order. Missing circles fall back to the backend-provided order.
|
|
16
|
+
* Ids that no longer belong to the circle are ignored at render time.
|
|
17
|
+
*/
|
|
18
|
+
circleAgentOrder: z.record(z.string(), z.array(z.string())).default({}),
|
|
19
|
+
/**
|
|
20
|
+
* Custom ordering of pinned agents on the dashboard. Ids no longer pinned
|
|
21
|
+
* are ignored at render time; newly pinned agents append at the end.
|
|
22
|
+
*/
|
|
23
|
+
pinnedAgentOrder: z.array(z.string()).default([]),
|
|
24
|
+
});
|
|
25
|
+
/** Partial update payload for dashboard settings. */
|
|
26
|
+
export const UpdateDashboardSettingsInputSchema = z.object({
|
|
27
|
+
circleAgentOrder: z.record(z.string(), z.array(z.string())).optional(),
|
|
28
|
+
pinnedAgentOrder: z.array(z.string()).optional(),
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=system-settings.schema.js.map
|