funolio-agent 0.17.8 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/approval.d.ts +7 -6
  2. package/dist/approval.d.ts.map +1 -1
  3. package/dist/approval.js +40 -10
  4. package/dist/approval.js.map +1 -1
  5. package/dist/auth/anthropic-subscription.d.ts +9 -29
  6. package/dist/auth/anthropic-subscription.d.ts.map +1 -1
  7. package/dist/auth/anthropic-subscription.js +12 -133
  8. package/dist/auth/anthropic-subscription.js.map +1 -1
  9. package/dist/auth/auto-detect.d.ts +28 -6
  10. package/dist/auth/auto-detect.d.ts.map +1 -1
  11. package/dist/auth/auto-detect.js +52 -205
  12. package/dist/auth/auto-detect.js.map +1 -1
  13. package/dist/auth/credential-reader.d.ts +24 -4
  14. package/dist/auth/credential-reader.d.ts.map +1 -1
  15. package/dist/auth/credential-reader.js +31 -256
  16. package/dist/auth/credential-reader.js.map +1 -1
  17. package/dist/auth/credential-status.d.ts +7 -27
  18. package/dist/auth/credential-status.d.ts.map +1 -1
  19. package/dist/auth/credential-status.js +7 -95
  20. package/dist/auth/credential-status.js.map +1 -1
  21. package/dist/auth/index.d.ts +9 -2
  22. package/dist/auth/index.d.ts.map +1 -1
  23. package/dist/auth/index.js +10 -10
  24. package/dist/auth/index.js.map +1 -1
  25. package/dist/auth/subscription-runtime.d.ts +19 -23
  26. package/dist/auth/subscription-runtime.d.ts.map +1 -1
  27. package/dist/auth/subscription-runtime.js +24 -292
  28. package/dist/auth/subscription-runtime.js.map +1 -1
  29. package/dist/auth/token-refresh.d.ts +19 -28
  30. package/dist/auth/token-refresh.d.ts.map +1 -1
  31. package/dist/auth/token-refresh.js +26 -464
  32. package/dist/auth/token-refresh.js.map +1 -1
  33. package/dist/backfill.js +2 -2
  34. package/dist/backfill.js.map +1 -1
  35. package/dist/bot-manager.d.ts +5 -6
  36. package/dist/bot-manager.d.ts.map +1 -1
  37. package/dist/bot-manager.js +20 -62
  38. package/dist/bot-manager.js.map +1 -1
  39. package/dist/clerk-model.d.ts +0 -1
  40. package/dist/clerk-model.d.ts.map +1 -1
  41. package/dist/clerk-model.js +24 -50
  42. package/dist/clerk-model.js.map +1 -1
  43. package/dist/commands/configure-provider.js +2 -2
  44. package/dist/commands/configure-provider.js.map +1 -1
  45. package/dist/commands/configure.d.ts.map +1 -1
  46. package/dist/commands/configure.js +10 -14
  47. package/dist/commands/configure.js.map +1 -1
  48. package/dist/commands/start.d.ts.map +1 -1
  49. package/dist/commands/start.js +51 -229
  50. package/dist/commands/start.js.map +1 -1
  51. package/dist/config.d.ts +1 -1
  52. package/dist/config.d.ts.map +1 -1
  53. package/dist/config.js +2 -2
  54. package/dist/config.js.map +1 -1
  55. package/dist/context-compressor.d.ts +6 -1
  56. package/dist/context-compressor.d.ts.map +1 -1
  57. package/dist/context-compressor.js +87 -18
  58. package/dist/context-compressor.js.map +1 -1
  59. package/dist/context-window.d.ts +2 -8
  60. package/dist/context-window.d.ts.map +1 -1
  61. package/dist/context-window.js +4 -4
  62. package/dist/context-window.js.map +1 -1
  63. package/dist/eval/orchestrator-front-door-replay.js +43 -2
  64. package/dist/eval/orchestrator-front-door-replay.js.map +1 -1
  65. package/dist/eval/orchestrator-todo-dispatch-replay.d.ts +2 -0
  66. package/dist/eval/orchestrator-todo-dispatch-replay.d.ts.map +1 -0
  67. package/dist/eval/orchestrator-todo-dispatch-replay.js +253 -0
  68. package/dist/eval/orchestrator-todo-dispatch-replay.js.map +1 -0
  69. package/dist/eval/orchestrator-todo-planning-replay.d.ts +2 -0
  70. package/dist/eval/orchestrator-todo-planning-replay.d.ts.map +1 -0
  71. package/dist/eval/orchestrator-todo-planning-replay.js +247 -0
  72. package/dist/eval/orchestrator-todo-planning-replay.js.map +1 -0
  73. package/dist/eval/policy-detection-replay.d.ts +2 -0
  74. package/dist/eval/policy-detection-replay.d.ts.map +1 -0
  75. package/dist/eval/policy-detection-replay.js +122 -0
  76. package/dist/eval/policy-detection-replay.js.map +1 -0
  77. package/dist/eval/todo-worker-runtime-replay.d.ts +2 -0
  78. package/dist/eval/todo-worker-runtime-replay.d.ts.map +1 -0
  79. package/dist/eval/todo-worker-runtime-replay.js +520 -0
  80. package/dist/eval/todo-worker-runtime-replay.js.map +1 -0
  81. package/dist/integration-tokens.d.ts +6 -0
  82. package/dist/integration-tokens.d.ts.map +1 -1
  83. package/dist/integration-tokens.js +43 -0
  84. package/dist/integration-tokens.js.map +1 -1
  85. package/dist/local-data.d.ts +134 -1
  86. package/dist/local-data.d.ts.map +1 -1
  87. package/dist/local-data.js +711 -18
  88. package/dist/local-data.js.map +1 -1
  89. package/dist/local-db.d.ts.map +1 -1
  90. package/dist/local-db.js +216 -12
  91. package/dist/local-db.js.map +1 -1
  92. package/dist/local-funnel.d.ts.map +1 -1
  93. package/dist/local-funnel.js +7 -0
  94. package/dist/local-funnel.js.map +1 -1
  95. package/dist/local-server.d.ts.map +1 -1
  96. package/dist/local-server.js +119 -96
  97. package/dist/local-server.js.map +1 -1
  98. package/dist/mcp/bridge-server.d.ts.map +1 -1
  99. package/dist/mcp/bridge-server.js +8 -2
  100. package/dist/mcp/bridge-server.js.map +1 -1
  101. package/dist/mcp/manager.d.ts +5 -0
  102. package/dist/mcp/manager.d.ts.map +1 -1
  103. package/dist/mcp/manager.js +131 -2
  104. package/dist/mcp/manager.js.map +1 -1
  105. package/dist/mcp/sync-cli-config.d.ts +5 -0
  106. package/dist/mcp/sync-cli-config.d.ts.map +1 -1
  107. package/dist/mcp/sync-cli-config.js +10 -2
  108. package/dist/mcp/sync-cli-config.js.map +1 -1
  109. package/dist/message-loop.d.ts +1 -10
  110. package/dist/message-loop.d.ts.map +1 -1
  111. package/dist/message-loop.js +179 -250
  112. package/dist/message-loop.js.map +1 -1
  113. package/dist/mqtt-client.d.ts +44 -0
  114. package/dist/mqtt-client.d.ts.map +1 -1
  115. package/dist/mqtt-client.js +2 -2
  116. package/dist/mqtt-client.js.map +1 -1
  117. package/dist/orchestration/front-door-policy.d.ts +26 -9
  118. package/dist/orchestration/front-door-policy.d.ts.map +1 -1
  119. package/dist/orchestration/front-door-policy.js +242 -69
  120. package/dist/orchestration/front-door-policy.js.map +1 -1
  121. package/dist/orchestration/orchestrator-blocked-prompt.d.ts +18 -0
  122. package/dist/orchestration/orchestrator-blocked-prompt.d.ts.map +1 -0
  123. package/dist/orchestration/orchestrator-blocked-prompt.js +46 -0
  124. package/dist/orchestration/orchestrator-blocked-prompt.js.map +1 -0
  125. package/dist/orchestration/orchestrator-final-response-prompt.d.ts +10 -0
  126. package/dist/orchestration/orchestrator-final-response-prompt.d.ts.map +1 -0
  127. package/dist/orchestration/orchestrator-final-response-prompt.js +39 -0
  128. package/dist/orchestration/orchestrator-final-response-prompt.js.map +1 -0
  129. package/dist/orchestration/orchestrator-operating-prompt.d.ts +11 -0
  130. package/dist/orchestration/orchestrator-operating-prompt.d.ts.map +1 -1
  131. package/dist/orchestration/orchestrator-operating-prompt.js +106 -36
  132. package/dist/orchestration/orchestrator-operating-prompt.js.map +1 -1
  133. package/dist/orchestration/policy-prompt.d.ts +6 -0
  134. package/dist/orchestration/policy-prompt.d.ts.map +1 -0
  135. package/dist/orchestration/policy-prompt.js +40 -0
  136. package/dist/orchestration/policy-prompt.js.map +1 -0
  137. package/dist/orchestration/worker-operating-prompt.d.ts +16 -0
  138. package/dist/orchestration/worker-operating-prompt.d.ts.map +1 -0
  139. package/dist/orchestration/worker-operating-prompt.js +75 -0
  140. package/dist/orchestration/worker-operating-prompt.js.map +1 -0
  141. package/dist/orchestrator.d.ts +19 -0
  142. package/dist/orchestrator.d.ts.map +1 -1
  143. package/dist/orchestrator.js +614 -54
  144. package/dist/orchestrator.js.map +1 -1
  145. package/dist/policy-detection.d.ts +40 -0
  146. package/dist/policy-detection.d.ts.map +1 -0
  147. package/dist/policy-detection.js +298 -0
  148. package/dist/policy-detection.js.map +1 -0
  149. package/dist/providers/anthropic.d.ts +0 -5
  150. package/dist/providers/anthropic.d.ts.map +1 -1
  151. package/dist/providers/anthropic.js +34 -51
  152. package/dist/providers/anthropic.js.map +1 -1
  153. package/dist/providers/claude-cli.d.ts.map +1 -1
  154. package/dist/providers/claude-cli.js +11 -2
  155. package/dist/providers/claude-cli.js.map +1 -1
  156. package/dist/providers/codex-cli.d.ts.map +1 -1
  157. package/dist/providers/codex-cli.js +121 -2
  158. package/dist/providers/codex-cli.js.map +1 -1
  159. package/dist/providers/index.d.ts +6 -2
  160. package/dist/providers/index.d.ts.map +1 -1
  161. package/dist/providers/index.js.map +1 -1
  162. package/dist/summarization-pipeline.d.ts +1 -4
  163. package/dist/summarization-pipeline.d.ts.map +1 -1
  164. package/dist/summarization-pipeline.js +43 -56
  165. package/dist/summarization-pipeline.js.map +1 -1
  166. package/dist/tools/analyze-image.js +2 -2
  167. package/dist/tools/analyze-image.js.map +1 -1
  168. package/dist/tools/edit-file.d.ts.map +1 -1
  169. package/dist/tools/edit-file.js +16 -1
  170. package/dist/tools/edit-file.js.map +1 -1
  171. package/dist/tools/git-tools.d.ts.map +1 -1
  172. package/dist/tools/git-tools.js +32 -1
  173. package/dist/tools/git-tools.js.map +1 -1
  174. package/dist/tools/index.d.ts.map +1 -1
  175. package/dist/tools/index.js +2 -0
  176. package/dist/tools/index.js.map +1 -1
  177. package/dist/tools/list-directory.d.ts.map +1 -1
  178. package/dist/tools/list-directory.js +23 -0
  179. package/dist/tools/list-directory.js.map +1 -1
  180. package/dist/tools/notify-user.d.ts.map +1 -1
  181. package/dist/tools/notify-user.js +15 -1
  182. package/dist/tools/notify-user.js.map +1 -1
  183. package/dist/tools/read-file.d.ts.map +1 -1
  184. package/dist/tools/read-file.js +3 -1
  185. package/dist/tools/read-file.js.map +1 -1
  186. package/dist/tools/request-mcp-install.js +5 -5
  187. package/dist/tools/request-mcp-install.js.map +1 -1
  188. package/dist/tools/run-command.d.ts.map +1 -1
  189. package/dist/tools/run-command.js +16 -4
  190. package/dist/tools/run-command.js.map +1 -1
  191. package/dist/tools/sandbox.d.ts.map +1 -1
  192. package/dist/tools/sandbox.js +6 -0
  193. package/dist/tools/sandbox.js.map +1 -1
  194. package/dist/tools/schedule-task.d.ts.map +1 -1
  195. package/dist/tools/schedule-task.js +37 -0
  196. package/dist/tools/schedule-task.js.map +1 -1
  197. package/dist/tools/search-codebase.d.ts.map +1 -1
  198. package/dist/tools/search-codebase.js +251 -32
  199. package/dist/tools/search-codebase.js.map +1 -1
  200. package/dist/tools/todo-tasks.d.ts +2 -0
  201. package/dist/tools/todo-tasks.d.ts.map +1 -1
  202. package/dist/tools/todo-tasks.js +203 -6
  203. package/dist/tools/todo-tasks.js.map +1 -1
  204. package/dist/tools/web-fetch.d.ts.map +1 -1
  205. package/dist/tools/web-fetch.js +21 -2
  206. package/dist/tools/web-fetch.js.map +1 -1
  207. package/dist/tools/web-search.d.ts.map +1 -1
  208. package/dist/tools/web-search.js +38 -34
  209. package/dist/tools/web-search.js.map +1 -1
  210. package/dist/types.d.ts +2 -0
  211. package/dist/types.d.ts.map +1 -1
  212. package/dist/wizard-state.d.ts.map +1 -1
  213. package/dist/wizard-state.js +30 -8
  214. package/dist/wizard-state.js.map +1 -1
  215. package/dist/wizard-support.d.ts +2 -2
  216. package/dist/wizard-support.d.ts.map +1 -1
  217. package/dist/wizard-support.js +80 -93
  218. package/dist/wizard-support.js.map +1 -1
  219. package/dist/workflow-engine.d.ts +3 -0
  220. package/dist/workflow-engine.d.ts.map +1 -1
  221. package/dist/workflow-engine.js +111 -82
  222. package/dist/workflow-engine.js.map +1 -1
  223. package/package.json +6 -1
@@ -1,107 +1,279 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inferFrontDoorTaskType = inferFrontDoorTaskType;
4
+ exports.extractFrontDoorSignals = extractFrontDoorSignals;
3
5
  exports.applyFrontDoorPolicy = applyFrontDoorPolicy;
4
6
  function normalize(value) {
5
7
  return String(value || '').trim().toLowerCase();
6
8
  }
7
- function sameBot(a, b) {
8
- const left = normalize(a);
9
- const right = normalize(b);
10
- return Boolean(left && right && left === right);
9
+ function escapeRegex(text) {
10
+ return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
11
11
  }
12
- function detectTaskType(prompt) {
13
- if (/\b(from now on|by default|default workflow|default qa|default research|default coder)\b/i.test(prompt))
12
+ function uniqueStrings(values) {
13
+ return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
14
+ }
15
+ function matchWholeTerm(prompt, term) {
16
+ const normalizedTerm = normalize(term);
17
+ if (!normalizedTerm)
18
+ return false;
19
+ const escaped = escapeRegex(normalizedTerm);
20
+ return new RegExp(`(^|[^a-z0-9])${escaped}([^a-z0-9]|$)`, 'i').test(prompt);
21
+ }
22
+ function promptNamesWorkflow(prompt, workflowNames) {
23
+ return uniqueStrings((workflowNames || []).filter((name) => matchWholeTerm(prompt, name)));
24
+ }
25
+ function matchSpecialistNames(prompt, specialists) {
26
+ return uniqueStrings((specialists || []).map((specialist) => specialist.name).filter((name) => matchWholeTerm(prompt, name)));
27
+ }
28
+ function roleTermsForSpecialists(specialists) {
29
+ const termsByRole = {
30
+ coding: new Set(['coder', 'coding']),
31
+ qa: new Set(['qa']),
32
+ research: new Set(['brainstorm', 'brainstorming', 'research', 'planning']),
33
+ };
34
+ for (const specialist of specialists || []) {
35
+ const roleLabel = normalize(specialist.roleLabel);
36
+ if (roleLabel === 'qa') {
37
+ termsByRole.qa.add('quality assurance');
38
+ }
39
+ else if (roleLabel === 'research' || roleLabel === 'planning' || roleLabel === 'brainstorm') {
40
+ termsByRole.research.add(roleLabel);
41
+ }
42
+ else if (roleLabel === 'code' || roleLabel === 'coding') {
43
+ termsByRole.coding.add(roleLabel);
44
+ }
45
+ }
46
+ return [
47
+ { role: 'coding', terms: Array.from(termsByRole.coding) },
48
+ { role: 'qa', terms: Array.from(termsByRole.qa) },
49
+ { role: 'research', terms: Array.from(termsByRole.research) },
50
+ ];
51
+ }
52
+ function matchRoles(prompt, specialists) {
53
+ const matched = [];
54
+ for (const entry of roleTermsForSpecialists(specialists)) {
55
+ if (entry.terms.some((term) => matchWholeTerm(prompt, term))) {
56
+ matched.push(entry.role);
57
+ }
58
+ }
59
+ return matched;
60
+ }
61
+ function inferFrontDoorTaskType(prompt) {
62
+ if (/\b(from now on|by default|set (?:the )?default workflow|save (?:this|it) as (?:the )?default workflow|default qa|default research|default coder)\b/i.test(prompt))
14
63
  return 'policy';
15
64
  if (/\b(status|progress|what(?:'s| is) happening|where are we|is it done|how far along)\b/i.test(prompt))
16
65
  return 'status';
17
66
  const hasQa = /\b(qa(?:'d|ed|ing)?|review|test|verify|verification|audit)\b/i.test(prompt);
18
67
  const hasCoding = /\b(build|code|implement|create|fix|update|edit|change|refactor|ship|deploy|make|add|remove|rename|wire up|hook up)\b/i.test(prompt);
19
- const hasResearch = /\b(brainstorm(?:ing)?|research(?:es|ed|ing)?|investigate|analy[sz]e|evaluate|compare|feasibility)\b/i.test(prompt);
68
+ const hasResearch = /\b(brainstorm(?:ing)?|research(?:es|ed|ing)?|investigate|analy[sz]e|evaluate|compare|feasibility|plan|planning)\b/i.test(prompt);
20
69
  if (hasQa && !hasCoding && !hasResearch)
21
70
  return 'qa';
22
71
  if (hasResearch && !hasCoding)
23
72
  return 'research';
73
+ if (hasCoding && (hasQa || hasResearch))
74
+ return 'mixed';
24
75
  if (hasCoding)
25
76
  return 'coding';
26
77
  return 'conversation';
27
78
  }
79
+ function countAssignedRoles(assignments) {
80
+ if (!assignments)
81
+ return 0;
82
+ let count = 0;
83
+ if (assignments.coding)
84
+ count += 1;
85
+ if (assignments.qa)
86
+ count += 1;
87
+ if (assignments.research)
88
+ count += 1;
89
+ return count;
90
+ }
91
+ function defaultTargetForTaskType(taskType, roleAssignments) {
92
+ if (taskType === 'coding')
93
+ return roleAssignments?.coding || null;
94
+ if (taskType === 'qa')
95
+ return roleAssignments?.qa || null;
96
+ if (taskType === 'research')
97
+ return roleAssignments?.research || null;
98
+ return null;
99
+ }
100
+ function isAdvisoryPrompt(prompt) {
101
+ return /\bwhat do you think|can we|should we|do you agree|need to discuss|discuss more|is this a good idea|is this sound|thoughts\??|recommend(?:ation)?\b/i.test(prompt);
102
+ }
103
+ function resolvePreferredTarget(matchedBots, matchedRoles, roleAssignments) {
104
+ if (matchedBots.length === 1)
105
+ return matchedBots[0];
106
+ if (matchedRoles.length === 1) {
107
+ const role = matchedRoles[0];
108
+ return roleAssignments?.[role] || null;
109
+ }
110
+ return null;
111
+ }
112
+ function extractFrontDoorSignals(input) {
113
+ const prompt = String(input.prompt || '');
114
+ const matchedBots = matchSpecialistNames(prompt, input.specialists);
115
+ const matchedRoles = matchRoles(prompt, input.specialists);
116
+ const matchedWorkflowNames = promptNamesWorkflow(prompt, input.workflowNames);
117
+ const explicitTodoKeyword = /\b(todo|to-?do|task list)\b/i.test(prompt);
118
+ const explicitWorkflowKeyword = /\bworkflow\b/i.test(prompt);
119
+ const explicitDelegationKeyword = /\b(delegate|delegation|assign(?:ed|ment)?|handoff|hand off)\b/i.test(prompt);
120
+ const explicitOrchestrationRequested = explicitTodoKeyword || explicitWorkflowKeyword || explicitDelegationKeyword || matchedWorkflowNames.length > 0;
121
+ const multiWorkerSignal = matchedBots.length >= 2 || matchedRoles.length >= 2;
122
+ const preferredMode = matchedWorkflowNames.length > 0
123
+ ? 'workflow'
124
+ : explicitOrchestrationRequested
125
+ ? (multiWorkerSignal ? 'workflow' : ((matchedBots.length === 1 || matchedRoles.length === 1) ? 'delegate' : null))
126
+ : null;
127
+ const preferredTarget = preferredMode === 'delegate'
128
+ ? resolvePreferredTarget(matchedBots, matchedRoles, input.roleAssignments)
129
+ : null;
130
+ return {
131
+ matchedBots,
132
+ matchedRoles,
133
+ matchedWorkflowNames,
134
+ explicitTodoKeyword,
135
+ explicitWorkflowKeyword,
136
+ explicitDelegationKeyword,
137
+ explicitOrchestrationRequested,
138
+ preferredMode,
139
+ preferredTarget,
140
+ };
141
+ }
28
142
  /**
29
- * Simplified front-door policy:
30
- * - Ben (orchestrator) does EVERYTHING by default execute_self
31
- * - Only delegate when user EXPLICITLY names another bot in their prompt (promptAssignments)
32
- * - Only use workflow when LLM chose workflow AND user explicitly selected one
33
- * - NEVER auto-delegate based on roleAssignments/defaults
34
- * - NEVER clarify about which worker to use
143
+ * Front-door policy:
144
+ * - code-first signal detection decides whether TODO/workflow intent is explicit
145
+ * - explicit orchestration requests should not silently fall through to execute_self
146
+ * - single worker TODO/workflow requests prefer delegate
147
+ * - multi-worker or named workflow requests prefer workflow
35
148
  */
36
149
  function applyFrontDoorPolicy(input) {
37
150
  const prompt = String(input.prompt || '');
38
- const promptAssignments = input.promptAssignments || {};
39
- const taskType = detectTaskType(prompt);
151
+ const taskType = inferFrontDoorTaskType(prompt);
152
+ const signals = extractFrontDoorSignals({
153
+ prompt,
154
+ specialists: input.specialists,
155
+ workflowNames: input.workflowNames,
156
+ roleAssignments: input.roleAssignments,
157
+ });
40
158
  const initial = { ...input.initialDecision };
41
159
  let decision = { ...input.initialDecision };
42
160
  let correctionReason;
43
- // Rule 1: If user explicitly named a bot in the prompt, delegate to that bot
44
- if (promptAssignments.qa && !sameBot(promptAssignments.qa, input.orchestratorName)) {
45
- decision = {
46
- mode: 'delegate',
47
- reason: 'User explicitly asked for a specific bot.',
48
- delegate_target: promptAssignments.qa,
49
- delegate_role: 'qa',
50
- delegate_request: decision.delegate_request?.trim() || prompt.trim(),
51
- };
52
- correctionReason = decision.reason;
53
- }
54
- else if (promptAssignments.research && !sameBot(promptAssignments.research, input.orchestratorName)) {
55
- decision = {
56
- mode: 'delegate',
57
- reason: 'User explicitly asked for a specific bot.',
58
- delegate_target: promptAssignments.research,
59
- delegate_role: 'research',
60
- delegate_request: decision.delegate_request?.trim() || prompt.trim(),
61
- };
62
- correctionReason = decision.reason;
161
+ const promptAssignedRoleCount = countAssignedRoles(input.promptAssignments);
162
+ const savedRoleCount = countAssignedRoles(input.roleAssignments);
163
+ const mapsToWorkerRole = taskType === 'coding' || taskType === 'qa' || taskType === 'research';
164
+ const multiWorkerRequested = signals.matchedBots.length >= 2
165
+ || signals.matchedRoles.length >= 2
166
+ || taskType === 'mixed'
167
+ || promptAssignedRoleCount >= 2;
168
+ const singleWorkerRequested = mapsToWorkerRole
169
+ || signals.matchedBots.length === 1
170
+ || signals.matchedRoles.length === 1
171
+ || promptAssignedRoleCount === 1;
172
+ const fallbackTarget = resolvePreferredTarget(signals.matchedBots, signals.matchedRoles, input.roleAssignments) || defaultTargetForTaskType(taskType, input.roleAssignments);
173
+ const advisoryOnly = initial.mode === 'respond'
174
+ && isAdvisoryPrompt(prompt)
175
+ && !signals.explicitTodoKeyword
176
+ && !signals.explicitWorkflowKeyword
177
+ && !signals.explicitDelegationKeyword
178
+ && signals.matchedWorkflowNames.length === 0;
179
+ if (advisoryOnly) {
180
+ // Preserve conversational advisory responses even if the text contains
181
+ // planning words like "plan" or "first".
63
182
  }
64
- else if (promptAssignments.coding && !sameBot(promptAssignments.coding, input.orchestratorName)) {
65
- decision = {
66
- mode: 'delegate',
67
- reason: 'User explicitly asked for a specific bot.',
68
- delegate_target: promptAssignments.coding,
69
- delegate_role: 'coding',
70
- delegate_request: decision.delegate_request?.trim() || prompt.trim(),
71
- };
72
- correctionReason = decision.reason;
183
+ else if (initial.mode === 'clarify' && (signals.explicitOrchestrationRequested || multiWorkerRequested)) {
184
+ // Preserve clarify when the request clearly needs worker/workflow execution
185
+ // but the model determined required details are still missing.
73
186
  }
74
- // Rule 2: If LLM chose delegate but user did NOT name a bot → override to execute_self
75
- else if (initial.mode === 'delegate') {
76
- decision = {
77
- mode: 'execute_self',
78
- reason: 'No explicit bot named by user. Orchestrator handles it directly.',
79
- };
80
- correctionReason = decision.reason;
187
+ else if (signals.matchedWorkflowNames.length > 0 || multiWorkerRequested) {
188
+ if (initial.mode !== 'workflow') {
189
+ decision = {
190
+ mode: 'workflow',
191
+ reason: signals.matchedWorkflowNames.length > 0
192
+ ? 'Code-based front door matched a named workflow in the user prompt.'
193
+ : 'Code-based front door found a multi-worker or staged task that should run as a workflow.',
194
+ workflow_request: initial.workflow_request || prompt,
195
+ };
196
+ correctionReason = decision.reason;
197
+ }
81
198
  }
82
- // Rule 3: If LLM chose clarify → override to execute_self (just do the work)
83
- else if (initial.mode === 'clarify') {
84
- decision = {
85
- mode: 'execute_self',
86
- reason: 'Converted clarify to execute_self. Just do the work.',
87
- };
88
- correctionReason = decision.reason;
199
+ else if (initial.mode !== 'clarify'
200
+ && !isAdvisoryPrompt(prompt)
201
+ && (singleWorkerRequested || (mapsToWorkerRole && savedRoleCount > 0))
202
+ && Boolean(signals.preferredTarget || fallbackTarget)) {
203
+ const delegateTarget = signals.preferredTarget || fallbackTarget;
204
+ if (delegateTarget && (initial.mode !== 'delegate' || normalize(initial.delegate_target) !== normalize(delegateTarget))) {
205
+ const delegateRole = signals.matchedRoles[0]
206
+ || (normalize(delegateTarget) === normalize(input.roleAssignments?.qa) ? 'qa'
207
+ : normalize(delegateTarget) === normalize(input.roleAssignments?.research) ? 'research'
208
+ : taskType === 'qa'
209
+ ? 'qa'
210
+ : taskType === 'research'
211
+ ? 'research'
212
+ : 'coding');
213
+ decision = {
214
+ mode: 'delegate',
215
+ reason: signals.explicitOrchestrationRequested
216
+ ? 'Code-based front door found an explicit single-worker TODO/workflow request.'
217
+ : 'Code-based front door mapped this worker-role task to a single worker.',
218
+ delegate_target: delegateTarget,
219
+ delegate_role: delegateRole,
220
+ delegate_request: initial.delegate_request || prompt,
221
+ };
222
+ correctionReason = decision.reason;
223
+ }
89
224
  }
90
- // Rule 4: If LLM chose respond with orchestration language → override to execute_self
91
- else if (initial.mode === 'respond') {
92
- const resp = String(initial.response || '').toLowerCase();
93
- const hasOrchestrationLanguage = /which (worker|bot|agent|specialist)|ready to coordinate|get the right bots|need a few details|before i start|i need to know|which .* should handle/i.test(resp);
94
- if (hasOrchestrationLanguage) {
225
+ else if (!signals.explicitOrchestrationRequested) {
226
+ if (initial.mode === 'workflow' || initial.mode === 'delegate') {
227
+ decision = {
228
+ mode: mapsToWorkerRole ? 'delegate' : 'execute_self',
229
+ reason: mapsToWorkerRole && fallbackTarget
230
+ ? 'Code-based front door kept this as a worker-role task and routed it to a single worker.'
231
+ : 'No workflow or worker assignment is required. Handle it directly.',
232
+ ...(mapsToWorkerRole && fallbackTarget ? {
233
+ delegate_target: fallbackTarget,
234
+ delegate_role: taskType === 'qa' ? 'qa' : taskType === 'research' ? 'research' : 'coding',
235
+ delegate_request: prompt,
236
+ } : {}),
237
+ };
238
+ correctionReason = decision.reason;
239
+ }
240
+ else if (initial.mode === 'clarify' && !mapsToWorkerRole) {
95
241
  decision = {
96
242
  mode: 'execute_self',
97
- reason: 'Respond contained orchestration language. Just do the work.',
243
+ reason: 'Converted clarify to execute_self. This is not a worker workflow request.',
98
244
  };
99
245
  correctionReason = decision.reason;
100
246
  }
101
- // Otherwise preserve respond mode (conversational answers are fine)
247
+ else if (initial.mode === 'respond') {
248
+ const resp = String(initial.response || '').toLowerCase();
249
+ const hasOrchestrationLanguage = /which (worker|bot|agent|specialist)|ready to coordinate|get the right bots|need a few details|before i start|i need to know|which .* should handle/i.test(resp);
250
+ if (hasOrchestrationLanguage) {
251
+ if (multiWorkerRequested) {
252
+ decision = {
253
+ mode: 'workflow',
254
+ reason: 'Respond contained orchestration language. Route this staged worker task as a workflow.',
255
+ workflow_request: prompt,
256
+ };
257
+ }
258
+ else if (fallbackTarget) {
259
+ decision = {
260
+ mode: 'delegate',
261
+ reason: 'Respond contained orchestration language. Route the worker task instead of asking who should own it.',
262
+ delegate_target: fallbackTarget,
263
+ delegate_role: taskType === 'qa' ? 'qa' : taskType === 'research' ? 'research' : 'coding',
264
+ delegate_request: prompt,
265
+ };
266
+ }
267
+ else {
268
+ decision = {
269
+ mode: 'execute_self',
270
+ reason: 'Respond contained orchestration language. Handle it directly instead.',
271
+ };
272
+ }
273
+ correctionReason = decision.reason;
274
+ }
275
+ }
102
276
  }
103
- // Rule 5: workflow mode is preserved only when workflow template was explicitly selected
104
- // (handled upstream in orchestrator.ts before front-door is called)
105
277
  const corrected = JSON.stringify(decision) !== JSON.stringify(initial);
106
278
  return {
107
279
  decision,
@@ -109,8 +281,9 @@ function applyFrontDoorPolicy(input) {
109
281
  correctionReason,
110
282
  taskType,
111
283
  qaMode: 'none',
112
- preferredWorkflowRequested: false,
113
- explicitWorkflowRequested: false,
284
+ preferredWorkflowRequested: signals.matchedWorkflowNames.length > 0,
285
+ explicitWorkflowRequested: signals.explicitOrchestrationRequested,
286
+ signals,
114
287
  };
115
288
  }
116
289
  //# sourceMappingURL=front-door-policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"front-door-policy.js","sourceRoot":"","sources":["../../src/orchestration/front-door-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"front-door-policy.js","sourceRoot":"","sources":["../../src/orchestration/front-door-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { OrchestrationPolicy } from '../local-data';
2
+ export interface BlockedWorkerOrchestratorPromptInput {
3
+ orchestratorName: string;
4
+ workerName: string;
5
+ workerRole: string;
6
+ taskTitle: string;
7
+ taskPrompt: string;
8
+ projectId?: string | null;
9
+ projectName?: string | null;
10
+ workspacePath?: string | null;
11
+ effectivePolicy: OrchestrationPolicy;
12
+ artifactRefs?: string[];
13
+ blockerSummary: string;
14
+ checkedContext: string;
15
+ userQuestion: string;
16
+ }
17
+ export declare function buildBlockedWorkerOrchestratorPrompt(input: BlockedWorkerOrchestratorPromptInput): string;
18
+ //# sourceMappingURL=orchestrator-blocked-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-blocked-prompt.d.ts","sourceRoot":"","sources":["../../src/orchestration/orchestrator-blocked-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,MAAM,WAAW,oCAAoC;IACnD,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,mBAAmB,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,oCAAoC,GAAG,MAAM,CAyCxG"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildBlockedWorkerOrchestratorPrompt = buildBlockedWorkerOrchestratorPrompt;
4
+ const policy_prompt_1 = require("./policy-prompt");
5
+ function buildBlockedWorkerOrchestratorPrompt(input) {
6
+ const artifacts = (input.artifactRefs || []).map((item) => item.trim()).filter(Boolean);
7
+ const effectivePolicy = (0, policy_prompt_1.buildEffectivePolicyPromptSection)(input.effectivePolicy, {
8
+ heading: '',
9
+ defaultLine: 'No confirmed special policy is set.',
10
+ }).trim();
11
+ const projectName = input.projectName?.trim() || '(not set)';
12
+ const workspacePath = input.workspacePath?.trim() || '(not set)';
13
+ return `You are ${input.orchestratorName} for Funolio.
14
+
15
+ A worker is blocked. You are the coordinator for this handoff, not the worker who performs the original task.
16
+
17
+ BLOCKED WORKER
18
+ Worker: ${input.workerName}
19
+ Role: ${input.workerRole}
20
+ Current TODO: ${input.taskTitle}
21
+ Task prompt:
22
+ ${input.taskPrompt}
23
+
24
+ BLOCKER DETAILS
25
+ Summary: ${input.blockerSummary}
26
+ Checked: ${input.checkedContext}
27
+ Exact user question: ${input.userQuestion}
28
+
29
+ RUNTIME CONTEXT
30
+ Project: ${projectName}
31
+ Workspace: ${workspacePath}
32
+ Effective policy:
33
+ ${effectivePolicy}
34
+ Artifacts: ${artifacts.length > 0 ? artifacts.join('; ') : 'none provided'}
35
+
36
+ YOUR JOB
37
+ - First decide whether the blocker can be resolved from existing context, project data, policy, artifacts, or prior conversation.
38
+ - If it can be resolved without the user, return a concise resolution that the blocked worker can use directly.
39
+ - If user clarification is still required, ask one concise direct question based on the exact user question above.
40
+ - Do not do the blocked worker's task yourself.
41
+ - Do not rewrite the whole workflow.
42
+
43
+ OUTPUT
44
+ - Either provide a concise worker resolution, or ask the user the one question needed to unblock the task.`;
45
+ }
46
+ //# sourceMappingURL=orchestrator-blocked-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-blocked-prompt.js","sourceRoot":"","sources":["../../src/orchestration/orchestrator-blocked-prompt.ts"],"names":[],"mappings":";;AAmBA,oFAyCC;AA3DD,mDAAoE;AAkBpE,SAAgB,oCAAoC,CAAC,KAA2C;IAC9F,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxF,MAAM,eAAe,GAAG,IAAA,iDAAiC,EAAC,KAAK,CAAC,eAAe,EAAE;QAC/E,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,qCAAqC;KACnD,CAAC,CAAC,IAAI,EAAE,CAAC;IACV,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC;IAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC;IAEjE,OAAO,WAAW,KAAK,CAAC,gBAAgB;;;;;UAKhC,KAAK,CAAC,UAAU;QAClB,KAAK,CAAC,UAAU;gBACR,KAAK,CAAC,SAAS;;EAE7B,KAAK,CAAC,UAAU;;;WAGP,KAAK,CAAC,cAAc;WACpB,KAAK,CAAC,cAAc;uBACR,KAAK,CAAC,YAAY;;;WAG9B,WAAW;aACT,aAAa;;EAExB,eAAe;aACJ,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAe;;;;;;;;;;2GAUiC,CAAC;AAC5G,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { TodoTaskRow, OrchestrationPolicy } from '../local-data';
2
+ export interface OrchestratorFinalResponsePromptInput {
3
+ orchestratorName: string;
4
+ projectName?: string | null;
5
+ workspacePath?: string | null;
6
+ effectivePolicy: OrchestrationPolicy;
7
+ completedTasks: TodoTaskRow[];
8
+ }
9
+ export declare function buildOrchestratorFinalResponsePrompt(input: OrchestratorFinalResponsePromptInput): string;
10
+ //# sourceMappingURL=orchestrator-final-response-prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-final-response-prompt.d.ts","sourceRoot":"","sources":["../../src/orchestration/orchestrator-final-response-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGtE,MAAM,WAAW,oCAAoC;IACnD,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,mBAAmB,CAAC;IACrC,cAAc,EAAE,WAAW,EAAE,CAAC;CAC/B;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,oCAAoC,GAAG,MAAM,CAkCxG"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildOrchestratorFinalResponsePrompt = buildOrchestratorFinalResponsePrompt;
4
+ const policy_prompt_1 = require("./policy-prompt");
5
+ function buildOrchestratorFinalResponsePrompt(input) {
6
+ const projectName = input.projectName?.trim() || '(not set)';
7
+ const workspacePath = input.workspacePath?.trim() || '(not set)';
8
+ const effectivePolicy = (0, policy_prompt_1.buildEffectivePolicyPromptSection)(input.effectivePolicy, {
9
+ heading: '',
10
+ defaultLine: 'No confirmed special policy is set.',
11
+ }).trim();
12
+ const taskLines = input.completedTasks.map((task, index) => [
13
+ `${index + 1}. ${task.title}`,
14
+ `Owner: ${task.owner_name || 'Unknown'}`,
15
+ `Task type: ${task.task_type || 'general'}`,
16
+ task.output_summary ? `Output summary: ${task.output_summary}` : null,
17
+ task.handoff_prompt ? `Handoff to orchestrator: ${task.handoff_prompt}` : null,
18
+ ].filter(Boolean).join('\n')).join('\n\n');
19
+ return `You are ${input.orchestratorName} for Funolio.
20
+
21
+ The worker TODO chain is complete. Your job is to respond to the user with the final result.
22
+
23
+ RUNTIME CONTEXT
24
+ Project: ${projectName}
25
+ Workspace: ${workspacePath}
26
+ Effective policy:
27
+ ${effectivePolicy}
28
+
29
+ COMPLETED TASKS
30
+ ${taskLines || '(none)'}
31
+
32
+ RESPONSE RULES
33
+ - Give the user the final result directly.
34
+ - Be concise and outcome-focused.
35
+ - Mention the most important artifact or status only if it helps the user.
36
+ - Do not explain internal TODO mechanics unless necessary.
37
+ - Do not invent details not present in the completed task summaries or handoffs.`;
38
+ }
39
+ //# sourceMappingURL=orchestrator-final-response-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator-final-response-prompt.js","sourceRoot":"","sources":["../../src/orchestration/orchestrator-final-response-prompt.ts"],"names":[],"mappings":";;AAWA,oFAkCC;AA5CD,mDAAoE;AAUpE,SAAgB,oCAAoC,CAAC,KAA2C;IAC9F,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC;IAC7D,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC;IACjE,MAAM,eAAe,GAAG,IAAA,iDAAiC,EAAC,KAAK,CAAC,eAAe,EAAE;QAC/E,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,qCAAqC;KACnD,CAAC,CAAC,IAAI,EAAE,CAAC;IACV,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1D,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;QAC7B,UAAU,IAAI,CAAC,UAAU,IAAI,SAAS,EAAE;QACxC,cAAc,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE;QAC3C,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;QACrE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,4BAA4B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI;KAC/E,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE3C,OAAO,WAAW,KAAK,CAAC,gBAAgB;;;;;WAK/B,WAAW;aACT,aAAa;;EAExB,eAAe;;;EAGf,SAAS,IAAI,QAAQ;;;;;;;iFAO0D,CAAC;AAClF,CAAC"}
@@ -13,13 +13,24 @@ export interface SpecialistInfo {
13
13
  name: string;
14
14
  roleLabel: string;
15
15
  }
16
+ export interface FrontDoorSignalSummary {
17
+ matchedBots?: string[];
18
+ matchedRoles?: string[];
19
+ matchedWorkflows?: string[];
20
+ explicitTodoKeyword?: boolean;
21
+ explicitWorkflowKeyword?: boolean;
22
+ explicitDelegationKeyword?: boolean;
23
+ }
16
24
  export declare function buildOrchestratorOperatingPrompt(input: {
17
25
  orchestratorName: string;
18
26
  primaryRole?: string | null;
19
27
  specialists?: SpecialistInfo[];
20
28
  workflowNames?: string[];
29
+ entryMode?: 'normal' | 'orchestration_bias';
30
+ signalSummary?: FrontDoorSignalSummary;
21
31
  projectName?: string | null;
22
32
  projectFolder?: string | null;
33
+ effectivePolicy?: string | null;
23
34
  recentSummary?: string | null;
24
35
  lastFiveTurns?: string | null;
25
36
  }): string;
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator-operating-prompt.d.ts","sourceRoot":"","sources":["../../src/orchestration/orchestrator-operating-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,cAAc,GACd,UAAU,GACV,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,GAAG,MAAM,CA0HT;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,GAAG,6BAA6B,GAAG,IAAI,CAqDpG"}
1
+ {"version":3,"file":"orchestrator-operating-prompt.d.ts","sourceRoot":"","sources":["../../src/orchestration/orchestrator-operating-prompt.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GACjC,SAAS,GACT,cAAc,GACd,UAAU,GACV,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC;IACtD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,QAAQ,GAAG,oBAAoB,CAAC;IAC5C,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,GAAG,MAAM,CAgKT;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,GAAG,6BAA6B,GAAG,IAAI,CAgDpG"}