@hasna/todos 0.11.21 → 0.11.23
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 +228 -207
- package/dist/db/pg-migrations.d.ts.map +1 -1
- package/dist/db/projects.d.ts.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/tasks.d.ts.map +1 -1
- package/dist/index.js +180 -166
- package/dist/mcp/index.js +194 -191
- package/dist/server/index.js +114 -107
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -3165,6 +3165,12 @@ var init_schema = __esm(() => {
|
|
|
3165
3165
|
ALTER TABLE tasks ADD COLUMN archived_at TEXT;
|
|
3166
3166
|
CREATE INDEX IF NOT EXISTS idx_tasks_archived ON tasks(archived_at) WHERE archived_at IS NOT NULL;
|
|
3167
3167
|
INSERT OR IGNORE INTO _migrations (id) VALUES (43);
|
|
3168
|
+
`,
|
|
3169
|
+
`
|
|
3170
|
+
DROP INDEX IF EXISTS idx_tasks_short_id;
|
|
3171
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_tasks_short_id ON tasks(short_id, machine_id) WHERE short_id IS NOT NULL AND machine_id IS NOT NULL;
|
|
3172
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_short_id_lookup ON tasks(short_id) WHERE short_id IS NOT NULL;
|
|
3173
|
+
INSERT OR IGNORE INTO _migrations (id) VALUES (44);
|
|
3168
3174
|
`
|
|
3169
3175
|
];
|
|
3170
3176
|
});
|
|
@@ -3544,6 +3550,161 @@ var init_types = __esm(() => {
|
|
|
3544
3550
|
};
|
|
3545
3551
|
});
|
|
3546
3552
|
|
|
3553
|
+
// src/lib/sync-utils.ts
|
|
3554
|
+
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, readdirSync, statSync, writeFileSync } from "fs";
|
|
3555
|
+
import { join as join2 } from "path";
|
|
3556
|
+
function ensureDir2(dir) {
|
|
3557
|
+
if (!existsSync2(dir))
|
|
3558
|
+
mkdirSync2(dir, { recursive: true });
|
|
3559
|
+
}
|
|
3560
|
+
function listJsonFiles(dir) {
|
|
3561
|
+
if (!existsSync2(dir))
|
|
3562
|
+
return [];
|
|
3563
|
+
return readdirSync(dir).filter((f) => f.endsWith(".json"));
|
|
3564
|
+
}
|
|
3565
|
+
function readJsonFile(path) {
|
|
3566
|
+
try {
|
|
3567
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
3568
|
+
} catch {
|
|
3569
|
+
return null;
|
|
3570
|
+
}
|
|
3571
|
+
}
|
|
3572
|
+
function writeJsonFile(path, data) {
|
|
3573
|
+
writeFileSync(path, JSON.stringify(data, null, 2) + `
|
|
3574
|
+
`);
|
|
3575
|
+
}
|
|
3576
|
+
function readHighWaterMark(dir) {
|
|
3577
|
+
const path = join2(dir, ".highwatermark");
|
|
3578
|
+
if (!existsSync2(path))
|
|
3579
|
+
return 1;
|
|
3580
|
+
const val = parseInt(readFileSync(path, "utf-8").trim(), 10);
|
|
3581
|
+
return isNaN(val) ? 1 : val;
|
|
3582
|
+
}
|
|
3583
|
+
function writeHighWaterMark(dir, value) {
|
|
3584
|
+
writeFileSync(join2(dir, ".highwatermark"), String(value));
|
|
3585
|
+
}
|
|
3586
|
+
function getFileMtimeMs(path) {
|
|
3587
|
+
try {
|
|
3588
|
+
return statSync(path).mtimeMs;
|
|
3589
|
+
} catch {
|
|
3590
|
+
return null;
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3593
|
+
function parseTimestamp(value) {
|
|
3594
|
+
if (typeof value !== "string")
|
|
3595
|
+
return null;
|
|
3596
|
+
const parsed = Date.parse(value);
|
|
3597
|
+
return Number.isNaN(parsed) ? null : parsed;
|
|
3598
|
+
}
|
|
3599
|
+
function appendSyncConflict(metadata, conflict, limit = 5) {
|
|
3600
|
+
const current = Array.isArray(metadata["sync_conflicts"]) ? metadata["sync_conflicts"] : [];
|
|
3601
|
+
const next = [conflict, ...current].slice(0, limit);
|
|
3602
|
+
return { ...metadata, sync_conflicts: next };
|
|
3603
|
+
}
|
|
3604
|
+
var HOME;
|
|
3605
|
+
var init_sync_utils = __esm(() => {
|
|
3606
|
+
HOME = process.env["HOME"] || process.env["USERPROFILE"] || "~";
|
|
3607
|
+
});
|
|
3608
|
+
|
|
3609
|
+
// src/lib/config.ts
|
|
3610
|
+
var exports_config = {};
|
|
3611
|
+
__export(exports_config, {
|
|
3612
|
+
loadConfig: () => loadConfig,
|
|
3613
|
+
getTaskPrefixConfig: () => getTaskPrefixConfig,
|
|
3614
|
+
getSyncAgentsFromConfig: () => getSyncAgentsFromConfig,
|
|
3615
|
+
getCompletionGuardConfig: () => getCompletionGuardConfig,
|
|
3616
|
+
getAgentTasksDir: () => getAgentTasksDir,
|
|
3617
|
+
getAgentTaskListId: () => getAgentTaskListId,
|
|
3618
|
+
getAgentPoolForProject: () => getAgentPoolForProject
|
|
3619
|
+
});
|
|
3620
|
+
import { existsSync as existsSync3 } from "fs";
|
|
3621
|
+
import { join as join3 } from "path";
|
|
3622
|
+
function getTodosGlobalDir() {
|
|
3623
|
+
const home = process.env["HOME"] || HOME;
|
|
3624
|
+
const newDir = join3(home, ".hasna", "todos");
|
|
3625
|
+
const legacyDir = join3(home, ".todos");
|
|
3626
|
+
if (!existsSync3(newDir) && existsSync3(legacyDir))
|
|
3627
|
+
return legacyDir;
|
|
3628
|
+
return newDir;
|
|
3629
|
+
}
|
|
3630
|
+
function getConfigPath() {
|
|
3631
|
+
return join3(getTodosGlobalDir(), "config.json");
|
|
3632
|
+
}
|
|
3633
|
+
function normalizeAgent(agent) {
|
|
3634
|
+
return agent.trim().toLowerCase();
|
|
3635
|
+
}
|
|
3636
|
+
function loadConfig() {
|
|
3637
|
+
if (cached)
|
|
3638
|
+
return cached;
|
|
3639
|
+
if (!existsSync3(getConfigPath())) {
|
|
3640
|
+
cached = {};
|
|
3641
|
+
return cached;
|
|
3642
|
+
}
|
|
3643
|
+
const config = readJsonFile(getConfigPath()) || {};
|
|
3644
|
+
if (typeof config.sync_agents === "string") {
|
|
3645
|
+
config.sync_agents = config.sync_agents.split(",").map((a) => a.trim()).filter(Boolean);
|
|
3646
|
+
}
|
|
3647
|
+
cached = config;
|
|
3648
|
+
return cached;
|
|
3649
|
+
}
|
|
3650
|
+
function getSyncAgentsFromConfig() {
|
|
3651
|
+
const config = loadConfig();
|
|
3652
|
+
const agents = config.sync_agents;
|
|
3653
|
+
if (Array.isArray(agents) && agents.length > 0)
|
|
3654
|
+
return agents.map(normalizeAgent);
|
|
3655
|
+
return null;
|
|
3656
|
+
}
|
|
3657
|
+
function getAgentTaskListId(agent) {
|
|
3658
|
+
const config = loadConfig();
|
|
3659
|
+
const key = normalizeAgent(agent);
|
|
3660
|
+
return config.agents?.[key]?.task_list_id || config.task_list_id || null;
|
|
3661
|
+
}
|
|
3662
|
+
function getAgentTasksDir(agent) {
|
|
3663
|
+
const config = loadConfig();
|
|
3664
|
+
const key = normalizeAgent(agent);
|
|
3665
|
+
return config.agents?.[key]?.tasks_dir || config.agent_tasks_dir || null;
|
|
3666
|
+
}
|
|
3667
|
+
function getTaskPrefixConfig() {
|
|
3668
|
+
const config = loadConfig();
|
|
3669
|
+
return config.task_prefix || null;
|
|
3670
|
+
}
|
|
3671
|
+
function getAgentPoolForProject(workingDir) {
|
|
3672
|
+
const config = loadConfig();
|
|
3673
|
+
if (workingDir && config.project_pools) {
|
|
3674
|
+
let bestKey = null;
|
|
3675
|
+
let bestLen = 0;
|
|
3676
|
+
for (const key of Object.keys(config.project_pools)) {
|
|
3677
|
+
if (workingDir.startsWith(key) && key.length > bestLen) {
|
|
3678
|
+
bestKey = key;
|
|
3679
|
+
bestLen = key.length;
|
|
3680
|
+
}
|
|
3681
|
+
}
|
|
3682
|
+
if (bestKey && config.project_pools[bestKey]) {
|
|
3683
|
+
return config.project_pools[bestKey];
|
|
3684
|
+
}
|
|
3685
|
+
}
|
|
3686
|
+
return config.agent_pool || null;
|
|
3687
|
+
}
|
|
3688
|
+
function getCompletionGuardConfig(projectPath) {
|
|
3689
|
+
const config = loadConfig();
|
|
3690
|
+
const global2 = { ...GUARD_DEFAULTS, ...config.completion_guard };
|
|
3691
|
+
if (projectPath && config.project_overrides?.[projectPath]?.completion_guard) {
|
|
3692
|
+
return { ...global2, ...config.project_overrides[projectPath].completion_guard };
|
|
3693
|
+
}
|
|
3694
|
+
return global2;
|
|
3695
|
+
}
|
|
3696
|
+
var cached = null, GUARD_DEFAULTS;
|
|
3697
|
+
var init_config = __esm(() => {
|
|
3698
|
+
init_sync_utils();
|
|
3699
|
+
GUARD_DEFAULTS = {
|
|
3700
|
+
enabled: false,
|
|
3701
|
+
min_work_seconds: 30,
|
|
3702
|
+
max_completions_per_window: 5,
|
|
3703
|
+
window_minutes: 10,
|
|
3704
|
+
cooldown_seconds: 60
|
|
3705
|
+
};
|
|
3706
|
+
});
|
|
3707
|
+
|
|
3547
3708
|
// src/db/projects.ts
|
|
3548
3709
|
var exports_projects = {};
|
|
3549
3710
|
__export(exports_projects, {
|
|
@@ -3725,13 +3886,6 @@ function nextTaskShortId(projectId, db) {
|
|
|
3725
3886
|
const project = getProject(projectId, d);
|
|
3726
3887
|
if (!project || !project.task_prefix)
|
|
3727
3888
|
return null;
|
|
3728
|
-
const prefix = project.task_prefix;
|
|
3729
|
-
const prefixLen = prefix.length + 2;
|
|
3730
|
-
const maxRow = d.query(`SELECT MAX(CAST(SUBSTR(short_id, ?) AS INTEGER)) as max_counter FROM tasks WHERE short_id LIKE ?`).get(prefixLen, `${prefix}-%`);
|
|
3731
|
-
const syncedMax = maxRow?.max_counter ?? 0;
|
|
3732
|
-
if (syncedMax >= (project.task_counter ?? 0)) {
|
|
3733
|
-
d.run("UPDATE projects SET task_counter = ?, updated_at = ? WHERE id = ?", [syncedMax, now(), projectId]);
|
|
3734
|
-
}
|
|
3735
3889
|
d.run("UPDATE projects SET task_counter = task_counter + 1, updated_at = ? WHERE id = ?", [now(), projectId]);
|
|
3736
3890
|
const updated = getProject(projectId, d);
|
|
3737
3891
|
const padded = String(updated.task_counter).padStart(5, "0");
|
|
@@ -3795,161 +3949,6 @@ var init_projects = __esm(() => {
|
|
|
3795
3949
|
init_machines();
|
|
3796
3950
|
});
|
|
3797
3951
|
|
|
3798
|
-
// src/lib/sync-utils.ts
|
|
3799
|
-
import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync, readdirSync, statSync, writeFileSync } from "fs";
|
|
3800
|
-
import { join as join2 } from "path";
|
|
3801
|
-
function ensureDir2(dir) {
|
|
3802
|
-
if (!existsSync2(dir))
|
|
3803
|
-
mkdirSync2(dir, { recursive: true });
|
|
3804
|
-
}
|
|
3805
|
-
function listJsonFiles(dir) {
|
|
3806
|
-
if (!existsSync2(dir))
|
|
3807
|
-
return [];
|
|
3808
|
-
return readdirSync(dir).filter((f) => f.endsWith(".json"));
|
|
3809
|
-
}
|
|
3810
|
-
function readJsonFile(path) {
|
|
3811
|
-
try {
|
|
3812
|
-
return JSON.parse(readFileSync(path, "utf-8"));
|
|
3813
|
-
} catch {
|
|
3814
|
-
return null;
|
|
3815
|
-
}
|
|
3816
|
-
}
|
|
3817
|
-
function writeJsonFile(path, data) {
|
|
3818
|
-
writeFileSync(path, JSON.stringify(data, null, 2) + `
|
|
3819
|
-
`);
|
|
3820
|
-
}
|
|
3821
|
-
function readHighWaterMark(dir) {
|
|
3822
|
-
const path = join2(dir, ".highwatermark");
|
|
3823
|
-
if (!existsSync2(path))
|
|
3824
|
-
return 1;
|
|
3825
|
-
const val = parseInt(readFileSync(path, "utf-8").trim(), 10);
|
|
3826
|
-
return isNaN(val) ? 1 : val;
|
|
3827
|
-
}
|
|
3828
|
-
function writeHighWaterMark(dir, value) {
|
|
3829
|
-
writeFileSync(join2(dir, ".highwatermark"), String(value));
|
|
3830
|
-
}
|
|
3831
|
-
function getFileMtimeMs(path) {
|
|
3832
|
-
try {
|
|
3833
|
-
return statSync(path).mtimeMs;
|
|
3834
|
-
} catch {
|
|
3835
|
-
return null;
|
|
3836
|
-
}
|
|
3837
|
-
}
|
|
3838
|
-
function parseTimestamp(value) {
|
|
3839
|
-
if (typeof value !== "string")
|
|
3840
|
-
return null;
|
|
3841
|
-
const parsed = Date.parse(value);
|
|
3842
|
-
return Number.isNaN(parsed) ? null : parsed;
|
|
3843
|
-
}
|
|
3844
|
-
function appendSyncConflict(metadata, conflict, limit = 5) {
|
|
3845
|
-
const current = Array.isArray(metadata["sync_conflicts"]) ? metadata["sync_conflicts"] : [];
|
|
3846
|
-
const next = [conflict, ...current].slice(0, limit);
|
|
3847
|
-
return { ...metadata, sync_conflicts: next };
|
|
3848
|
-
}
|
|
3849
|
-
var HOME;
|
|
3850
|
-
var init_sync_utils = __esm(() => {
|
|
3851
|
-
HOME = process.env["HOME"] || process.env["USERPROFILE"] || "~";
|
|
3852
|
-
});
|
|
3853
|
-
|
|
3854
|
-
// src/lib/config.ts
|
|
3855
|
-
var exports_config = {};
|
|
3856
|
-
__export(exports_config, {
|
|
3857
|
-
loadConfig: () => loadConfig,
|
|
3858
|
-
getTaskPrefixConfig: () => getTaskPrefixConfig,
|
|
3859
|
-
getSyncAgentsFromConfig: () => getSyncAgentsFromConfig,
|
|
3860
|
-
getCompletionGuardConfig: () => getCompletionGuardConfig,
|
|
3861
|
-
getAgentTasksDir: () => getAgentTasksDir,
|
|
3862
|
-
getAgentTaskListId: () => getAgentTaskListId,
|
|
3863
|
-
getAgentPoolForProject: () => getAgentPoolForProject
|
|
3864
|
-
});
|
|
3865
|
-
import { existsSync as existsSync3 } from "fs";
|
|
3866
|
-
import { join as join3 } from "path";
|
|
3867
|
-
function getTodosGlobalDir() {
|
|
3868
|
-
const home = process.env["HOME"] || HOME;
|
|
3869
|
-
const newDir = join3(home, ".hasna", "todos");
|
|
3870
|
-
const legacyDir = join3(home, ".todos");
|
|
3871
|
-
if (!existsSync3(newDir) && existsSync3(legacyDir))
|
|
3872
|
-
return legacyDir;
|
|
3873
|
-
return newDir;
|
|
3874
|
-
}
|
|
3875
|
-
function getConfigPath() {
|
|
3876
|
-
return join3(getTodosGlobalDir(), "config.json");
|
|
3877
|
-
}
|
|
3878
|
-
function normalizeAgent(agent) {
|
|
3879
|
-
return agent.trim().toLowerCase();
|
|
3880
|
-
}
|
|
3881
|
-
function loadConfig() {
|
|
3882
|
-
if (cached)
|
|
3883
|
-
return cached;
|
|
3884
|
-
if (!existsSync3(getConfigPath())) {
|
|
3885
|
-
cached = {};
|
|
3886
|
-
return cached;
|
|
3887
|
-
}
|
|
3888
|
-
const config = readJsonFile(getConfigPath()) || {};
|
|
3889
|
-
if (typeof config.sync_agents === "string") {
|
|
3890
|
-
config.sync_agents = config.sync_agents.split(",").map((a) => a.trim()).filter(Boolean);
|
|
3891
|
-
}
|
|
3892
|
-
cached = config;
|
|
3893
|
-
return cached;
|
|
3894
|
-
}
|
|
3895
|
-
function getSyncAgentsFromConfig() {
|
|
3896
|
-
const config = loadConfig();
|
|
3897
|
-
const agents = config.sync_agents;
|
|
3898
|
-
if (Array.isArray(agents) && agents.length > 0)
|
|
3899
|
-
return agents.map(normalizeAgent);
|
|
3900
|
-
return null;
|
|
3901
|
-
}
|
|
3902
|
-
function getAgentTaskListId(agent) {
|
|
3903
|
-
const config = loadConfig();
|
|
3904
|
-
const key = normalizeAgent(agent);
|
|
3905
|
-
return config.agents?.[key]?.task_list_id || config.task_list_id || null;
|
|
3906
|
-
}
|
|
3907
|
-
function getAgentTasksDir(agent) {
|
|
3908
|
-
const config = loadConfig();
|
|
3909
|
-
const key = normalizeAgent(agent);
|
|
3910
|
-
return config.agents?.[key]?.tasks_dir || config.agent_tasks_dir || null;
|
|
3911
|
-
}
|
|
3912
|
-
function getTaskPrefixConfig() {
|
|
3913
|
-
const config = loadConfig();
|
|
3914
|
-
return config.task_prefix || null;
|
|
3915
|
-
}
|
|
3916
|
-
function getAgentPoolForProject(workingDir) {
|
|
3917
|
-
const config = loadConfig();
|
|
3918
|
-
if (workingDir && config.project_pools) {
|
|
3919
|
-
let bestKey = null;
|
|
3920
|
-
let bestLen = 0;
|
|
3921
|
-
for (const key of Object.keys(config.project_pools)) {
|
|
3922
|
-
if (workingDir.startsWith(key) && key.length > bestLen) {
|
|
3923
|
-
bestKey = key;
|
|
3924
|
-
bestLen = key.length;
|
|
3925
|
-
}
|
|
3926
|
-
}
|
|
3927
|
-
if (bestKey && config.project_pools[bestKey]) {
|
|
3928
|
-
return config.project_pools[bestKey];
|
|
3929
|
-
}
|
|
3930
|
-
}
|
|
3931
|
-
return config.agent_pool || null;
|
|
3932
|
-
}
|
|
3933
|
-
function getCompletionGuardConfig(projectPath) {
|
|
3934
|
-
const config = loadConfig();
|
|
3935
|
-
const global2 = { ...GUARD_DEFAULTS, ...config.completion_guard };
|
|
3936
|
-
if (projectPath && config.project_overrides?.[projectPath]?.completion_guard) {
|
|
3937
|
-
return { ...global2, ...config.project_overrides[projectPath].completion_guard };
|
|
3938
|
-
}
|
|
3939
|
-
return global2;
|
|
3940
|
-
}
|
|
3941
|
-
var cached = null, GUARD_DEFAULTS;
|
|
3942
|
-
var init_config = __esm(() => {
|
|
3943
|
-
init_sync_utils();
|
|
3944
|
-
GUARD_DEFAULTS = {
|
|
3945
|
-
enabled: false,
|
|
3946
|
-
min_work_seconds: 30,
|
|
3947
|
-
max_completions_per_window: 5,
|
|
3948
|
-
window_minutes: 10,
|
|
3949
|
-
cooldown_seconds: 60
|
|
3950
|
-
};
|
|
3951
|
-
});
|
|
3952
|
-
|
|
3953
3952
|
// src/lib/completion-guard.ts
|
|
3954
3953
|
function checkCompletionGuard(task, agentId, db, configOverride) {
|
|
3955
3954
|
let config;
|
|
@@ -4842,47 +4841,56 @@ function replaceTaskTags(taskId, tags, db) {
|
|
|
4842
4841
|
}
|
|
4843
4842
|
function createTask(input, db) {
|
|
4844
4843
|
const d = db || getDatabase();
|
|
4845
|
-
const id = uuid();
|
|
4846
4844
|
const timestamp = now();
|
|
4847
4845
|
const tags = input.tags || [];
|
|
4848
|
-
const shortId = input.project_id ? nextTaskShortId(input.project_id, d) : null;
|
|
4849
|
-
const title = shortId ? `${shortId}: ${input.title}` : input.title;
|
|
4850
4846
|
const assignedBy = input.assigned_by || input.agent_id;
|
|
4851
4847
|
const assignedFromProject = input.assigned_from_project || null;
|
|
4852
|
-
|
|
4853
|
-
|
|
4854
|
-
|
|
4855
|
-
|
|
4856
|
-
|
|
4857
|
-
|
|
4858
|
-
|
|
4859
|
-
|
|
4860
|
-
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
|
|
4873
|
-
|
|
4874
|
-
|
|
4875
|
-
|
|
4876
|
-
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
|
|
4885
|
-
|
|
4848
|
+
let id = uuid();
|
|
4849
|
+
for (let attempt = 0;attempt < 3; attempt++) {
|
|
4850
|
+
try {
|
|
4851
|
+
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, task_type)
|
|
4852
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
4853
|
+
id,
|
|
4854
|
+
null,
|
|
4855
|
+
input.project_id || null,
|
|
4856
|
+
input.parent_id || null,
|
|
4857
|
+
input.plan_id || null,
|
|
4858
|
+
input.task_list_id || null,
|
|
4859
|
+
input.title,
|
|
4860
|
+
input.description || null,
|
|
4861
|
+
input.status || "pending",
|
|
4862
|
+
input.priority || "medium",
|
|
4863
|
+
input.agent_id || null,
|
|
4864
|
+
input.assigned_to || null,
|
|
4865
|
+
input.session_id || null,
|
|
4866
|
+
input.working_dir || null,
|
|
4867
|
+
JSON.stringify(tags),
|
|
4868
|
+
JSON.stringify(input.metadata || {}),
|
|
4869
|
+
timestamp,
|
|
4870
|
+
timestamp,
|
|
4871
|
+
input.due_at || null,
|
|
4872
|
+
input.estimated_minutes || null,
|
|
4873
|
+
input.requires_approval ? 1 : 0,
|
|
4874
|
+
null,
|
|
4875
|
+
null,
|
|
4876
|
+
input.recurrence_rule || null,
|
|
4877
|
+
input.recurrence_parent_id || null,
|
|
4878
|
+
input.spawns_template_id || null,
|
|
4879
|
+
input.reason || null,
|
|
4880
|
+
input.spawned_from_session || null,
|
|
4881
|
+
assignedBy || null,
|
|
4882
|
+
assignedFromProject || null,
|
|
4883
|
+
input.task_type || null
|
|
4884
|
+
]);
|
|
4885
|
+
break;
|
|
4886
|
+
} catch (e) {
|
|
4887
|
+
if (attempt < 2 && e?.message?.includes("UNIQUE constraint failed: tasks.id")) {
|
|
4888
|
+
id = uuid();
|
|
4889
|
+
continue;
|
|
4890
|
+
}
|
|
4891
|
+
throw e;
|
|
4892
|
+
}
|
|
4893
|
+
}
|
|
4886
4894
|
if (tags.length > 0) {
|
|
4887
4895
|
insertTaskTags(id, tags, d);
|
|
4888
4896
|
}
|
|
@@ -5968,7 +5976,6 @@ function getOverdueTasks(projectId, db) {
|
|
|
5968
5976
|
var init_tasks = __esm(() => {
|
|
5969
5977
|
init_types();
|
|
5970
5978
|
init_database();
|
|
5971
|
-
init_projects();
|
|
5972
5979
|
init_completion_guard();
|
|
5973
5980
|
init_audit();
|
|
5974
5981
|
init_recurrence();
|
|
@@ -25963,6 +25970,12 @@ var init_pg_migrations = __esm(() => {
|
|
|
25963
25970
|
CREATE INDEX IF NOT EXISTS idx_template_versions_template ON template_versions(template_id);
|
|
25964
25971
|
|
|
25965
25972
|
INSERT INTO _migrations (id) VALUES (39) ON CONFLICT DO NOTHING;
|
|
25973
|
+
`,
|
|
25974
|
+
`
|
|
25975
|
+
DROP INDEX IF EXISTS idx_tasks_short_id;
|
|
25976
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_tasks_short_id ON tasks(short_id, machine_id) WHERE short_id IS NOT NULL AND machine_id IS NOT NULL;
|
|
25977
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_short_id_lookup ON tasks(short_id) WHERE short_id IS NOT NULL;
|
|
25978
|
+
INSERT INTO _migrations (id) VALUES (40) ON CONFLICT DO NOTHING;
|
|
25966
25979
|
`
|
|
25967
25980
|
];
|
|
25968
25981
|
});
|
|
@@ -34458,8 +34471,11 @@ program2.command("focus [project]").description("Focus on a project (or clear fo
|
|
|
34458
34471
|
}
|
|
34459
34472
|
const db = getDatabase();
|
|
34460
34473
|
if (project) {
|
|
34461
|
-
const { getProjectByPath: getProjectByPath2
|
|
34462
|
-
const p = getProjectByPath2(
|
|
34474
|
+
const { getProjectByPath: getProjectByPath2 } = (init_projects(), __toCommonJS(exports_projects));
|
|
34475
|
+
const p = getProjectByPath2(project, db) || (() => {
|
|
34476
|
+
const id = resolvePartialId(db, "projects", project);
|
|
34477
|
+
return id ? db.query("SELECT * FROM projects WHERE id = ?").get(id) : null;
|
|
34478
|
+
})() || db.query("SELECT * FROM projects WHERE name = ? OR task_list_id = ?").get(project, project);
|
|
34463
34479
|
const projectId = p?.id || project;
|
|
34464
34480
|
db.run("UPDATE agents SET active_project_id = ? WHERE id = ? OR name = ?", [projectId, agentId, agentId]);
|
|
34465
34481
|
console.log(chalk3.green(`Focused on: ${p?.name || projectId}`));
|
|
@@ -34948,10 +34964,15 @@ program2.command("dashboard").description("Live-updating dashboard showing proje
|
|
|
34948
34964
|
render2(React.createElement(Dashboard2, { projectId, refreshMs: parseInt(opts.refresh, 10) }));
|
|
34949
34965
|
});
|
|
34950
34966
|
program2.command("next").description("Show the best pending task to work on next").option("--agent <id>", "Prefer tasks assigned to this agent").option("--project <id>", "Filter to project").option("--json", "Output as JSON").action(async (opts) => {
|
|
34967
|
+
const globalOpts = program2.opts();
|
|
34951
34968
|
const db = getDatabase();
|
|
34952
34969
|
const filters = {};
|
|
34953
|
-
|
|
34954
|
-
|
|
34970
|
+
const projectInput = opts.project || globalOpts.project;
|
|
34971
|
+
if (projectInput) {
|
|
34972
|
+
const pid = autoProject({ project: projectInput }) || resolvePartialId(db, "projects", projectInput) || db.query("SELECT id FROM projects WHERE path = ? OR name = ? OR task_list_id = ?").get(projectInput, projectInput, projectInput)?.id;
|
|
34973
|
+
if (pid)
|
|
34974
|
+
filters.project_id = pid;
|
|
34975
|
+
}
|
|
34955
34976
|
const task = getNextTask(opts.agent, Object.keys(filters).length ? filters : undefined, db);
|
|
34956
34977
|
if (!task) {
|
|
34957
34978
|
console.log(chalk3.dim("No tasks available."));
|
|
@@ -35517,7 +35538,7 @@ program2.command("report").description("Analytics report: task activity, complet
|
|
|
35517
35538
|
`);
|
|
35518
35539
|
lines.push(`| Metric | Value |`);
|
|
35519
35540
|
lines.push(`|--------|-------|`);
|
|
35520
|
-
lines.push(`| Active tasks | ${all.length} total (${stats.pending} pending, ${stats.in_progress} active) |`);
|
|
35541
|
+
lines.push(`| Active tasks | ${all.length} total (${stats.by_status?.pending ?? 0} pending, ${stats.by_status?.in_progress ?? 0} active) |`);
|
|
35521
35542
|
lines.push(`| Changed (${days}d) | ${changed.length} tasks |`);
|
|
35522
35543
|
lines.push(`| Completed (${days}d) | ${completed.length} (${completionRate}% rate) |`);
|
|
35523
35544
|
lines.push(`| Failed (${days}d) | ${failed.length} |`);
|
|
@@ -35526,7 +35547,7 @@ program2.command("report").description("Analytics report: task activity, complet
|
|
|
35526
35547
|
} else {
|
|
35527
35548
|
lines.push(chalk3.bold(`todos report \u2014 last ${days} day${days !== 1 ? "s" : ""}`));
|
|
35528
35549
|
lines.push("");
|
|
35529
|
-
lines.push(` Total: ${chalk3.bold(String(all.length))} tasks (${chalk3.yellow(String(stats.pending))} pending, ${chalk3.blue(String(stats.in_progress))} active)`);
|
|
35550
|
+
lines.push(` Total: ${chalk3.bold(String(all.length))} tasks (${chalk3.yellow(String(stats.by_status?.pending ?? 0))} pending, ${chalk3.blue(String(stats.by_status?.in_progress ?? 0))} active)`);
|
|
35530
35551
|
lines.push(` Changed: ${chalk3.bold(String(changed.length))} in period`);
|
|
35531
35552
|
lines.push(` Completed: ${chalk3.green(String(completed.length))} (${completionRate}% rate)`);
|
|
35532
35553
|
if (failed.length > 0)
|
|
@@ -35536,7 +35557,7 @@ program2.command("report").description("Analytics report: task activity, complet
|
|
|
35536
35557
|
if (Object.keys(byAgent).length > 0) {
|
|
35537
35558
|
lines.push(` By agent: ${Object.entries(byAgent).map(([a, n]) => `${a}=${n}`).join(" ")}`);
|
|
35538
35559
|
}
|
|
35539
|
-
if (stats.in_progress > 0)
|
|
35560
|
+
if ((stats.by_status?.in_progress ?? 0) > 0)
|
|
35540
35561
|
lines.push(` Stale risk: check \`todos stale\` for stuck tasks`);
|
|
35541
35562
|
}
|
|
35542
35563
|
console.log(lines.join(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg-migrations.d.ts","sourceRoot":"","sources":["../../src/db/pg-migrations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pg-migrations.d.ts","sourceRoot":"","sources":["../../src/db/pg-migrations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,EA6mBjC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/db/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,OAAO,EAAE,aAAa,EAAoB,MAAM,mBAAmB,CAAC;AAKhI,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5C;AAyBD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,kBAAkB,EACzB,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAcT;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAIpE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAc5E;AAED,wBAAgB,YAAY,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAKrD;AAED,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,MAAM,CAAC,CAAC,EAC/E,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CA6BT;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3C,EAAE,CAAC,EAAE,QAAQ,GACZ;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE,CAuClD;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAIhE;AAWD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,wBAAwB,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,aAAa,CAW9F;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAItE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,aAAa,EAAE,CAIpF;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAM/E;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/db/projects.ts"],"names":[],"mappings":"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"}
|
package/dist/db/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,eAAO,MAAM,UAAU,UAuuBtB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA8BhD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAwX/C;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CA4BnD"}
|
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;
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/db/tasks.ts"],"names":[],"mappings":"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"}
|