@hasna/todos 0.9.81 → 0.9.83
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/dist/cli/index.js +143 -25
- package/dist/db/agents.d.ts +5 -0
- package/dist/db/agents.d.ts.map +1 -1
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/tasks.d.ts.map +1 -1
- package/dist/index.js +42 -4
- package/dist/lib/config.d.ts +15 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/mcp/index.js +139 -23
- package/dist/server/index.js +43 -4
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -2298,6 +2298,8 @@ function ensureSchema(db) {
|
|
|
2298
2298
|
ensureColumn("tasks", "confidence", "REAL");
|
|
2299
2299
|
ensureColumn("tasks", "reason", "TEXT");
|
|
2300
2300
|
ensureColumn("tasks", "spawned_from_session", "TEXT");
|
|
2301
|
+
ensureColumn("tasks", "assigned_by", "TEXT");
|
|
2302
|
+
ensureColumn("tasks", "assigned_from_project", "TEXT");
|
|
2301
2303
|
ensureColumn("agents", "role", "TEXT DEFAULT 'agent'");
|
|
2302
2304
|
ensureColumn("agents", "permissions", `TEXT DEFAULT '["*"]'`);
|
|
2303
2305
|
ensureColumn("agents", "reports_to", "TEXT");
|
|
@@ -2329,6 +2331,7 @@ function ensureSchema(db) {
|
|
|
2329
2331
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_checklists_task ON task_checklists(task_id)");
|
|
2330
2332
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_project ON project_sources(project_id)");
|
|
2331
2333
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_type ON project_sources(type)");
|
|
2334
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by)");
|
|
2332
2335
|
}
|
|
2333
2336
|
function backfillTaskTags(db) {
|
|
2334
2337
|
try {
|
|
@@ -2792,6 +2795,12 @@ var init_database = __esm(() => {
|
|
|
2792
2795
|
CREATE INDEX IF NOT EXISTS idx_task_files_path ON task_files(path);
|
|
2793
2796
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_task_files_task_path ON task_files(task_id, path);
|
|
2794
2797
|
INSERT OR IGNORE INTO _migrations (id) VALUES (25);
|
|
2798
|
+
`,
|
|
2799
|
+
`
|
|
2800
|
+
ALTER TABLE tasks ADD COLUMN assigned_by TEXT;
|
|
2801
|
+
ALTER TABLE tasks ADD COLUMN assigned_from_project TEXT;
|
|
2802
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by);
|
|
2803
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (26);
|
|
2795
2804
|
`
|
|
2796
2805
|
];
|
|
2797
2806
|
});
|
|
@@ -3127,7 +3136,9 @@ __export(exports_config, {
|
|
|
3127
3136
|
getSyncAgentsFromConfig: () => getSyncAgentsFromConfig,
|
|
3128
3137
|
getCompletionGuardConfig: () => getCompletionGuardConfig,
|
|
3129
3138
|
getAgentTasksDir: () => getAgentTasksDir,
|
|
3130
|
-
getAgentTaskListId: () => getAgentTaskListId
|
|
3139
|
+
getAgentTaskListId: () => getAgentTaskListId,
|
|
3140
|
+
getAgentPoolForProject: () => getAgentPoolForProject,
|
|
3141
|
+
DEFAULT_AGENT_POOL: () => DEFAULT_AGENT_POOL
|
|
3131
3142
|
});
|
|
3132
3143
|
import { existsSync as existsSync3 } from "fs";
|
|
3133
3144
|
import { join as join3 } from "path";
|
|
@@ -3172,6 +3183,23 @@ function getTaskPrefixConfig() {
|
|
|
3172
3183
|
const config = loadConfig();
|
|
3173
3184
|
return config.task_prefix || null;
|
|
3174
3185
|
}
|
|
3186
|
+
function getAgentPoolForProject(workingDir) {
|
|
3187
|
+
const config = loadConfig();
|
|
3188
|
+
if (workingDir && config.project_pools) {
|
|
3189
|
+
let bestKey = null;
|
|
3190
|
+
let bestLen = 0;
|
|
3191
|
+
for (const key of Object.keys(config.project_pools)) {
|
|
3192
|
+
if (workingDir.startsWith(key) && key.length > bestLen) {
|
|
3193
|
+
bestKey = key;
|
|
3194
|
+
bestLen = key.length;
|
|
3195
|
+
}
|
|
3196
|
+
}
|
|
3197
|
+
if (bestKey && config.project_pools[bestKey]) {
|
|
3198
|
+
return config.project_pools[bestKey];
|
|
3199
|
+
}
|
|
3200
|
+
}
|
|
3201
|
+
return config.agent_pool || DEFAULT_AGENT_POOL;
|
|
3202
|
+
}
|
|
3175
3203
|
function getCompletionGuardConfig(projectPath) {
|
|
3176
3204
|
const config = loadConfig();
|
|
3177
3205
|
const global = { ...GUARD_DEFAULTS, ...config.completion_guard };
|
|
@@ -3180,9 +3208,26 @@ function getCompletionGuardConfig(projectPath) {
|
|
|
3180
3208
|
}
|
|
3181
3209
|
return global;
|
|
3182
3210
|
}
|
|
3183
|
-
var cached = null, GUARD_DEFAULTS;
|
|
3211
|
+
var DEFAULT_AGENT_POOL, cached = null, GUARD_DEFAULTS;
|
|
3184
3212
|
var init_config = __esm(() => {
|
|
3185
3213
|
init_sync_utils();
|
|
3214
|
+
DEFAULT_AGENT_POOL = [
|
|
3215
|
+
"maximus",
|
|
3216
|
+
"cassius",
|
|
3217
|
+
"aurelius",
|
|
3218
|
+
"brutus",
|
|
3219
|
+
"titus",
|
|
3220
|
+
"nero",
|
|
3221
|
+
"cicero",
|
|
3222
|
+
"seneca",
|
|
3223
|
+
"cato",
|
|
3224
|
+
"julius",
|
|
3225
|
+
"marcus",
|
|
3226
|
+
"lucius",
|
|
3227
|
+
"quintus",
|
|
3228
|
+
"gaius",
|
|
3229
|
+
"publius"
|
|
3230
|
+
];
|
|
3186
3231
|
GUARD_DEFAULTS = {
|
|
3187
3232
|
enabled: false,
|
|
3188
3233
|
min_work_seconds: 30,
|
|
@@ -3604,8 +3649,10 @@ function createTask(input, db) {
|
|
|
3604
3649
|
const tags = input.tags || [];
|
|
3605
3650
|
const shortId = input.project_id ? nextTaskShortId(input.project_id, d) : null;
|
|
3606
3651
|
const title = shortId ? `${shortId}: ${input.title}` : input.title;
|
|
3607
|
-
|
|
3608
|
-
|
|
3652
|
+
const assignedBy = input.assigned_by || input.agent_id;
|
|
3653
|
+
const assignedFromProject = input.assigned_from_project || null;
|
|
3654
|
+
d.run(`INSERT INTO tasks (id, short_id, project_id, parent_id, plan_id, task_list_id, title, description, status, priority, agent_id, assigned_to, session_id, working_dir, tags, metadata, version, created_at, updated_at, due_at, estimated_minutes, requires_approval, approved_by, approved_at, recurrence_rule, recurrence_parent_id, spawns_template_id, reason, spawned_from_session, assigned_by, assigned_from_project)
|
|
3655
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
3609
3656
|
id,
|
|
3610
3657
|
shortId,
|
|
3611
3658
|
input.project_id || null,
|
|
@@ -3633,7 +3680,9 @@ function createTask(input, db) {
|
|
|
3633
3680
|
input.recurrence_parent_id || null,
|
|
3634
3681
|
input.spawns_template_id || null,
|
|
3635
3682
|
input.reason || null,
|
|
3636
|
-
input.spawned_from_session || null
|
|
3683
|
+
input.spawned_from_session || null,
|
|
3684
|
+
assignedBy || null,
|
|
3685
|
+
assignedFromProject || null
|
|
3637
3686
|
]);
|
|
3638
3687
|
if (tags.length > 0) {
|
|
3639
3688
|
insertTaskTags(id, tags, d);
|
|
@@ -4634,10 +4683,16 @@ __export(exports_agents, {
|
|
|
4634
4683
|
isAgentConflict: () => isAgentConflict,
|
|
4635
4684
|
getOrgChart: () => getOrgChart,
|
|
4636
4685
|
getDirectReports: () => getDirectReports,
|
|
4686
|
+
getAvailableNamesFromPool: () => getAvailableNamesFromPool,
|
|
4637
4687
|
getAgentByName: () => getAgentByName,
|
|
4638
4688
|
getAgent: () => getAgent,
|
|
4639
4689
|
deleteAgent: () => deleteAgent
|
|
4640
4690
|
});
|
|
4691
|
+
function getAvailableNamesFromPool(pool, db) {
|
|
4692
|
+
const cutoff = new Date(Date.now() - AGENT_ACTIVE_WINDOW_MS).toISOString();
|
|
4693
|
+
const activeNames = new Set(db.query("SELECT name FROM agents WHERE last_seen_at > ?").all(cutoff).map((r) => r.name.toLowerCase()));
|
|
4694
|
+
return pool.filter((name) => !activeNames.has(name.toLowerCase()));
|
|
4695
|
+
}
|
|
4641
4696
|
function shortUuid() {
|
|
4642
4697
|
return crypto.randomUUID().slice(0, 8);
|
|
4643
4698
|
}
|
|
@@ -4651,6 +4706,24 @@ function rowToAgent(row) {
|
|
|
4651
4706
|
function registerAgent(input, db) {
|
|
4652
4707
|
const d = db || getDatabase();
|
|
4653
4708
|
const normalizedName = input.name.trim().toLowerCase();
|
|
4709
|
+
if (input.pool && input.pool.length > 0) {
|
|
4710
|
+
const poolLower = input.pool.map((n) => n.toLowerCase());
|
|
4711
|
+
if (!poolLower.includes(normalizedName)) {
|
|
4712
|
+
const available = getAvailableNamesFromPool(input.pool, d);
|
|
4713
|
+
const suggestion = available.length > 0 ? available[0] : null;
|
|
4714
|
+
return {
|
|
4715
|
+
conflict: true,
|
|
4716
|
+
pool_violation: true,
|
|
4717
|
+
existing_id: "",
|
|
4718
|
+
existing_name: normalizedName,
|
|
4719
|
+
last_seen_at: "",
|
|
4720
|
+
session_hint: null,
|
|
4721
|
+
working_dir: input.working_dir || null,
|
|
4722
|
+
suggestions: available.slice(0, 5),
|
|
4723
|
+
message: `"${normalizedName}" is not in this project's agent pool [${input.pool.join(", ")}]. ${available.length > 0 ? `Try: ${available.slice(0, 3).join(", ")}` : "No names are currently available \u2014 wait for an active agent to go stale."}${suggestion ? ` Suggested: ${suggestion}` : ""}`
|
|
4724
|
+
};
|
|
4725
|
+
}
|
|
4726
|
+
}
|
|
4654
4727
|
const existing = getAgentByName(normalizedName, d);
|
|
4655
4728
|
if (existing) {
|
|
4656
4729
|
const lastSeenMs = new Date(existing.last_seen_at).getTime();
|
|
@@ -4659,6 +4732,7 @@ function registerAgent(input, db) {
|
|
|
4659
4732
|
const differentSession = input.session_id && existing.session_id && input.session_id !== existing.session_id;
|
|
4660
4733
|
if (isActive && differentSession) {
|
|
4661
4734
|
const minutesAgo = Math.round((Date.now() - lastSeenMs) / 60000);
|
|
4735
|
+
const suggestions = input.pool ? getAvailableNamesFromPool(input.pool, d) : [];
|
|
4662
4736
|
return {
|
|
4663
4737
|
conflict: true,
|
|
4664
4738
|
existing_id: existing.id,
|
|
@@ -4666,7 +4740,8 @@ function registerAgent(input, db) {
|
|
|
4666
4740
|
last_seen_at: existing.last_seen_at,
|
|
4667
4741
|
session_hint: existing.session_id ? existing.session_id.slice(0, 8) : null,
|
|
4668
4742
|
working_dir: existing.working_dir,
|
|
4669
|
-
|
|
4743
|
+
suggestions: suggestions.slice(0, 5),
|
|
4744
|
+
message: `Agent "${normalizedName}" is already active (last seen ${minutesAgo}m ago, session ${existing.session_id?.slice(0, 8)}\u2026, dir: ${existing.working_dir ?? "unknown"}). Are you that agent? If so, pass session_id="${existing.session_id}" to reclaim it. Otherwise choose a different name.${suggestions.length > 0 ? ` Available: ${suggestions.slice(0, 3).join(", ")}` : ""}`
|
|
4670
4745
|
};
|
|
4671
4746
|
}
|
|
4672
4747
|
const updates = ["last_seen_at = ?"];
|
|
@@ -9930,14 +10005,14 @@ var init_mcp = __esm(() => {
|
|
|
9930
10005
|
]);
|
|
9931
10006
|
agentFocusMap = new Map;
|
|
9932
10007
|
if (shouldRegisterTool("create_task")) {
|
|
9933
|
-
server.tool("create_task", "Create a new task", {
|
|
10008
|
+
server.tool("create_task", "Create a new task. Requires agent_id \u2014 agent must be registered via register_agent first. The assigning agent's active project is auto-detected as assigned_from_project.", {
|
|
9934
10009
|
title: exports_external.string(),
|
|
9935
10010
|
description: exports_external.string().optional(),
|
|
9936
10011
|
project_id: exports_external.string().optional(),
|
|
9937
10012
|
parent_id: exports_external.string().optional(),
|
|
9938
10013
|
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
|
|
9939
10014
|
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional(),
|
|
9940
|
-
agent_id: exports_external.string().
|
|
10015
|
+
agent_id: exports_external.string().describe("Required. Your registered agent ID or name. Use register_agent first if you haven't."),
|
|
9941
10016
|
assigned_to: exports_external.string().optional(),
|
|
9942
10017
|
session_id: exports_external.string().optional(),
|
|
9943
10018
|
working_dir: exports_external.string().optional(),
|
|
@@ -9950,18 +10025,28 @@ var init_mcp = __esm(() => {
|
|
|
9950
10025
|
recurrence_rule: exports_external.string().optional(),
|
|
9951
10026
|
spawns_template_id: exports_external.string().optional().describe("Template ID to auto-create as next task when this task is completed (pipeline/handoff chains)"),
|
|
9952
10027
|
reason: exports_external.string().optional().describe("Why this task exists \u2014 context for agents picking it up"),
|
|
9953
|
-
spawned_from_session: exports_external.string().optional().describe("Session ID that created this task (for tracing task lineage)")
|
|
10028
|
+
spawned_from_session: exports_external.string().optional().describe("Session ID that created this task (for tracing task lineage)"),
|
|
10029
|
+
assigned_from_project: exports_external.string().optional().describe("Override: project ID the assigning agent is working from. Auto-detected from agent focus if omitted.")
|
|
9954
10030
|
}, async (params) => {
|
|
9955
10031
|
try {
|
|
10032
|
+
if (!params.agent_id) {
|
|
10033
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: "AGENT_REQUIRED", message: "agent_id is required to create tasks. Register your agent first using register_agent." }) }], isError: true };
|
|
10034
|
+
}
|
|
9956
10035
|
const resolved = { ...params };
|
|
9957
|
-
if (resolved
|
|
9958
|
-
resolved
|
|
9959
|
-
if (resolved
|
|
9960
|
-
resolved
|
|
9961
|
-
if (resolved
|
|
9962
|
-
resolved
|
|
9963
|
-
if (resolved
|
|
9964
|
-
resolved
|
|
10036
|
+
if (resolved["project_id"])
|
|
10037
|
+
resolved["project_id"] = resolveId(resolved["project_id"], "projects");
|
|
10038
|
+
if (resolved["parent_id"])
|
|
10039
|
+
resolved["parent_id"] = resolveId(resolved["parent_id"]);
|
|
10040
|
+
if (resolved["plan_id"])
|
|
10041
|
+
resolved["plan_id"] = resolveId(resolved["plan_id"], "plans");
|
|
10042
|
+
if (resolved["task_list_id"])
|
|
10043
|
+
resolved["task_list_id"] = resolveId(resolved["task_list_id"], "task_lists");
|
|
10044
|
+
if (!resolved["assigned_from_project"]) {
|
|
10045
|
+
const focus = getAgentFocus(params.agent_id);
|
|
10046
|
+
if (focus?.project_id) {
|
|
10047
|
+
resolved["assigned_from_project"] = focus.project_id;
|
|
10048
|
+
}
|
|
10049
|
+
}
|
|
9965
10050
|
const task = createTask(resolved);
|
|
9966
10051
|
return { content: [{ type: "text", text: `created: ${formatTask(task)}` }] };
|
|
9967
10052
|
} catch (e) {
|
|
@@ -10754,17 +10839,21 @@ ${text}` }] };
|
|
|
10754
10839
|
});
|
|
10755
10840
|
}
|
|
10756
10841
|
if (shouldRegisterTool("register_agent")) {
|
|
10757
|
-
server.tool("register_agent", "Register an agent.
|
|
10758
|
-
name: exports_external.string(),
|
|
10842
|
+
server.tool("register_agent", "Register an agent. Name must be from the project's configured pool. Returns a conflict error with available name suggestions if the name is taken or not allowed.", {
|
|
10843
|
+
name: exports_external.string().describe("Agent name \u2014 must be from the project's allowed pool (Roman names by default). Use suggest_agent_name first if unsure."),
|
|
10759
10844
|
description: exports_external.string().optional(),
|
|
10760
10845
|
session_id: exports_external.string().optional().describe("Unique ID for this coding session (e.g. process PID + timestamp, or env var). Used to detect name collisions across sessions. Store it and pass on every register_agent call."),
|
|
10761
|
-
working_dir: exports_external.string().optional().describe("Working directory of this session \u2014
|
|
10846
|
+
working_dir: exports_external.string().optional().describe("Working directory of this session \u2014 used to look up the project's agent pool and identify who holds the name in a conflict")
|
|
10762
10847
|
}, async ({ name, description, session_id, working_dir }) => {
|
|
10763
10848
|
try {
|
|
10764
|
-
const
|
|
10849
|
+
const pool = getAgentPoolForProject(working_dir);
|
|
10850
|
+
const result = registerAgent({ name, description, session_id, working_dir, pool });
|
|
10765
10851
|
if (isAgentConflict(result)) {
|
|
10852
|
+
const suggestLine = result.suggestions && result.suggestions.length > 0 ? `
|
|
10853
|
+
Available names: ${result.suggestions.join(", ")}` : "";
|
|
10854
|
+
const hint = result.pool_violation ? `POOL_VIOLATION: ${result.message}${suggestLine}` : `CONFLICT: ${result.message}${suggestLine}`;
|
|
10766
10855
|
return {
|
|
10767
|
-
content: [{ type: "text", text:
|
|
10856
|
+
content: [{ type: "text", text: hint }],
|
|
10768
10857
|
isError: true
|
|
10769
10858
|
};
|
|
10770
10859
|
}
|
|
@@ -10777,6 +10866,7 @@ ID: ${agent.id}
|
|
|
10777
10866
|
Name: ${agent.name}${agent.description ? `
|
|
10778
10867
|
Description: ${agent.description}` : ""}
|
|
10779
10868
|
Session: ${agent.session_id ?? "unbound"}
|
|
10869
|
+
Pool: [${pool.join(", ")}]
|
|
10780
10870
|
Created: ${agent.created_at}
|
|
10781
10871
|
Last seen: ${agent.last_seen_at}`
|
|
10782
10872
|
}]
|
|
@@ -10786,6 +10876,30 @@ Last seen: ${agent.last_seen_at}`
|
|
|
10786
10876
|
}
|
|
10787
10877
|
});
|
|
10788
10878
|
}
|
|
10879
|
+
if (shouldRegisterTool("suggest_agent_name")) {
|
|
10880
|
+
server.tool("suggest_agent_name", "Get available agent names for a project. Call this before register_agent to avoid conflicts.", {
|
|
10881
|
+
working_dir: exports_external.string().optional().describe("Your working directory \u2014 used to look up the project's allowed name pool")
|
|
10882
|
+
}, async ({ working_dir }) => {
|
|
10883
|
+
try {
|
|
10884
|
+
const pool = getAgentPoolForProject(working_dir);
|
|
10885
|
+
const available = getAvailableNamesFromPool(pool, getDatabase());
|
|
10886
|
+
const cutoff = new Date(Date.now() - 30 * 60 * 1000).toISOString();
|
|
10887
|
+
const active = listAgents().filter((a) => a.last_seen_at > cutoff && pool.map((n) => n.toLowerCase()).includes(a.name));
|
|
10888
|
+
const lines = [
|
|
10889
|
+
`Project pool: ${pool.join(", ")}`,
|
|
10890
|
+
`Available now (${available.length}): ${available.length > 0 ? available.join(", ") : "none \u2014 all names in use"}`,
|
|
10891
|
+
active.length > 0 ? `Active agents: ${active.map((a) => `${a.name} (seen ${Math.round((Date.now() - new Date(a.last_seen_at).getTime()) / 60000)}m ago)`).join(", ")}` : "Active agents: none",
|
|
10892
|
+
available.length > 0 ? `
|
|
10893
|
+
Suggested: ${available[0]}` : `
|
|
10894
|
+
No names available yet. Wait for an active agent to go stale (30min timeout).`
|
|
10895
|
+
];
|
|
10896
|
+
return { content: [{ type: "text", text: lines.join(`
|
|
10897
|
+
`) }] };
|
|
10898
|
+
} catch (e) {
|
|
10899
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
10900
|
+
}
|
|
10901
|
+
});
|
|
10902
|
+
}
|
|
10789
10903
|
if (shouldRegisterTool("list_agents")) {
|
|
10790
10904
|
server.tool("list_agents", "List all registered agents", {}, async () => {
|
|
10791
10905
|
try {
|
|
@@ -11978,6 +12092,7 @@ Claimed: ${formatTask(result.claimed)}`);
|
|
|
11978
12092
|
"update_plan",
|
|
11979
12093
|
"delete_plan",
|
|
11980
12094
|
"register_agent",
|
|
12095
|
+
"suggest_agent_name",
|
|
11981
12096
|
"list_agents",
|
|
11982
12097
|
"get_agent",
|
|
11983
12098
|
"rename_agent",
|
|
@@ -12119,9 +12234,12 @@ Claimed: ${formatTask(result.claimed)}`);
|
|
|
12119
12234
|
delete_plan: `Delete a plan. Tasks in the plan are orphaned, not deleted.
|
|
12120
12235
|
Params: id(string, req)
|
|
12121
12236
|
Example: {id: 'a1b2c3d4'}`,
|
|
12122
|
-
|
|
12123
|
-
Params:
|
|
12124
|
-
Example: {
|
|
12237
|
+
suggest_agent_name: `Get available agent names for your project before registering. Shows the pool, which names are active, and the best suggestion.
|
|
12238
|
+
Params: working_dir(string \u2014 your working directory, used to look up project pool)
|
|
12239
|
+
Example: {working_dir: '/workspace/platform'}`,
|
|
12240
|
+
register_agent: `Register an agent. Name must be from the project's pool (call suggest_agent_name first). Returns CONFLICT or POOL_VIOLATION with suggestions if name is taken or not allowed.
|
|
12241
|
+
Params: name(string, req), description(string), session_id(string \u2014 unique per session, e.g. PID+timestamp), working_dir(string, req \u2014 used to determine project pool)
|
|
12242
|
+
Example: {name: 'cassius', session_id: 'abc123-1741952000', working_dir: '/workspace/platform'}`,
|
|
12125
12243
|
list_agents: "List all registered agents with IDs, names, and last seen timestamps. No params.",
|
|
12126
12244
|
get_agent: `Get agent details by ID or name. Provide one of id or name.
|
|
12127
12245
|
Params: id(string), name(string)
|
package/dist/db/agents.d.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { Database } from "bun:sqlite";
|
|
2
2
|
import type { Agent, AgentConflictError, RegisterAgentInput } from "../types/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Returns names from the pool that are not currently held by an active agent.
|
|
5
|
+
* Active = last_seen_at within the past 30 minutes.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getAvailableNamesFromPool(pool: string[], db: Database): string[];
|
|
3
8
|
/**
|
|
4
9
|
* Register an agent. Returns the agent or a conflict descriptor.
|
|
5
10
|
*
|
package/dist/db/agents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/db/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAY,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/db/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAY,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAMjG;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,GAAG,MAAM,EAAE,CAOhF;AAcD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,kBAAkB,CAiFlG;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,kBAAkB,GAAG,MAAM,IAAI,kBAAkB,CAEhG;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAIhE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAKxE;AAED,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,CAGjD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,CAGnE;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,EAC7M,EAAE,CAAC,EAAE,QAAQ,GACZ,KAAK,CAgDP;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAG9D;AAED,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,KAAK,EAAE,CAGxE;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAepD;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,eAAO,MAAM,mBAAmB,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AA+dtC,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAkBrD;AAmPD,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAK9D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAa,GAAG,MAAM,CAG3D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAGpD;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0B9F"}
|
package/dist/db/tasks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/db/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,IAAI,EACJ,cAAc,EACd,UAAU,EACV,YAAY,EAEZ,UAAU,EACV,iBAAiB,EACjB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAwC3B,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/db/tasks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -653,6 +653,12 @@ var MIGRATIONS = [
|
|
|
653
653
|
CREATE INDEX IF NOT EXISTS idx_task_files_path ON task_files(path);
|
|
654
654
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_task_files_task_path ON task_files(task_id, path);
|
|
655
655
|
INSERT OR IGNORE INTO _migrations (id) VALUES (25);
|
|
656
|
+
`,
|
|
657
|
+
`
|
|
658
|
+
ALTER TABLE tasks ADD COLUMN assigned_by TEXT;
|
|
659
|
+
ALTER TABLE tasks ADD COLUMN assigned_from_project TEXT;
|
|
660
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by);
|
|
661
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (26);
|
|
656
662
|
`
|
|
657
663
|
];
|
|
658
664
|
var _db = null;
|
|
@@ -806,6 +812,8 @@ function ensureSchema(db) {
|
|
|
806
812
|
ensureColumn("tasks", "confidence", "REAL");
|
|
807
813
|
ensureColumn("tasks", "reason", "TEXT");
|
|
808
814
|
ensureColumn("tasks", "spawned_from_session", "TEXT");
|
|
815
|
+
ensureColumn("tasks", "assigned_by", "TEXT");
|
|
816
|
+
ensureColumn("tasks", "assigned_from_project", "TEXT");
|
|
809
817
|
ensureColumn("agents", "role", "TEXT DEFAULT 'agent'");
|
|
810
818
|
ensureColumn("agents", "permissions", `TEXT DEFAULT '["*"]'`);
|
|
811
819
|
ensureColumn("agents", "reports_to", "TEXT");
|
|
@@ -837,6 +845,7 @@ function ensureSchema(db) {
|
|
|
837
845
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_checklists_task ON task_checklists(task_id)");
|
|
838
846
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_project ON project_sources(project_id)");
|
|
839
847
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_type ON project_sources(type)");
|
|
848
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by)");
|
|
840
849
|
}
|
|
841
850
|
function backfillTaskTags(db) {
|
|
842
851
|
try {
|
|
@@ -1632,8 +1641,10 @@ function createTask(input, db) {
|
|
|
1632
1641
|
const tags = input.tags || [];
|
|
1633
1642
|
const shortId = input.project_id ? nextTaskShortId(input.project_id, d) : null;
|
|
1634
1643
|
const title = shortId ? `${shortId}: ${input.title}` : input.title;
|
|
1635
|
-
|
|
1636
|
-
|
|
1644
|
+
const assignedBy = input.assigned_by || input.agent_id;
|
|
1645
|
+
const assignedFromProject = input.assigned_from_project || null;
|
|
1646
|
+
d.run(`INSERT INTO tasks (id, short_id, project_id, parent_id, plan_id, task_list_id, title, description, status, priority, agent_id, assigned_to, session_id, working_dir, tags, metadata, version, created_at, updated_at, due_at, estimated_minutes, requires_approval, approved_by, approved_at, recurrence_rule, recurrence_parent_id, spawns_template_id, reason, spawned_from_session, assigned_by, assigned_from_project)
|
|
1647
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
1637
1648
|
id,
|
|
1638
1649
|
shortId,
|
|
1639
1650
|
input.project_id || null,
|
|
@@ -1661,7 +1672,9 @@ function createTask(input, db) {
|
|
|
1661
1672
|
input.recurrence_parent_id || null,
|
|
1662
1673
|
input.spawns_template_id || null,
|
|
1663
1674
|
input.reason || null,
|
|
1664
|
-
input.spawned_from_session || null
|
|
1675
|
+
input.spawned_from_session || null,
|
|
1676
|
+
assignedBy || null,
|
|
1677
|
+
assignedFromProject || null
|
|
1665
1678
|
]);
|
|
1666
1679
|
if (tags.length > 0) {
|
|
1667
1680
|
insertTaskTags(id, tags, d);
|
|
@@ -2746,6 +2759,11 @@ function deleteComment(id, db) {
|
|
|
2746
2759
|
}
|
|
2747
2760
|
// src/db/agents.ts
|
|
2748
2761
|
var AGENT_ACTIVE_WINDOW_MS = 30 * 60 * 1000;
|
|
2762
|
+
function getAvailableNamesFromPool(pool, db) {
|
|
2763
|
+
const cutoff = new Date(Date.now() - AGENT_ACTIVE_WINDOW_MS).toISOString();
|
|
2764
|
+
const activeNames = new Set(db.query("SELECT name FROM agents WHERE last_seen_at > ?").all(cutoff).map((r) => r.name.toLowerCase()));
|
|
2765
|
+
return pool.filter((name) => !activeNames.has(name.toLowerCase()));
|
|
2766
|
+
}
|
|
2749
2767
|
function shortUuid() {
|
|
2750
2768
|
return crypto.randomUUID().slice(0, 8);
|
|
2751
2769
|
}
|
|
@@ -2759,6 +2777,24 @@ function rowToAgent(row) {
|
|
|
2759
2777
|
function registerAgent(input, db) {
|
|
2760
2778
|
const d = db || getDatabase();
|
|
2761
2779
|
const normalizedName = input.name.trim().toLowerCase();
|
|
2780
|
+
if (input.pool && input.pool.length > 0) {
|
|
2781
|
+
const poolLower = input.pool.map((n) => n.toLowerCase());
|
|
2782
|
+
if (!poolLower.includes(normalizedName)) {
|
|
2783
|
+
const available = getAvailableNamesFromPool(input.pool, d);
|
|
2784
|
+
const suggestion = available.length > 0 ? available[0] : null;
|
|
2785
|
+
return {
|
|
2786
|
+
conflict: true,
|
|
2787
|
+
pool_violation: true,
|
|
2788
|
+
existing_id: "",
|
|
2789
|
+
existing_name: normalizedName,
|
|
2790
|
+
last_seen_at: "",
|
|
2791
|
+
session_hint: null,
|
|
2792
|
+
working_dir: input.working_dir || null,
|
|
2793
|
+
suggestions: available.slice(0, 5),
|
|
2794
|
+
message: `"${normalizedName}" is not in this project's agent pool [${input.pool.join(", ")}]. ${available.length > 0 ? `Try: ${available.slice(0, 3).join(", ")}` : "No names are currently available \u2014 wait for an active agent to go stale."}${suggestion ? ` Suggested: ${suggestion}` : ""}`
|
|
2795
|
+
};
|
|
2796
|
+
}
|
|
2797
|
+
}
|
|
2762
2798
|
const existing = getAgentByName(normalizedName, d);
|
|
2763
2799
|
if (existing) {
|
|
2764
2800
|
const lastSeenMs = new Date(existing.last_seen_at).getTime();
|
|
@@ -2767,6 +2803,7 @@ function registerAgent(input, db) {
|
|
|
2767
2803
|
const differentSession = input.session_id && existing.session_id && input.session_id !== existing.session_id;
|
|
2768
2804
|
if (isActive && differentSession) {
|
|
2769
2805
|
const minutesAgo = Math.round((Date.now() - lastSeenMs) / 60000);
|
|
2806
|
+
const suggestions = input.pool ? getAvailableNamesFromPool(input.pool, d) : [];
|
|
2770
2807
|
return {
|
|
2771
2808
|
conflict: true,
|
|
2772
2809
|
existing_id: existing.id,
|
|
@@ -2774,7 +2811,8 @@ function registerAgent(input, db) {
|
|
|
2774
2811
|
last_seen_at: existing.last_seen_at,
|
|
2775
2812
|
session_hint: existing.session_id ? existing.session_id.slice(0, 8) : null,
|
|
2776
2813
|
working_dir: existing.working_dir,
|
|
2777
|
-
|
|
2814
|
+
suggestions: suggestions.slice(0, 5),
|
|
2815
|
+
message: `Agent "${normalizedName}" is already active (last seen ${minutesAgo}m ago, session ${existing.session_id?.slice(0, 8)}\u2026, dir: ${existing.working_dir ?? "unknown"}). Are you that agent? If so, pass session_id="${existing.session_id}" to reclaim it. Otherwise choose a different name.${suggestions.length > 0 ? ` Available: ${suggestions.slice(0, 3).join(", ")}` : ""}`
|
|
2778
2816
|
};
|
|
2779
2817
|
}
|
|
2780
2818
|
const updates = ["last_seen_at = ?"];
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -24,11 +24,26 @@ export interface TodosConfig {
|
|
|
24
24
|
task_prefix?: TaskPrefixConfig;
|
|
25
25
|
completion_guard?: CompletionGuardConfig;
|
|
26
26
|
project_overrides?: Record<string, ProjectOverrideConfig>;
|
|
27
|
+
/** Global pool of allowed agent names. Used when no project-specific pool matches. */
|
|
28
|
+
agent_pool?: string[];
|
|
29
|
+
/** Per-project agent name pools, keyed by working directory path prefix. */
|
|
30
|
+
project_pools?: Record<string, string[]>;
|
|
27
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Built-in default agent name pool (Roman names convention).
|
|
34
|
+
* Used when no pool is configured in config.json.
|
|
35
|
+
*/
|
|
36
|
+
export declare const DEFAULT_AGENT_POOL: string[];
|
|
28
37
|
export declare function loadConfig(): TodosConfig;
|
|
29
38
|
export declare function getSyncAgentsFromConfig(): string[] | null;
|
|
30
39
|
export declare function getAgentTaskListId(agent: string): string | null;
|
|
31
40
|
export declare function getAgentTasksDir(agent: string): string | null;
|
|
32
41
|
export declare function getTaskPrefixConfig(): TaskPrefixConfig | null;
|
|
42
|
+
/**
|
|
43
|
+
* Get the agent name pool for a given working directory.
|
|
44
|
+
* Checks project_pools for the longest matching path prefix, then falls back
|
|
45
|
+
* to agent_pool, then to the built-in DEFAULT_AGENT_POOL.
|
|
46
|
+
*/
|
|
47
|
+
export declare function getAgentPoolForProject(workingDir?: string): string[];
|
|
33
48
|
export declare function getCompletionGuardConfig(projectPath?: string | null): Required<CompletionGuardConfig>;
|
|
34
49
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC1D,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAItC,CAAC;AAWF,wBAAgB,UAAU,IAAI,WAAW,CAYxC;AAED,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,GAAG,IAAI,CAKzD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAG7D;AAUD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBpE;AAED,wBAAgB,wBAAwB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CASrG"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -236,6 +236,8 @@ function ensureSchema(db) {
|
|
|
236
236
|
ensureColumn("tasks", "confidence", "REAL");
|
|
237
237
|
ensureColumn("tasks", "reason", "TEXT");
|
|
238
238
|
ensureColumn("tasks", "spawned_from_session", "TEXT");
|
|
239
|
+
ensureColumn("tasks", "assigned_by", "TEXT");
|
|
240
|
+
ensureColumn("tasks", "assigned_from_project", "TEXT");
|
|
239
241
|
ensureColumn("agents", "role", "TEXT DEFAULT 'agent'");
|
|
240
242
|
ensureColumn("agents", "permissions", `TEXT DEFAULT '["*"]'`);
|
|
241
243
|
ensureColumn("agents", "reports_to", "TEXT");
|
|
@@ -267,6 +269,7 @@ function ensureSchema(db) {
|
|
|
267
269
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_checklists_task ON task_checklists(task_id)");
|
|
268
270
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_project ON project_sources(project_id)");
|
|
269
271
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_type ON project_sources(type)");
|
|
272
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by)");
|
|
270
273
|
}
|
|
271
274
|
function backfillTaskTags(db) {
|
|
272
275
|
try {
|
|
@@ -721,6 +724,12 @@ var init_database = __esm(() => {
|
|
|
721
724
|
CREATE INDEX IF NOT EXISTS idx_task_files_path ON task_files(path);
|
|
722
725
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_task_files_task_path ON task_files(task_id, path);
|
|
723
726
|
INSERT OR IGNORE INTO _migrations (id) VALUES (25);
|
|
727
|
+
`,
|
|
728
|
+
`
|
|
729
|
+
ALTER TABLE tasks ADD COLUMN assigned_by TEXT;
|
|
730
|
+
ALTER TABLE tasks ADD COLUMN assigned_from_project TEXT;
|
|
731
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by);
|
|
732
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (26);
|
|
724
733
|
`
|
|
725
734
|
];
|
|
726
735
|
});
|
|
@@ -880,10 +889,16 @@ __export(exports_agents, {
|
|
|
880
889
|
isAgentConflict: () => isAgentConflict,
|
|
881
890
|
getOrgChart: () => getOrgChart,
|
|
882
891
|
getDirectReports: () => getDirectReports,
|
|
892
|
+
getAvailableNamesFromPool: () => getAvailableNamesFromPool,
|
|
883
893
|
getAgentByName: () => getAgentByName,
|
|
884
894
|
getAgent: () => getAgent,
|
|
885
895
|
deleteAgent: () => deleteAgent
|
|
886
896
|
});
|
|
897
|
+
function getAvailableNamesFromPool(pool, db) {
|
|
898
|
+
const cutoff = new Date(Date.now() - AGENT_ACTIVE_WINDOW_MS).toISOString();
|
|
899
|
+
const activeNames = new Set(db.query("SELECT name FROM agents WHERE last_seen_at > ?").all(cutoff).map((r) => r.name.toLowerCase()));
|
|
900
|
+
return pool.filter((name) => !activeNames.has(name.toLowerCase()));
|
|
901
|
+
}
|
|
887
902
|
function shortUuid() {
|
|
888
903
|
return crypto.randomUUID().slice(0, 8);
|
|
889
904
|
}
|
|
@@ -897,6 +912,24 @@ function rowToAgent(row) {
|
|
|
897
912
|
function registerAgent(input, db) {
|
|
898
913
|
const d = db || getDatabase();
|
|
899
914
|
const normalizedName = input.name.trim().toLowerCase();
|
|
915
|
+
if (input.pool && input.pool.length > 0) {
|
|
916
|
+
const poolLower = input.pool.map((n) => n.toLowerCase());
|
|
917
|
+
if (!poolLower.includes(normalizedName)) {
|
|
918
|
+
const available = getAvailableNamesFromPool(input.pool, d);
|
|
919
|
+
const suggestion = available.length > 0 ? available[0] : null;
|
|
920
|
+
return {
|
|
921
|
+
conflict: true,
|
|
922
|
+
pool_violation: true,
|
|
923
|
+
existing_id: "",
|
|
924
|
+
existing_name: normalizedName,
|
|
925
|
+
last_seen_at: "",
|
|
926
|
+
session_hint: null,
|
|
927
|
+
working_dir: input.working_dir || null,
|
|
928
|
+
suggestions: available.slice(0, 5),
|
|
929
|
+
message: `"${normalizedName}" is not in this project's agent pool [${input.pool.join(", ")}]. ${available.length > 0 ? `Try: ${available.slice(0, 3).join(", ")}` : "No names are currently available \u2014 wait for an active agent to go stale."}${suggestion ? ` Suggested: ${suggestion}` : ""}`
|
|
930
|
+
};
|
|
931
|
+
}
|
|
932
|
+
}
|
|
900
933
|
const existing = getAgentByName(normalizedName, d);
|
|
901
934
|
if (existing) {
|
|
902
935
|
const lastSeenMs = new Date(existing.last_seen_at).getTime();
|
|
@@ -905,6 +938,7 @@ function registerAgent(input, db) {
|
|
|
905
938
|
const differentSession = input.session_id && existing.session_id && input.session_id !== existing.session_id;
|
|
906
939
|
if (isActive && differentSession) {
|
|
907
940
|
const minutesAgo = Math.round((Date.now() - lastSeenMs) / 60000);
|
|
941
|
+
const suggestions = input.pool ? getAvailableNamesFromPool(input.pool, d) : [];
|
|
908
942
|
return {
|
|
909
943
|
conflict: true,
|
|
910
944
|
existing_id: existing.id,
|
|
@@ -912,7 +946,8 @@ function registerAgent(input, db) {
|
|
|
912
946
|
last_seen_at: existing.last_seen_at,
|
|
913
947
|
session_hint: existing.session_id ? existing.session_id.slice(0, 8) : null,
|
|
914
948
|
working_dir: existing.working_dir,
|
|
915
|
-
|
|
949
|
+
suggestions: suggestions.slice(0, 5),
|
|
950
|
+
message: `Agent "${normalizedName}" is already active (last seen ${minutesAgo}m ago, session ${existing.session_id?.slice(0, 8)}\u2026, dir: ${existing.working_dir ?? "unknown"}). Are you that agent? If so, pass session_id="${existing.session_id}" to reclaim it. Otherwise choose a different name.${suggestions.length > 0 ? ` Available: ${suggestions.slice(0, 3).join(", ")}` : ""}`
|
|
916
951
|
};
|
|
917
952
|
}
|
|
918
953
|
const updates = ["last_seen_at = ?"];
|
|
@@ -5423,6 +5458,23 @@ function appendSyncConflict(metadata, conflict, limit = 5) {
|
|
|
5423
5458
|
}
|
|
5424
5459
|
|
|
5425
5460
|
// src/lib/config.ts
|
|
5461
|
+
var DEFAULT_AGENT_POOL = [
|
|
5462
|
+
"maximus",
|
|
5463
|
+
"cassius",
|
|
5464
|
+
"aurelius",
|
|
5465
|
+
"brutus",
|
|
5466
|
+
"titus",
|
|
5467
|
+
"nero",
|
|
5468
|
+
"cicero",
|
|
5469
|
+
"seneca",
|
|
5470
|
+
"cato",
|
|
5471
|
+
"julius",
|
|
5472
|
+
"marcus",
|
|
5473
|
+
"lucius",
|
|
5474
|
+
"quintus",
|
|
5475
|
+
"gaius",
|
|
5476
|
+
"publius"
|
|
5477
|
+
];
|
|
5426
5478
|
function getConfigPath() {
|
|
5427
5479
|
return join3(process.env["HOME"] || HOME, ".todos", "config.json");
|
|
5428
5480
|
}
|
|
@@ -5472,6 +5524,23 @@ var GUARD_DEFAULTS = {
|
|
|
5472
5524
|
window_minutes: 10,
|
|
5473
5525
|
cooldown_seconds: 60
|
|
5474
5526
|
};
|
|
5527
|
+
function getAgentPoolForProject(workingDir) {
|
|
5528
|
+
const config = loadConfig();
|
|
5529
|
+
if (workingDir && config.project_pools) {
|
|
5530
|
+
let bestKey = null;
|
|
5531
|
+
let bestLen = 0;
|
|
5532
|
+
for (const key of Object.keys(config.project_pools)) {
|
|
5533
|
+
if (workingDir.startsWith(key) && key.length > bestLen) {
|
|
5534
|
+
bestKey = key;
|
|
5535
|
+
bestLen = key.length;
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5538
|
+
if (bestKey && config.project_pools[bestKey]) {
|
|
5539
|
+
return config.project_pools[bestKey];
|
|
5540
|
+
}
|
|
5541
|
+
}
|
|
5542
|
+
return config.agent_pool || DEFAULT_AGENT_POOL;
|
|
5543
|
+
}
|
|
5475
5544
|
function getCompletionGuardConfig(projectPath) {
|
|
5476
5545
|
const config = loadConfig();
|
|
5477
5546
|
const global = { ...GUARD_DEFAULTS, ...config.completion_guard };
|
|
@@ -5694,8 +5763,10 @@ function createTask(input, db) {
|
|
|
5694
5763
|
const tags = input.tags || [];
|
|
5695
5764
|
const shortId = input.project_id ? nextTaskShortId(input.project_id, d) : null;
|
|
5696
5765
|
const title = shortId ? `${shortId}: ${input.title}` : input.title;
|
|
5697
|
-
|
|
5698
|
-
|
|
5766
|
+
const assignedBy = input.assigned_by || input.agent_id;
|
|
5767
|
+
const assignedFromProject = input.assigned_from_project || null;
|
|
5768
|
+
d.run(`INSERT INTO tasks (id, short_id, project_id, parent_id, plan_id, task_list_id, title, description, status, priority, agent_id, assigned_to, session_id, working_dir, tags, metadata, version, created_at, updated_at, due_at, estimated_minutes, requires_approval, approved_by, approved_at, recurrence_rule, recurrence_parent_id, spawns_template_id, reason, spawned_from_session, assigned_by, assigned_from_project)
|
|
5769
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
5699
5770
|
id,
|
|
5700
5771
|
shortId,
|
|
5701
5772
|
input.project_id || null,
|
|
@@ -5723,7 +5794,9 @@ function createTask(input, db) {
|
|
|
5723
5794
|
input.recurrence_parent_id || null,
|
|
5724
5795
|
input.spawns_template_id || null,
|
|
5725
5796
|
input.reason || null,
|
|
5726
|
-
input.spawned_from_session || null
|
|
5797
|
+
input.spawned_from_session || null,
|
|
5798
|
+
assignedBy || null,
|
|
5799
|
+
assignedFromProject || null
|
|
5727
5800
|
]);
|
|
5728
5801
|
if (tags.length > 0) {
|
|
5729
5802
|
insertTaskTags(id, tags, d);
|
|
@@ -7644,14 +7717,14 @@ function formatTaskDetail(task, maxDescriptionChars) {
|
|
|
7644
7717
|
`);
|
|
7645
7718
|
}
|
|
7646
7719
|
if (shouldRegisterTool("create_task")) {
|
|
7647
|
-
server.tool("create_task", "Create a new task", {
|
|
7720
|
+
server.tool("create_task", "Create a new task. Requires agent_id \u2014 agent must be registered via register_agent first. The assigning agent's active project is auto-detected as assigned_from_project.", {
|
|
7648
7721
|
title: exports_external.string(),
|
|
7649
7722
|
description: exports_external.string().optional(),
|
|
7650
7723
|
project_id: exports_external.string().optional(),
|
|
7651
7724
|
parent_id: exports_external.string().optional(),
|
|
7652
7725
|
priority: exports_external.enum(["low", "medium", "high", "critical"]).optional(),
|
|
7653
7726
|
status: exports_external.enum(["pending", "in_progress", "completed", "failed", "cancelled"]).optional(),
|
|
7654
|
-
agent_id: exports_external.string().
|
|
7727
|
+
agent_id: exports_external.string().describe("Required. Your registered agent ID or name. Use register_agent first if you haven't."),
|
|
7655
7728
|
assigned_to: exports_external.string().optional(),
|
|
7656
7729
|
session_id: exports_external.string().optional(),
|
|
7657
7730
|
working_dir: exports_external.string().optional(),
|
|
@@ -7664,18 +7737,28 @@ if (shouldRegisterTool("create_task")) {
|
|
|
7664
7737
|
recurrence_rule: exports_external.string().optional(),
|
|
7665
7738
|
spawns_template_id: exports_external.string().optional().describe("Template ID to auto-create as next task when this task is completed (pipeline/handoff chains)"),
|
|
7666
7739
|
reason: exports_external.string().optional().describe("Why this task exists \u2014 context for agents picking it up"),
|
|
7667
|
-
spawned_from_session: exports_external.string().optional().describe("Session ID that created this task (for tracing task lineage)")
|
|
7740
|
+
spawned_from_session: exports_external.string().optional().describe("Session ID that created this task (for tracing task lineage)"),
|
|
7741
|
+
assigned_from_project: exports_external.string().optional().describe("Override: project ID the assigning agent is working from. Auto-detected from agent focus if omitted.")
|
|
7668
7742
|
}, async (params) => {
|
|
7669
7743
|
try {
|
|
7744
|
+
if (!params.agent_id) {
|
|
7745
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: "AGENT_REQUIRED", message: "agent_id is required to create tasks. Register your agent first using register_agent." }) }], isError: true };
|
|
7746
|
+
}
|
|
7670
7747
|
const resolved = { ...params };
|
|
7671
|
-
if (resolved
|
|
7672
|
-
resolved
|
|
7673
|
-
if (resolved
|
|
7674
|
-
resolved
|
|
7675
|
-
if (resolved
|
|
7676
|
-
resolved
|
|
7677
|
-
if (resolved
|
|
7678
|
-
resolved
|
|
7748
|
+
if (resolved["project_id"])
|
|
7749
|
+
resolved["project_id"] = resolveId(resolved["project_id"], "projects");
|
|
7750
|
+
if (resolved["parent_id"])
|
|
7751
|
+
resolved["parent_id"] = resolveId(resolved["parent_id"]);
|
|
7752
|
+
if (resolved["plan_id"])
|
|
7753
|
+
resolved["plan_id"] = resolveId(resolved["plan_id"], "plans");
|
|
7754
|
+
if (resolved["task_list_id"])
|
|
7755
|
+
resolved["task_list_id"] = resolveId(resolved["task_list_id"], "task_lists");
|
|
7756
|
+
if (!resolved["assigned_from_project"]) {
|
|
7757
|
+
const focus = getAgentFocus(params.agent_id);
|
|
7758
|
+
if (focus?.project_id) {
|
|
7759
|
+
resolved["assigned_from_project"] = focus.project_id;
|
|
7760
|
+
}
|
|
7761
|
+
}
|
|
7679
7762
|
const task = createTask(resolved);
|
|
7680
7763
|
return { content: [{ type: "text", text: `created: ${formatTask(task)}` }] };
|
|
7681
7764
|
} catch (e) {
|
|
@@ -8468,17 +8551,21 @@ if (shouldRegisterTool("unfocus")) {
|
|
|
8468
8551
|
});
|
|
8469
8552
|
}
|
|
8470
8553
|
if (shouldRegisterTool("register_agent")) {
|
|
8471
|
-
server.tool("register_agent", "Register an agent.
|
|
8472
|
-
name: exports_external.string(),
|
|
8554
|
+
server.tool("register_agent", "Register an agent. Name must be from the project's configured pool. Returns a conflict error with available name suggestions if the name is taken or not allowed.", {
|
|
8555
|
+
name: exports_external.string().describe("Agent name \u2014 must be from the project's allowed pool (Roman names by default). Use suggest_agent_name first if unsure."),
|
|
8473
8556
|
description: exports_external.string().optional(),
|
|
8474
8557
|
session_id: exports_external.string().optional().describe("Unique ID for this coding session (e.g. process PID + timestamp, or env var). Used to detect name collisions across sessions. Store it and pass on every register_agent call."),
|
|
8475
|
-
working_dir: exports_external.string().optional().describe("Working directory of this session \u2014
|
|
8558
|
+
working_dir: exports_external.string().optional().describe("Working directory of this session \u2014 used to look up the project's agent pool and identify who holds the name in a conflict")
|
|
8476
8559
|
}, async ({ name, description, session_id, working_dir }) => {
|
|
8477
8560
|
try {
|
|
8478
|
-
const
|
|
8561
|
+
const pool = getAgentPoolForProject(working_dir);
|
|
8562
|
+
const result = registerAgent({ name, description, session_id, working_dir, pool });
|
|
8479
8563
|
if (isAgentConflict(result)) {
|
|
8564
|
+
const suggestLine = result.suggestions && result.suggestions.length > 0 ? `
|
|
8565
|
+
Available names: ${result.suggestions.join(", ")}` : "";
|
|
8566
|
+
const hint = result.pool_violation ? `POOL_VIOLATION: ${result.message}${suggestLine}` : `CONFLICT: ${result.message}${suggestLine}`;
|
|
8480
8567
|
return {
|
|
8481
|
-
content: [{ type: "text", text:
|
|
8568
|
+
content: [{ type: "text", text: hint }],
|
|
8482
8569
|
isError: true
|
|
8483
8570
|
};
|
|
8484
8571
|
}
|
|
@@ -8491,6 +8578,7 @@ ID: ${agent.id}
|
|
|
8491
8578
|
Name: ${agent.name}${agent.description ? `
|
|
8492
8579
|
Description: ${agent.description}` : ""}
|
|
8493
8580
|
Session: ${agent.session_id ?? "unbound"}
|
|
8581
|
+
Pool: [${pool.join(", ")}]
|
|
8494
8582
|
Created: ${agent.created_at}
|
|
8495
8583
|
Last seen: ${agent.last_seen_at}`
|
|
8496
8584
|
}]
|
|
@@ -8500,6 +8588,30 @@ Last seen: ${agent.last_seen_at}`
|
|
|
8500
8588
|
}
|
|
8501
8589
|
});
|
|
8502
8590
|
}
|
|
8591
|
+
if (shouldRegisterTool("suggest_agent_name")) {
|
|
8592
|
+
server.tool("suggest_agent_name", "Get available agent names for a project. Call this before register_agent to avoid conflicts.", {
|
|
8593
|
+
working_dir: exports_external.string().optional().describe("Your working directory \u2014 used to look up the project's allowed name pool")
|
|
8594
|
+
}, async ({ working_dir }) => {
|
|
8595
|
+
try {
|
|
8596
|
+
const pool = getAgentPoolForProject(working_dir);
|
|
8597
|
+
const available = getAvailableNamesFromPool(pool, getDatabase());
|
|
8598
|
+
const cutoff = new Date(Date.now() - 30 * 60 * 1000).toISOString();
|
|
8599
|
+
const active = listAgents().filter((a) => a.last_seen_at > cutoff && pool.map((n) => n.toLowerCase()).includes(a.name));
|
|
8600
|
+
const lines = [
|
|
8601
|
+
`Project pool: ${pool.join(", ")}`,
|
|
8602
|
+
`Available now (${available.length}): ${available.length > 0 ? available.join(", ") : "none \u2014 all names in use"}`,
|
|
8603
|
+
active.length > 0 ? `Active agents: ${active.map((a) => `${a.name} (seen ${Math.round((Date.now() - new Date(a.last_seen_at).getTime()) / 60000)}m ago)`).join(", ")}` : "Active agents: none",
|
|
8604
|
+
available.length > 0 ? `
|
|
8605
|
+
Suggested: ${available[0]}` : `
|
|
8606
|
+
No names available yet. Wait for an active agent to go stale (30min timeout).`
|
|
8607
|
+
];
|
|
8608
|
+
return { content: [{ type: "text", text: lines.join(`
|
|
8609
|
+
`) }] };
|
|
8610
|
+
} catch (e) {
|
|
8611
|
+
return { content: [{ type: "text", text: formatError(e) }], isError: true };
|
|
8612
|
+
}
|
|
8613
|
+
});
|
|
8614
|
+
}
|
|
8503
8615
|
if (shouldRegisterTool("list_agents")) {
|
|
8504
8616
|
server.tool("list_agents", "List all registered agents", {}, async () => {
|
|
8505
8617
|
try {
|
|
@@ -9692,6 +9804,7 @@ if (shouldRegisterTool("search_tools")) {
|
|
|
9692
9804
|
"update_plan",
|
|
9693
9805
|
"delete_plan",
|
|
9694
9806
|
"register_agent",
|
|
9807
|
+
"suggest_agent_name",
|
|
9695
9808
|
"list_agents",
|
|
9696
9809
|
"get_agent",
|
|
9697
9810
|
"rename_agent",
|
|
@@ -9833,9 +9946,12 @@ if (shouldRegisterTool("describe_tools")) {
|
|
|
9833
9946
|
delete_plan: `Delete a plan. Tasks in the plan are orphaned, not deleted.
|
|
9834
9947
|
Params: id(string, req)
|
|
9835
9948
|
Example: {id: 'a1b2c3d4'}`,
|
|
9836
|
-
|
|
9837
|
-
Params:
|
|
9838
|
-
Example: {
|
|
9949
|
+
suggest_agent_name: `Get available agent names for your project before registering. Shows the pool, which names are active, and the best suggestion.
|
|
9950
|
+
Params: working_dir(string \u2014 your working directory, used to look up project pool)
|
|
9951
|
+
Example: {working_dir: '/workspace/platform'}`,
|
|
9952
|
+
register_agent: `Register an agent. Name must be from the project's pool (call suggest_agent_name first). Returns CONFLICT or POOL_VIOLATION with suggestions if name is taken or not allowed.
|
|
9953
|
+
Params: name(string, req), description(string), session_id(string \u2014 unique per session, e.g. PID+timestamp), working_dir(string, req \u2014 used to determine project pool)
|
|
9954
|
+
Example: {name: 'cassius', session_id: 'abc123-1741952000', working_dir: '/workspace/platform'}`,
|
|
9839
9955
|
list_agents: "List all registered agents with IDs, names, and last seen timestamps. No params.",
|
|
9840
9956
|
get_agent: `Get agent details by ID or name. Provide one of id or name.
|
|
9841
9957
|
Params: id(string), name(string)
|
package/dist/server/index.js
CHANGED
|
@@ -320,6 +320,8 @@ function ensureSchema(db) {
|
|
|
320
320
|
ensureColumn("tasks", "confidence", "REAL");
|
|
321
321
|
ensureColumn("tasks", "reason", "TEXT");
|
|
322
322
|
ensureColumn("tasks", "spawned_from_session", "TEXT");
|
|
323
|
+
ensureColumn("tasks", "assigned_by", "TEXT");
|
|
324
|
+
ensureColumn("tasks", "assigned_from_project", "TEXT");
|
|
323
325
|
ensureColumn("agents", "role", "TEXT DEFAULT 'agent'");
|
|
324
326
|
ensureColumn("agents", "permissions", `TEXT DEFAULT '["*"]'`);
|
|
325
327
|
ensureColumn("agents", "reports_to", "TEXT");
|
|
@@ -351,6 +353,7 @@ function ensureSchema(db) {
|
|
|
351
353
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_task_checklists_task ON task_checklists(task_id)");
|
|
352
354
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_project ON project_sources(project_id)");
|
|
353
355
|
ensureIndex("CREATE INDEX IF NOT EXISTS idx_project_sources_type ON project_sources(type)");
|
|
356
|
+
ensureIndex("CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by)");
|
|
354
357
|
}
|
|
355
358
|
function backfillTaskTags(db) {
|
|
356
359
|
try {
|
|
@@ -785,6 +788,12 @@ var init_database = __esm(() => {
|
|
|
785
788
|
CREATE INDEX IF NOT EXISTS idx_task_files_path ON task_files(path);
|
|
786
789
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_task_files_task_path ON task_files(task_id, path);
|
|
787
790
|
INSERT OR IGNORE INTO _migrations (id) VALUES (25);
|
|
791
|
+
`,
|
|
792
|
+
`
|
|
793
|
+
ALTER TABLE tasks ADD COLUMN assigned_by TEXT;
|
|
794
|
+
ALTER TABLE tasks ADD COLUMN assigned_from_project TEXT;
|
|
795
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assigned_by ON tasks(assigned_by);
|
|
796
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (26);
|
|
788
797
|
`
|
|
789
798
|
];
|
|
790
799
|
});
|
|
@@ -1370,8 +1379,10 @@ function createTask(input, db) {
|
|
|
1370
1379
|
const tags = input.tags || [];
|
|
1371
1380
|
const shortId = input.project_id ? nextTaskShortId(input.project_id, d) : null;
|
|
1372
1381
|
const title = shortId ? `${shortId}: ${input.title}` : input.title;
|
|
1373
|
-
|
|
1374
|
-
|
|
1382
|
+
const assignedBy = input.assigned_by || input.agent_id;
|
|
1383
|
+
const assignedFromProject = input.assigned_from_project || null;
|
|
1384
|
+
d.run(`INSERT INTO tasks (id, short_id, project_id, parent_id, plan_id, task_list_id, title, description, status, priority, agent_id, assigned_to, session_id, working_dir, tags, metadata, version, created_at, updated_at, due_at, estimated_minutes, requires_approval, approved_by, approved_at, recurrence_rule, recurrence_parent_id, spawns_template_id, reason, spawned_from_session, assigned_by, assigned_from_project)
|
|
1385
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
1375
1386
|
id,
|
|
1376
1387
|
shortId,
|
|
1377
1388
|
input.project_id || null,
|
|
@@ -1399,7 +1410,9 @@ function createTask(input, db) {
|
|
|
1399
1410
|
input.recurrence_parent_id || null,
|
|
1400
1411
|
input.spawns_template_id || null,
|
|
1401
1412
|
input.reason || null,
|
|
1402
|
-
input.spawned_from_session || null
|
|
1413
|
+
input.spawned_from_session || null,
|
|
1414
|
+
assignedBy || null,
|
|
1415
|
+
assignedFromProject || null
|
|
1403
1416
|
]);
|
|
1404
1417
|
if (tags.length > 0) {
|
|
1405
1418
|
insertTaskTags(id, tags, d);
|
|
@@ -2400,10 +2413,16 @@ __export(exports_agents, {
|
|
|
2400
2413
|
isAgentConflict: () => isAgentConflict,
|
|
2401
2414
|
getOrgChart: () => getOrgChart,
|
|
2402
2415
|
getDirectReports: () => getDirectReports,
|
|
2416
|
+
getAvailableNamesFromPool: () => getAvailableNamesFromPool,
|
|
2403
2417
|
getAgentByName: () => getAgentByName,
|
|
2404
2418
|
getAgent: () => getAgent,
|
|
2405
2419
|
deleteAgent: () => deleteAgent
|
|
2406
2420
|
});
|
|
2421
|
+
function getAvailableNamesFromPool(pool, db) {
|
|
2422
|
+
const cutoff = new Date(Date.now() - AGENT_ACTIVE_WINDOW_MS).toISOString();
|
|
2423
|
+
const activeNames = new Set(db.query("SELECT name FROM agents WHERE last_seen_at > ?").all(cutoff).map((r) => r.name.toLowerCase()));
|
|
2424
|
+
return pool.filter((name) => !activeNames.has(name.toLowerCase()));
|
|
2425
|
+
}
|
|
2407
2426
|
function shortUuid() {
|
|
2408
2427
|
return crypto.randomUUID().slice(0, 8);
|
|
2409
2428
|
}
|
|
@@ -2417,6 +2436,24 @@ function rowToAgent(row) {
|
|
|
2417
2436
|
function registerAgent(input, db) {
|
|
2418
2437
|
const d = db || getDatabase();
|
|
2419
2438
|
const normalizedName = input.name.trim().toLowerCase();
|
|
2439
|
+
if (input.pool && input.pool.length > 0) {
|
|
2440
|
+
const poolLower = input.pool.map((n) => n.toLowerCase());
|
|
2441
|
+
if (!poolLower.includes(normalizedName)) {
|
|
2442
|
+
const available = getAvailableNamesFromPool(input.pool, d);
|
|
2443
|
+
const suggestion = available.length > 0 ? available[0] : null;
|
|
2444
|
+
return {
|
|
2445
|
+
conflict: true,
|
|
2446
|
+
pool_violation: true,
|
|
2447
|
+
existing_id: "",
|
|
2448
|
+
existing_name: normalizedName,
|
|
2449
|
+
last_seen_at: "",
|
|
2450
|
+
session_hint: null,
|
|
2451
|
+
working_dir: input.working_dir || null,
|
|
2452
|
+
suggestions: available.slice(0, 5),
|
|
2453
|
+
message: `"${normalizedName}" is not in this project's agent pool [${input.pool.join(", ")}]. ${available.length > 0 ? `Try: ${available.slice(0, 3).join(", ")}` : "No names are currently available \u2014 wait for an active agent to go stale."}${suggestion ? ` Suggested: ${suggestion}` : ""}`
|
|
2454
|
+
};
|
|
2455
|
+
}
|
|
2456
|
+
}
|
|
2420
2457
|
const existing = getAgentByName(normalizedName, d);
|
|
2421
2458
|
if (existing) {
|
|
2422
2459
|
const lastSeenMs = new Date(existing.last_seen_at).getTime();
|
|
@@ -2425,6 +2462,7 @@ function registerAgent(input, db) {
|
|
|
2425
2462
|
const differentSession = input.session_id && existing.session_id && input.session_id !== existing.session_id;
|
|
2426
2463
|
if (isActive && differentSession) {
|
|
2427
2464
|
const minutesAgo = Math.round((Date.now() - lastSeenMs) / 60000);
|
|
2465
|
+
const suggestions = input.pool ? getAvailableNamesFromPool(input.pool, d) : [];
|
|
2428
2466
|
return {
|
|
2429
2467
|
conflict: true,
|
|
2430
2468
|
existing_id: existing.id,
|
|
@@ -2432,7 +2470,8 @@ function registerAgent(input, db) {
|
|
|
2432
2470
|
last_seen_at: existing.last_seen_at,
|
|
2433
2471
|
session_hint: existing.session_id ? existing.session_id.slice(0, 8) : null,
|
|
2434
2472
|
working_dir: existing.working_dir,
|
|
2435
|
-
|
|
2473
|
+
suggestions: suggestions.slice(0, 5),
|
|
2474
|
+
message: `Agent "${normalizedName}" is already active (last seen ${minutesAgo}m ago, session ${existing.session_id?.slice(0, 8)}\u2026, dir: ${existing.working_dir ?? "unknown"}). Are you that agent? If so, pass session_id="${existing.session_id}" to reclaim it. Otherwise choose a different name.${suggestions.length > 0 ? ` Available: ${suggestions.slice(0, 3).join(", ")}` : ""}`
|
|
2436
2475
|
};
|
|
2437
2476
|
}
|
|
2438
2477
|
const updates = ["last_seen_at = ?"];
|
package/dist/types/index.d.ts
CHANGED
|
@@ -130,6 +130,7 @@ export interface RegisterAgentInput {
|
|
|
130
130
|
role?: string;
|
|
131
131
|
title?: string;
|
|
132
132
|
level?: string;
|
|
133
|
+
pool?: string[];
|
|
133
134
|
permissions?: string[];
|
|
134
135
|
reports_to?: string;
|
|
135
136
|
org_id?: string;
|
|
@@ -146,6 +147,8 @@ export interface AgentConflictError {
|
|
|
146
147
|
session_hint: string | null;
|
|
147
148
|
working_dir: string | null;
|
|
148
149
|
message: string;
|
|
150
|
+
suggestions?: string[];
|
|
151
|
+
pool_violation?: true;
|
|
149
152
|
}
|
|
150
153
|
export interface TaskList {
|
|
151
154
|
id: string;
|
|
@@ -213,6 +216,8 @@ export interface Task {
|
|
|
213
216
|
confidence: number | null;
|
|
214
217
|
reason: string | null;
|
|
215
218
|
spawned_from_session: string | null;
|
|
219
|
+
assigned_by: string | null;
|
|
220
|
+
assigned_from_project: string | null;
|
|
216
221
|
}
|
|
217
222
|
export interface ChecklistItem {
|
|
218
223
|
id: string;
|
|
@@ -268,6 +273,8 @@ export interface CreateTaskInput {
|
|
|
268
273
|
spawns_template_id?: string;
|
|
269
274
|
reason?: string;
|
|
270
275
|
spawned_from_session?: string;
|
|
276
|
+
assigned_by?: string;
|
|
277
|
+
assigned_from_project?: string;
|
|
271
278
|
}
|
|
272
279
|
export interface UpdateTaskInput {
|
|
273
280
|
title?: string;
|
|
@@ -375,6 +382,8 @@ export interface TaskRow {
|
|
|
375
382
|
confidence: number | null;
|
|
376
383
|
reason: string | null;
|
|
377
384
|
spawned_from_session: string | null;
|
|
385
|
+
assigned_by: string | null;
|
|
386
|
+
assigned_from_project: string | null;
|
|
378
387
|
}
|
|
379
388
|
export interface SessionRow {
|
|
380
389
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|