@songsid/agend 0.0.4 → 0.0.6

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.
@@ -1,356 +0,0 @@
1
- /** Resolve display name for an instance, fallback to instance name. */
2
- export function resolveDisplayName(ctx, instanceName) {
3
- return ctx.fleetConfig?.instances[instanceName]?.display_name ?? instanceName;
4
- }
5
- /** One-line description of a fleet tool call for activity logs. */
6
- export function summarizeToolCall(tool, args) {
7
- switch (tool) {
8
- case "send_to_instance": return `send_to_instance(${args.instance_name})`;
9
- case "broadcast": return `broadcast(${args.targets?.join(", ") ?? "all"})`;
10
- case "request_information": return `request_information(${args.target_instance}, "${(args.question ?? "").slice(0, 60)}")`;
11
- case "delegate_task": return `delegate_task(${args.target_instance}, "${(args.task ?? "").slice(0, 60)}")`;
12
- case "report_result": return `report_result(${args.target_instance})`;
13
- case "task": return `task(${args.action}${args.title ? `, "${args.title.slice(0, 40)}"` : args.id ? `, ${args.id.slice(0, 8)}` : ""})`;
14
- case "post_decision": return `post_decision("${(args.title ?? "").slice(0, 40)}")`;
15
- case "list_decisions": return "list_decisions()";
16
- case "list_instances": return "list_instances()";
17
- case "describe_instance": return `describe_instance(${args.name})`;
18
- case "start_instance": return `start_instance(${args.name})`;
19
- case "create_instance": return `create_instance(${args.directory})`;
20
- case "delete_instance": return `delete_instance(${args.name})`;
21
- case "replace_instance": return `replace_instance(${args.name})`;
22
- default: return `${tool}()`;
23
- }
24
- }
25
- export const rpcHandlers = {
26
- handleScheduleCrud(ctx, instanceName, msg) {
27
- const fleetRequestId = msg.fleetRequestId;
28
- const payload = (msg.payload ?? {});
29
- const meta = (msg.meta ?? {});
30
- const ipc = ctx.instanceIpcClients.get(instanceName);
31
- if (!ipc)
32
- return;
33
- try {
34
- let result;
35
- switch (msg.type) {
36
- case "fleet_schedule_create": {
37
- const params = {
38
- cron: payload.cron,
39
- message: payload.message,
40
- source: instanceName,
41
- target: payload.target || instanceName,
42
- reply_chat_id: meta.chat_id,
43
- reply_thread_id: meta.thread_id || null,
44
- label: payload.label,
45
- timezone: payload.timezone,
46
- };
47
- result = ctx.scheduler.create(params);
48
- break;
49
- }
50
- case "fleet_schedule_list":
51
- result = ctx.scheduler.list(payload.target);
52
- break;
53
- case "fleet_schedule_update":
54
- result = ctx.scheduler.update(payload.id, payload);
55
- break;
56
- case "fleet_schedule_delete":
57
- ctx.scheduler.delete(payload.id);
58
- result = "ok";
59
- break;
60
- }
61
- ipc.send({ type: "fleet_schedule_response", fleetRequestId, result });
62
- }
63
- catch (err) {
64
- ipc.send({ type: "fleet_schedule_response", fleetRequestId, error: err.message });
65
- }
66
- },
67
- handleDecisionCrud(ctx, instanceName, msg) {
68
- const fleetRequestId = msg.fleetRequestId;
69
- const payload = (msg.payload ?? {});
70
- const meta = (msg.meta ?? {});
71
- const ipc = ctx.instanceIpcClients.get(instanceName);
72
- if (!ipc || !ctx.scheduler)
73
- return;
74
- const db = ctx.scheduler.db;
75
- const projectRoot = meta.working_directory || ctx.fleetConfig?.instances[instanceName]?.working_directory || "";
76
- try {
77
- let result;
78
- switch (msg.type) {
79
- case "fleet_decision_create": {
80
- // Prune expired decisions on create
81
- db.pruneExpiredDecisions();
82
- result = db.createDecision({
83
- project_root: projectRoot,
84
- scope: payload.scope,
85
- title: payload.title,
86
- content: payload.content,
87
- tags: payload.tags,
88
- ttl_days: payload.ttl_days,
89
- created_by: instanceName,
90
- supersedes: payload.supersedes,
91
- });
92
- break;
93
- }
94
- case "fleet_decision_list":
95
- db.pruneExpiredDecisions();
96
- result = db.listDecisions(projectRoot, {
97
- includeArchived: payload.include_archived,
98
- tags: payload.tags,
99
- });
100
- break;
101
- case "fleet_decision_update": {
102
- const id = payload.id;
103
- if (payload.archive) {
104
- db.archiveDecision(id);
105
- result = { archived: true, id };
106
- }
107
- else {
108
- result = db.updateDecision(id, {
109
- content: payload.content,
110
- tags: payload.tags,
111
- ttl_days: payload.ttl_days,
112
- });
113
- }
114
- break;
115
- }
116
- }
117
- ipc.send({ type: "fleet_decision_response", fleetRequestId, result });
118
- }
119
- catch (err) {
120
- ipc.send({ type: "fleet_decision_response", fleetRequestId, error: err.message });
121
- }
122
- },
123
- handleSetDisplayName(ctx, instanceName, msg) {
124
- const fleetRequestId = msg.fleetRequestId;
125
- const payload = (msg.payload ?? {});
126
- const ipc = ctx.instanceIpcClients.get(instanceName);
127
- if (!ipc || !ctx.fleetConfig)
128
- return;
129
- const displayName = payload.name;
130
- if (!displayName || displayName.length > 30) {
131
- ipc.send({ type: "fleet_display_name_response", fleetRequestId, error: "Name must be 1-30 characters" });
132
- return;
133
- }
134
- ctx.fleetConfig.instances[instanceName].display_name = displayName;
135
- ctx.saveFleetConfig();
136
- ctx.logger.info({ instanceName, displayName }, "Display name set");
137
- ipc.send({ type: "fleet_display_name_response", fleetRequestId, result: { display_name: displayName } });
138
- },
139
- handleSetDescription(ctx, instanceName, msg) {
140
- const fleetRequestId = msg.fleetRequestId;
141
- const payload = (msg.payload ?? {});
142
- const ipc = ctx.instanceIpcClients.get(instanceName);
143
- if (!ipc || !ctx.fleetConfig)
144
- return;
145
- const description = payload.description;
146
- if (!description) {
147
- ipc.send({ type: "fleet_description_response", fleetRequestId, error: "Description cannot be empty" });
148
- return;
149
- }
150
- ctx.fleetConfig.instances[instanceName].description = description;
151
- ctx.saveFleetConfig();
152
- ctx.logger.info({ instanceName, description: description.slice(0, 80) }, "Description set");
153
- ipc.send({ type: "fleet_description_response", fleetRequestId, result: { description } });
154
- },
155
- // ── Agent CLI HTTP handlers ─────────────────────────────────────────
156
- async handleScheduleCrudHttp(ctx, instance, op, args) {
157
- if (!ctx.scheduler)
158
- return { error: "Scheduler not available" };
159
- switch (op) {
160
- case "create":
161
- return ctx.scheduler.create({
162
- cron: args.cron, message: args.message,
163
- source: instance, target: args.target || instance,
164
- reply_chat_id: "", reply_thread_id: null,
165
- label: args.label,
166
- timezone: args.timezone,
167
- });
168
- case "list": return ctx.scheduler.list(args.target);
169
- case "update": return ctx.scheduler.update(args.id, args);
170
- case "delete":
171
- ctx.scheduler.delete(args.id);
172
- return "ok";
173
- default: return { error: `Unknown schedule op: ${op}` };
174
- }
175
- },
176
- async handleDecisionCrudHttp(ctx, instance, op, args) {
177
- if (!ctx.scheduler)
178
- return { error: "Scheduler not available" };
179
- const db = ctx.scheduler.db;
180
- const projectRoot = ctx.fleetConfig?.instances[instance]?.working_directory ?? "";
181
- const asStr = (v) => typeof v === "string" ? v : undefined;
182
- const asNum = (v) => typeof v === "number" ? v : undefined;
183
- const asStrArr = (v) => Array.isArray(v) && v.every(x => typeof x === "string") ? v : undefined;
184
- switch (op) {
185
- case "post": {
186
- const title = asStr(args.title);
187
- const content = asStr(args.content);
188
- if (!title || !content)
189
- return { error: "title and content are required" };
190
- const scope = args.scope === "fleet" ? "fleet" : "project";
191
- return db.createDecision({
192
- project_root: projectRoot,
193
- scope,
194
- title,
195
- content,
196
- tags: asStrArr(args.tags),
197
- ttl_days: asNum(args.ttl_days),
198
- supersedes: asStr(args.supersedes),
199
- created_by: instance,
200
- });
201
- }
202
- case "list": return db.listDecisions(projectRoot, {
203
- includeArchived: args.includeArchived === true,
204
- tags: asStrArr(args.tags),
205
- });
206
- case "update": {
207
- const id = asStr(args.id);
208
- if (!id)
209
- return { error: "id is required" };
210
- return db.updateDecision(id, {
211
- content: asStr(args.content),
212
- tags: asStrArr(args.tags),
213
- ttl_days: asNum(args.ttl_days),
214
- });
215
- }
216
- default: return { error: `Unknown decision op: ${op}` };
217
- }
218
- },
219
- async handleTaskCrudHttp(ctx, instance, args) {
220
- if (!ctx.scheduler)
221
- return { error: "Scheduler not available" };
222
- const db = ctx.scheduler.db;
223
- const action = args.action;
224
- const asStr = (v) => typeof v === "string" ? v : undefined;
225
- const asStrArr = (v) => Array.isArray(v) && v.every(x => typeof x === "string") ? v : undefined;
226
- const asPriority = (v) => {
227
- return (v === "low" || v === "normal" || v === "high" || v === "urgent") ? v : undefined;
228
- };
229
- const asStatus = (v) => {
230
- return (v === "open" || v === "claimed" || v === "done" || v === "blocked" || v === "cancelled") ? v : undefined;
231
- };
232
- switch (action) {
233
- case "create": {
234
- const title = asStr(args.title);
235
- if (!title)
236
- return { error: "title is required" };
237
- return db.createTask({
238
- title,
239
- description: asStr(args.description),
240
- priority: asPriority(args.priority),
241
- assignee: asStr(args.assignee),
242
- depends_on: asStrArr(args.depends_on),
243
- created_by: instance,
244
- });
245
- }
246
- case "list": return db.listTasks({ assignee: asStr(args.filter_assignee), status: asStr(args.filter_status) });
247
- case "claim": {
248
- const id = asStr(args.id);
249
- if (!id)
250
- return { error: "id is required" };
251
- return db.claimTask(id, instance);
252
- }
253
- case "done": {
254
- const id = asStr(args.id);
255
- if (!id)
256
- return { error: "id is required" };
257
- return db.completeTask(id, asStr(args.result));
258
- }
259
- case "update": {
260
- const id = asStr(args.id);
261
- if (!id)
262
- return { error: "id is required" };
263
- return db.updateTask(id, {
264
- status: asStatus(args.status),
265
- assignee: asStr(args.assignee),
266
- result: asStr(args.result),
267
- priority: asPriority(args.priority),
268
- });
269
- }
270
- default: return { error: `Unknown task action: ${action}` };
271
- }
272
- },
273
- async handleSetDisplayNameHttp(ctx, instance, name) {
274
- if (!ctx.fleetConfig)
275
- return { error: "Fleet config not available" };
276
- if (!name || name.length > 30)
277
- return { error: "Name must be 1-30 characters" };
278
- ctx.fleetConfig.instances[instance].display_name = name;
279
- ctx.saveFleetConfig();
280
- return { display_name: name };
281
- },
282
- async handleSetDescriptionHttp(ctx, instance, description) {
283
- if (!ctx.fleetConfig)
284
- return { error: "Fleet config not available" };
285
- if (!description)
286
- return { error: "Description cannot be empty" };
287
- ctx.fleetConfig.instances[instance].description = description;
288
- ctx.saveFleetConfig();
289
- return { description };
290
- },
291
- handleTaskCrud(ctx, instanceName, msg) {
292
- const fleetRequestId = msg.fleetRequestId;
293
- const payload = (msg.payload ?? {});
294
- const meta = (msg.meta ?? {});
295
- const ipc = ctx.instanceIpcClients.get(instanceName);
296
- if (!ipc || !ctx.scheduler)
297
- return;
298
- const db = ctx.scheduler.db;
299
- const action = payload.action;
300
- try {
301
- let result;
302
- switch (action) {
303
- case "create":
304
- result = db.createTask({
305
- title: payload.title,
306
- description: payload.description,
307
- priority: payload.priority,
308
- assignee: payload.assignee,
309
- depends_on: payload.depends_on,
310
- created_by: meta.instance_name || instanceName,
311
- });
312
- break;
313
- case "list":
314
- result = db.listTasks({
315
- assignee: payload.filter_assignee,
316
- status: payload.filter_status,
317
- });
318
- break;
319
- case "claim":
320
- result = db.claimTask(payload.id, meta.instance_name || instanceName);
321
- break;
322
- case "done":
323
- result = db.completeTask(payload.id, payload.result);
324
- break;
325
- case "update":
326
- result = db.updateTask(payload.id, {
327
- status: payload.status,
328
- assignee: payload.assignee,
329
- result: payload.result,
330
- priority: payload.priority,
331
- });
332
- break;
333
- default:
334
- throw new Error(`Unknown task action: ${action}`);
335
- }
336
- ipc.send({ type: "fleet_task_response", fleetRequestId, result });
337
- // Activity log for task lifecycle events
338
- if (action === "create") {
339
- const t = result;
340
- ctx.eventLog?.logActivity("task_update", instanceName, `created task: ${t.title}`, t.assignee ?? undefined);
341
- }
342
- else if (action === "claim") {
343
- const t = result;
344
- ctx.eventLog?.logActivity("task_update", instanceName, `claimed: ${t.title}`);
345
- }
346
- else if (action === "done") {
347
- const t = result;
348
- ctx.eventLog?.logActivity("task_update", instanceName, `completed: ${t.title}`, undefined, t.result ?? undefined);
349
- }
350
- }
351
- catch (err) {
352
- ipc.send({ type: "fleet_task_response", fleetRequestId, error: err.message });
353
- }
354
- },
355
- };
356
- //# sourceMappingURL=fleet-rpc-handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fleet-rpc-handlers.js","sourceRoot":"","sources":["../src/fleet-rpc-handlers.ts"],"names":[],"mappings":"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"}