crow-central-agency 0.26.10 → 0.26.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +2 -0
  2. package/dist/_shared/index.js +2 -2
  3. package/dist/_shared/schemas/agent.schema.js +125 -55
  4. package/dist/_shared/utils/resolve-model.js +6 -1
  5. package/dist/agents/crow-agent.js +21 -6
  6. package/dist/agents/crow-narrative-architect-agent.js +4 -3
  7. package/dist/agents/crow-task-dispatcher-agent.js +4 -3
  8. package/dist/agents/crow-world-builder-agent.js +4 -3
  9. package/dist/agents/system-agent-provider.js +26 -0
  10. package/dist/config/env.js +2 -0
  11. package/dist/public/assets/{architectureDiagram-3BPJPVTR-DuUOU6pr.js → architectureDiagram-3BPJPVTR-CRUuaJq5.js} +1 -1
  12. package/dist/public/assets/{chunk-727SXJPM-Bjc8-ytz.js → chunk-727SXJPM-3bCxa2Zq.js} +1 -1
  13. package/dist/public/assets/{chunk-AQP2D5EJ-Ct15bFV1.js → chunk-AQP2D5EJ-Dom7ZjX5.js} +1 -1
  14. package/dist/public/assets/{classDiagram-v2-Q7XG4LA2-DU0awUqf.js → classDiagram-4FO5ZUOK-BX_yaOCo.js} +1 -1
  15. package/dist/public/assets/{classDiagram-4FO5ZUOK-DU0awUqf.js → classDiagram-v2-Q7XG4LA2-BX_yaOCo.js} +1 -1
  16. package/dist/public/assets/{dagre-BM42HDAG-9AAU2jPb.js → dagre-BM42HDAG-KKbmsGYT.js} +1 -1
  17. package/dist/public/assets/{diagram-2AECGRRQ-BUgXkqze.js → diagram-2AECGRRQ-BY_4cf4J.js} +1 -1
  18. package/dist/public/assets/{diagram-5GNKFQAL-Dfxv_OUK.js → diagram-5GNKFQAL-CS0SCo68.js} +1 -1
  19. package/dist/public/assets/{diagram-LMA3HP47-BUi_NXCo.js → diagram-LMA3HP47-DWPp9bbA.js} +1 -1
  20. package/dist/public/assets/{diagram-OG6HWLK6-D5A09xa3.js → diagram-OG6HWLK6-BLYKu1nE.js} +1 -1
  21. package/dist/public/assets/{erDiagram-TEJ5UH35-DP8KMEsf.js → erDiagram-TEJ5UH35--mqF2IH-.js} +1 -1
  22. package/dist/public/assets/{flowDiagram-I6XJVG4X-DWRshnM0.js → flowDiagram-I6XJVG4X-BplDzcPA.js} +1 -1
  23. package/dist/public/assets/index-C0F6g385.js +505 -0
  24. package/dist/public/assets/{infoDiagram-5YYISTIA-DvUU6-Mk.js → infoDiagram-5YYISTIA-77oXRmwj.js} +1 -1
  25. package/dist/public/assets/{ishikawaDiagram-YF4QCWOH-BwkEtQo6.js → ishikawaDiagram-YF4QCWOH-DVFwKp8q.js} +1 -1
  26. package/dist/public/assets/{kanban-definition-UN3LZRKU-Chsc6lfZ.js → kanban-definition-UN3LZRKU-DY8-KN2p.js} +1 -1
  27. package/dist/public/assets/{mindmap-definition-RKZ34NQL-SchvENg6.js → mindmap-definition-RKZ34NQL-DCtZO5l6.js} +1 -1
  28. package/dist/public/assets/{pieDiagram-4H26LBE5-D8PG4kzl.js → pieDiagram-4H26LBE5-B4uOAUWj.js} +1 -1
  29. package/dist/public/assets/{requirementDiagram-4Y6WPE33-C0JZopEE.js → requirementDiagram-4Y6WPE33-DYN368AR.js} +1 -1
  30. package/dist/public/assets/{sequenceDiagram-3UESZ5HK-DOcoKuQk.js → sequenceDiagram-3UESZ5HK-BbfY7AeW.js} +1 -1
  31. package/dist/public/assets/{stateDiagram-AJRCARHV-D7IMWgel.js → stateDiagram-AJRCARHV-B_BzBqT7.js} +1 -1
  32. package/dist/public/assets/{stateDiagram-v2-BHNVJYJU-C5xxJ6Wc.js → stateDiagram-v2-BHNVJYJU-DZ4qVD8V.js} +1 -1
  33. package/dist/public/assets/{timeline-definition-PNZ67QCA-oHiSgCnQ.js → timeline-definition-PNZ67QCA-Ba8WPvkl.js} +1 -1
  34. package/dist/public/assets/{vennDiagram-CIIHVFJN-wc88IX6S.js → vennDiagram-CIIHVFJN-wcxj086h.js} +1 -1
  35. package/dist/public/assets/{wardleyDiagram-YWT4CUSO-q-LGWHCn.js → wardleyDiagram-YWT4CUSO-CfpyXdPF.js} +1 -1
  36. package/dist/public/assets/{xychartDiagram-2RQKCTM6-BgxGnvq2.js → xychartDiagram-2RQKCTM6-EgqIcFwJ.js} +1 -1
  37. package/dist/public/index.html +1 -1
  38. package/dist/runner/claude-code-agent-runner.js +27 -1
  39. package/dist/runner/github-copilot-agent-runner.js +62 -5
  40. package/dist/services/agent-registry.js +10 -1
  41. package/package.json +3 -3
  42. package/dist/public/assets/index-bzEM4vkn.js +0 -505
package/README.md CHANGED
@@ -97,6 +97,8 @@ See `.env.example` for the full list, including:
97
97
  - `LOG_LEVEL` — log verbosity (defaults to `debug` in development, `info` otherwise).
98
98
  - `CROW_SYSTEM_PATH` — directory for Crow's file-based storage. Defaults to `~/.crow`.
99
99
  - `CROW_SYSTEM_AGENT_NAME` — display name for the built-in Crow system agent (default: `Crow`).
100
+ - `CROW_SYSTEM_AGENT_PROVIDER` — provider backing the built-in system agents: `claude` or `copilot` (default: `claude`). Forced to `claude` when `DISABLE_GITHUB_COPILOT` is set.
101
+ - `CROW_SYSTEM_AGENT_COPILOT_MODEL` — model for system agents when `CROW_SYSTEM_AGENT_PROVIDER=copilot` (default: `auto`).
100
102
  - `STATIC_PATH` — override the directory served as frontend assets (auto-detected from the published bundle).
101
103
  - `CLAUDE_CLI_PATH` — explicit path to the Claude Code CLI binary when it is not on `PATH`.
102
104
  - `DISABLE_GITHUB_COPILOT` — set to `true` (or `1`) to skip starting the Copilot SDK client at boot, so GitHub Copilot is reported unavailable everywhere. Defaults to `false`.
@@ -1,4 +1,4 @@
1
- export { CLAUDE_MODELS, GITHUB_COPILOT_MODELS, CLAUDE_CODE_MODEL_OPTIONS, ModelOptionSchema, REASONING_EFFORT, ReasoningEffortSchema, CLAUDE_DEFAULT_MODEL, COPILOT_DEFAULT_MODEL, AgentIdSchema, AgentConfigSchema, AgentConfigTemplateSchema, CreateAgentInputSchema, UpdateAgentInputSchema, ToolConfigSchema, PermissionModeSchema, SettingSourceSchema, DiscoveredSkillSchema, LoopConfigSchema, ConfiguredFeedSchema, MAX_LOOP_TIMES, PERMISSION_MODE, SETTING_SOURCE, DEFAULT_SETTING_SOURCES, TOOL_MODE, DEFAULT_CLAUDE_CODE_AVAILABLE_TOOLS, DEFAULT_GITHUB_COPILOT_AVAILABLE_TOOLS, DEFAULT_AVAILABLE_TOOLS_BY_TYPE, SUBAGENT_TOOL_NAME, AGENT_TYPE, AgentTypeSchema, DEFAULT_AGENT_TYPE, AGENT_NAME_MAX_LENGTH, } from "./schemas/agent.schema.js";
1
+ export { CLAUDE_MODELS, GITHUB_COPILOT_MODELS, CLAUDE_CODE_MODEL_OPTIONS, ModelOptionSchema, REASONING_EFFORT, ReasoningEffortSchema, THINKING_MODE, CLAUDE_DEFAULT_MODEL, COPILOT_DEFAULT_MODEL, CLAUDE_AUTO_COMPACT_TOKENS_MIN, CLAUDE_AUTO_COMPACT_TOKENS_MAX, COPILOT_AUTO_COMPACT_UTILIZATION_MAX, AgentIdSchema, AgentConfigSchema, AgentConfigTemplateSchema, CreateAgentInputSchema, UpdateAgentInputSchema, ToolConfigSchema, PermissionModeSchema, SettingSourceSchema, DiscoveredSkillSchema, LoopConfigSchema, ConfiguredFeedSchema, MAX_LOOP_TIMES, PERMISSION_MODE, SETTING_SOURCE, DEFAULT_SETTING_SOURCES, TOOL_MODE, CLAUDE_CODE_TOOL, GITHUB_COPILOT_TOOL, DEFAULT_CLAUDE_CODE_AVAILABLE_TOOLS, DEFAULT_GITHUB_COPILOT_AVAILABLE_TOOLS, DEFAULT_AVAILABLE_TOOLS_BY_TYPE, SUBAGENT_TOOL_NAME, AGENT_TYPE, AgentTypeSchema, DEFAULT_AGENT_TYPE, AGENT_NAME_MAX_LENGTH, } from "./schemas/agent.schema.js";
2
2
  export { SchedulerTimeSchema, DAY_OF_WEEK, DayOfWeekSchema, TimeModeSchema, TIME_MODE, } from "./schemas/scheduler.schema.js";
3
3
  export { createApiSuccessSchema, ApiErrorSchema, } from "./schemas/api-response.schema.js";
4
4
  export { SessionUsageSchema, PendingPermissionInfoSchema, PendingInstructionReminderSchema, AgentRuntimeStateSchema, AgentActivitySchema, AGENT_ACTIVITY_TYPE, AGENT_STATUS, MAX_INPUT_HISTORY, } from "./schemas/agent-runtime-state.schema.js";
@@ -16,7 +16,7 @@ export { SystemCapabilitiesSchema } from "./schemas/system-capabilities.schema.j
16
16
  export { GENERATION_TYPE, GenerationTypeSchema, GenerateRequestSchema, } from "./schemas/generation.schema.js";
17
17
  export { AGENT_BUILDER_LIMITS, AGENT_BUILDER_WORD_BUDGET, AGENT_BUILDER_DRAFT_STATUS, AgentBuilderDraftStatusSchema, AgentBuilderBuiltAgentSchema, AgentBuilderBuildResultSchema, FleetAgentSchema, FleetResponseSchema, AgentBuilderDraftSchema, AgentBuilderDesignRequestSchema, AgentBuilderPatchRequestSchema, FleetNamedRefSchema, FleetAgentViewSchema, AgentBuilderDraftViewSchema, AgentBuilderDraftResponseSchema, AgentBuilderDraftMutationResponseSchema, } from "./schemas/agent-builder.schema.js";
18
18
  export { applyAgentOrder } from "./utils/apply-agent-order.js";
19
- export { MODEL_ALIASES, resolveModel } from "./utils/resolve-model.js";
19
+ export { MODEL_ALIASES, resolveModel, modelSupportsAdaptiveThinking } from "./utils/resolve-model.js";
20
20
  export { BASE_CIRCLE_ID, BASE_CIRCLE_NAME } from "./constants/system-circle.js";
21
21
  export { ENTITY_TYPE, RELATIONSHIP_TYPE, AgentCircleSchema, CreateAgentCircleInputSchema, UpdateAgentCircleInputSchema, EntityTypeSchema, RelationshipTypeSchema, RelationshipSchema, CreateRelationshipInputSchema, CircleMemberSchema, } from "./schemas/agent-circle.schema.js";
22
22
  export { CROW_SYSTEM_AGENT_ID, CROW_TASK_DISPATCHER_AGENT_ID, CROW_NARRATIVE_ARCHITECT_AGENT_ID, CROW_WORLD_BUILDER_AGENT_ID, } from "./constants/system-agent.js";
@@ -3,7 +3,8 @@ import { DiscordConfigSchema } from "./discord-config.schema.js";
3
3
  import { DayOfWeekSchema, SchedulerTimeSchema, TIME_MODE, TimeModeSchema } from "./scheduler.schema.js";
4
4
  export const CLAUDE_MODELS = {
5
5
  HAIKU: "claude-haiku-4-5",
6
- SONNET: "claude-sonnet-4-6",
6
+ SONNET: "claude-sonnet-5",
7
+ SONNET_4_6: "claude-sonnet-4-6",
7
8
  SONNET_4_5: "claude-sonnet-4-5",
8
9
  OPUS: "claude-opus-4-8",
9
10
  OPUS_4_7: "claude-opus-4-7",
@@ -36,18 +37,37 @@ export const ReasoningEffortSchema = z.enum([
36
37
  REASONING_EFFORT.XHIGH,
37
38
  REASONING_EFFORT.MAX,
38
39
  ]);
40
+ export const THINKING_MODE = {
41
+ ENABLED: "enabled",
42
+ DISABLED: "disabled",
43
+ ADAPTIVE: "adaptive",
44
+ };
45
+ export const ThinkingModeSchema = z.enum([THINKING_MODE.ENABLED, THINKING_MODE.DISABLED, THINKING_MODE.ADAPTIVE]);
46
+ /** Extended-thinking control for Claude Code agents; budget applies only to `enabled` mode. */
47
+ export const AgentThinkingConfigSchema = z.object({
48
+ mode: ThinkingModeSchema,
49
+ budget: z.number().int().positive().optional(),
50
+ });
39
51
  /** A selectable agent model, surfaced to the editor's model picker. */
40
52
  export const ModelOptionSchema = z.object({
41
53
  value: z.string(),
42
54
  label: z.string(),
43
55
  /** Reasoning effort levels the model supports; omitted when the model has no effort control. */
44
56
  supportedEfforts: z.array(ReasoningEffortSchema).optional(),
57
+ supportsAdaptiveThinking: z.boolean().optional(),
45
58
  });
46
59
  export const CLAUDE_CODE_MODEL_OPTIONS = [
47
60
  {
48
61
  value: CLAUDE_MODELS.SONNET,
62
+ label: "Claude Sonnet 5",
63
+ supportedEfforts: [REASONING_EFFORT.LOW, REASONING_EFFORT.MEDIUM, REASONING_EFFORT.HIGH, REASONING_EFFORT.MAX],
64
+ supportsAdaptiveThinking: true,
65
+ },
66
+ {
67
+ value: CLAUDE_MODELS.SONNET_4_6,
49
68
  label: "Claude Sonnet 4.6",
50
69
  supportedEfforts: [REASONING_EFFORT.LOW, REASONING_EFFORT.MEDIUM, REASONING_EFFORT.HIGH, REASONING_EFFORT.MAX],
70
+ supportsAdaptiveThinking: true,
51
71
  },
52
72
  {
53
73
  value: CLAUDE_MODELS.OPUS,
@@ -59,6 +79,7 @@ export const CLAUDE_CODE_MODEL_OPTIONS = [
59
79
  REASONING_EFFORT.XHIGH,
60
80
  REASONING_EFFORT.MAX,
61
81
  ],
82
+ supportsAdaptiveThinking: true,
62
83
  },
63
84
  {
64
85
  value: CLAUDE_MODELS.OPUS_4_7,
@@ -70,6 +91,7 @@ export const CLAUDE_CODE_MODEL_OPTIONS = [
70
91
  REASONING_EFFORT.XHIGH,
71
92
  REASONING_EFFORT.MAX,
72
93
  ],
94
+ supportsAdaptiveThinking: true,
73
95
  },
74
96
  { value: CLAUDE_MODELS.HAIKU, label: "Claude Haiku 4.5" },
75
97
  {
@@ -82,6 +104,7 @@ export const CLAUDE_CODE_MODEL_OPTIONS = [
82
104
  REASONING_EFFORT.XHIGH,
83
105
  REASONING_EFFORT.MAX,
84
106
  ],
107
+ supportsAdaptiveThinking: true,
85
108
  },
86
109
  ];
87
110
  /** Default model for new agents */
@@ -98,65 +121,88 @@ export const TOOL_MODE = {
98
121
  };
99
122
  /** The SDK tool name used to launch a subagent */
100
123
  export const SUBAGENT_TOOL_NAME = "Agent";
124
+ /**
125
+ * Builtin tool names for Claude Code agents.
126
+ */
127
+ export const CLAUDE_CODE_TOOL = {
128
+ ASK_USER_QUESTION: "AskUserQuestion",
129
+ BASH: "Bash",
130
+ CRON_CREATE: "CronCreate",
131
+ CRON_DELETE: "CronDelete",
132
+ CRON_LIST: "CronList",
133
+ EDIT: "Edit",
134
+ ENTER_PLAN_MODE: "EnterPlanMode",
135
+ ENTER_WORKTREE: "EnterWorktree",
136
+ EXIT_PLAN_MODE: "ExitPlanMode",
137
+ EXIT_WORKTREE: "ExitWorktree",
138
+ GLOB: "Glob",
139
+ GREP: "Grep",
140
+ LSP: "LSP",
141
+ MONITOR: "Monitor",
142
+ NOTEBOOK_EDIT: "NotebookEdit",
143
+ POWER_SHELL: "PowerShell",
144
+ PUSH_NOTIFICATION: "PushNotification",
145
+ READ: "Read",
146
+ REMOTE_TRIGGER: "RemoteTrigger",
147
+ SCHEDULE_WAKEUP: "ScheduleWakeup",
148
+ SKILL: "Skill",
149
+ TASK: "Task",
150
+ TASK_CREATE: "TaskCreate",
151
+ TASK_GET: "TaskGet",
152
+ TASK_LIST: "TaskList",
153
+ TASK_OUTPUT: "TaskOutput",
154
+ TASK_STOP: "TaskStop",
155
+ TASK_UPDATE: "TaskUpdate",
156
+ TOOL_SEARCH: "ToolSearch",
157
+ WEB_FETCH: "WebFetch",
158
+ WEB_SEARCH: "WebSearch",
159
+ WORKFLOW: "Workflow",
160
+ WRITE: "Write",
161
+ };
162
+ /**
163
+ * Builtin tool names for GitHub Copilot agents. Superset across platforms, models, and config:
164
+ * the runtime swaps the shell family (bash on Linux/macOS, powershell on Windows) and the file-edit
165
+ * tools (str_replace_editor vs create/edit/view vs apply_patch) per model, and surfaces web_search
166
+ * only when config discovery is enabled. Agents may run on any of these, so all known names are listed.
167
+ */
168
+ export const GITHUB_COPILOT_TOOL = {
169
+ BASH: "bash",
170
+ WRITE_BASH: "write_bash",
171
+ READ_BASH: "read_bash",
172
+ STOP_BASH: "stop_bash",
173
+ LIST_BASH: "list_bash",
174
+ POWER_SHELL: "powershell",
175
+ WRITE_POWER_SHELL: "write_powershell",
176
+ READ_POWER_SHELL: "read_powershell",
177
+ STOP_POWER_SHELL: "stop_powershell",
178
+ LIST_POWER_SHELL: "list_powershell",
179
+ STR_REPLACE_EDITOR: "str_replace_editor",
180
+ APPLY_PATCH: "apply_patch",
181
+ VIEW: "view",
182
+ CREATE: "create",
183
+ EDIT: "edit",
184
+ GREP: "grep",
185
+ RG: "rg",
186
+ GLOB: "glob",
187
+ WEB_FETCH: "web_fetch",
188
+ WEB_SEARCH: "web_search",
189
+ READ_AGENT: "read_agent",
190
+ LIST_AGENTS: "list_agents",
191
+ SKILL: "skill",
192
+ TASK: "task",
193
+ SQL: "sql",
194
+ REPORT_INTENT: "report_intent",
195
+ ASK_USER: "ask_user",
196
+ FETCH_COPILOT_CLI_DOCUMENTATION: "fetch_copilot_cli_documentation",
197
+ };
101
198
  /**
102
199
  * Default builtin tool catalog for Claude Code agents.
103
200
  */
104
- export const DEFAULT_CLAUDE_CODE_AVAILABLE_TOOLS = [
105
- "AskUserQuestion",
106
- "Bash",
107
- "CronCreate",
108
- "CronDelete",
109
- "CronList",
110
- "Edit",
111
- "EnterPlanMode",
112
- "EnterWorktree",
113
- "ExitPlanMode",
114
- "ExitWorktree",
115
- "Glob",
116
- "Grep",
117
- "LSP",
118
- "Monitor",
119
- "NotebookEdit",
120
- "PowerShell",
121
- "PushNotification",
122
- "Read",
123
- "RemoteTrigger",
124
- "ScheduleWakeup",
125
- "Skill",
126
- "Task",
127
- "TaskCreate",
128
- "TaskGet",
129
- "TaskList",
130
- "TaskOutput",
131
- "TaskStop",
132
- "TaskUpdate",
133
- "ToolSearch",
134
- "WebFetch",
135
- "WebSearch",
136
- "Workflow",
137
- "Write",
138
- ];
201
+ export const DEFAULT_CLAUDE_CODE_AVAILABLE_TOOLS = Object.values(CLAUDE_CODE_TOOL);
139
202
  /**
140
203
  * Default builtin tool catalog for GitHub Copilot agents.
141
204
  */
142
- export const DEFAULT_GITHUB_COPILOT_AVAILABLE_TOOLS = [
143
- "bash",
144
- "write_bash",
145
- "read_bash",
146
- "stop_bash",
147
- "list_bash",
148
- "view",
149
- "create",
150
- "edit",
151
- "web_fetch",
152
- "report_intent",
153
- "fetch_copilot_cli_documentation",
154
- "skill",
155
- "ask_user",
156
- "grep",
157
- "glob",
158
- "task",
159
- ];
205
+ export const DEFAULT_GITHUB_COPILOT_AVAILABLE_TOOLS = Object.values(GITHUB_COPILOT_TOOL);
160
206
  /**
161
207
  * Setting sources matching SDK SettingSource type.
162
208
  * Controls which SDK configuration sources are included in agent queries.
@@ -248,6 +294,23 @@ export const AgentVoiceConfigSchema = z.object({
248
294
  voiceName: z.string().optional(),
249
295
  stylePrompt: z.string().optional(),
250
296
  });
297
+ /**
298
+ * Bounds the Claude Code SDK enforces on its auto-compact window (`int().min(1e5).max(1e6)`);
299
+ * out-of-range values are silently dropped by the SDK, so we validate against the same range.
300
+ */
301
+ export const CLAUDE_AUTO_COMPACT_TOKENS_MIN = 100000;
302
+ export const CLAUDE_AUTO_COMPACT_TOKENS_MAX = 1000000;
303
+ /** GitHub Copilot's background-compaction threshold is a fraction (0-1) of the context window. */
304
+ export const COPILOT_AUTO_COMPACT_UTILIZATION_MAX = 1;
305
+ /**
306
+ * Manual auto-compaction thresholds. `tokensThreshold` drives Claude Code (context token count),
307
+ * `utilizationThreshold` drives GitHub Copilot (0-1 fraction of the context window). Each provider
308
+ * reads only its own field; an unset config leaves the provider's default behavior in place.
309
+ */
310
+ export const ContextAutoCompactionConfigSchema = z.object({
311
+ tokensThreshold: z.number().int().min(CLAUDE_AUTO_COMPACT_TOKENS_MIN).max(CLAUDE_AUTO_COMPACT_TOKENS_MAX).optional(),
312
+ utilizationThreshold: z.number().positive().max(COPILOT_AUTO_COMPACT_UTILIZATION_MAX).optional(),
313
+ });
251
314
  /**
252
315
  * Full agent configuration - persisted to disk in agents.json
253
316
  */
@@ -260,6 +323,8 @@ export const AgentConfigSchema = z.object({
260
323
  persona: z.string().optional(),
261
324
  model: z.string().default(CLAUDE_DEFAULT_MODEL),
262
325
  effort: ReasoningEffortSchema.optional(),
326
+ thinkingConfig: AgentThinkingConfigSchema.optional(),
327
+ contextAutoCompactionConfig: ContextAutoCompactionConfigSchema.optional(),
263
328
  permissionMode: PermissionModeSchema.default(PERMISSION_MODE.DEFAULT),
264
329
  settingSources: z.array(SettingSourceSchema).default([...DEFAULT_SETTING_SOURCES]),
265
330
  settingSourceConfig: SettingSourceConfigSchema.optional(),
@@ -294,6 +359,8 @@ export const CreateAgentInputSchema = z.object({
294
359
  persona: z.string().optional(),
295
360
  model: z.string().optional(),
296
361
  effort: ReasoningEffortSchema.optional(),
362
+ thinkingConfig: AgentThinkingConfigSchema.optional(),
363
+ contextAutoCompactionConfig: ContextAutoCompactionConfigSchema.optional(),
297
364
  permissionMode: PermissionModeSchema.optional(),
298
365
  settingSources: z.array(SettingSourceSchema).optional(),
299
366
  settingSourceConfig: SettingSourceConfigInputSchema.optional(),
@@ -317,8 +384,9 @@ export const UpdateAgentInputSchema = z.object({
317
384
  workspace: z.string().optional(),
318
385
  persona: z.string().optional(),
319
386
  model: z.string().optional(),
320
- // null explicitly clears the effort (back to provider default); undefined leaves it unchanged.
321
387
  effort: ReasoningEffortSchema.nullish(),
388
+ thinkingConfig: AgentThinkingConfigSchema.nullish(),
389
+ contextAutoCompactionConfig: ContextAutoCompactionConfigSchema.nullish(),
322
390
  permissionMode: PermissionModeSchema.optional(),
323
391
  settingSources: z.array(SettingSourceSchema).optional(),
324
392
  settingSourceConfig: SettingSourceConfigInputSchema.optional(),
@@ -341,6 +409,8 @@ export const AgentConfigTemplateSchema = AgentConfigSchema.pick({
341
409
  persona: true,
342
410
  model: true,
343
411
  effort: true,
412
+ thinkingConfig: true,
413
+ contextAutoCompactionConfig: true,
344
414
  permissionMode: true,
345
415
  settingSources: true,
346
416
  availableTools: true,
@@ -1,4 +1,4 @@
1
- import { CLAUDE_MODELS } from "../schemas/agent.schema.js";
1
+ import { CLAUDE_CODE_MODEL_OPTIONS, CLAUDE_MODELS, } from "../schemas/agent.schema.js";
2
2
  /**
3
3
  * Maps retired model IDs to their successor.
4
4
  */
@@ -12,4 +12,9 @@ export const COPILOT_MODEL_ALIASES = {};
12
12
  export function resolveModel(model) {
13
13
  return MODEL_ALIASES[model] ?? COPILOT_MODEL_ALIASES[model] ?? model;
14
14
  }
15
+ /** Whether a Claude model supports adaptive thinking, resolving retired IDs to their successor. */
16
+ export function modelSupportsAdaptiveThinking(model) {
17
+ const resolved = resolveModel(model);
18
+ return CLAUDE_CODE_MODEL_OPTIONS.find((option) => option.value === resolved)?.supportsAdaptiveThinking ?? false;
19
+ }
15
20
  //# sourceMappingURL=resolve-model.js.map
@@ -1,5 +1,6 @@
1
- import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CROW_SYSTEM_AGENT_ID, AGENT_TYPE, } from "../_shared/index.js";
1
+ import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CLAUDE_CODE_TOOL, GITHUB_COPILOT_TOOL, AGENT_TYPE, CROW_SYSTEM_AGENT_ID, } from "../_shared/index.js";
2
2
  import { env } from "../config/env.js";
3
+ import { SYSTEM_AGENT_TYPE, resolveSystemAgentModel } from "./system-agent-provider.js";
3
4
  import { createMessageContentFromTemplate, getDefaultPromptContext } from "../utils/message-template.js";
4
5
  import path from "node:path";
5
6
  import { SYSTEM_AGENTS_PROJECT_DIR_NAME } from "../config/constants.js";
@@ -36,25 +37,39 @@ const CROW_SYSTEM_AGENT_PERSONA = {
36
37
  ],
37
38
  };
38
39
  const SUPER_CROW_BIRTHDAY = "1970-01-01T00:00:00Z";
39
- const SUPER_CROW_TOOLS = ["Glob", "Grep", "Read", "WebFetch", "WebSearch"];
40
+ const SUPER_CROW_TOOLS = [
41
+ CLAUDE_CODE_TOOL.GLOB,
42
+ CLAUDE_CODE_TOOL.GREP,
43
+ CLAUDE_CODE_TOOL.READ,
44
+ CLAUDE_CODE_TOOL.WEB_FETCH,
45
+ CLAUDE_CODE_TOOL.WEB_SEARCH,
46
+ ];
47
+ const SUPER_CROW_TOOLS_COPILOT = [
48
+ GITHUB_COPILOT_TOOL.GLOB,
49
+ GITHUB_COPILOT_TOOL.GREP,
50
+ GITHUB_COPILOT_TOOL.VIEW,
51
+ GITHUB_COPILOT_TOOL.WEB_FETCH,
52
+ GITHUB_COPILOT_TOOL.WEB_SEARCH,
53
+ ];
40
54
  /** Build the Crow system agent config - built-in, immutable, not persisted */
41
55
  export function getCrowAgent() {
42
56
  const persona = createMessageContentFromTemplate(CROW_SYSTEM_AGENT_PERSONA, getDefaultPromptContext());
57
+ const tools = SYSTEM_AGENT_TYPE === AGENT_TYPE.GITHUB_COPILOT ? SUPER_CROW_TOOLS_COPILOT : SUPER_CROW_TOOLS;
43
58
  return {
44
59
  id: CROW_SYSTEM_AGENT_ID,
45
- type: AGENT_TYPE.CLAUDE_CODE,
60
+ type: SYSTEM_AGENT_TYPE,
46
61
  name: CROW_SYSTEM_AGENT_NAME,
47
62
  description: "Chief of staff agent acts as the ultimate coordinator for all agents and primary interfacing with the user.",
48
63
  workspace: path.join(env.CROW_SYSTEM_PATH, SYSTEM_AGENTS_PROJECT_DIR_NAME),
49
64
  persona,
50
- model: CLAUDE_MODELS.SONNET,
65
+ model: resolveSystemAgentModel(CLAUDE_MODELS.SONNET),
51
66
  permissionMode: PERMISSION_MODE.DEFAULT,
52
67
  settingSources: [],
53
68
  availableTools: [],
54
69
  toolConfig: {
55
70
  mode: TOOL_MODE.RESTRICTED,
56
- tools: SUPER_CROW_TOOLS,
57
- autoApprovedTools: SUPER_CROW_TOOLS,
71
+ tools,
72
+ autoApprovedTools: tools,
58
73
  },
59
74
  mcpServerIds: [],
60
75
  sensorIds: [GEOLOCATION_SENSOR_ID, WEATHER_SENSOR_ID],
@@ -1,6 +1,7 @@
1
- import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CROW_NARRATIVE_ARCHITECT_AGENT_ID, AGENT_TYPE, } from "../_shared/index.js";
1
+ import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CROW_NARRATIVE_ARCHITECT_AGENT_ID, } from "../_shared/index.js";
2
2
  import path from "node:path";
3
3
  import { env } from "../config/env.js";
4
+ import { SYSTEM_AGENT_TYPE, resolveSystemAgentModel } from "./system-agent-provider.js";
4
5
  import { createMessageContentFromTemplate, getDefaultPromptContext } from "../utils/message-template.js";
5
6
  import { SYSTEM_AGENTS_PROJECT_DIR_NAME } from "../config/constants.js";
6
7
  import { WORLD_BUILDER_BEGIN, WORLD_BUILDER_END } from "../services/world-builder/world-builder.constants.js";
@@ -67,12 +68,12 @@ export function getNarrativeArchitectAgent() {
67
68
  const persona = createMessageContentFromTemplate(CROW_NARRATIVE_ARCHITECT_AGENT_PERSONA, getDefaultPromptContext());
68
69
  return {
69
70
  id: CROW_NARRATIVE_ARCHITECT_AGENT_ID,
70
- type: AGENT_TYPE.CLAUDE_CODE,
71
+ type: SYSTEM_AGENT_TYPE,
71
72
  name: CROW_NARRATIVE_ARCHITECT_AGENT_NAME,
72
73
  description: "Internal generation specialist. Authors agent personas and generates/reinforces AGENT.md.",
73
74
  workspace: path.join(env.CROW_SYSTEM_PATH, SYSTEM_AGENTS_PROJECT_DIR_NAME),
74
75
  persona,
75
- model: CLAUDE_MODELS.SONNET,
76
+ model: resolveSystemAgentModel(CLAUDE_MODELS.SONNET),
76
77
  permissionMode: PERMISSION_MODE.DEFAULT,
77
78
  settingSources: [],
78
79
  availableTools: [],
@@ -1,5 +1,6 @@
1
- import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CROW_TASK_DISPATCHER_AGENT_ID, CROW_SYSTEM_AGENT_ID, AGENT_TYPE, } from "../_shared/index.js";
1
+ import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CROW_TASK_DISPATCHER_AGENT_ID, CROW_SYSTEM_AGENT_ID, } from "../_shared/index.js";
2
2
  import { env } from "../config/env.js";
3
+ import { SYSTEM_AGENT_TYPE, resolveSystemAgentModel } from "./system-agent-provider.js";
3
4
  import { createMessageContentFromTemplate, getDefaultPromptContext } from "../utils/message-template.js";
4
5
  import path from "node:path";
5
6
  import { SYSTEM_AGENTS_PROJECT_DIR_NAME } from "../config/constants.js";
@@ -39,12 +40,12 @@ export function getTaskDispatcherAgent() {
39
40
  const persona = createMessageContentFromTemplate(CROW_TASK_DISPATCHER_AGENT_PERSONA, getDefaultPromptContext({ crowSystemAgentId: CROW_SYSTEM_AGENT_ID }));
40
41
  return {
41
42
  id: CROW_TASK_DISPATCHER_AGENT_ID,
42
- type: AGENT_TYPE.CLAUDE_CODE,
43
+ type: SYSTEM_AGENT_TYPE,
43
44
  name: CROW_TASK_DISPATCHER_AGENT_NAME,
44
45
  description: "Routes unassigned tasks to the most appropriate agent or user. Does not execute tasks.",
45
46
  workspace: path.join(env.CROW_SYSTEM_PATH, SYSTEM_AGENTS_PROJECT_DIR_NAME),
46
47
  persona,
47
- model: CLAUDE_MODELS.HAIKU,
48
+ model: resolveSystemAgentModel(CLAUDE_MODELS.HAIKU),
48
49
  permissionMode: PERMISSION_MODE.DEFAULT,
49
50
  settingSources: [],
50
51
  availableTools: [],
@@ -1,6 +1,7 @@
1
- import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CROW_WORLD_BUILDER_AGENT_ID, AGENT_TYPE, AGENT_NAME_MAX_LENGTH, } from "../_shared/index.js";
1
+ import { PERMISSION_MODE, TOOL_MODE, CLAUDE_MODELS, CROW_WORLD_BUILDER_AGENT_ID, AGENT_NAME_MAX_LENGTH, } from "../_shared/index.js";
2
2
  import path from "node:path";
3
3
  import { env } from "../config/env.js";
4
+ import { SYSTEM_AGENT_TYPE, resolveSystemAgentModel } from "./system-agent-provider.js";
4
5
  import { createMessageContentFromTemplate, getDefaultPromptContext } from "../utils/message-template.js";
5
6
  import { SYSTEM_AGENTS_PROJECT_DIR_NAME } from "../config/constants.js";
6
7
  import { WORLD_BUILDER_BEGIN, WORLD_BUILDER_END } from "../services/world-builder/world-builder.constants.js";
@@ -72,12 +73,12 @@ export function getWorldBuilderAgent() {
72
73
  const persona = createMessageContentFromTemplate(CROW_WORLD_BUILDER_AGENT_PERSONA, getDefaultPromptContext());
73
74
  return {
74
75
  id: CROW_WORLD_BUILDER_AGENT_ID,
75
- type: AGENT_TYPE.CLAUDE_CODE,
76
+ type: SYSTEM_AGENT_TYPE,
76
77
  name: CROW_WORLD_BUILDER_AGENT_NAME,
77
78
  description: "Internal fleet architect. Designs a set of agents from a requirement as directional briefs.",
78
79
  workspace: path.join(env.CROW_SYSTEM_PATH, SYSTEM_AGENTS_PROJECT_DIR_NAME),
79
80
  persona,
80
- model: CLAUDE_MODELS.SONNET,
81
+ model: resolveSystemAgentModel(CLAUDE_MODELS.SONNET),
81
82
  permissionMode: PERMISSION_MODE.DEFAULT,
82
83
  settingSources: [],
83
84
  availableTools: [],
@@ -0,0 +1,26 @@
1
+ import { AGENT_TYPE, GITHUB_COPILOT_MODELS } from "../_shared/index.js";
2
+ import { env } from "../config/env.js";
3
+ /** Accepted CROW_SYSTEM_AGENT_PROVIDER values. */
4
+ const SYSTEM_AGENT_PROVIDER = {
5
+ CLAUDE: "claude",
6
+ COPILOT: "copilot",
7
+ };
8
+ /**
9
+ * Provider backing the built-in system agents, controlled by CROW_SYSTEM_AGENT_PROVIDER
10
+ * (claude | copilot), defaulting to Claude Code. Forced back to Claude Code when
11
+ * DISABLE_GITHUB_COPILOT is set, so system agents never point at a runtime that never starts.
12
+ */
13
+ export const SYSTEM_AGENT_TYPE = !env.DISABLE_GITHUB_COPILOT && env.CROW_SYSTEM_AGENT_PROVIDER === SYSTEM_AGENT_PROVIDER.COPILOT
14
+ ? AGENT_TYPE.GITHUB_COPILOT
15
+ : AGENT_TYPE.CLAUDE_CODE;
16
+ /**
17
+ * Resolve the model a system agent runs on for the active provider. Claude Code keeps the agent's
18
+ * per-tier Claude model; Copilot defaults every system agent to `auto`, overridable in one place via
19
+ * CROW_SYSTEM_AGENT_COPILOT_MODEL.
20
+ */
21
+ export function resolveSystemAgentModel(claudeModel) {
22
+ return SYSTEM_AGENT_TYPE === AGENT_TYPE.GITHUB_COPILOT
23
+ ? (env.CROW_SYSTEM_AGENT_COPILOT_MODEL ?? GITHUB_COPILOT_MODELS.AUTO)
24
+ : claudeModel;
25
+ }
26
+ //# sourceMappingURL=system-agent-provider.js.map
@@ -54,6 +54,8 @@ export const env = {
54
54
  CROW_SYSTEM_PATH: expandPath(crowSysPath),
55
55
  STATIC_PATH: expandPath(getOptional("STATIC_PATH") ?? DEFAULT_STATIC_DIR),
56
56
  CROW_SYSTEM_AGENT_NAME: getOptional("CROW_SYSTEM_AGENT_NAME"),
57
+ CROW_SYSTEM_AGENT_PROVIDER: getOptional("CROW_SYSTEM_AGENT_PROVIDER")?.trim().toLowerCase(),
58
+ CROW_SYSTEM_AGENT_COPILOT_MODEL: getOptional("CROW_SYSTEM_AGENT_COPILOT_MODEL"),
57
59
  CLAUDE_CLI_PATH: getOptional("CLAUDE_CLI_PATH"),
58
60
  DISABLE_GITHUB_COPILOT: getBoolean("DISABLE_GITHUB_COPILOT"),
59
61
  CLOSED_TASK_RETENTION_DAYS: getOptionalNumber("CLOSED_TASK_RETENTION_DAYS", 30),