@hasna/todos 0.9.56 → 0.9.57
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 +25 -4
- package/dist/index.js +5 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/mcp/index.js +5 -3
- package/dist/server/index.js +25 -4
- package/dist/server/serve.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -2883,17 +2883,20 @@ var init_sync_utils = __esm(() => {
|
|
|
2883
2883
|
// src/lib/config.ts
|
|
2884
2884
|
import { existsSync as existsSync3 } from "fs";
|
|
2885
2885
|
import { join as join3 } from "path";
|
|
2886
|
+
function getConfigPath() {
|
|
2887
|
+
return join3(process.env["HOME"] || HOME, ".todos", "config.json");
|
|
2888
|
+
}
|
|
2886
2889
|
function normalizeAgent(agent) {
|
|
2887
2890
|
return agent.trim().toLowerCase();
|
|
2888
2891
|
}
|
|
2889
2892
|
function loadConfig() {
|
|
2890
2893
|
if (cached)
|
|
2891
2894
|
return cached;
|
|
2892
|
-
if (!existsSync3(
|
|
2895
|
+
if (!existsSync3(getConfigPath())) {
|
|
2893
2896
|
cached = {};
|
|
2894
2897
|
return cached;
|
|
2895
2898
|
}
|
|
2896
|
-
const config = readJsonFile(
|
|
2899
|
+
const config = readJsonFile(getConfigPath()) || {};
|
|
2897
2900
|
if (typeof config.sync_agents === "string") {
|
|
2898
2901
|
config.sync_agents = config.sync_agents.split(",").map((a) => a.trim()).filter(Boolean);
|
|
2899
2902
|
}
|
|
@@ -2929,10 +2932,9 @@ function getCompletionGuardConfig(projectPath) {
|
|
|
2929
2932
|
}
|
|
2930
2933
|
return global;
|
|
2931
2934
|
}
|
|
2932
|
-
var
|
|
2935
|
+
var cached = null, GUARD_DEFAULTS;
|
|
2933
2936
|
var init_config = __esm(() => {
|
|
2934
2937
|
init_sync_utils();
|
|
2935
|
-
CONFIG_PATH = join3(HOME, ".todos", "config.json");
|
|
2936
2938
|
GUARD_DEFAULTS = {
|
|
2937
2939
|
enabled: false,
|
|
2938
2940
|
min_work_seconds: 30,
|
|
@@ -11866,6 +11868,25 @@ data: ${JSON.stringify({ type: "connected", agent_id: agentId, timestamp: new Da
|
|
|
11866
11868
|
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
11867
11869
|
}
|
|
11868
11870
|
}
|
|
11871
|
+
if (path === "/api/report" && method === "GET") {
|
|
11872
|
+
const days = parseInt(url.searchParams.get("days") || "7", 10);
|
|
11873
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
11874
|
+
const since = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
11875
|
+
const { getTasksChangedSince: getTasksChangedSince2, getTaskStats: getTaskStats2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
11876
|
+
const filters = projectId ? { project_id: projectId } : undefined;
|
|
11877
|
+
const changed = getTasksChangedSince2(since, filters);
|
|
11878
|
+
const all = listTasks(filters || {});
|
|
11879
|
+
const stats = getTaskStats2(filters);
|
|
11880
|
+
const completed = changed.filter((t) => t.status === "completed");
|
|
11881
|
+
const failed = changed.filter((t) => t.status === "failed");
|
|
11882
|
+
const byDay = {};
|
|
11883
|
+
for (const t of changed) {
|
|
11884
|
+
const day = t.updated_at.slice(0, 10);
|
|
11885
|
+
byDay[day] = (byDay[day] || 0) + 1;
|
|
11886
|
+
}
|
|
11887
|
+
const completionRate = changed.length > 0 ? Math.round(completed.length / changed.length * 100) : 0;
|
|
11888
|
+
return json({ days, period_since: since, total: all.length, stats, changed: changed.length, completed: completed.length, failed: failed.length, completion_rate: completionRate, by_day: byDay }, 200, port);
|
|
11889
|
+
}
|
|
11869
11890
|
if (path === "/api/activity" && method === "GET") {
|
|
11870
11891
|
const limit = parseInt(url.searchParams.get("limit") || "50", 10);
|
|
11871
11892
|
const { getRecentActivity: getRecentActivity2 } = await Promise.resolve().then(() => (init_audit(), exports_audit));
|
package/dist/index.js
CHANGED
|
@@ -991,7 +991,9 @@ function appendSyncConflict(metadata, conflict, limit = 5) {
|
|
|
991
991
|
}
|
|
992
992
|
|
|
993
993
|
// src/lib/config.ts
|
|
994
|
-
|
|
994
|
+
function getConfigPath() {
|
|
995
|
+
return join3(process.env["HOME"] || HOME, ".todos", "config.json");
|
|
996
|
+
}
|
|
995
997
|
var cached = null;
|
|
996
998
|
function normalizeAgent(agent) {
|
|
997
999
|
return agent.trim().toLowerCase();
|
|
@@ -999,11 +1001,11 @@ function normalizeAgent(agent) {
|
|
|
999
1001
|
function loadConfig() {
|
|
1000
1002
|
if (cached)
|
|
1001
1003
|
return cached;
|
|
1002
|
-
if (!existsSync3(
|
|
1004
|
+
if (!existsSync3(getConfigPath())) {
|
|
1003
1005
|
cached = {};
|
|
1004
1006
|
return cached;
|
|
1005
1007
|
}
|
|
1006
|
-
const config = readJsonFile(
|
|
1008
|
+
const config = readJsonFile(getConfigPath()) || {};
|
|
1007
1009
|
if (typeof config.sync_agents === "string") {
|
|
1008
1010
|
config.sync_agents = config.sync_agents.split(",").map((a) => a.trim()).filter(Boolean);
|
|
1009
1011
|
}
|
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;CAC3D;
|
|
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;CAC3D;AAWD,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,wBAAgB,wBAAwB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CASrG"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -5028,7 +5028,9 @@ function appendSyncConflict(metadata, conflict, limit = 5) {
|
|
|
5028
5028
|
}
|
|
5029
5029
|
|
|
5030
5030
|
// src/lib/config.ts
|
|
5031
|
-
|
|
5031
|
+
function getConfigPath() {
|
|
5032
|
+
return join3(process.env["HOME"] || HOME, ".todos", "config.json");
|
|
5033
|
+
}
|
|
5032
5034
|
var cached = null;
|
|
5033
5035
|
function normalizeAgent(agent) {
|
|
5034
5036
|
return agent.trim().toLowerCase();
|
|
@@ -5036,11 +5038,11 @@ function normalizeAgent(agent) {
|
|
|
5036
5038
|
function loadConfig() {
|
|
5037
5039
|
if (cached)
|
|
5038
5040
|
return cached;
|
|
5039
|
-
if (!existsSync3(
|
|
5041
|
+
if (!existsSync3(getConfigPath())) {
|
|
5040
5042
|
cached = {};
|
|
5041
5043
|
return cached;
|
|
5042
5044
|
}
|
|
5043
|
-
const config = readJsonFile(
|
|
5045
|
+
const config = readJsonFile(getConfigPath()) || {};
|
|
5044
5046
|
if (typeof config.sync_agents === "string") {
|
|
5045
5047
|
config.sync_agents = config.sync_agents.split(",").map((a) => a.trim()).filter(Boolean);
|
|
5046
5048
|
}
|
package/dist/server/index.js
CHANGED
|
@@ -751,14 +751,17 @@ var init_sync_utils = __esm(() => {
|
|
|
751
751
|
// src/lib/config.ts
|
|
752
752
|
import { existsSync as existsSync3 } from "fs";
|
|
753
753
|
import { join as join2 } from "path";
|
|
754
|
+
function getConfigPath() {
|
|
755
|
+
return join2(process.env["HOME"] || HOME, ".todos", "config.json");
|
|
756
|
+
}
|
|
754
757
|
function loadConfig() {
|
|
755
758
|
if (cached)
|
|
756
759
|
return cached;
|
|
757
|
-
if (!existsSync3(
|
|
760
|
+
if (!existsSync3(getConfigPath())) {
|
|
758
761
|
cached = {};
|
|
759
762
|
return cached;
|
|
760
763
|
}
|
|
761
|
-
const config = readJsonFile(
|
|
764
|
+
const config = readJsonFile(getConfigPath()) || {};
|
|
762
765
|
if (typeof config.sync_agents === "string") {
|
|
763
766
|
config.sync_agents = config.sync_agents.split(",").map((a) => a.trim()).filter(Boolean);
|
|
764
767
|
}
|
|
@@ -773,10 +776,9 @@ function getCompletionGuardConfig(projectPath) {
|
|
|
773
776
|
}
|
|
774
777
|
return global;
|
|
775
778
|
}
|
|
776
|
-
var
|
|
779
|
+
var cached = null, GUARD_DEFAULTS;
|
|
777
780
|
var init_config = __esm(() => {
|
|
778
781
|
init_sync_utils();
|
|
779
|
-
CONFIG_PATH = join2(HOME, ".todos", "config.json");
|
|
780
782
|
GUARD_DEFAULTS = {
|
|
781
783
|
enabled: false,
|
|
782
784
|
min_work_seconds: 30,
|
|
@@ -3061,6 +3063,25 @@ data: ${JSON.stringify({ type: "connected", agent_id: agentId, timestamp: new Da
|
|
|
3061
3063
|
return json({ error: e instanceof Error ? e.message : "Failed" }, 500, port);
|
|
3062
3064
|
}
|
|
3063
3065
|
}
|
|
3066
|
+
if (path === "/api/report" && method === "GET") {
|
|
3067
|
+
const days = parseInt(url.searchParams.get("days") || "7", 10);
|
|
3068
|
+
const projectId = url.searchParams.get("project_id") || undefined;
|
|
3069
|
+
const since = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
|
|
3070
|
+
const { getTasksChangedSince: getTasksChangedSince2, getTaskStats: getTaskStats2 } = await Promise.resolve().then(() => (init_tasks(), exports_tasks));
|
|
3071
|
+
const filters = projectId ? { project_id: projectId } : undefined;
|
|
3072
|
+
const changed = getTasksChangedSince2(since, filters);
|
|
3073
|
+
const all = listTasks(filters || {});
|
|
3074
|
+
const stats = getTaskStats2(filters);
|
|
3075
|
+
const completed = changed.filter((t) => t.status === "completed");
|
|
3076
|
+
const failed = changed.filter((t) => t.status === "failed");
|
|
3077
|
+
const byDay = {};
|
|
3078
|
+
for (const t of changed) {
|
|
3079
|
+
const day = t.updated_at.slice(0, 10);
|
|
3080
|
+
byDay[day] = (byDay[day] || 0) + 1;
|
|
3081
|
+
}
|
|
3082
|
+
const completionRate = changed.length > 0 ? Math.round(completed.length / changed.length * 100) : 0;
|
|
3083
|
+
return json({ days, period_since: since, total: all.length, stats, changed: changed.length, completed: completed.length, failed: failed.length, completion_rate: completionRate, by_day: byDay }, 200, port);
|
|
3084
|
+
}
|
|
3064
3085
|
if (path === "/api/activity" && method === "GET") {
|
|
3065
3086
|
const limit = parseInt(url.searchParams.get("limit") || "50", 10);
|
|
3066
3087
|
const { getRecentActivity: getRecentActivity2 } = await Promise.resolve().then(() => (init_audit(), exports_audit));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiHH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/server/serve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiHH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8xB1G"}
|