funolio-agent 0.17.9 → 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 (147) 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/backfill.js +2 -2
  6. package/dist/backfill.js.map +1 -1
  7. package/dist/clerk-model.d.ts +0 -1
  8. package/dist/clerk-model.d.ts.map +1 -1
  9. package/dist/clerk-model.js +24 -50
  10. package/dist/clerk-model.js.map +1 -1
  11. package/dist/commands/configure-provider.js +2 -2
  12. package/dist/commands/configure-provider.js.map +1 -1
  13. package/dist/commands/configure.d.ts.map +1 -1
  14. package/dist/commands/configure.js +10 -14
  15. package/dist/commands/configure.js.map +1 -1
  16. package/dist/commands/start.d.ts.map +1 -1
  17. package/dist/commands/start.js +17 -2
  18. package/dist/commands/start.js.map +1 -1
  19. package/dist/config.d.ts +1 -1
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js +2 -2
  22. package/dist/config.js.map +1 -1
  23. package/dist/context-window.d.ts +2 -8
  24. package/dist/context-window.d.ts.map +1 -1
  25. package/dist/context-window.js +4 -4
  26. package/dist/context-window.js.map +1 -1
  27. package/dist/eval/orchestrator-front-door-replay.js +43 -2
  28. package/dist/eval/orchestrator-front-door-replay.js.map +1 -1
  29. package/dist/eval/orchestrator-todo-dispatch-replay.d.ts +2 -0
  30. package/dist/eval/orchestrator-todo-dispatch-replay.d.ts.map +1 -0
  31. package/dist/eval/orchestrator-todo-dispatch-replay.js +253 -0
  32. package/dist/eval/orchestrator-todo-dispatch-replay.js.map +1 -0
  33. package/dist/eval/orchestrator-todo-planning-replay.d.ts +2 -0
  34. package/dist/eval/orchestrator-todo-planning-replay.d.ts.map +1 -0
  35. package/dist/eval/orchestrator-todo-planning-replay.js +247 -0
  36. package/dist/eval/orchestrator-todo-planning-replay.js.map +1 -0
  37. package/dist/eval/policy-detection-replay.d.ts +2 -0
  38. package/dist/eval/policy-detection-replay.d.ts.map +1 -0
  39. package/dist/eval/policy-detection-replay.js +122 -0
  40. package/dist/eval/policy-detection-replay.js.map +1 -0
  41. package/dist/eval/todo-worker-runtime-replay.d.ts +2 -0
  42. package/dist/eval/todo-worker-runtime-replay.d.ts.map +1 -0
  43. package/dist/eval/todo-worker-runtime-replay.js +520 -0
  44. package/dist/eval/todo-worker-runtime-replay.js.map +1 -0
  45. package/dist/integration-tokens.d.ts +6 -0
  46. package/dist/integration-tokens.d.ts.map +1 -1
  47. package/dist/integration-tokens.js +43 -0
  48. package/dist/integration-tokens.js.map +1 -1
  49. package/dist/local-data.d.ts +128 -1
  50. package/dist/local-data.d.ts.map +1 -1
  51. package/dist/local-data.js +702 -18
  52. package/dist/local-data.js.map +1 -1
  53. package/dist/local-db.d.ts.map +1 -1
  54. package/dist/local-db.js +216 -12
  55. package/dist/local-db.js.map +1 -1
  56. package/dist/local-funnel.d.ts.map +1 -1
  57. package/dist/local-funnel.js +7 -0
  58. package/dist/local-funnel.js.map +1 -1
  59. package/dist/local-server.d.ts.map +1 -1
  60. package/dist/local-server.js +119 -96
  61. package/dist/local-server.js.map +1 -1
  62. package/dist/mcp/bridge-server.d.ts.map +1 -1
  63. package/dist/mcp/bridge-server.js +8 -2
  64. package/dist/mcp/bridge-server.js.map +1 -1
  65. package/dist/mcp/manager.d.ts +5 -0
  66. package/dist/mcp/manager.d.ts.map +1 -1
  67. package/dist/mcp/manager.js +36 -0
  68. package/dist/mcp/manager.js.map +1 -1
  69. package/dist/mcp/sync-cli-config.d.ts +5 -0
  70. package/dist/mcp/sync-cli-config.d.ts.map +1 -1
  71. package/dist/mcp/sync-cli-config.js +10 -2
  72. package/dist/mcp/sync-cli-config.js.map +1 -1
  73. package/dist/message-loop.d.ts.map +1 -1
  74. package/dist/message-loop.js +113 -14
  75. package/dist/message-loop.js.map +1 -1
  76. package/dist/mqtt-client.d.ts +44 -0
  77. package/dist/mqtt-client.d.ts.map +1 -1
  78. package/dist/mqtt-client.js.map +1 -1
  79. package/dist/orchestration/front-door-policy.d.ts +26 -9
  80. package/dist/orchestration/front-door-policy.d.ts.map +1 -1
  81. package/dist/orchestration/front-door-policy.js +242 -69
  82. package/dist/orchestration/front-door-policy.js.map +1 -1
  83. package/dist/orchestration/orchestrator-blocked-prompt.d.ts +18 -0
  84. package/dist/orchestration/orchestrator-blocked-prompt.d.ts.map +1 -0
  85. package/dist/orchestration/orchestrator-blocked-prompt.js +46 -0
  86. package/dist/orchestration/orchestrator-blocked-prompt.js.map +1 -0
  87. package/dist/orchestration/orchestrator-final-response-prompt.d.ts +10 -0
  88. package/dist/orchestration/orchestrator-final-response-prompt.d.ts.map +1 -0
  89. package/dist/orchestration/orchestrator-final-response-prompt.js +39 -0
  90. package/dist/orchestration/orchestrator-final-response-prompt.js.map +1 -0
  91. package/dist/orchestration/orchestrator-operating-prompt.d.ts +11 -0
  92. package/dist/orchestration/orchestrator-operating-prompt.d.ts.map +1 -1
  93. package/dist/orchestration/orchestrator-operating-prompt.js +106 -36
  94. package/dist/orchestration/orchestrator-operating-prompt.js.map +1 -1
  95. package/dist/orchestration/policy-prompt.d.ts +6 -0
  96. package/dist/orchestration/policy-prompt.d.ts.map +1 -0
  97. package/dist/orchestration/policy-prompt.js +40 -0
  98. package/dist/orchestration/policy-prompt.js.map +1 -0
  99. package/dist/orchestration/worker-operating-prompt.d.ts +16 -0
  100. package/dist/orchestration/worker-operating-prompt.d.ts.map +1 -0
  101. package/dist/orchestration/worker-operating-prompt.js +75 -0
  102. package/dist/orchestration/worker-operating-prompt.js.map +1 -0
  103. package/dist/orchestrator.d.ts +19 -0
  104. package/dist/orchestrator.d.ts.map +1 -1
  105. package/dist/orchestrator.js +614 -54
  106. package/dist/orchestrator.js.map +1 -1
  107. package/dist/policy-detection.d.ts +40 -0
  108. package/dist/policy-detection.d.ts.map +1 -0
  109. package/dist/policy-detection.js +298 -0
  110. package/dist/policy-detection.js.map +1 -0
  111. package/dist/providers/anthropic.d.ts.map +1 -1
  112. package/dist/providers/anthropic.js +28 -5
  113. package/dist/providers/anthropic.js.map +1 -1
  114. package/dist/providers/claude-cli.d.ts.map +1 -1
  115. package/dist/providers/claude-cli.js +11 -2
  116. package/dist/providers/claude-cli.js.map +1 -1
  117. package/dist/providers/codex-cli.d.ts.map +1 -1
  118. package/dist/providers/codex-cli.js +121 -2
  119. package/dist/providers/codex-cli.js.map +1 -1
  120. package/dist/providers/index.d.ts +4 -0
  121. package/dist/providers/index.d.ts.map +1 -1
  122. package/dist/providers/index.js.map +1 -1
  123. package/dist/summarization-pipeline.d.ts +1 -4
  124. package/dist/summarization-pipeline.d.ts.map +1 -1
  125. package/dist/summarization-pipeline.js +43 -56
  126. package/dist/summarization-pipeline.js.map +1 -1
  127. package/dist/tools/index.d.ts.map +1 -1
  128. package/dist/tools/index.js +2 -0
  129. package/dist/tools/index.js.map +1 -1
  130. package/dist/tools/todo-tasks.d.ts +2 -0
  131. package/dist/tools/todo-tasks.d.ts.map +1 -1
  132. package/dist/tools/todo-tasks.js +203 -6
  133. package/dist/tools/todo-tasks.js.map +1 -1
  134. package/dist/types.d.ts +2 -0
  135. package/dist/types.d.ts.map +1 -1
  136. package/dist/wizard-state.d.ts.map +1 -1
  137. package/dist/wizard-state.js +30 -8
  138. package/dist/wizard-state.js.map +1 -1
  139. package/dist/wizard-support.d.ts +2 -2
  140. package/dist/wizard-support.d.ts.map +1 -1
  141. package/dist/wizard-support.js +80 -93
  142. package/dist/wizard-support.js.map +1 -1
  143. package/dist/workflow-engine.d.ts +3 -0
  144. package/dist/workflow-engine.d.ts.map +1 -1
  145. package/dist/workflow-engine.js +111 -82
  146. package/dist/workflow-engine.js.map +1 -1
  147. package/package.json +5 -1
@@ -0,0 +1,520 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ const os = __importStar(require("os"));
38
+ const path = __importStar(require("path"));
39
+ const data = __importStar(require("../local-data"));
40
+ const todo_tasks_1 = require("../tools/todo-tasks");
41
+ function parseArgs(argv) {
42
+ const args = {};
43
+ for (let i = 0; i < argv.length; i += 1) {
44
+ if (argv[i] === '--output' && argv[i + 1]) {
45
+ args.output = argv[i + 1];
46
+ i += 1;
47
+ }
48
+ }
49
+ return args;
50
+ }
51
+ function setupTempDb() {
52
+ const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'funolio-todo-runtime-eval-'));
53
+ process.env.FUNOLIO_LOCAL_DB_PATH = path.join(tempRoot, 'local.db');
54
+ data.closeDb();
55
+ return tempRoot;
56
+ }
57
+ function teardownTempDb(tempRoot) {
58
+ data.closeDb();
59
+ delete process.env.FUNOLIO_LOCAL_DB_PATH;
60
+ fs.rmSync(tempRoot, { recursive: true, force: true });
61
+ }
62
+ function seedProgrammingContext() {
63
+ const ben = data.createAgentProfile({ provider: 'claude-cli', model: 'claude-opus-4-6', name: 'Ben', roleClass: 'coding' });
64
+ const john = data.createAgentProfile({ provider: 'codex-cli', model: 'gpt-5.2-codex', name: 'John', roleClass: 'qa' });
65
+ const brain = data.createAgentProfile({ provider: 'openai', model: 'gpt-5.2-chat-latest', name: 'Brain', roleClass: 'brainstorm', isOrchestrator: true });
66
+ const project = data.createProject({ name: 'Runtime Eval Project' });
67
+ const conversation = data.createConversation(brain.id, 'Runtime Eval Conversation', 'local', { projectId: project.id });
68
+ return { ben, john, brain, project, conversation };
69
+ }
70
+ async function runScenarios() {
71
+ const scenarios = [];
72
+ {
73
+ const tempRoot = setupTempDb();
74
+ try {
75
+ const { ben, brain, project, conversation } = seedProgrammingContext();
76
+ const task = data.addTodoTask({
77
+ projectId: project.id,
78
+ conversationId: conversation.id,
79
+ title: 'Implement the change',
80
+ details: 'Write the requested feature.',
81
+ participants: [ben.name],
82
+ successCriteria: 'Feature is implemented',
83
+ ownerBotId: ben.id,
84
+ ownerName: ben.name,
85
+ taskType: 'coding',
86
+ actor: { actorType: 'orchestrator', actorId: brain.id },
87
+ });
88
+ const result = data.completeTodoTaskByWorker(task.id, {
89
+ outputSummary: 'Implemented the feature',
90
+ handoffPrompt: 'Tell the user the feature is ready.',
91
+ actor: { actorType: 'llm', actorId: ben.name },
92
+ });
93
+ scenarios.push({
94
+ name: 'return_to_orchestrator',
95
+ expected: 'Completing a worker TODO without insertion returns control to orchestrator and persists the completed task.',
96
+ pass: result.returnedToOrchestrator === true && !result.insertedTask && !data.getTodoTask(task.id, 'active'),
97
+ details: {
98
+ returnedToOrchestrator: result.returnedToOrchestrator,
99
+ completedState: data.getTodoTask(task.id, 'completed')?.state ?? null,
100
+ auditActions: data.listTodoAudit({ taskId: task.id, limit: 10 }).map((entry) => entry.action),
101
+ },
102
+ });
103
+ }
104
+ finally {
105
+ teardownTempDb(tempRoot);
106
+ }
107
+ }
108
+ {
109
+ const tempRoot = setupTempDb();
110
+ try {
111
+ const { ben, john, brain, project, conversation } = seedProgrammingContext();
112
+ const first = data.addTodoTask({
113
+ projectId: project.id,
114
+ conversationId: conversation.id,
115
+ title: 'Brainstorm layout',
116
+ details: 'Produce a design direction.',
117
+ participants: [brain.name],
118
+ successCriteria: 'Direction chosen',
119
+ ownerBotId: brain.id,
120
+ ownerName: brain.name,
121
+ taskType: 'research',
122
+ nextWorkerBotId: ben.id,
123
+ nextWorkerName: ben.name,
124
+ nextWorkerRole: ben.role_class,
125
+ actor: { actorType: 'orchestrator', actorId: brain.id },
126
+ });
127
+ const later = data.addTodoTask({
128
+ projectId: project.id,
129
+ conversationId: conversation.id,
130
+ title: 'QA final result',
131
+ details: 'Check the final page.',
132
+ participants: [john.name],
133
+ successCriteria: 'QA complete',
134
+ ownerBotId: john.id,
135
+ ownerName: john.name,
136
+ taskType: 'qa',
137
+ actor: { actorType: 'orchestrator', actorId: brain.id },
138
+ });
139
+ const result = data.completeTodoTaskByWorker(first.id, {
140
+ outputSummary: 'Created a design brief',
141
+ insertTask: {
142
+ title: 'Build the page',
143
+ prompt: 'Code the page using the design brief.',
144
+ nextWorker: ben.name,
145
+ },
146
+ actor: { actorType: 'llm', actorId: brain.name },
147
+ });
148
+ scenarios.push({
149
+ name: 'insert_and_shift_order',
150
+ expected: 'Inserted task lands immediately after the completed task and later queued tasks shift down.',
151
+ pass: result.insertedTask?.position === 2 && data.getTodoTask(later.id)?.position === 3,
152
+ details: {
153
+ insertedTaskPosition: result.insertedTask?.position ?? null,
154
+ insertedTaskOwner: result.insertedTask?.owner_name ?? null,
155
+ shiftedTaskPosition: data.getTodoTask(later.id)?.position ?? null,
156
+ },
157
+ });
158
+ }
159
+ finally {
160
+ teardownTempDb(tempRoot);
161
+ }
162
+ }
163
+ {
164
+ const tempRoot = setupTempDb();
165
+ try {
166
+ const { ben, brain, project, conversation } = seedProgrammingContext();
167
+ const task = data.addTodoTask({
168
+ projectId: project.id,
169
+ conversationId: conversation.id,
170
+ title: 'Implement the page',
171
+ details: 'Build the requested page.',
172
+ participants: [ben.name],
173
+ successCriteria: 'Page exists',
174
+ ownerBotId: ben.id,
175
+ ownerName: ben.name,
176
+ taskType: 'coding',
177
+ actor: { actorType: 'orchestrator', actorId: brain.id },
178
+ });
179
+ const result = data.blockTodoTaskByWorker(task.id, {
180
+ blockerSummary: 'The output path is not specified.',
181
+ checkedContext: 'Checked the current TODO, summary, and workspace.',
182
+ userQuestion: 'Where should the HTML file be written?',
183
+ artifactRefs: ['C:\\Users\\sp\\Desktop\\notes.txt'],
184
+ actor: { actorType: 'llm', actorId: ben.name },
185
+ });
186
+ scenarios.push({
187
+ name: 'worker_blocked_handoff',
188
+ expected: 'A blocked worker should persist blocker details and return a structured orchestrator handoff without completing the TODO.',
189
+ pass: result.returnedToOrchestrator === true
190
+ && result.blockedTask.state === 'active'
191
+ && result.blockedTask.blocker_summary === 'The output path is not specified.'
192
+ && /Where should the HTML file be written\?/i.test(result.orchestratorPrompt),
193
+ details: {
194
+ returnedToOrchestrator: result.returnedToOrchestrator,
195
+ blockerSummary: result.blockedTask.blocker_summary,
196
+ blockerQuestion: result.blockedTask.blocker_question,
197
+ },
198
+ });
199
+ }
200
+ finally {
201
+ teardownTempDb(tempRoot);
202
+ }
203
+ }
204
+ {
205
+ const tempRoot = setupTempDb();
206
+ try {
207
+ const { ben, john, brain, project, conversation } = seedProgrammingContext();
208
+ const task = data.addTodoTask({
209
+ projectId: project.id,
210
+ conversationId: conversation.id,
211
+ title: 'Brainstorm layout',
212
+ details: 'Produce a design direction.',
213
+ participants: [brain.name],
214
+ successCriteria: 'Direction chosen',
215
+ ownerBotId: brain.id,
216
+ ownerName: brain.name,
217
+ taskType: 'research',
218
+ nextWorkerBotId: ben.id,
219
+ nextWorkerName: ben.name,
220
+ nextWorkerRole: ben.role_class,
221
+ actor: { actorType: 'orchestrator', actorId: brain.id },
222
+ });
223
+ let error = '';
224
+ try {
225
+ data.completeTodoTaskByWorker(task.id, {
226
+ outputSummary: 'Ready for next step',
227
+ insertTask: {
228
+ title: 'Unexpected QA',
229
+ prompt: 'Jump straight to QA.',
230
+ nextWorker: john.name,
231
+ },
232
+ actor: { actorType: 'llm', actorId: brain.name },
233
+ });
234
+ }
235
+ catch (err) {
236
+ error = err.message;
237
+ }
238
+ scenarios.push({
239
+ name: 'reject_unapproved_next_worker',
240
+ expected: 'Worker cannot insert a task for an unapproved next worker.',
241
+ pass: /not allowed/i.test(error),
242
+ details: { error },
243
+ });
244
+ }
245
+ finally {
246
+ teardownTempDb(tempRoot);
247
+ }
248
+ }
249
+ {
250
+ const tempRoot = setupTempDb();
251
+ try {
252
+ const { ben, john, brain, project, conversation } = seedProgrammingContext();
253
+ const coding = data.addTodoTask({
254
+ projectId: project.id,
255
+ conversationId: conversation.id,
256
+ title: 'Code the page',
257
+ details: 'Implement the requested page.',
258
+ participants: [ben.name],
259
+ successCriteria: 'Page exists',
260
+ ownerBotId: ben.id,
261
+ ownerName: ben.name,
262
+ taskType: 'coding',
263
+ nextWorkerBotId: john.id,
264
+ nextWorkerName: john.name,
265
+ nextWorkerRole: john.role_class,
266
+ actor: { actorType: 'orchestrator', actorId: brain.id },
267
+ });
268
+ const qa = data.addTodoTask({
269
+ projectId: project.id,
270
+ conversationId: conversation.id,
271
+ title: 'QA the page',
272
+ details: 'Verify the implementation.',
273
+ participants: [john.name],
274
+ successCriteria: 'QA done',
275
+ ownerBotId: john.id,
276
+ ownerName: john.name,
277
+ taskType: 'qa',
278
+ actor: { actorType: 'orchestrator', actorId: brain.id },
279
+ });
280
+ data.completeTodoTaskByWorker(coding.id, {
281
+ outputSummary: 'Built the page',
282
+ actor: { actorType: 'llm', actorId: ben.name },
283
+ });
284
+ const qaResult = data.completeTodoTaskByWorker(qa.id, {
285
+ outputSummary: 'Found two defects',
286
+ insertTask: {
287
+ title: 'Fix QA findings',
288
+ prompt: 'Fix the two layout defects and keep the rest unchanged.',
289
+ nextWorker: ben.name,
290
+ taskType: 'coding',
291
+ },
292
+ actor: { actorType: 'llm', actorId: john.name },
293
+ });
294
+ scenarios.push({
295
+ name: 'qa_back_to_previous_worker',
296
+ expected: 'QA can insert a fix task back to the previous worker using completed-task history.',
297
+ pass: qaResult.insertedTask?.owner_name === ben.name && qaResult.insertedTask?.task_type === 'coding',
298
+ details: {
299
+ insertedTaskOwner: qaResult.insertedTask?.owner_name ?? null,
300
+ insertedTaskType: qaResult.insertedTask?.task_type ?? null,
301
+ insertedTaskPosition: qaResult.insertedTask?.position ?? null,
302
+ },
303
+ });
304
+ }
305
+ finally {
306
+ teardownTempDb(tempRoot);
307
+ }
308
+ }
309
+ {
310
+ const tempRoot = setupTempDb();
311
+ try {
312
+ const { ben, john, brain, project, conversation } = seedProgrammingContext();
313
+ const coding = data.addTodoTask({
314
+ projectId: project.id,
315
+ conversationId: conversation.id,
316
+ title: 'Code the page',
317
+ details: 'Implement the requested page.',
318
+ participants: [ben.name],
319
+ successCriteria: 'Page exists',
320
+ ownerBotId: ben.id,
321
+ ownerName: ben.name,
322
+ taskType: 'coding',
323
+ nextWorkerBotId: john.id,
324
+ nextWorkerName: john.name,
325
+ nextWorkerRole: john.role_class,
326
+ actor: { actorType: 'orchestrator', actorId: brain.id },
327
+ });
328
+ const codingResult = data.completeTodoTaskByWorker(coding.id, {
329
+ outputSummary: 'Initial build complete',
330
+ artifactRefs: ['C:\\Users\\sp\\Desktop\\funtest.html'],
331
+ insertTask: {
332
+ title: 'QA the page',
333
+ prompt: 'QA the generated HTML file.',
334
+ nextWorker: john.name,
335
+ },
336
+ actor: { actorType: 'llm', actorId: ben.name },
337
+ });
338
+ const qaTask = codingResult.insertedTask;
339
+ const qaResult = data.completeTodoTaskByWorker(qaTask.id, {
340
+ outputSummary: 'Logged findings',
341
+ artifactRefs: [
342
+ 'C:\\Users\\sp\\Desktop\\funtest.html',
343
+ 'C:\\Users\\sp\\Desktop\\qa-report.txt',
344
+ ],
345
+ actor: { actorType: 'llm', actorId: john.name },
346
+ });
347
+ scenarios.push({
348
+ name: 'artifact_dedupe_and_carry_forward',
349
+ expected: 'Artifacts carry forward and duplicate references collapse to a single artifact row.',
350
+ pass: qaResult.artifacts.length === 2 && qaResult.completedTask.artifact_ids.length === 2,
351
+ details: {
352
+ artifactCount: qaResult.artifacts.length,
353
+ artifactRefs: qaResult.artifacts.map((item) => item.path_or_ref),
354
+ completedArtifactIds: qaResult.completedTask.artifact_ids,
355
+ },
356
+ });
357
+ }
358
+ finally {
359
+ teardownTempDb(tempRoot);
360
+ }
361
+ }
362
+ {
363
+ const tempRoot = setupTempDb();
364
+ try {
365
+ const { ben, john, brain, project, conversation } = seedProgrammingContext();
366
+ const task = data.addTodoTask({
367
+ projectId: project.id,
368
+ conversationId: conversation.id,
369
+ title: 'Implement the change',
370
+ details: 'Write the requested feature.',
371
+ participants: [ben.name],
372
+ successCriteria: 'Feature is implemented',
373
+ ownerBotId: ben.id,
374
+ ownerName: ben.name,
375
+ taskType: 'coding',
376
+ actor: { actorType: 'orchestrator', actorId: brain.id },
377
+ });
378
+ let error = '';
379
+ try {
380
+ data.completeTodoTaskByWorker(task.id, {
381
+ outputSummary: 'Tried to complete someone else’s work',
382
+ actor: { actorType: 'llm', actorId: john.name },
383
+ });
384
+ }
385
+ catch (err) {
386
+ error = err.message;
387
+ }
388
+ scenarios.push({
389
+ name: 'reject_non_owner_completion',
390
+ expected: 'Only the assigned owner can complete a worker TODO.',
391
+ pass: /not the owner/i.test(error),
392
+ details: { error },
393
+ });
394
+ }
395
+ finally {
396
+ teardownTempDb(tempRoot);
397
+ }
398
+ }
399
+ {
400
+ const tempRoot = setupTempDb();
401
+ try {
402
+ const { ben, brain, project, conversation } = seedProgrammingContext();
403
+ const task = data.addTodoTask({
404
+ projectId: project.id,
405
+ conversationId: conversation.id,
406
+ title: 'Implement the change',
407
+ details: 'Write the requested feature.',
408
+ participants: [ben.name],
409
+ successCriteria: 'Feature is implemented',
410
+ ownerBotId: ben.id,
411
+ ownerName: ben.name,
412
+ taskType: 'coding',
413
+ actor: { actorType: 'orchestrator', actorId: brain.id },
414
+ });
415
+ const toolResult = await todo_tasks_1.completeWorkerTaskTool.execute({
416
+ task_id: task.id,
417
+ output_summary: 'Implemented through tool path',
418
+ handoff_prompt: 'Return results to orchestrator',
419
+ artifact_refs: ['C:\\Users\\sp\\Desktop\\tool-output.txt'],
420
+ }, {
421
+ projectDir: process.cwd(),
422
+ projectId: project.id,
423
+ commandTimeout: 60,
424
+ maxCommandTimeout: 300,
425
+ maxFileSize: 1024 * 1024,
426
+ actorType: 'llm',
427
+ actorId: ben.name,
428
+ });
429
+ const parsed = toolResult.success ? JSON.parse(toolResult.output) : null;
430
+ scenarios.push({
431
+ name: 'tool_wrapper_complete_worker_task',
432
+ expected: 'The worker completion tool should reach the same runtime path and return orchestrator handoff data.',
433
+ pass: toolResult.success === true && parsed?.returnedToOrchestrator === true,
434
+ details: {
435
+ success: toolResult.success,
436
+ error: toolResult.error ?? null,
437
+ returnedToOrchestrator: parsed?.returnedToOrchestrator ?? null,
438
+ },
439
+ });
440
+ }
441
+ finally {
442
+ teardownTempDb(tempRoot);
443
+ }
444
+ }
445
+ {
446
+ const tempRoot = setupTempDb();
447
+ try {
448
+ const { ben, brain, project, conversation } = seedProgrammingContext();
449
+ const task = data.addTodoTask({
450
+ projectId: project.id,
451
+ conversationId: conversation.id,
452
+ title: 'Implement the change',
453
+ details: 'Write the requested feature.',
454
+ participants: [ben.name],
455
+ successCriteria: 'Feature is implemented',
456
+ ownerBotId: ben.id,
457
+ ownerName: ben.name,
458
+ taskType: 'coding',
459
+ actor: { actorType: 'orchestrator', actorId: brain.id },
460
+ });
461
+ const toolResult = await todo_tasks_1.blockWorkerTaskTool.execute({
462
+ task_id: task.id,
463
+ blocker_summary: 'Missing destination folder.',
464
+ checked_context: 'Checked the task, summary, and local files.',
465
+ user_question: 'Which folder should receive the output file?',
466
+ }, {
467
+ projectDir: process.cwd(),
468
+ projectId: project.id,
469
+ commandTimeout: 60,
470
+ maxCommandTimeout: 300,
471
+ maxFileSize: 1024 * 1024,
472
+ actorType: 'llm',
473
+ actorId: ben.name,
474
+ });
475
+ const parsed = toolResult.success ? JSON.parse(toolResult.output) : null;
476
+ scenarios.push({
477
+ name: 'tool_wrapper_block_worker_task',
478
+ expected: 'The blocked worker tool should persist the blocker and return orchestrator handoff data.',
479
+ pass: toolResult.success === true
480
+ && parsed?.returnedToOrchestrator === true
481
+ && parsed?.blockedTask?.blocker_summary === 'Missing destination folder.',
482
+ details: {
483
+ success: toolResult.success,
484
+ error: toolResult.error ?? null,
485
+ returnedToOrchestrator: parsed?.returnedToOrchestrator ?? null,
486
+ blockerSummary: parsed?.blockedTask?.blocker_summary ?? null,
487
+ },
488
+ });
489
+ }
490
+ finally {
491
+ teardownTempDb(tempRoot);
492
+ }
493
+ }
494
+ return scenarios;
495
+ }
496
+ async function main() {
497
+ const args = parseArgs(process.argv.slice(2));
498
+ const scenarios = await runScenarios();
499
+ const passed = scenarios.filter((item) => item.pass).length;
500
+ const report = {
501
+ generatedAt: new Date().toISOString(),
502
+ slice: 'todo-worker-runtime',
503
+ passed,
504
+ total: scenarios.length,
505
+ success: passed === scenarios.length,
506
+ scenarios,
507
+ };
508
+ const serialized = JSON.stringify(report, null, 2);
509
+ if (args.output) {
510
+ fs.writeFileSync(path.resolve(args.output), serialized, 'utf8');
511
+ }
512
+ else {
513
+ console.log(serialized);
514
+ }
515
+ }
516
+ main().catch((err) => {
517
+ console.error(err);
518
+ process.exit(1);
519
+ });
520
+ //# sourceMappingURL=todo-worker-runtime-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-worker-runtime-replay.js","sourceRoot":"","sources":["../../src/eval/todo-worker-runtime-replay.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,12 @@ export interface StoredIntegrationTokens {
23
23
  * Stores the tokens locally for MCP server use.
24
24
  */
25
25
  export declare function handleIntegrationTokens(message: IntegrationTokenMessage): void;
26
+ /**
27
+ * Rewrite the on-disk credential/token files that @piotr-agier/google-drive-mcp reads.
28
+ * Called after receiving fresh tokens via MQTT so that the running MCP subprocess
29
+ * can pick them up on its next token-refresh cycle.
30
+ */
31
+ export declare function rewriteGoogleMcpTokenFiles(stored: StoredIntegrationTokens): void;
26
32
  /**
27
33
  * Get stored tokens for an integration.
28
34
  * Returns null if not found or decryption fails.
@@ -1 +1 @@
1
- {"version":3,"file":"integration-tokens.d.ts","sourceRoot":"","sources":["../src/integration-tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAoC7D,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAwBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAqB9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAWxF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAG3C"}
1
+ {"version":3,"file":"integration-tokens.d.ts","sourceRoot":"","sources":["../src/integration-tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAoC7D,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAwBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CA2B9E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAiChF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI,CAWxF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBjF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAG3C"}
@@ -46,6 +46,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
46
46
  };
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.handleIntegrationTokens = handleIntegrationTokens;
49
+ exports.rewriteGoogleMcpTokenFiles = rewriteGoogleMcpTokenFiles;
49
50
  exports.getIntegrationTokens = getIntegrationTokens;
50
51
  exports.getIntegrationEnvVars = getIntegrationEnvVars;
51
52
  exports.listIntegrations = listIntegrations;
@@ -116,6 +117,48 @@ function handleIntegrationTokens(message) {
116
117
  file[integration] = { encrypted: encryptValue(JSON.stringify(stored)) };
117
118
  saveTokensFile(file);
118
119
  console.log(chalk_1.default.gray(` Stored in ${TOKENS_FILE}`));
120
+ // For Google integrations, also rewrite the MCP token files so running
121
+ // Google MCP servers pick up fresh credentials without a full restart.
122
+ if (integration === 'google') {
123
+ rewriteGoogleMcpTokenFiles(stored);
124
+ }
125
+ }
126
+ /**
127
+ * Rewrite the on-disk credential/token files that @piotr-agier/google-drive-mcp reads.
128
+ * Called after receiving fresh tokens via MQTT so that the running MCP subprocess
129
+ * can pick them up on its next token-refresh cycle.
130
+ */
131
+ function rewriteGoogleMcpTokenFiles(stored) {
132
+ try {
133
+ const os = require('os');
134
+ const path = require('path');
135
+ const configDir = path.join(os.homedir(), '.config', 'google-drive-mcp');
136
+ if (!fs.existsSync(configDir)) {
137
+ fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
138
+ }
139
+ // Write credentials file (gcp-oauth.keys.json)
140
+ const keysFile = path.join(configDir, 'gcp-oauth.keys.json');
141
+ fs.writeFileSync(keysFile, JSON.stringify({
142
+ installed: {
143
+ client_id: stored.clientId,
144
+ client_secret: stored.clientSecret,
145
+ redirect_uris: ['http://localhost:3000/oauth2callback'],
146
+ },
147
+ }, null, 2), { mode: 0o600 });
148
+ // Write tokens file with fresh access token + refresh token
149
+ const tokensFile = path.join(configDir, 'tokens.json');
150
+ fs.writeFileSync(tokensFile, JSON.stringify({
151
+ access_token: stored.accessToken,
152
+ refresh_token: stored.refreshToken || '',
153
+ scope: stored.scope,
154
+ token_type: 'Bearer',
155
+ expiry_date: stored.expiresAt || (Date.now() + 3600 * 1000),
156
+ }, null, 2), { mode: 0o600 });
157
+ console.log(chalk_1.default.green(` ✓ Rewrote Google MCP token files in ${configDir}`));
158
+ }
159
+ catch (err) {
160
+ console.error(chalk_1.default.red(` ✗ Failed to rewrite Google MCP token files: ${err.message}`));
161
+ }
119
162
  }
120
163
  /**
121
164
  * Get stored tokens for an integration.
@@ -1 +1 @@
1
- {"version":3,"file":"integration-tokens.js","sourceRoot":"","sources":["../src/integration-tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"integration-tokens.js","sourceRoot":"","sources":["../src/integration-tokens.ts"],"names":[],"mappings":"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"}