drizzy-agent 0.6.2 → 0.7.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/README.md +3 -3
- package/dist/agents/builtin-agents/{atlas-agent.d.ts → orchestrator-agent.d.ts} +1 -1
- package/dist/agents/{atlas → orchestrator}/agent.d.ts +9 -9
- package/dist/agents/{atlas → orchestrator}/default.d.ts +3 -3
- package/dist/agents/{atlas → orchestrator}/gemini.d.ts +3 -3
- package/dist/agents/{atlas → orchestrator}/gpt.d.ts +3 -3
- package/dist/agents/orchestrator/index.d.ts +2 -0
- package/dist/agents/{atlas → orchestrator}/prompt-section-builder.d.ts +1 -1
- package/dist/agents/types.d.ts +2 -2
- package/dist/cli/index.js +26 -26
- package/dist/config/schema/agent-names.d.ts +3 -3
- package/dist/config/schema/agent-overrides.d.ts +1 -1
- package/dist/config/schema/drizzy-agent-config.d.ts +2 -2
- package/dist/config/schema/hooks.d.ts +1 -1
- package/dist/create-hooks.d.ts +1 -1
- package/dist/drizzy-agent.schema.json +2 -2
- package/dist/features/boulder-state/types.d.ts +1 -1
- package/dist/features/builtin-commands/templates/start-work.d.ts +1 -1
- package/dist/features/hook-message-injector/injector.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/{atlas → orchestrator}/event-handler.d.ts +3 -3
- package/dist/hooks/orchestrator/hook-name.d.ts +1 -0
- package/dist/hooks/orchestrator/idle-event.d.ts +8 -0
- package/dist/hooks/orchestrator/index.d.ts +3 -0
- package/dist/hooks/{atlas/atlas-hook.d.ts → orchestrator/orchestrator-hook.d.ts} +2 -2
- package/dist/hooks/{atlas → orchestrator}/types.d.ts +1 -1
- package/dist/hooks/planner-md-only/agent-resolution.d.ts +1 -1
- package/dist/index.js +358 -151
- package/dist/plugin/hooks/create-continuation-hooks.d.ts +2 -2
- package/dist/shared/agent-display-names.d.ts +1 -1
- package/dist/shared/agent-model-defaults.d.ts +2 -2
- package/package.json +12 -12
- package/dist/agents/atlas/index.d.ts +0 -2
- package/dist/hooks/atlas/hook-name.d.ts +0 -1
- package/dist/hooks/atlas/idle-event.d.ts +0 -8
- package/dist/hooks/atlas/index.d.ts +0 -3
- /package/dist/hooks/{atlas → orchestrator}/boulder-continuation-injector.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/coder-path.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/is-abort-error.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/recent-model-resolver.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/session-last-agent.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/subagent-session-id.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/system-reminder-templates.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/tool-execute-after.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/tool-execute-before.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/verification-reminders.d.ts +0 -0
- /package/dist/hooks/{atlas → orchestrator}/write-edit-tool-policy.d.ts +0 -0
package/dist/index.js
CHANGED
|
@@ -16072,8 +16072,8 @@ var AGENT_NAME_MAP = {
|
|
|
16072
16072
|
planner: "planner",
|
|
16073
16073
|
"Prometheus (Planner)": "planner",
|
|
16074
16074
|
prometheus: "planner",
|
|
16075
|
-
|
|
16076
|
-
|
|
16075
|
+
Orchestrator: "orchestrator",
|
|
16076
|
+
orchestrator: "orchestrator",
|
|
16077
16077
|
"Plan Consultant": "plan-consultant",
|
|
16078
16078
|
metis: "plan-consultant",
|
|
16079
16079
|
"plan-consultant": "plan-consultant",
|
|
@@ -16099,7 +16099,7 @@ var BUILTIN_AGENT_NAMES = new Set([
|
|
|
16099
16099
|
"plan-reviewer",
|
|
16100
16100
|
"planner",
|
|
16101
16101
|
"prometheus",
|
|
16102
|
-
"
|
|
16102
|
+
"orchestrator",
|
|
16103
16103
|
"build"
|
|
16104
16104
|
]);
|
|
16105
16105
|
function migrateAgentNames(agents) {
|
|
@@ -16117,7 +16117,7 @@ function migrateAgentNames(agents) {
|
|
|
16117
16117
|
// src/shared/migration/hook-names.ts
|
|
16118
16118
|
var HOOK_NAME_MAP = {
|
|
16119
16119
|
"anthropic-auto-compact": "anthropic-context-window-limit-recovery",
|
|
16120
|
-
"coder-orchestrator": "
|
|
16120
|
+
"coder-orchestrator": "orchestrator",
|
|
16121
16121
|
"coder-gpt-hephaestus-reminder": "no-coder-gpt",
|
|
16122
16122
|
"no-coder-gpt": "no-coder-gpt",
|
|
16123
16123
|
"coder-junior-notepad": "coder-junior-notepad",
|
|
@@ -16621,7 +16621,7 @@ var AGENT_DISPLAY_NAMES = {
|
|
|
16621
16621
|
coder: "Coder",
|
|
16622
16622
|
gptcoder: "GPTCoder",
|
|
16623
16623
|
planner: "Planner",
|
|
16624
|
-
|
|
16624
|
+
orchestrator: "Orchestrator",
|
|
16625
16625
|
"coder-junior": "Coder Junior",
|
|
16626
16626
|
planConsultant: "Plan Consultant",
|
|
16627
16627
|
planReviewer: "Plan Reviewer",
|
|
@@ -16758,7 +16758,7 @@ var AGENT_MODEL_DEFAULTS = {
|
|
|
16758
16758
|
],
|
|
16759
16759
|
includeInInstall: true
|
|
16760
16760
|
},
|
|
16761
|
-
|
|
16761
|
+
orchestrator: {
|
|
16762
16762
|
chain: [{ providers: ["kimi-for-coding"], model: "k2p5" }, { providers: CLAUDE_PROVIDERS, model: "claude-sonnet-4-6" }, { providers: CLAUDE_PROVIDERS, model: "claude-sonnet-4-5" }, { providers: OPENAI_PROVIDERS, model: "gpt-5.4", variant: "medium" }, { providers: GEMINI_PROVIDERS, model: "gemini-3.1-pro" }],
|
|
16763
16763
|
includeInInstall: true
|
|
16764
16764
|
},
|
|
@@ -16869,8 +16869,8 @@ var LEGACY_AGENT_REQUIREMENT_OVERRIDES = {
|
|
|
16869
16869
|
gptcoder: {
|
|
16870
16870
|
requiresProvider: AGENT_MODEL_DEFAULTS.gptcoder.requiresAnyProvider
|
|
16871
16871
|
},
|
|
16872
|
-
|
|
16873
|
-
fallbackChain: pickFallbackEntries(AGENT_MODEL_DEFAULTS.
|
|
16872
|
+
orchestrator: {
|
|
16873
|
+
fallbackChain: pickFallbackEntries(AGENT_MODEL_DEFAULTS.orchestrator.chain, ["claude-sonnet-4-6", "gpt-5.4"])
|
|
16874
16874
|
}
|
|
16875
16875
|
};
|
|
16876
16876
|
var LEGACY_CATEGORY_REQUIREMENT_OVERRIDES = {
|
|
@@ -17813,7 +17813,7 @@ async function isCallerOrchestrator(sessionID, client) {
|
|
|
17813
17813
|
if (isSqliteBackend() && client) {
|
|
17814
17814
|
try {
|
|
17815
17815
|
const nearest2 = await findNearestMessageWithFieldsFromSDK(client, sessionID);
|
|
17816
|
-
return getAgentConfigKey(nearest2?.agent ?? "") === "
|
|
17816
|
+
return getAgentConfigKey(nearest2?.agent ?? "") === "orchestrator";
|
|
17817
17817
|
} catch (error) {
|
|
17818
17818
|
log("[session-utils] SDK orchestrator check failed", { sessionID, error: String(error) });
|
|
17819
17819
|
return false;
|
|
@@ -17823,7 +17823,7 @@ async function isCallerOrchestrator(sessionID, client) {
|
|
|
17823
17823
|
if (!messageDir)
|
|
17824
17824
|
return false;
|
|
17825
17825
|
const nearest = findNearestMessageWithFields(messageDir);
|
|
17826
|
-
return getAgentConfigKey(nearest?.agent ?? "") === "
|
|
17826
|
+
return getAgentConfigKey(nearest?.agent ?? "") === "orchestrator";
|
|
17827
17827
|
}
|
|
17828
17828
|
// src/shared/tmux/constants.ts
|
|
17829
17829
|
var POLL_INTERVAL_BACKGROUND_MS = 2000;
|
|
@@ -40904,7 +40904,7 @@ function clearAgentUsageState(sessionID) {
|
|
|
40904
40904
|
var ORCHESTRATOR_AGENTS = new Set([
|
|
40905
40905
|
"coder",
|
|
40906
40906
|
"coder-junior",
|
|
40907
|
-
"
|
|
40907
|
+
"orchestrator",
|
|
40908
40908
|
"gptcoder",
|
|
40909
40909
|
"planner"
|
|
40910
40910
|
]);
|
|
@@ -42536,7 +42536,7 @@ function buildReminderMessage(availableSkills) {
|
|
|
42536
42536
|
var TARGET_AGENTS = new Set([
|
|
42537
42537
|
"coder",
|
|
42538
42538
|
"coder-junior",
|
|
42539
|
-
"
|
|
42539
|
+
"orchestrator"
|
|
42540
42540
|
]);
|
|
42541
42541
|
var DELEGATABLE_WORK_TOOLS = new Set([
|
|
42542
42542
|
"edit",
|
|
@@ -42568,7 +42568,7 @@ function createCategorySkillReminderHook(_ctx, availableSkills = []) {
|
|
|
42568
42568
|
if (!agent)
|
|
42569
42569
|
return false;
|
|
42570
42570
|
const agentKey = getAgentConfigKey(agent);
|
|
42571
|
-
return TARGET_AGENTS.has(agentKey) || agentKey.includes("coder") || agentKey.includes("
|
|
42571
|
+
return TARGET_AGENTS.has(agentKey) || agentKey.includes("coder") || agentKey.includes("orchestrator");
|
|
42572
42572
|
}
|
|
42573
42573
|
const toolExecuteAfter = async (input, output) => {
|
|
42574
42574
|
const { tool, sessionID } = input;
|
|
@@ -44899,7 +44899,7 @@ var START_WORK_TEMPLATE = `You are starting a Coder work session.
|
|
|
44899
44899
|
}
|
|
44900
44900
|
\`\`\`
|
|
44901
44901
|
|
|
44902
|
-
6. **Read the plan file** and start executing tasks according to
|
|
44902
|
+
6. **Read the plan file** and start executing tasks according to orchestrator workflow
|
|
44903
44903
|
|
|
44904
44904
|
## OUTPUT FORMAT
|
|
44905
44905
|
|
|
@@ -44946,7 +44946,7 @@ Reading plan and beginning execution...
|
|
|
44946
44946
|
- Always update boulder.json BEFORE starting work
|
|
44947
44947
|
- Always set worktree_path in boulder.json before executing any tasks
|
|
44948
44948
|
- Read the FULL plan file before delegating any tasks
|
|
44949
|
-
- Follow
|
|
44949
|
+
- Follow orchestrator delegation protocols (7-section format)`;
|
|
44950
44950
|
|
|
44951
44951
|
// src/features/builtin-commands/templates/handoff.ts
|
|
44952
44952
|
var HANDOFF_TEMPLATE = `# Handoff Command
|
|
@@ -45177,7 +45177,7 @@ ${REFACTOR_TEMPLATE}
|
|
|
45177
45177
|
},
|
|
45178
45178
|
"start-work": {
|
|
45179
45179
|
description: "(builtin) Start Coder work session from Planner plan",
|
|
45180
|
-
agent: "
|
|
45180
|
+
agent: "orchestrator",
|
|
45181
45181
|
template: `<command-instruction>
|
|
45182
45182
|
${START_WORK_TEMPLATE}
|
|
45183
45183
|
</command-instruction>
|
|
@@ -47968,7 +47968,7 @@ var BuiltinAgentNameSchema = exports_external.enum([
|
|
|
47968
47968
|
"multimodal-looker",
|
|
47969
47969
|
"plan-consultant",
|
|
47970
47970
|
"plan-reviewer",
|
|
47971
|
-
"
|
|
47971
|
+
"orchestrator",
|
|
47972
47972
|
"coder-junior",
|
|
47973
47973
|
"researcher",
|
|
47974
47974
|
"researcher-junior"
|
|
@@ -47994,7 +47994,7 @@ var OverridableAgentNameSchema = exports_external.enum([
|
|
|
47994
47994
|
"librarian",
|
|
47995
47995
|
"explore",
|
|
47996
47996
|
"multimodal-looker",
|
|
47997
|
-
"
|
|
47997
|
+
"orchestrator"
|
|
47998
47998
|
]);
|
|
47999
47999
|
// src/config/schema/fallback-models.ts
|
|
48000
48000
|
var FallbackModelsSchema = exports_external.union([exports_external.string(), exports_external.array(exports_external.string())]);
|
|
@@ -48064,7 +48064,7 @@ var AgentOverridesSchema = exports_external.object({
|
|
|
48064
48064
|
librarian: AgentOverrideConfigSchema.optional(),
|
|
48065
48065
|
explore: AgentOverrideConfigSchema.optional(),
|
|
48066
48066
|
"multimodal-looker": AgentOverrideConfigSchema.optional(),
|
|
48067
|
-
|
|
48067
|
+
orchestrator: AgentOverrideConfigSchema.optional(),
|
|
48068
48068
|
researcher: AgentOverrideConfigSchema.optional(),
|
|
48069
48069
|
"researcher-junior": AgentOverrideConfigSchema.optional()
|
|
48070
48070
|
});
|
|
@@ -48256,7 +48256,7 @@ var HookNameSchema = exports_external.enum([
|
|
|
48256
48256
|
"no-coder-gpt",
|
|
48257
48257
|
"no-gptcoder-non-gpt",
|
|
48258
48258
|
"start-work",
|
|
48259
|
-
"
|
|
48259
|
+
"orchestrator",
|
|
48260
48260
|
"unstable-agent-babysitter",
|
|
48261
48261
|
"task-resume-info",
|
|
48262
48262
|
"stop-continuation-guard",
|
|
@@ -49598,7 +49598,7 @@ function createStartWorkHook(ctx) {
|
|
|
49598
49598
|
if (!promptText.includes("<session-context>"))
|
|
49599
49599
|
return;
|
|
49600
49600
|
log(`[${HOOK_NAME8}] Processing start-work command`, { sessionID: input.sessionID });
|
|
49601
|
-
updateSessionAgent(input.sessionID, "
|
|
49601
|
+
updateSessionAgent(input.sessionID, "orchestrator");
|
|
49602
49602
|
const existingState = readBoulderState(ctx.directory);
|
|
49603
49603
|
const sessionId = input.sessionID;
|
|
49604
49604
|
const timestamp2 = new Date().toISOString();
|
|
@@ -49620,7 +49620,7 @@ All ${progress.total} tasks are done. Create a new plan with: /plan "your task"`
|
|
|
49620
49620
|
} else {
|
|
49621
49621
|
if (existingState)
|
|
49622
49622
|
clearBoulderState(ctx.directory);
|
|
49623
|
-
const newState = createBoulderState(matchedPlan, sessionId, "
|
|
49623
|
+
const newState = createBoulderState(matchedPlan, sessionId, "orchestrator", worktreePath);
|
|
49624
49624
|
writeBoulderState(ctx.directory, newState);
|
|
49625
49625
|
contextInfo = `
|
|
49626
49626
|
## Auto-Selected Plan
|
|
@@ -49713,7 +49713,7 @@ All ${plans.length} plan(s) are complete. Create a new plan with: /plan "your ta
|
|
|
49713
49713
|
} else if (incompletePlans.length === 1) {
|
|
49714
49714
|
const planPath = incompletePlans[0];
|
|
49715
49715
|
const progress = getPlanProgress(planPath);
|
|
49716
|
-
const newState = createBoulderState(planPath, sessionId, "
|
|
49716
|
+
const newState = createBoulderState(planPath, sessionId, "orchestrator", worktreePath);
|
|
49717
49717
|
writeBoulderState(ctx.directory, newState);
|
|
49718
49718
|
contextInfo += `
|
|
49719
49719
|
|
|
@@ -49765,12 +49765,12 @@ ${contextInfo}`;
|
|
|
49765
49765
|
}
|
|
49766
49766
|
};
|
|
49767
49767
|
}
|
|
49768
|
-
// src/hooks/
|
|
49769
|
-
var HOOK_NAME9 = "
|
|
49770
|
-
// src/hooks/
|
|
49768
|
+
// src/hooks/orchestrator/hook-name.ts
|
|
49769
|
+
var HOOK_NAME9 = "orchestrator";
|
|
49770
|
+
// src/hooks/orchestrator/event-handler.ts
|
|
49771
49771
|
init_logger();
|
|
49772
49772
|
|
|
49773
|
-
// src/hooks/
|
|
49773
|
+
// src/hooks/orchestrator/is-abort-error.ts
|
|
49774
49774
|
function isAbortError(error48) {
|
|
49775
49775
|
if (!error48)
|
|
49776
49776
|
return false;
|
|
@@ -49792,13 +49792,13 @@ function isAbortError(error48) {
|
|
|
49792
49792
|
return false;
|
|
49793
49793
|
}
|
|
49794
49794
|
|
|
49795
|
-
// src/hooks/
|
|
49795
|
+
// src/hooks/orchestrator/idle-event.ts
|
|
49796
49796
|
init_logger();
|
|
49797
49797
|
|
|
49798
|
-
// src/hooks/
|
|
49798
|
+
// src/hooks/orchestrator/boulder-continuation-injector.ts
|
|
49799
49799
|
init_logger();
|
|
49800
49800
|
|
|
49801
|
-
// src/hooks/
|
|
49801
|
+
// src/hooks/orchestrator/system-reminder-templates.ts
|
|
49802
49802
|
var DIRECT_WORK_REMINDER = `
|
|
49803
49803
|
|
|
49804
49804
|
---
|
|
@@ -49907,7 +49907,7 @@ ${createSystemDirective(SystemDirectiveTypes.DELEGATION_REQUIRED)}
|
|
|
49907
49907
|
|
|
49908
49908
|
**STOP. YOU ARE VIOLATING ORCHESTRATOR PROTOCOL.**
|
|
49909
49909
|
|
|
49910
|
-
You (
|
|
49910
|
+
You (Orchestrator) are attempting to directly modify a file outside \`.drizzy/\`.
|
|
49911
49911
|
|
|
49912
49912
|
**Path attempted:** $FILE_PATH
|
|
49913
49913
|
|
|
@@ -49973,7 +49973,7 @@ If you were NOT given **exactly ONE atomic task**, you MUST:
|
|
|
49973
49973
|
**REFUSE multi-task requests. DEMAND single-task clarity.**
|
|
49974
49974
|
`;
|
|
49975
49975
|
|
|
49976
|
-
// src/hooks/
|
|
49976
|
+
// src/hooks/orchestrator/recent-model-resolver.ts
|
|
49977
49977
|
async function resolveRecentPromptContextForSession(ctx, sessionID) {
|
|
49978
49978
|
try {
|
|
49979
49979
|
const messagesResp = await ctx.client.session.messages({ path: { id: sessionID } });
|
|
@@ -50005,7 +50005,7 @@ async function resolveRecentPromptContextForSession(ctx, sessionID) {
|
|
|
50005
50005
|
return { model: { providerID: model.providerID, modelID: model.modelID }, tools };
|
|
50006
50006
|
}
|
|
50007
50007
|
|
|
50008
|
-
// src/hooks/
|
|
50008
|
+
// src/hooks/orchestrator/boulder-continuation-injector.ts
|
|
50009
50009
|
async function injectBoulderContinuation(input) {
|
|
50010
50010
|
const {
|
|
50011
50011
|
ctx,
|
|
@@ -50036,7 +50036,7 @@ async function injectBoulderContinuation(input) {
|
|
|
50036
50036
|
await ctx.client.session.promptAsync({
|
|
50037
50037
|
path: { id: sessionID },
|
|
50038
50038
|
body: {
|
|
50039
|
-
agent: agent ?? "
|
|
50039
|
+
agent: agent ?? "orchestrator",
|
|
50040
50040
|
...promptContext.model !== undefined ? { model: promptContext.model } : {},
|
|
50041
50041
|
...inheritedTools ? { tools: inheritedTools } : {},
|
|
50042
50042
|
parts: [createInternalAgentTextPart(prompt)]
|
|
@@ -50056,7 +50056,7 @@ async function injectBoulderContinuation(input) {
|
|
|
50056
50056
|
}
|
|
50057
50057
|
}
|
|
50058
50058
|
|
|
50059
|
-
// src/hooks/
|
|
50059
|
+
// src/hooks/orchestrator/idle-event.ts
|
|
50060
50060
|
var CONTINUATION_COOLDOWN_MS2 = 5000;
|
|
50061
50061
|
var FAILURE_BACKOFF_MS = 5 * 60 * 1000;
|
|
50062
50062
|
var RETRY_DELAY_MS = CONTINUATION_COOLDOWN_MS2 + 1000;
|
|
@@ -50144,7 +50144,7 @@ function scheduleRetry(input) {
|
|
|
50144
50144
|
});
|
|
50145
50145
|
}, RETRY_DELAY_MS);
|
|
50146
50146
|
}
|
|
50147
|
-
async function
|
|
50147
|
+
async function handleOrchestratorSessionIdle(input) {
|
|
50148
50148
|
const { ctx, options, getState, sessionID } = input;
|
|
50149
50149
|
log(`[${HOOK_NAME9}] session.idle`, { sessionID });
|
|
50150
50150
|
const activeBoulderSession = resolveActiveBoulderSession({
|
|
@@ -50219,8 +50219,8 @@ async function handleAtlasSessionIdle(input) {
|
|
|
50219
50219
|
});
|
|
50220
50220
|
}
|
|
50221
50221
|
|
|
50222
|
-
// src/hooks/
|
|
50223
|
-
function
|
|
50222
|
+
// src/hooks/orchestrator/event-handler.ts
|
|
50223
|
+
function createOrchestratorEventHandler(input) {
|
|
50224
50224
|
const { ctx, options, sessions, getState } = input;
|
|
50225
50225
|
return async ({ event }) => {
|
|
50226
50226
|
const props = event.properties;
|
|
@@ -50238,7 +50238,7 @@ function createAtlasEventHandler(input) {
|
|
|
50238
50238
|
const sessionID = props?.sessionID;
|
|
50239
50239
|
if (!sessionID)
|
|
50240
50240
|
return;
|
|
50241
|
-
await
|
|
50241
|
+
await handleOrchestratorSessionIdle({ ctx, options, getState, sessionID });
|
|
50242
50242
|
return;
|
|
50243
50243
|
}
|
|
50244
50244
|
if (event.type === "message.updated") {
|
|
@@ -50300,21 +50300,21 @@ function createAtlasEventHandler(input) {
|
|
|
50300
50300
|
};
|
|
50301
50301
|
}
|
|
50302
50302
|
|
|
50303
|
-
// src/hooks/
|
|
50303
|
+
// src/hooks/orchestrator/tool-execute-after.ts
|
|
50304
50304
|
init_logger();
|
|
50305
50305
|
|
|
50306
|
-
// src/hooks/
|
|
50306
|
+
// src/hooks/orchestrator/coder-path.ts
|
|
50307
50307
|
function isCoderPath(filePath) {
|
|
50308
50308
|
return /\.drizzy[/\\]/.test(filePath);
|
|
50309
50309
|
}
|
|
50310
50310
|
|
|
50311
|
-
// src/hooks/
|
|
50311
|
+
// src/hooks/orchestrator/subagent-session-id.ts
|
|
50312
50312
|
function extractSessionIdFromOutput(output) {
|
|
50313
50313
|
const match = output.match(/Session ID:\s*(ses_[a-zA-Z0-9]+)/);
|
|
50314
50314
|
return match?.[1] ?? "<session_id>";
|
|
50315
50315
|
}
|
|
50316
50316
|
|
|
50317
|
-
// src/hooks/
|
|
50317
|
+
// src/hooks/orchestrator/verification-reminders.ts
|
|
50318
50318
|
function buildCompletionGate(planName, sessionId) {
|
|
50319
50319
|
return `
|
|
50320
50320
|
**COMPLETION GATE \u2014 DO NOT PROCEED UNTIL THIS IS DONE**
|
|
@@ -50445,13 +50445,13 @@ If QA tasks exist in your todo list:
|
|
|
50445
50445
|
**NO TODO = NO TRACKING = INCOMPLETE WORK. Use todowrite aggressively.**`;
|
|
50446
50446
|
}
|
|
50447
50447
|
|
|
50448
|
-
// src/hooks/
|
|
50448
|
+
// src/hooks/orchestrator/write-edit-tool-policy.ts
|
|
50449
50449
|
var WRITE_EDIT_TOOLS = ["Write", "Edit", "write", "edit"];
|
|
50450
50450
|
function isWriteOrEditToolName(toolName) {
|
|
50451
50451
|
return WRITE_EDIT_TOOLS.includes(toolName);
|
|
50452
50452
|
}
|
|
50453
50453
|
|
|
50454
|
-
// src/hooks/
|
|
50454
|
+
// src/hooks/orchestrator/tool-execute-after.ts
|
|
50455
50455
|
function createToolExecuteAfterHandler2(input) {
|
|
50456
50456
|
const { ctx, pendingFilePaths, autoCommit } = input;
|
|
50457
50457
|
return async (toolInput, toolOutput) => {
|
|
@@ -50539,7 +50539,7 @@ ${buildStandaloneVerificationReminder(subagentSessionId)}
|
|
|
50539
50539
|
};
|
|
50540
50540
|
}
|
|
50541
50541
|
|
|
50542
|
-
// src/hooks/
|
|
50542
|
+
// src/hooks/orchestrator/tool-execute-before.ts
|
|
50543
50543
|
init_logger();
|
|
50544
50544
|
function createToolExecuteBeforeHandler2(input) {
|
|
50545
50545
|
const { ctx, pendingFilePaths } = input;
|
|
@@ -50576,8 +50576,8 @@ function createToolExecuteBeforeHandler2(input) {
|
|
|
50576
50576
|
};
|
|
50577
50577
|
}
|
|
50578
50578
|
|
|
50579
|
-
// src/hooks/
|
|
50580
|
-
function
|
|
50579
|
+
// src/hooks/orchestrator/orchestrator-hook.ts
|
|
50580
|
+
function createOrchestratorHook(ctx, options) {
|
|
50581
50581
|
const sessions = new Map;
|
|
50582
50582
|
const pendingFilePaths = new Map;
|
|
50583
50583
|
const autoCommit = options?.autoCommit ?? true;
|
|
@@ -50590,7 +50590,7 @@ function createAtlasHook(ctx, options) {
|
|
|
50590
50590
|
return state3;
|
|
50591
50591
|
}
|
|
50592
50592
|
return {
|
|
50593
|
-
handler:
|
|
50593
|
+
handler: createOrchestratorEventHandler({ ctx, options, sessions, getState }),
|
|
50594
50594
|
"tool.execute.before": createToolExecuteBeforeHandler2({ ctx, pendingFilePaths }),
|
|
50595
50595
|
"tool.execute.after": createToolExecuteAfterHandler2({ ctx, pendingFilePaths, autoCommit })
|
|
50596
50596
|
};
|
|
@@ -52103,7 +52103,7 @@ var AGENT_NAMES = [
|
|
|
52103
52103
|
"librarian",
|
|
52104
52104
|
"explore",
|
|
52105
52105
|
"planner",
|
|
52106
|
-
"
|
|
52106
|
+
"orchestrator",
|
|
52107
52107
|
"plan-consultant",
|
|
52108
52108
|
"plan-reviewer",
|
|
52109
52109
|
"gptcoder",
|
|
@@ -77278,7 +77278,7 @@ function createContinuationHooks(args) {
|
|
|
77278
77278
|
}
|
|
77279
77279
|
}
|
|
77280
77280
|
const backgroundNotificationHook = isHookEnabled("background-notification") ? safeHook("background-notification", () => createBackgroundNotificationHook(backgroundManager)) : null;
|
|
77281
|
-
const
|
|
77281
|
+
const orchestratorHook = isHookEnabled("orchestrator") ? safeHook("orchestrator", () => createOrchestratorHook(ctx, {
|
|
77282
77282
|
directory: ctx.directory,
|
|
77283
77283
|
backgroundManager,
|
|
77284
77284
|
isContinuationStopped: (sessionID) => stopContinuationGuard?.isStopped(sessionID) ?? false,
|
|
@@ -77294,7 +77294,7 @@ function createContinuationHooks(args) {
|
|
|
77294
77294
|
todoContinuationEnforcer,
|
|
77295
77295
|
unstableAgentBabysitter,
|
|
77296
77296
|
backgroundNotificationHook,
|
|
77297
|
-
|
|
77297
|
+
orchestratorHook
|
|
77298
77298
|
};
|
|
77299
77299
|
}
|
|
77300
77300
|
|
|
@@ -88330,12 +88330,12 @@ var planConsultantPromptMetadata = {
|
|
|
88330
88330
|
keyTrigger: "Ambiguous or complex request \u2192 consult Plan Consultant before Planner"
|
|
88331
88331
|
};
|
|
88332
88332
|
|
|
88333
|
-
// src/agents/
|
|
88334
|
-
var
|
|
88333
|
+
// src/agents/orchestrator/default.ts
|
|
88334
|
+
var ORCHESTRATOR_SYSTEM_PROMPT = `
|
|
88335
88335
|
<identity>
|
|
88336
|
-
You are
|
|
88336
|
+
You are Orchestrator - the Master Orchestrator from DrizzyAgent.
|
|
88337
88337
|
|
|
88338
|
-
In Greek mythology,
|
|
88338
|
+
In Greek mythology, Orchestrator holds up the celestial heavens. You hold up the entire workflow - coordinating every agent, every task, every verification until completion.
|
|
88339
88339
|
|
|
88340
88340
|
You are a conductor, not a musician. A general, not a soldier. You DELEGATE, COORDINATE, and VERIFY.
|
|
88341
88341
|
You never write code yourself. You orchestrate specialists who do.
|
|
@@ -88767,14 +88767,14 @@ After EVERY verified task() completion, you MUST:
|
|
|
88767
88767
|
This ensures accurate progress tracking. Skip this and you lose visibility into what remains.
|
|
88768
88768
|
</post_delegation_rule>
|
|
88769
88769
|
`;
|
|
88770
|
-
function
|
|
88771
|
-
return
|
|
88770
|
+
function getDefaultOrchestratorPrompt() {
|
|
88771
|
+
return ORCHESTRATOR_SYSTEM_PROMPT;
|
|
88772
88772
|
}
|
|
88773
88773
|
|
|
88774
|
-
// src/agents/
|
|
88775
|
-
var
|
|
88774
|
+
// src/agents/orchestrator/gpt.ts
|
|
88775
|
+
var ORCHESTRATOR_GPT_SYSTEM_PROMPT = `
|
|
88776
88776
|
<identity>
|
|
88777
|
-
You are
|
|
88777
|
+
You are Orchestrator - Master Orchestrator from DrizzyAgent.
|
|
88778
88778
|
Role: Conductor, not musician. General, not soldier.
|
|
88779
88779
|
You DELEGATE, COORDINATE, and VERIFY. You NEVER write code yourself.
|
|
88780
88780
|
</identity>
|
|
@@ -89181,14 +89181,14 @@ After EVERY verified task() completion, you MUST:
|
|
|
89181
89181
|
This ensures accurate progress tracking. Skip this and you lose visibility into what remains.
|
|
89182
89182
|
</post_delegation_rule>
|
|
89183
89183
|
`;
|
|
89184
|
-
function
|
|
89185
|
-
return
|
|
89184
|
+
function getGptOrchestratorPrompt() {
|
|
89185
|
+
return ORCHESTRATOR_GPT_SYSTEM_PROMPT;
|
|
89186
89186
|
}
|
|
89187
89187
|
|
|
89188
|
-
// src/agents/
|
|
89189
|
-
var
|
|
89188
|
+
// src/agents/orchestrator/gemini.ts
|
|
89189
|
+
var ORCHESTRATOR_GEMINI_SYSTEM_PROMPT = `
|
|
89190
89190
|
<identity>
|
|
89191
|
-
You are
|
|
89191
|
+
You are Orchestrator - Master Orchestrator from DrizzyAgent.
|
|
89192
89192
|
Role: Conductor, not musician. General, not soldier.
|
|
89193
89193
|
You DELEGATE, COORDINATE, and VERIFY. You NEVER write code yourself.
|
|
89194
89194
|
|
|
@@ -89592,11 +89592,11 @@ After EVERY verified task() completion, you MUST:
|
|
|
89592
89592
|
This ensures accurate progress tracking. Skip this and you lose visibility into what remains.
|
|
89593
89593
|
</post_delegation_rule>
|
|
89594
89594
|
`;
|
|
89595
|
-
function
|
|
89596
|
-
return
|
|
89595
|
+
function getGeminiOrchestratorPrompt() {
|
|
89596
|
+
return ORCHESTRATOR_GEMINI_SYSTEM_PROMPT;
|
|
89597
89597
|
}
|
|
89598
89598
|
|
|
89599
|
-
// src/agents/
|
|
89599
|
+
// src/agents/orchestrator/prompt-section-builder.ts
|
|
89600
89600
|
var getCategoryDescription = (name, userCategories) => userCategories?.[name]?.description ?? CATEGORY_DESCRIPTIONS[name] ?? "General tasks";
|
|
89601
89601
|
function buildAgentSelectionSection(agents) {
|
|
89602
89602
|
if (agents.length === 0) {
|
|
@@ -89680,9 +89680,9 @@ ${agentRows.join(`
|
|
|
89680
89680
|
**NEVER provide both category AND agent - they are mutually exclusive.**`;
|
|
89681
89681
|
}
|
|
89682
89682
|
|
|
89683
|
-
// src/agents/
|
|
89683
|
+
// src/agents/orchestrator/agent.ts
|
|
89684
89684
|
var MODE7 = "all";
|
|
89685
|
-
function
|
|
89685
|
+
function getOrchestratorPromptSource(model) {
|
|
89686
89686
|
if (model && isGptModel(model)) {
|
|
89687
89687
|
return "gpt";
|
|
89688
89688
|
}
|
|
@@ -89691,16 +89691,16 @@ function getAtlasPromptSource(model) {
|
|
|
89691
89691
|
}
|
|
89692
89692
|
return "default";
|
|
89693
89693
|
}
|
|
89694
|
-
function
|
|
89695
|
-
const source =
|
|
89694
|
+
function getOrchestratorPrompt(model) {
|
|
89695
|
+
const source = getOrchestratorPromptSource(model);
|
|
89696
89696
|
switch (source) {
|
|
89697
89697
|
case "gpt":
|
|
89698
|
-
return
|
|
89698
|
+
return getGptOrchestratorPrompt();
|
|
89699
89699
|
case "gemini":
|
|
89700
|
-
return
|
|
89700
|
+
return getGeminiOrchestratorPrompt();
|
|
89701
89701
|
case "default":
|
|
89702
89702
|
default:
|
|
89703
|
-
return
|
|
89703
|
+
return getDefaultOrchestratorPrompt();
|
|
89704
89704
|
}
|
|
89705
89705
|
}
|
|
89706
89706
|
function buildDynamicOrchestratorPrompt(ctx) {
|
|
@@ -89718,12 +89718,12 @@ function buildDynamicOrchestratorPrompt(ctx) {
|
|
|
89718
89718
|
const decisionMatrix = buildDecisionMatrix(agents, userCategories);
|
|
89719
89719
|
const skillsSection = buildSkillsSection(skills2);
|
|
89720
89720
|
const categorySkillsGuide = buildCategorySkillsDelegationGuide(availableCategories, skills2);
|
|
89721
|
-
const basePrompt =
|
|
89721
|
+
const basePrompt = getOrchestratorPrompt(model);
|
|
89722
89722
|
return basePrompt.replace("{CATEGORY_SECTION}", categorySection).replace("{AGENT_SECTION}", agentSection).replace("{DECISION_MATRIX}", decisionMatrix).replace("{SKILLS_SECTION}", skillsSection).replace("{{CATEGORY_SKILLS_DELEGATION_GUIDE}}", categorySkillsGuide);
|
|
89723
89723
|
}
|
|
89724
|
-
function
|
|
89724
|
+
function createOrchestratorAgent(ctx) {
|
|
89725
89725
|
const baseConfig = {
|
|
89726
|
-
description: "Orchestrates work via task() to complete ALL tasks in a todo list until fully done. (
|
|
89726
|
+
description: "Orchestrates work via task() to complete ALL tasks in a todo list until fully done. (Orchestrator - DrizzyAgent)",
|
|
89727
89727
|
mode: MODE7,
|
|
89728
89728
|
...ctx.model ? { model: ctx.model } : {},
|
|
89729
89729
|
temperature: 0.1,
|
|
@@ -89732,11 +89732,11 @@ function createAtlasAgent(ctx) {
|
|
|
89732
89732
|
};
|
|
89733
89733
|
return baseConfig;
|
|
89734
89734
|
}
|
|
89735
|
-
|
|
89736
|
-
var
|
|
89735
|
+
createOrchestratorAgent.mode = MODE7;
|
|
89736
|
+
var orchestratorPromptMetadata = {
|
|
89737
89737
|
category: "advisor",
|
|
89738
89738
|
cost: "EXPENSIVE",
|
|
89739
|
-
promptAlias: "
|
|
89739
|
+
promptAlias: "Orchestrator",
|
|
89740
89740
|
triggers: [
|
|
89741
89741
|
{
|
|
89742
89742
|
domain: "Todo list orchestration",
|
|
@@ -92031,38 +92031,62 @@ Follow these 6 steps in order:
|
|
|
92031
92031
|
<step_1_understand>
|
|
92032
92032
|
**Step 1: Understand the Goal**
|
|
92033
92033
|
Analyze the research request carefully.
|
|
92034
|
+
<reasoning_phase name="planning">
|
|
92034
92035
|
- First classify the request as **coding** or **non-coding**.
|
|
92035
|
-
-
|
|
92036
|
-
|
|
92037
|
-
|
|
92038
|
-
|
|
92039
|
-
|
|
92040
|
-
-
|
|
92041
|
-
|
|
92042
|
-
|
|
92043
|
-
|
|
92044
|
-
|
|
92045
|
-
|
|
92036
|
+
- Identify the decision, comparison, or unknown the requester actually needs resolved.
|
|
92037
|
+
- Decide whether clarification is required now or whether existing instructions already define scope.
|
|
92038
|
+
</reasoning_phase>
|
|
92039
|
+
<reasoning_phase name="execution">
|
|
92040
|
+
- **If this is a coding task**: inspect the codebase first before asking planning questions.
|
|
92041
|
+
- Launch 1-3 Explore agents in parallel and read the relevant local files before you propose a plan or ask the user follow-up questions.
|
|
92042
|
+
- Treat this as a lightweight grounding pass. If no relevant local code, patterns, or prior art exist, explicitly say so and continue with external research rather than stalling.
|
|
92043
|
+
- Only ask targeted follow-up questions after that first codebase pass, and only if a critical ambiguity remains.
|
|
92044
|
+
- **If this is a non-coding task**: use the question tool first, make no assumptions about scope, audience, geography, timeframe, or output format, and if you are a subagent without direct user access, return the clarifying questions to the caller and stop until they are answered.
|
|
92045
|
+
</reasoning_phase>
|
|
92046
|
+
<reasoning_phase name="verification">
|
|
92047
|
+
- Confirm the request is correctly labeled as coding or non-coding.
|
|
92048
|
+
- Confirm any blocking ambiguity has either been resolved or explicitly surfaced.
|
|
92049
|
+
- Confirm you can state in one sentence what the requester needs to decide or learn.
|
|
92050
|
+
</reasoning_phase>
|
|
92046
92051
|
</step_1_understand>
|
|
92047
92052
|
|
|
92048
92053
|
<step_2_plan>
|
|
92049
92054
|
**Step 2: Plan the Research**
|
|
92050
|
-
|
|
92051
|
-
-
|
|
92052
|
-
-
|
|
92053
|
-
-
|
|
92054
|
-
|
|
92055
|
-
|
|
92056
|
-
|
|
92057
|
-
|
|
92058
|
-
|
|
92059
|
-
-
|
|
92060
|
-
- Save the final report to \`{run_directory}/report.md\`
|
|
92055
|
+
<reasoning_phase name="planning">
|
|
92056
|
+
- Build a Tree-of-Thoughts plan: one root research question, 2-4 major branches, and leaf sub-questions under each branch.
|
|
92057
|
+
- Prefer leaf sub-questions that are mutually informative rather than flat duplicates.
|
|
92058
|
+
- For coding tasks, do this only after the first codebase exploration pass.
|
|
92059
|
+
- For non-coding tasks, do this only after the clarifying questions have been answered.
|
|
92060
|
+
</reasoning_phase>
|
|
92061
|
+
<reasoning_phase name="execution">
|
|
92062
|
+
- List every leaf sub-question and classify it as **Codebase** (Explore agent), **Docs/Library** (Librarian agent), or **General/Web** (direct websearch/webfetch MCP tools or Researcher-Junior agent).
|
|
92063
|
+
- Create a single run directory for the whole investigation: \`.drizzy/research/{slug}/\`.
|
|
92064
|
+
- Save the final report to \`{run_directory}/report.md\`.
|
|
92061
92065
|
- Pass the exact same \`{run_directory}\` to every Researcher-Junior task so all findings land under one shared investigation folder.
|
|
92066
|
+
</reasoning_phase>
|
|
92067
|
+
<reasoning_phase name="verification">
|
|
92068
|
+
- Confirm the tree covers scope, evidence gathering, comparison, and recommendation needs.
|
|
92069
|
+
- Confirm each leaf sub-question has exactly one primary research path and owner.
|
|
92070
|
+
- Confirm the run_directory contract is defined before any delegation starts.
|
|
92071
|
+
</reasoning_phase>
|
|
92072
|
+
<complexity_check>
|
|
92073
|
+
Classify the investigation before executing:
|
|
92074
|
+
- **STRAIGHTFORWARD** --> narrow scope, stable facts, few moving parts --> start with **3-4 Researcher-Junior agents**
|
|
92075
|
+
- **STANDARD** --> moderate scope, several branches, some comparison work --> start with **5-6 Researcher-Junior agents**
|
|
92076
|
+
- **DEEP** --> high stakes, conflicting sources, many branches, or fast-changing context --> start with **7-10 Researcher-Junior agents**
|
|
92077
|
+
|
|
92078
|
+
Use the classification to size the initial Researcher-Junior wave. Explore and Librarian agents support the plan but do NOT count toward the Researcher-Junior target range.
|
|
92079
|
+
</complexity_check>
|
|
92062
92080
|
</step_2_plan>
|
|
92063
92081
|
|
|
92064
92082
|
<step_3_search>
|
|
92065
92083
|
**Step 3: Execute Parallel Search**
|
|
92084
|
+
<reasoning_phase name="planning">
|
|
92085
|
+
- Map each leaf sub-question from Step 2 to the right execution path.
|
|
92086
|
+
- Size the initial Researcher-Junior wave according to the STRAIGHTFORWARD/STANDARD/DEEP classification.
|
|
92087
|
+
- Ensure the first wave covers every major branch of the Tree-of-Thoughts, not just the easiest leaves.
|
|
92088
|
+
</reasoning_phase>
|
|
92089
|
+
<reasoning_phase name="execution">
|
|
92066
92090
|
Spawn sub-agents for each sub-question using background execution:
|
|
92067
92091
|
|
|
92068
92092
|
For codebase questions:
|
|
@@ -92088,15 +92112,32 @@ CRITICAL delegation rule:
|
|
|
92088
92112
|
- Never delegate to coder-junior.
|
|
92089
92113
|
- Always delegate with explicit subagent_type: explore, librarian, or researcher-junior.
|
|
92090
92114
|
|
|
92091
|
-
|
|
92115
|
+
Initial Researcher-Junior deployment guidance:
|
|
92116
|
+
- **STRAIGHTFORWARD** --> deploy **3-4 Researcher-Junior subagents** in parallel
|
|
92117
|
+
- **STANDARD** --> deploy **5-6 Researcher-Junior subagents** in parallel
|
|
92118
|
+
- **DEEP** --> deploy **7-10 Researcher-Junior subagents** in parallel
|
|
92119
|
+
|
|
92120
|
+
Each initial Researcher-Junior should own a distinct leaf sub-question or high-value branch. Supplement with Explore and Librarian agents as needed for codebase and docs queries -- those do NOT count toward the Researcher-Junior target range.
|
|
92092
92121
|
|
|
92093
92122
|
ALL task() calls MUST include description, load_skills, and run_in_background parameters.
|
|
92094
92123
|
|
|
92095
92124
|
Escalation rule: After collecting results in Step 4, if Researcher-Junior agents return conflicting findings, incomplete coverage, or surface new research threads, deploy additional Researcher-Junior agents to resolve the conflicts or cover the gaps. There is no upper limit -- keep spawning until you have consistent, well-sourced answers across all sub-questions.
|
|
92125
|
+
</reasoning_phase>
|
|
92126
|
+
<reasoning_phase name="verification">
|
|
92127
|
+
- Confirm every major branch has active coverage.
|
|
92128
|
+
- Confirm every task() call includes description, load_skills, and run_in_background.
|
|
92129
|
+
- Confirm no delegation uses category or coder-junior.
|
|
92130
|
+
</reasoning_phase>
|
|
92096
92131
|
</step_3_search>
|
|
92097
92132
|
|
|
92098
92133
|
<step_4_collect>
|
|
92099
92134
|
**Step 4: Collect and Deep-Read**
|
|
92135
|
+
<reasoning_phase name="planning">
|
|
92136
|
+
- Gather all pending results before judging coverage.
|
|
92137
|
+
- Identify which findings are corroborated, incomplete, or in conflict.
|
|
92138
|
+
- Prioritize high-impact disagreements for deeper review first.
|
|
92139
|
+
</reasoning_phase>
|
|
92140
|
+
<reasoning_phase name="execution">
|
|
92100
92141
|
- Gather all sub-agent results via background_output(task_id="...")
|
|
92101
92142
|
- For promising URLs found in results, use webfetch to get full content
|
|
92102
92143
|
- Cross-reference findings across sources: do multiple sources agree?
|
|
@@ -92104,10 +92145,31 @@ Escalation rule: After collecting results in Step 4, if Researcher-Junior agents
|
|
|
92104
92145
|
- **HIGH**: 3+ independent sources confirm
|
|
92105
92146
|
- **MEDIUM**: 1-2 sources, from authoritative origins
|
|
92106
92147
|
- **LOW**: single source, uncertain, or conflicting information
|
|
92148
|
+
</reasoning_phase>
|
|
92149
|
+
<reasoning_phase name="verification">
|
|
92150
|
+
- Confirm every major claim has at least one traceable source.
|
|
92151
|
+
- Confirm unresolved conflicts are explicitly labeled rather than averaged away.
|
|
92152
|
+
- Confirm any gap or contradiction is either escalated or documented for synthesis.
|
|
92153
|
+
</reasoning_phase>
|
|
92154
|
+
<conflict_resolution>
|
|
92155
|
+
When findings conflict, resolve them in this order:
|
|
92156
|
+
1. **Credibility** --> prefer primary sources, official docs, peer-reviewed work, or directly observed code over commentary.
|
|
92157
|
+
2. **Recency** --> if credibility is comparable, prefer the most current valid source.
|
|
92158
|
+
3. **Confidence** --> prefer the conclusion supported by broader independent confirmation.
|
|
92159
|
+
4. **Context** --> if disagreement is scenario-specific, preserve both findings and explain the boundary conditions.
|
|
92160
|
+
|
|
92161
|
+
If the conflict remains unresolved after applying this hierarchy, mark it as unresolved, cite both sides, and launch additional Researcher-Junior agents.
|
|
92162
|
+
</conflict_resolution>
|
|
92107
92163
|
</step_4_collect>
|
|
92108
92164
|
|
|
92109
92165
|
<step_5_synthesize>
|
|
92110
92166
|
**Step 5: Synthesize Report**
|
|
92167
|
+
<reasoning_phase name="planning">
|
|
92168
|
+
- Organize findings by decision-relevant themes, not by search chronology.
|
|
92169
|
+
- Decide which conclusions are stable, conditional, or unresolved.
|
|
92170
|
+
- Reserve space for methodology, caveats, and confidence notes.
|
|
92171
|
+
</reasoning_phase>
|
|
92172
|
+
<reasoning_phase name="execution">
|
|
92111
92173
|
Write a structured markdown report with this format:
|
|
92112
92174
|
|
|
92113
92175
|
\`\`\`markdown
|
|
@@ -92134,10 +92196,22 @@ Per-finding confidence noted where relevant.
|
|
|
92134
92196
|
## Methodology
|
|
92135
92197
|
Brief description of search strategy, agents used, and any gaps.
|
|
92136
92198
|
\`\`\`
|
|
92199
|
+
</reasoning_phase>
|
|
92200
|
+
<reasoning_phase name="verification">
|
|
92201
|
+
- Confirm every section supports the final recommendation or decision.
|
|
92202
|
+
- Confirm inline citations and per-finding confidence labels are present where relevant.
|
|
92203
|
+
- Confirm conflicts, gaps, and assumptions remain visible in the final narrative.
|
|
92204
|
+
</reasoning_phase>
|
|
92137
92205
|
</step_5_synthesize>
|
|
92138
92206
|
|
|
92139
92207
|
<step_6_save>
|
|
92140
92208
|
**Step 6: Save and Deliver**
|
|
92209
|
+
<reasoning_phase name="planning">
|
|
92210
|
+
- Prepare the final report path and the chat-ready summary.
|
|
92211
|
+
- Keep the chat response concise but decision-useful.
|
|
92212
|
+
- Ensure the saved artifact and the delivered summary match.
|
|
92213
|
+
</reasoning_phase>
|
|
92214
|
+
<reasoning_phase name="execution">
|
|
92141
92215
|
1. Write the full report to \`{run_directory}/report.md\`
|
|
92142
92216
|
- \`run_directory\` is the single slug-based directory you created in Step 2
|
|
92143
92217
|
- slug: lowercase, hyphenated topic name (e.g., "react-state-management")
|
|
@@ -92145,6 +92219,12 @@ Brief description of search strategy, agents used, and any gaps.
|
|
|
92145
92219
|
- The Executive Summary section
|
|
92146
92220
|
- The Key Takeaways section
|
|
92147
92221
|
- Path to the full report file
|
|
92222
|
+
</reasoning_phase>
|
|
92223
|
+
<reasoning_phase name="verification">
|
|
92224
|
+
- Confirm the file exists at the exact run_directory path.
|
|
92225
|
+
- Confirm the chat reply includes Executive Summary, Key Takeaways, and file path.
|
|
92226
|
+
- Confirm nothing promised in the report is missing from the saved artifact.
|
|
92227
|
+
</reasoning_phase>
|
|
92148
92228
|
</step_6_save>
|
|
92149
92229
|
</workflow>
|
|
92150
92230
|
|
|
@@ -92161,22 +92241,107 @@ var RESEARCHER_GPT_PROMPT = `You are a deep research orchestrator. Your job is t
|
|
|
92161
92241
|
Follow this 6-step workflow:
|
|
92162
92242
|
|
|
92163
92243
|
Step 1: Understand the Goal
|
|
92164
|
-
|
|
92244
|
+
Planning phase:
|
|
92245
|
+
- Classify the request as coding or non-coding.
|
|
92246
|
+
- Identify the decision, comparison, or unknown the requester actually needs resolved.
|
|
92247
|
+
- Decide whether clarification is required now or whether existing instructions already define scope.
|
|
92248
|
+
Execution phase:
|
|
92249
|
+
- If it is a coding task, inspect the codebase first: launch 1-3 Explore agents in parallel and read the relevant local files before asking planning questions.
|
|
92250
|
+
- Treat this as a lightweight grounding pass; if no relevant local code or patterns exist, state that clearly and continue with external research rather than stalling.
|
|
92251
|
+
- Only ask targeted follow-up questions after that first codebase pass if a critical ambiguity remains.
|
|
92252
|
+
- If it is a non-coding task, use the question tool first, make no assumptions about scope, audience, geography, timeframe, or output format, and if you are a subagent without direct user access, return clarifying questions to the caller and stop until they are answered.
|
|
92253
|
+
Verification phase:
|
|
92254
|
+
- Confirm the request is correctly labeled as coding or non-coding.
|
|
92255
|
+
- Confirm any blocking ambiguity has either been resolved or explicitly surfaced.
|
|
92256
|
+
- Confirm you can state in one sentence what the requester needs to decide or learn.
|
|
92165
92257
|
|
|
92166
92258
|
Step 2: Plan the Research
|
|
92167
|
-
|
|
92259
|
+
Planning phase:
|
|
92260
|
+
- Build a Tree-of-Thoughts plan with one root research question, 2-4 major branches, and leaf sub-questions under each branch.
|
|
92261
|
+
- Prefer leaf sub-questions that are mutually informative rather than flat duplicates.
|
|
92262
|
+
- For coding tasks, do this only after the first codebase exploration pass.
|
|
92263
|
+
- For non-coding tasks, do this only after the clarifying questions are answered.
|
|
92264
|
+
Execution phase:
|
|
92265
|
+
- List every leaf sub-question and classify it as codebase (Explore agent), docs/library (Librarian agent), or general/web (direct websearch/webfetch MCP tools or Researcher-Junior agent).
|
|
92266
|
+
- Create one shared run directory at .drizzy/research/{slug}/.
|
|
92267
|
+
- Save the final report to {run_directory}/report.md.
|
|
92268
|
+
- Pass that exact run_directory to every Researcher-Junior task.
|
|
92269
|
+
Verification phase:
|
|
92270
|
+
- Confirm the tree covers scope, evidence gathering, comparison, and recommendation needs.
|
|
92271
|
+
- Confirm each leaf sub-question has exactly one primary research path and owner.
|
|
92272
|
+
- Confirm the run_directory contract is defined before any delegation starts.
|
|
92273
|
+
Complexity check:
|
|
92274
|
+
- STRAIGHTFORWARD: narrow scope, stable facts, few moving parts; start with 3-4 Researcher-Junior agents.
|
|
92275
|
+
- STANDARD: moderate scope, several branches, some comparison work; start with 5-6 Researcher-Junior agents.
|
|
92276
|
+
- DEEP: high stakes, conflicting sources, many branches, or fast-changing context; start with 7-10 Researcher-Junior agents.
|
|
92277
|
+
- Explore and Librarian agents support the plan but do not count toward the Researcher-Junior target range.
|
|
92168
92278
|
|
|
92169
92279
|
Step 3: Execute Parallel Search
|
|
92170
|
-
|
|
92280
|
+
Planning phase:
|
|
92281
|
+
- Map each leaf sub-question to the right execution path.
|
|
92282
|
+
- Size the initial Researcher-Junior wave according to the STRAIGHTFORWARD, STANDARD, or DEEP classification.
|
|
92283
|
+
- Ensure the first wave covers every major branch of the Tree-of-Thoughts, not just the easiest leaves.
|
|
92284
|
+
Execution phase:
|
|
92285
|
+
- Spawn sub-agents for each sub-question using background execution.
|
|
92286
|
+
- For codebase questions use task(subagent_type="explore", description="...", load_skills=[], run_in_background=true, prompt="...").
|
|
92287
|
+
- For docs use task(subagent_type="librarian", description="...", load_skills=[], run_in_background=true, prompt="...").
|
|
92288
|
+
- For web research use websearch MCP tool directly or spawn task(subagent_type="researcher-junior", description="...", load_skills=[], run_in_background=true, prompt="... Use this exact run_directory: {run_directory}. Save findings to {run_directory}/findings/..." ) for deeper investigation.
|
|
92289
|
+
- Initial Researcher-Junior deployment guidance: STRAIGHTFORWARD means 3-4 agents, STANDARD means 5-6 agents, and DEEP means 7-10 agents.
|
|
92290
|
+
- Each initial Researcher-Junior should own a distinct leaf sub-question or high-value branch. Explore and Librarian agents for codebase and docs queries do not count toward the Researcher-Junior target range.
|
|
92291
|
+
- ALL task() calls MUST include description, load_skills, and run_in_background parameters.
|
|
92292
|
+
- Never pass category to task(), never delegate to coder-junior, and always use explicit subagent_type values: explore, librarian, researcher-junior.
|
|
92293
|
+
- Escalation: after collecting results, if Researcher-Junior agents return conflicting findings, incomplete coverage, or surface new threads, deploy additional Researcher-Junior agents to resolve conflicts or cover gaps; there is no upper limit.
|
|
92294
|
+
Verification phase:
|
|
92295
|
+
- Confirm every major branch has active coverage.
|
|
92296
|
+
- Confirm every task() call includes description, load_skills, and run_in_background.
|
|
92297
|
+
- Confirm no delegation uses category or coder-junior.
|
|
92171
92298
|
|
|
92172
92299
|
Step 4: Collect and Deep-Read
|
|
92173
|
-
|
|
92300
|
+
Planning phase:
|
|
92301
|
+
- Gather all pending results before judging coverage.
|
|
92302
|
+
- Identify which findings are corroborated, incomplete, or in conflict.
|
|
92303
|
+
- Prioritize high-impact disagreements for deeper review first.
|
|
92304
|
+
Execution phase:
|
|
92305
|
+
- Gather all sub-agent results via background_output(task_id="...").
|
|
92306
|
+
- For promising URLs, use webfetch to get full content.
|
|
92307
|
+
- Cross-reference findings across sources.
|
|
92308
|
+
- Tag each finding with confidence: HIGH (3+ sources confirm), MEDIUM (1-2 authoritative sources), LOW (single, uncertain, or conflicting information).
|
|
92309
|
+
Verification phase:
|
|
92310
|
+
- Confirm every major claim has at least one traceable source.
|
|
92311
|
+
- Confirm unresolved conflicts are explicitly labeled rather than averaged away.
|
|
92312
|
+
- Confirm any gap or contradiction is either escalated or documented for synthesis.
|
|
92313
|
+
Conflict resolution protocol:
|
|
92314
|
+
- Resolve conflicts in this order: credibility, recency, confidence, context.
|
|
92315
|
+
- Credibility means prefer primary sources, official docs, peer-reviewed work, or directly observed code over commentary.
|
|
92316
|
+
- Recency breaks ties when credibility is comparable.
|
|
92317
|
+
- Confidence favors conclusions supported by broader independent confirmation.
|
|
92318
|
+
- Context preserves scenario-specific differences instead of forcing a false merge.
|
|
92319
|
+
- If the conflict remains unresolved, cite both sides and launch additional Researcher-Junior agents.
|
|
92174
92320
|
|
|
92175
92321
|
Step 5: Synthesize Report
|
|
92176
|
-
|
|
92322
|
+
Planning phase:
|
|
92323
|
+
- Organize findings by decision-relevant themes, not by search chronology.
|
|
92324
|
+
- Decide which conclusions are stable, conditional, or unresolved.
|
|
92325
|
+
- Reserve space for methodology, caveats, and confidence notes.
|
|
92326
|
+
Execution phase:
|
|
92327
|
+
- Write a structured markdown report: Executive Summary (2-3 paragraphs), Themed Sections with inline citations [1], [2] and per-finding confidence, Key Takeaways (numbered actionable insights), Sources (numbered list with relevance notes), and Methodology (search strategy, agents used, gaps).
|
|
92328
|
+
Verification phase:
|
|
92329
|
+
- Confirm every section supports the final recommendation or decision.
|
|
92330
|
+
- Confirm inline citations and per-finding confidence labels are present where relevant.
|
|
92331
|
+
- Confirm conflicts, gaps, and assumptions remain visible in the final narrative.
|
|
92177
92332
|
|
|
92178
92333
|
Step 6: Save and Deliver
|
|
92179
|
-
|
|
92334
|
+
Planning phase:
|
|
92335
|
+
- Prepare the final report path and the chat-ready summary.
|
|
92336
|
+
- Keep the chat response concise but decision-useful.
|
|
92337
|
+
- Ensure the saved artifact and the delivered summary match.
|
|
92338
|
+
Execution phase:
|
|
92339
|
+
- Write the full report to {run_directory}/report.md where run_directory is the single slug-based directory created during planning.
|
|
92340
|
+
- Post the Executive Summary and Key Takeaways in chat along with the file path.
|
|
92341
|
+
Verification phase:
|
|
92342
|
+
- Confirm the file exists at the exact run_directory path.
|
|
92343
|
+
- Confirm the chat reply includes Executive Summary, Key Takeaways, and file path.
|
|
92344
|
+
- Confirm nothing promised in the report is missing from the saved artifact.
|
|
92180
92345
|
|
|
92181
92346
|
Quality Rules: Every claim must have a source citation. Cross-reference single-source findings and flag them as MEDIUM or LOW confidence. Prefer recent sources. Acknowledge gaps explicitly. Never hallucinate sources, URLs, statistics, or quotes. Present conflicting information from both sides with sources.
|
|
92182
92347
|
|
|
@@ -92238,31 +92403,57 @@ var RESEARCHER_JUNIOR_DEFAULT_PROMPT = `You are a focused web research specialis
|
|
|
92238
92403
|
<workflow>
|
|
92239
92404
|
1. Receive the sub-topic/question from Researcher
|
|
92240
92405
|
2. Search with websearch (Exa) using 2-3 keyword variations \u2014 aim for 5-10 sources
|
|
92241
|
-
3.
|
|
92242
|
-
|
|
92243
|
-
|
|
92406
|
+
3. Pre-filter candidate sources before deep reading:
|
|
92407
|
+
- Domain authority: .edu/.gov/.org and official institution sites = HIGH, established publications and well-known vendors = HIGH, unknown domains = LOW until proven otherwise
|
|
92408
|
+
- Recency: prefer sources published or updated within the last 2 years for tech topics unless an older primary source is still authoritative
|
|
92409
|
+
- Bias indicators: flag marketing pages, sponsored posts, affiliate content, and vendor claims without independent corroboration
|
|
92410
|
+
- Prioritization: read HIGH authority sources first, then use lower-authority sources only as supporting context or to surface contradictions
|
|
92411
|
+
4. Deep-read 2-3 most promising URLs via webfetch for full content
|
|
92412
|
+
5. Extract key findings with inline citations [source](url)
|
|
92413
|
+
6. Tag each finding with confidence:
|
|
92244
92414
|
- HIGH: Confirmed by 3+ independent sources
|
|
92245
92415
|
- MEDIUM: Supported by 1-2 sources
|
|
92246
92416
|
- LOW: Single source or uncertain/conflicting information
|
|
92247
|
-
|
|
92417
|
+
7. Write findings to: {run_directory}/findings/{sub-topic}-findings.md
|
|
92248
92418
|
- Researcher should pass you an exact run_directory in the prompt
|
|
92249
92419
|
- Use that exact run_directory so your findings land in the same shared investigation folder as the final report
|
|
92250
92420
|
- If no explicit run_directory is provided, state the missing contract clearly before making assumptions
|
|
92251
|
-
|
|
92421
|
+
8. Return brief summary in conversation
|
|
92252
92422
|
</workflow>
|
|
92253
92423
|
|
|
92254
92424
|
<findings_format>
|
|
92255
92425
|
# {Sub-Topic}: Findings
|
|
92256
92426
|
*Searched: {date} | Sources: {N} | Confidence: {overall}*
|
|
92257
92427
|
|
|
92428
|
+
<metadata>
|
|
92429
|
+
- parent_question: {broader research question from Researcher}
|
|
92430
|
+
- classification: {fact-finding | comparison | risk-check | implementation-context | other}
|
|
92431
|
+
- completion_status: {complete | partial | blocked}
|
|
92432
|
+
- related_sub_topics: {comma-separated related branches or "none"}
|
|
92433
|
+
</metadata>
|
|
92434
|
+
|
|
92258
92435
|
## Key Findings
|
|
92259
92436
|
- **[Finding]** -- [explanation with citation](url) [CONFIDENCE]
|
|
92260
92437
|
|
|
92438
|
+
## Source Credibility Summary
|
|
92439
|
+
| Source | Authority | Recency | Bias Risk |
|
|
92440
|
+
| --- | --- | --- | --- |
|
|
92441
|
+
| [Title](url) | HIGH/MEDIUM/LOW | {publish date or "unknown"} | LOW/MEDIUM/HIGH |
|
|
92442
|
+
|
|
92261
92443
|
## Sources Consulted
|
|
92262
92444
|
1. [Title](url) -- {relevance description}
|
|
92263
92445
|
|
|
92446
|
+
## Cross-References
|
|
92447
|
+
- Related sub-topic: {name} -- {why it matters to this branch}
|
|
92448
|
+
|
|
92449
|
+
## Contradictions Detected
|
|
92450
|
+
- {Conflict between sources, confidence impact, and what remains unresolved}
|
|
92451
|
+
|
|
92264
92452
|
## Gaps & Limitations
|
|
92265
92453
|
- {What couldn't be confirmed or found}
|
|
92454
|
+
|
|
92455
|
+
## Synthesis Notes for Parent Agent
|
|
92456
|
+
- {What Researcher should incorporate, compare, or follow up on in the final synthesis}
|
|
92266
92457
|
</findings_format>
|
|
92267
92458
|
|
|
92268
92459
|
<quality_rules>
|
|
@@ -92271,32 +92462,48 @@ var RESEARCHER_JUNIOR_DEFAULT_PROMPT = `You are a focused web research specialis
|
|
|
92271
92462
|
- No hallucination -- if unsure, say so
|
|
92272
92463
|
- Prefer recent sources over older ones
|
|
92273
92464
|
- Cross-reference when possible
|
|
92465
|
+
- Include source credibility judgments for every source you rely on
|
|
92466
|
+
- Surface contradictions explicitly instead of smoothing them over
|
|
92467
|
+
- Tell Researcher whether this branch is complete, partial, or blocked
|
|
92274
92468
|
</quality_rules>`;
|
|
92275
92469
|
var RESEARCHER_JUNIOR_GPT_PROMPT = `You are a focused web research specialist. You receive a specific sub-topic from Researcher and investigate it thoroughly.
|
|
92276
92470
|
|
|
92277
92471
|
Workflow:
|
|
92278
92472
|
1. Receive the sub-topic/question from Researcher.
|
|
92279
92473
|
2. Search with websearch (Exa) using 2-3 keyword variations. Aim for 5-10 sources.
|
|
92280
|
-
3.
|
|
92281
|
-
4.
|
|
92282
|
-
5.
|
|
92283
|
-
6.
|
|
92474
|
+
3. Pre-filter candidate sources before deep reading. Treat .edu, .gov, .org, official institution sites, and established publications as high authority. Treat unknown domains as low authority until proven otherwise. For tech topics, prefer sources published or updated within the last 2 years unless an older primary source is still authoritative. Flag marketing pages, sponsored posts, affiliate content, and vendor claims without independent corroboration as higher bias risk. Read high-authority sources first.
|
|
92475
|
+
4. Deep-read 2-3 most promising URLs via webfetch for full content.
|
|
92476
|
+
5. Extract key findings with inline citations [source](url).
|
|
92477
|
+
6. Tag each finding with confidence: HIGH (3+ sources), MEDIUM (1-2 sources), LOW (single/uncertain).
|
|
92478
|
+
7. Write findings to {run_directory}/findings/{sub-topic}-findings.md using this format:
|
|
92284
92479
|
|
|
92285
92480
|
Findings File Format:
|
|
92286
92481
|
- Title: "# {Sub-Topic}: Findings"
|
|
92287
92482
|
- Metadata line: "*Searched: {date} | Sources: {N} | Confidence: {overall}*"
|
|
92483
|
+
- Metadata section with:
|
|
92484
|
+
- parent_question: broader research question from Researcher
|
|
92485
|
+
- classification: fact-finding, comparison, risk-check, implementation-context, or other
|
|
92486
|
+
- completion_status: complete, partial, or blocked
|
|
92487
|
+
- related_sub_topics: related branches or "none"
|
|
92288
92488
|
- Key Findings section: bullet points with finding, citation link, and confidence tag
|
|
92489
|
+
- Source Credibility Summary section: markdown table with columns Source, Authority, Recency, Bias Risk
|
|
92289
92490
|
- Sources Consulted section: numbered list with title, URL, and relevance
|
|
92491
|
+
- Cross-References section: related sub-topics and why they matter
|
|
92492
|
+
- Contradictions Detected section: explicit conflicts, confidence impact, and unresolved disagreements
|
|
92290
92493
|
- Gaps & Limitations section: what couldn't be confirmed
|
|
92494
|
+
- Synthesis Notes for Parent Agent section: what Researcher should incorporate, compare, or follow up on
|
|
92291
92495
|
|
|
92292
|
-
|
|
92496
|
+
8. Return brief summary in conversation.
|
|
92293
92497
|
|
|
92294
92498
|
Quality Rules:
|
|
92295
92499
|
- Cite every claim with source URL.
|
|
92296
92500
|
- Acknowledge gaps explicitly.
|
|
92297
92501
|
- No hallucination. If unsure, say so.
|
|
92298
92502
|
- Prefer recent sources over older ones.
|
|
92299
|
-
- Cross-reference when possible
|
|
92503
|
+
- Cross-reference when possible.
|
|
92504
|
+
- Include source credibility judgments for every source you rely on.
|
|
92505
|
+
- Surface contradictions explicitly instead of smoothing them over.
|
|
92506
|
+
- Tell Researcher whether this branch is complete, partial, or blocked.`;
|
|
92300
92507
|
var createResearcherJuniorAgent = (model) => {
|
|
92301
92508
|
const restrictions = createAgentToolRestrictions([
|
|
92302
92509
|
"apply_patch",
|
|
@@ -92508,7 +92715,7 @@ function collectPendingBuiltinAgents(input) {
|
|
|
92508
92715
|
continue;
|
|
92509
92716
|
if (agentName === "gptcoder")
|
|
92510
92717
|
continue;
|
|
92511
|
-
if (agentName === "
|
|
92718
|
+
if (agentName === "orchestrator")
|
|
92512
92719
|
continue;
|
|
92513
92720
|
if (agentName === "coder-junior")
|
|
92514
92721
|
continue;
|
|
@@ -92659,8 +92866,8 @@ function maybeCreateGptcoderConfig(input) {
|
|
|
92659
92866
|
return gptcoderConfig;
|
|
92660
92867
|
}
|
|
92661
92868
|
|
|
92662
|
-
// src/agents/builtin-agents/
|
|
92663
|
-
function
|
|
92869
|
+
// src/agents/builtin-agents/orchestrator-agent.ts
|
|
92870
|
+
function maybeCreateOrchestratorConfig(input) {
|
|
92664
92871
|
const {
|
|
92665
92872
|
disabledAgents,
|
|
92666
92873
|
agentOverrides,
|
|
@@ -92673,30 +92880,30 @@ function maybeCreateAtlasConfig(input) {
|
|
|
92673
92880
|
directory,
|
|
92674
92881
|
userCategories
|
|
92675
92882
|
} = input;
|
|
92676
|
-
if (disabledAgents.includes("
|
|
92883
|
+
if (disabledAgents.includes("orchestrator"))
|
|
92677
92884
|
return;
|
|
92678
|
-
const orchestratorOverride = getExplicitAgentOverride(agentOverrides, "
|
|
92679
|
-
const effectiveOrchestratorOverride = getEffectiveAgentOverride(agentOverrides, "
|
|
92680
|
-
const
|
|
92681
|
-
const
|
|
92885
|
+
const orchestratorOverride = getExplicitAgentOverride(agentOverrides, "orchestrator");
|
|
92886
|
+
const effectiveOrchestratorOverride = getEffectiveAgentOverride(agentOverrides, "orchestrator");
|
|
92887
|
+
const orchestratorRequirement = AGENT_MODEL_REQUIREMENTS["orchestrator"];
|
|
92888
|
+
const orchestratorResolution = applyModelResolution({
|
|
92682
92889
|
uiSelectedModel: effectiveOrchestratorOverride?.model ? undefined : uiSelectedModel,
|
|
92683
92890
|
userModel: effectiveOrchestratorOverride?.model,
|
|
92684
|
-
requirement:
|
|
92891
|
+
requirement: orchestratorRequirement,
|
|
92685
92892
|
availableModels,
|
|
92686
92893
|
systemDefaultModel
|
|
92687
92894
|
});
|
|
92688
|
-
if (!
|
|
92895
|
+
if (!orchestratorResolution)
|
|
92689
92896
|
return;
|
|
92690
|
-
const { model:
|
|
92691
|
-
let orchestratorConfig =
|
|
92692
|
-
model:
|
|
92897
|
+
const { model: orchestratorModel, variant: orchestratorResolvedVariant } = orchestratorResolution;
|
|
92898
|
+
let orchestratorConfig = createOrchestratorAgent({
|
|
92899
|
+
model: orchestratorModel,
|
|
92693
92900
|
availableAgents,
|
|
92694
92901
|
availableSkills,
|
|
92695
92902
|
userCategories
|
|
92696
92903
|
});
|
|
92697
|
-
const
|
|
92698
|
-
if (
|
|
92699
|
-
orchestratorConfig = { ...orchestratorConfig, variant:
|
|
92904
|
+
const orchestratorVariant = orchestratorOverride?.variant ?? effectiveOrchestratorOverride?.variant ?? orchestratorResolvedVariant;
|
|
92905
|
+
if (orchestratorVariant) {
|
|
92906
|
+
orchestratorConfig = { ...orchestratorConfig, variant: orchestratorVariant };
|
|
92700
92907
|
}
|
|
92701
92908
|
orchestratorConfig = applyOverrides(orchestratorConfig, orchestratorOverride, mergedCategories, directory);
|
|
92702
92909
|
return orchestratorConfig;
|
|
@@ -92758,7 +92965,7 @@ var agentSources = {
|
|
|
92758
92965
|
"multimodal-looker": createMultimodalLookerAgent,
|
|
92759
92966
|
"plan-consultant": createPlanConsultantAgent,
|
|
92760
92967
|
"plan-reviewer": createPlanReviewerAgent,
|
|
92761
|
-
|
|
92968
|
+
orchestrator: createOrchestratorAgent,
|
|
92762
92969
|
"coder-junior": createCoderJuniorAgentWithOverrides,
|
|
92763
92970
|
researcher: createResearcherAgent,
|
|
92764
92971
|
"researcher-junior": createResearcherJuniorAgent
|
|
@@ -92770,7 +92977,7 @@ var agentMetadata = {
|
|
|
92770
92977
|
"multimodal-looker": MULTIMODAL_LOOKER_PROMPT_METADATA,
|
|
92771
92978
|
"plan-consultant": planConsultantPromptMetadata,
|
|
92772
92979
|
"plan-reviewer": planReviewerPromptMetadata,
|
|
92773
|
-
|
|
92980
|
+
orchestrator: orchestratorPromptMetadata,
|
|
92774
92981
|
researcher: RESEARCHER_PROMPT_METADATA,
|
|
92775
92982
|
"researcher-junior": RESEARCHER_JUNIOR_PROMPT_METADATA
|
|
92776
92983
|
};
|
|
@@ -92861,7 +93068,7 @@ async function createBuiltinAgents(disabledAgents = [], agentOverrides = {}, dir
|
|
|
92861
93068
|
for (const [name, config4] of pendingAgentConfigs) {
|
|
92862
93069
|
result[name] = config4;
|
|
92863
93070
|
}
|
|
92864
|
-
const
|
|
93071
|
+
const orchestratorConfig = maybeCreateOrchestratorConfig({
|
|
92865
93072
|
disabledAgents,
|
|
92866
93073
|
agentOverrides,
|
|
92867
93074
|
uiSelectedModel,
|
|
@@ -92873,8 +93080,8 @@ async function createBuiltinAgents(disabledAgents = [], agentOverrides = {}, dir
|
|
|
92873
93080
|
directory,
|
|
92874
93081
|
userCategories: categories2
|
|
92875
93082
|
});
|
|
92876
|
-
if (
|
|
92877
|
-
result["
|
|
93083
|
+
if (orchestratorConfig) {
|
|
93084
|
+
result["orchestrator"] = orchestratorConfig;
|
|
92878
93085
|
}
|
|
92879
93086
|
return result;
|
|
92880
93087
|
}
|
|
@@ -92956,7 +93163,7 @@ var CORE_AGENT_ORDER = [
|
|
|
92956
93163
|
getAgentDisplayName("coder"),
|
|
92957
93164
|
getAgentDisplayName("gptcoder"),
|
|
92958
93165
|
getAgentDisplayName("planner"),
|
|
92959
|
-
getAgentDisplayName("
|
|
93166
|
+
getAgentDisplayName("orchestrator")
|
|
92960
93167
|
];
|
|
92961
93168
|
function reorderAgentsByPriority(agents) {
|
|
92962
93169
|
const ordered = {};
|
|
@@ -95842,10 +96049,10 @@ function applyToolConfig(params) {
|
|
|
95842
96049
|
if (looker) {
|
|
95843
96050
|
looker.permission = { ...looker.permission, task: "deny", look_at: "deny" };
|
|
95844
96051
|
}
|
|
95845
|
-
const
|
|
95846
|
-
if (
|
|
95847
|
-
|
|
95848
|
-
...
|
|
96052
|
+
const orchestrator = agentByKey(params.agentResult, "orchestrator");
|
|
96053
|
+
if (orchestrator) {
|
|
96054
|
+
orchestrator.permission = {
|
|
96055
|
+
...orchestrator.permission,
|
|
95849
96056
|
task: "allow",
|
|
95850
96057
|
call_omo_agent: "deny",
|
|
95851
96058
|
"task_*": "allow",
|
|
@@ -96916,7 +97123,7 @@ function createEventHandler2(args) {
|
|
|
96916
97123
|
await Promise.resolve(hooks2.compactionContextInjector?.event?.(input));
|
|
96917
97124
|
await Promise.resolve(hooks2.compactionTodoPreserver?.event?.(input));
|
|
96918
97125
|
await Promise.resolve(hooks2.writeExistingFileGuard?.event?.(input));
|
|
96919
|
-
await Promise.resolve(hooks2.
|
|
97126
|
+
await Promise.resolve(hooks2.orchestratorHook?.handler?.(input));
|
|
96920
97127
|
await Promise.resolve(hooks2.autoSlashCommand?.event?.(input));
|
|
96921
97128
|
};
|
|
96922
97129
|
const recentSyntheticIdles = new Map;
|
|
@@ -97218,7 +97425,7 @@ function createToolExecuteAfterHandler3(args) {
|
|
|
97218
97425
|
await hooks2.interactiveBashSession?.["tool.execute.after"]?.(input, output);
|
|
97219
97426
|
await hooks2.editErrorRecovery?.["tool.execute.after"]?.(input, output);
|
|
97220
97427
|
await hooks2.delegateTaskRetry?.["tool.execute.after"]?.(input, output);
|
|
97221
|
-
await hooks2.
|
|
97428
|
+
await hooks2.orchestratorHook?.["tool.execute.after"]?.(input, output);
|
|
97222
97429
|
await hooks2.taskResumeInfo?.["tool.execute.after"]?.(input, output);
|
|
97223
97430
|
await hooks2.readImageResizer?.["tool.execute.after"]?.(input, output);
|
|
97224
97431
|
await hooks2.hashlineReadEnhancer?.["tool.execute.after"]?.(input, output);
|
|
@@ -97286,7 +97493,7 @@ function createToolExecuteBeforeHandler3(args) {
|
|
|
97286
97493
|
await hooks2.tasksTodowriteDisabler?.["tool.execute.before"]?.(input, output);
|
|
97287
97494
|
await hooks2.plannerMdOnly?.["tool.execute.before"]?.(input, output);
|
|
97288
97495
|
await hooks2.coderJuniorNotepad?.["tool.execute.before"]?.(input, output);
|
|
97289
|
-
await hooks2.
|
|
97496
|
+
await hooks2.orchestratorHook?.["tool.execute.before"]?.(input, output);
|
|
97290
97497
|
const normalizedToolName = input.tool.toLowerCase();
|
|
97291
97498
|
if (normalizedToolName === "question" || normalizedToolName === "ask_user_question" || normalizedToolName === "askuserquestion") {
|
|
97292
97499
|
const sessionID = input.sessionID || getMainSessionID();
|