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.
- package/README.md +2 -0
- package/dist/_shared/index.js +2 -2
- package/dist/_shared/schemas/agent.schema.js +125 -55
- package/dist/_shared/utils/resolve-model.js +6 -1
- package/dist/agents/crow-agent.js +21 -6
- package/dist/agents/crow-narrative-architect-agent.js +4 -3
- package/dist/agents/crow-task-dispatcher-agent.js +4 -3
- package/dist/agents/crow-world-builder-agent.js +4 -3
- package/dist/agents/system-agent-provider.js +26 -0
- package/dist/config/env.js +2 -0
- package/dist/public/assets/{architectureDiagram-3BPJPVTR-DuUOU6pr.js → architectureDiagram-3BPJPVTR-CRUuaJq5.js} +1 -1
- package/dist/public/assets/{chunk-727SXJPM-Bjc8-ytz.js → chunk-727SXJPM-3bCxa2Zq.js} +1 -1
- package/dist/public/assets/{chunk-AQP2D5EJ-Ct15bFV1.js → chunk-AQP2D5EJ-Dom7ZjX5.js} +1 -1
- package/dist/public/assets/{classDiagram-v2-Q7XG4LA2-DU0awUqf.js → classDiagram-4FO5ZUOK-BX_yaOCo.js} +1 -1
- package/dist/public/assets/{classDiagram-4FO5ZUOK-DU0awUqf.js → classDiagram-v2-Q7XG4LA2-BX_yaOCo.js} +1 -1
- package/dist/public/assets/{dagre-BM42HDAG-9AAU2jPb.js → dagre-BM42HDAG-KKbmsGYT.js} +1 -1
- package/dist/public/assets/{diagram-2AECGRRQ-BUgXkqze.js → diagram-2AECGRRQ-BY_4cf4J.js} +1 -1
- package/dist/public/assets/{diagram-5GNKFQAL-Dfxv_OUK.js → diagram-5GNKFQAL-CS0SCo68.js} +1 -1
- package/dist/public/assets/{diagram-LMA3HP47-BUi_NXCo.js → diagram-LMA3HP47-DWPp9bbA.js} +1 -1
- package/dist/public/assets/{diagram-OG6HWLK6-D5A09xa3.js → diagram-OG6HWLK6-BLYKu1nE.js} +1 -1
- package/dist/public/assets/{erDiagram-TEJ5UH35-DP8KMEsf.js → erDiagram-TEJ5UH35--mqF2IH-.js} +1 -1
- package/dist/public/assets/{flowDiagram-I6XJVG4X-DWRshnM0.js → flowDiagram-I6XJVG4X-BplDzcPA.js} +1 -1
- package/dist/public/assets/index-C0F6g385.js +505 -0
- package/dist/public/assets/{infoDiagram-5YYISTIA-DvUU6-Mk.js → infoDiagram-5YYISTIA-77oXRmwj.js} +1 -1
- package/dist/public/assets/{ishikawaDiagram-YF4QCWOH-BwkEtQo6.js → ishikawaDiagram-YF4QCWOH-DVFwKp8q.js} +1 -1
- package/dist/public/assets/{kanban-definition-UN3LZRKU-Chsc6lfZ.js → kanban-definition-UN3LZRKU-DY8-KN2p.js} +1 -1
- package/dist/public/assets/{mindmap-definition-RKZ34NQL-SchvENg6.js → mindmap-definition-RKZ34NQL-DCtZO5l6.js} +1 -1
- package/dist/public/assets/{pieDiagram-4H26LBE5-D8PG4kzl.js → pieDiagram-4H26LBE5-B4uOAUWj.js} +1 -1
- package/dist/public/assets/{requirementDiagram-4Y6WPE33-C0JZopEE.js → requirementDiagram-4Y6WPE33-DYN368AR.js} +1 -1
- package/dist/public/assets/{sequenceDiagram-3UESZ5HK-DOcoKuQk.js → sequenceDiagram-3UESZ5HK-BbfY7AeW.js} +1 -1
- package/dist/public/assets/{stateDiagram-AJRCARHV-D7IMWgel.js → stateDiagram-AJRCARHV-B_BzBqT7.js} +1 -1
- package/dist/public/assets/{stateDiagram-v2-BHNVJYJU-C5xxJ6Wc.js → stateDiagram-v2-BHNVJYJU-DZ4qVD8V.js} +1 -1
- package/dist/public/assets/{timeline-definition-PNZ67QCA-oHiSgCnQ.js → timeline-definition-PNZ67QCA-Ba8WPvkl.js} +1 -1
- package/dist/public/assets/{vennDiagram-CIIHVFJN-wc88IX6S.js → vennDiagram-CIIHVFJN-wcxj086h.js} +1 -1
- package/dist/public/assets/{wardleyDiagram-YWT4CUSO-q-LGWHCn.js → wardleyDiagram-YWT4CUSO-CfpyXdPF.js} +1 -1
- package/dist/public/assets/{xychartDiagram-2RQKCTM6-BgxGnvq2.js → xychartDiagram-2RQKCTM6-EgqIcFwJ.js} +1 -1
- package/dist/public/index.html +1 -1
- package/dist/runner/claude-code-agent-runner.js +27 -1
- package/dist/runner/github-copilot-agent-runner.js +62 -5
- package/dist/services/agent-registry.js +10 -1
- package/package.json +3 -3
- 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`.
|
package/dist/_shared/index.js
CHANGED
|
@@ -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-
|
|
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,
|
|
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 = [
|
|
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:
|
|
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
|
|
57
|
-
autoApprovedTools:
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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,
|
|
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:
|
|
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
|
package/dist/config/env.js
CHANGED
|
@@ -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),
|