@hasna/todos 0.11.81 → 0.11.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/cloud-router.d.ts +84 -1
- package/dist/cli/cloud-router.d.ts.map +1 -1
- package/dist/cli/commands/agent-commands.d.ts.map +1 -1
- package/dist/cli/commands/mcp-hooks-commands.d.ts.map +1 -1
- package/dist/cli/commands/plan-template-commands.d.ts.map +1 -1
- package/dist/cli/commands/project-commands.d.ts.map +1 -1
- package/dist/cli/commands/query-commands.d.ts.map +1 -1
- package/dist/cli/commands/task-commands.d.ts.map +1 -1
- package/dist/cli/index.js +569 -45
- package/dist/index.js +115 -4
- package/dist/mcp/index.js +363 -6
- package/dist/mcp/tools/agents.d.ts.map +1 -1
- package/dist/mcp/tools/task-adv-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-auto-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-project-tools.d.ts.map +1 -1
- package/dist/mcp/tools/task-workflow-tools.d.ts.map +1 -1
- package/dist/release-provenance.json +3 -3
- package/dist/server/index.js +381 -24
- package/dist/server/v1.d.ts.map +1 -1
- package/dist/storage/interfaces.d.ts +53 -1
- package/dist/storage/interfaces.d.ts.map +1 -1
- package/dist/storage/local-sqlite.d.ts.map +1 -1
- package/dist/storage/postgres-adapter.d.ts.map +1 -1
- package/dist/storage.js +112 -1
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* subnet routing — pure API-client path per the locked architecture.
|
|
22
22
|
*/
|
|
23
23
|
import { type HasnaStorageClient } from "@hasna/contracts/client/storage";
|
|
24
|
-
import type { Task, TaskFilter } from "../types/index.js";
|
|
24
|
+
import type { Agent, Plan, Project, RegisterAgentInput, Task, TaskComment, TaskDependency, TaskFilter } from "../types/index.js";
|
|
25
25
|
type Env = Record<string, string | undefined>;
|
|
26
26
|
/**
|
|
27
27
|
* Resolve the todos cloud storage client from the environment. Returns a ready
|
|
@@ -60,6 +60,25 @@ export interface CloudStats {
|
|
|
60
60
|
* local SQLite island.
|
|
61
61
|
*/
|
|
62
62
|
export declare function cloudGetStats(client: HasnaStorageClient): Promise<CloudStats>;
|
|
63
|
+
/** List registered agents from the cloud (`GET /v1/agents`). */
|
|
64
|
+
export declare function cloudListAgents(client: HasnaStorageClient): Promise<Agent[]>;
|
|
65
|
+
/** List projects from the cloud (`GET /v1/projects`). */
|
|
66
|
+
export declare function cloudListProjects(client: HasnaStorageClient): Promise<Project[]>;
|
|
67
|
+
/** List plans from the cloud (`GET /v1/plans`), optionally scoped to a project. */
|
|
68
|
+
export declare function cloudListPlans(client: HasnaStorageClient, projectId?: string): Promise<Plan[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Add a comment to a task in the cloud (`POST /v1/tasks/:id/comments`). The server
|
|
71
|
+
* validates that the task exists and returns 404 (surfaced as a thrown error by the
|
|
72
|
+
* transport) when it does not — so a comment on a missing cloud task fails loudly
|
|
73
|
+
* instead of silently succeeding.
|
|
74
|
+
*/
|
|
75
|
+
export declare function cloudAddComment(client: HasnaStorageClient, taskId: string, input: {
|
|
76
|
+
content: string;
|
|
77
|
+
agent_id?: string;
|
|
78
|
+
session_id?: string;
|
|
79
|
+
type?: string;
|
|
80
|
+
progress_pct?: number;
|
|
81
|
+
}): Promise<TaskComment>;
|
|
63
82
|
/**
|
|
64
83
|
* Count tasks matching a filter. The `/v1/tasks` list response now returns a
|
|
65
84
|
* SQL-side `total` (full match count, independent of limit/offset), so we ask for
|
|
@@ -67,5 +86,69 @@ export declare function cloudGetStats(client: HasnaStorageClient): Promise<Cloud
|
|
|
67
86
|
* client (which previously loaded every matching task over HTTP just to count).
|
|
68
87
|
*/
|
|
69
88
|
export declare function cloudCountTasks(client: HasnaStorageClient, filter?: TaskFilter): Promise<number>;
|
|
89
|
+
/**
|
|
90
|
+
* Register (or renew) an agent in the shared cloud roster (`POST /v1/agents`).
|
|
91
|
+
* This is the fix for the agent-identity misroute: `todos init` and the MCP
|
|
92
|
+
* `register_agent` tool historically wrote the agent to LOCAL sqlite even on a
|
|
93
|
+
* flipped machine, so the cloud `/v1/agents` roster never saw it. Routing through
|
|
94
|
+
* here writes the agent to the shared dataset with the bearer key. A name that is
|
|
95
|
+
* already actively held by another session comes back as HTTP 409, which the
|
|
96
|
+
* transport throws — surfaced to the caller as a conflict error (parity with the
|
|
97
|
+
* local conflict path) rather than a silent duplicate.
|
|
98
|
+
*/
|
|
99
|
+
export declare function cloudRegisterAgent(client: HasnaStorageClient, input: RegisterAgentInput): Promise<Agent>;
|
|
100
|
+
/** Result of a cloud lock/unlock action (mirrors the local `LockResult` shape). */
|
|
101
|
+
export interface CloudLockResult {
|
|
102
|
+
success: boolean;
|
|
103
|
+
locked_by?: string;
|
|
104
|
+
locked_at?: string;
|
|
105
|
+
expires_at?: string;
|
|
106
|
+
error?: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Acquire an exclusive lock on a cloud task (`POST /v1/tasks/:id/lock`). Locking is
|
|
110
|
+
* a task-field operation (`locked_by`/`locked_at`) resolved server-side against the
|
|
111
|
+
* shared dataset so a flipped machine coordinates on the SAME lock as every other
|
|
112
|
+
* agent — the previous local-sqlite lookup 404'd cloud tasks ("Task not found").
|
|
113
|
+
*/
|
|
114
|
+
export declare function cloudLockTask(client: HasnaStorageClient, id: string, agentId: string): Promise<CloudLockResult>;
|
|
115
|
+
/** Release a lock on a cloud task (`POST /v1/tasks/:id/unlock`). */
|
|
116
|
+
export declare function cloudUnlockTask(client: HasnaStorageClient, id: string, agentId?: string): Promise<boolean>;
|
|
117
|
+
/** A task's dependency edges from the cloud (`GET /v1/tasks/:id/dependencies`). */
|
|
118
|
+
export interface CloudTaskDependencies {
|
|
119
|
+
dependencies: TaskDependency[];
|
|
120
|
+
blocked_by: TaskDependency[];
|
|
121
|
+
}
|
|
122
|
+
/** List a cloud task's dependency edges (`GET /v1/tasks/:id/dependencies`). */
|
|
123
|
+
export declare function cloudGetDependencies(client: HasnaStorageClient, id: string): Promise<CloudTaskDependencies>;
|
|
124
|
+
/** Add a dependency edge to a cloud task (`POST /v1/tasks/:id/dependencies`). */
|
|
125
|
+
export declare function cloudAddDependency(client: HasnaStorageClient, id: string, dependsOn: string): Promise<TaskDependency>;
|
|
126
|
+
/** Remove a dependency edge from a cloud task (`DELETE /v1/tasks/:id/dependencies/:dep`). */
|
|
127
|
+
export declare function cloudRemoveDependency(client: HasnaStorageClient, id: string, dependsOn: string): Promise<boolean>;
|
|
128
|
+
/** A verification record returned by the cloud. */
|
|
129
|
+
export interface CloudTaskVerification {
|
|
130
|
+
id: string;
|
|
131
|
+
task_id: string;
|
|
132
|
+
command: string;
|
|
133
|
+
status: "passed" | "failed" | "unknown";
|
|
134
|
+
output_summary: string | null;
|
|
135
|
+
artifact_path: string | null;
|
|
136
|
+
agent_id: string | null;
|
|
137
|
+
run_at: string;
|
|
138
|
+
created_at: string;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Record a verification command + result against a cloud task
|
|
142
|
+
* (`POST /v1/tasks/:id/verifications`). The previous local path wrote the row to
|
|
143
|
+
* this machine's sqlite where the cloud task does not exist, tripping a FOREIGN
|
|
144
|
+
* KEY constraint; routing to the shared store attaches it to the real task.
|
|
145
|
+
*/
|
|
146
|
+
export declare function cloudRecordVerification(client: HasnaStorageClient, id: string, input: {
|
|
147
|
+
command: string;
|
|
148
|
+
status?: string;
|
|
149
|
+
output_summary?: string;
|
|
150
|
+
artifact_path?: string;
|
|
151
|
+
agent_id?: string;
|
|
152
|
+
}): Promise<CloudTaskVerification>;
|
|
70
153
|
export {};
|
|
71
154
|
//# sourceMappingURL=cloud-router.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-router.d.ts","sourceRoot":"","sources":["../../src/cli/cloud-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,EAAwB,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAChG,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-router.d.ts","sourceRoot":"","sources":["../../src/cli/cloud-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agent-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agent-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QA0ZrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-hooks-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp-hooks-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-hooks-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp-hooks-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2MzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,QAmqCxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-template-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plan-template-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-template-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plan-template-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BzC,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,QAwe5D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/project-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"project-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/project-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqJzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,QAg8BvD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/query-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"query-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/query-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8NzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAg4FrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/task-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"task-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/task-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0MzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAqlCpD"}
|