@hasna/todos 0.11.71 → 0.11.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"shared-events.d.ts","sourceRoot":"","sources":["../../src/lib/shared-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAc9C,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BtG;AAmFD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAE/F"}
1
+ {"version":3,"file":"shared-events.d.ts","sourceRoot":"","sources":["../../src/lib/shared-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKnD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAe9C,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,gBAAgB,CAAC;AAErB,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BtG;AAuFD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAE/F"}
@@ -27,7 +27,8 @@ export declare function routingAutomationMetadata(task: Pick<Task, "metadata" |
27
27
  export declare function routeEnabledForTask(task: Pick<Task, "metadata" | "tags">, taskList?: Pick<TaskList, "metadata"> | null): boolean | undefined;
28
28
  export declare function workflowPointersFromMetadata(metadata: Record<string, unknown>): TaskWorkflowPointers;
29
29
  export declare function compactWorkflowPointers(pointers: TaskWorkflowPointers): TaskWorkflowPointers;
30
- export declare function classifyProjectKind(path: string): string;
30
+ export declare function projectKindFromMetadata(...records: Array<Record<string, unknown> | undefined | null>): string | null;
31
+ export declare function classifyProjectKind(_path: string, metadata?: Record<string, unknown> | null): string | null;
31
32
  export declare function isWorktreePath(path: string): boolean;
32
33
  export declare function inferRootProjectId(project: Project): string | null;
33
34
  //# sourceMappingURL=task-route-contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-route-contract.d.ts","sourceRoot":"","sources":["../../src/lib/task-route-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjE,eAAO,MAAM,qCAAqC,8BAA8B,CAAC;AACjF,eAAO,MAAM,oCAAoC,mCAAmC,CAAC;AAErF,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAYhE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE/E;AAqBD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAAC,EAClD,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,GAC3C,6BAA6B,GAAG,SAAS,CAsB3C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAO5I;AAMD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAcpG;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB,CAI5F;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAElE"}
1
+ {"version":3,"file":"task-route-contract.d.ts","sourceRoot":"","sources":["../../src/lib/task-route-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEjE,eAAO,MAAM,qCAAqC,8BAA8B,CAAC;AACjF,eAAO,MAAM,oCAAoC,mCAAmC,CAAC;AAErF,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,8BAA8B,CAAC,EAAE,MAAM,CAAC;IACxC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAYhE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAE/E;AAqBD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAAC,EAClD,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,GAC3C,6BAA6B,GAAG,SAAS,CAsB3C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,CAM5I;AAMD,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAcpG;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,oBAAoB,CAI5F;AAWD,wBAAgB,uBAAuB,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAMpH;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAE3G;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAElE"}
@@ -0,0 +1,68 @@
1
+ import type { Task } from "../types/index.js";
2
+ import { type TaskRouteState } from "./task-routing.js";
3
+ export declare const TASK_ROUTE_SOURCE_DISCOVERY_SCHEMA_VERSION = "todos.task_route_sources.v1";
4
+ export interface DiscoverTaskRouteSourcesInput {
5
+ sourceRoots?: string[];
6
+ sourceStores?: string[];
7
+ include?: string[];
8
+ exclude?: string[];
9
+ limit?: number;
10
+ }
11
+ export type TaskRouteSourceStoreStatus = "ok" | "missing" | "error";
12
+ export interface TaskRouteSourceError {
13
+ source_store_id: string;
14
+ source_repo_path: string | null;
15
+ source_db_path: string;
16
+ code: "STORE_MISSING" | "STORE_UNREADABLE" | "STORE_INVALID" | "SOURCE_ROOT_MISSING" | "SOURCE_ROOT_UNREADABLE";
17
+ message: string;
18
+ }
19
+ export interface TaskRouteSourceStoreResult {
20
+ source_store_id: string;
21
+ source_repo_path: string | null;
22
+ source_db_path: string;
23
+ status: TaskRouteSourceStoreStatus;
24
+ /** Total ready candidates found in this store before result-level limit truncation. */
25
+ candidate_count: number;
26
+ /** Candidates returned from this store after result-level limit truncation. */
27
+ returned_candidate_count: number;
28
+ errors: TaskRouteSourceError[];
29
+ }
30
+ export interface TaskRouteSourceCandidate {
31
+ source_store_id: string;
32
+ source_repo_path: string | null;
33
+ source_db_path: string;
34
+ source_task_key: string;
35
+ /** True when the store was selected by explicit sourceRoots/sourceStores and include/exclude inputs. Not dispatch authorization. */
36
+ source_selected_by_input: boolean;
37
+ task_id: string;
38
+ task_short_id: string | null;
39
+ title: string;
40
+ status: Task["status"];
41
+ priority: Task["priority"];
42
+ project_path: string | null;
43
+ task_version: number;
44
+ task_updated_at: string;
45
+ task_fingerprint: string | null;
46
+ tags: string[];
47
+ task_intent: {
48
+ auto_route: boolean;
49
+ };
50
+ metadata: Record<string, unknown>;
51
+ route_state: TaskRouteState;
52
+ }
53
+ export interface TaskRouteSourceDiscoveryResult {
54
+ schema_version: typeof TASK_ROUTE_SOURCE_DISCOVERY_SCHEMA_VERSION;
55
+ sourceRoots: string[];
56
+ sourceStores: string[];
57
+ include: string[];
58
+ exclude: string[];
59
+ limit: number | null;
60
+ total_candidate_count: number;
61
+ returned_candidate_count: number;
62
+ truncated: boolean;
63
+ stores: TaskRouteSourceStoreResult[];
64
+ candidates: TaskRouteSourceCandidate[];
65
+ errors: TaskRouteSourceError[];
66
+ }
67
+ export declare function discoverTaskRouteSources(input: DiscoverTaskRouteSourcesInput): TaskRouteSourceDiscoveryResult;
68
+ //# sourceMappingURL=task-route-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-route-sources.d.ts","sourceRoot":"","sources":["../../src/lib/task-route-sources.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,mBAAmB,CAAC;AAKvD,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE3E,eAAO,MAAM,0CAA0C,gCAAgC,CAAC;AAExF,MAAM,WAAW,6BAA6B;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,0BAA0B,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,eAAe,GAAG,kBAAkB,GAAG,eAAe,GAAG,qBAAqB,GAAG,wBAAwB,CAAC;IAChH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,0BAA0B,CAAC;IACnC,uFAAuF;IACvF,eAAe,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,wBAAwB,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,oIAAoI;IACpI,wBAAwB,EAAE,OAAO,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE;QACX,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,8BAA8B;IAC7C,cAAc,EAAE,OAAO,0CAA0C,CAAC;IAClE,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,wBAAwB,EAAE,MAAM,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAoSD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,6BAA6B,GAAG,8BAA8B,CA6D7G"}
@@ -1 +1 @@
1
- {"version":3,"file":"task-routing.d.ts","sourceRoot":"","sources":["../../src/lib/task-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,OAAO,KAAK,EAAW,IAAI,EAAY,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAKL,qCAAqC,EAErC,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,OAAO,qCAAqC,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAC,CAAC;IAChG,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACjD,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,8BAA8B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA+CD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,cAAc,CAwExF;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,4BAA4B,EACnC,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,CAoCN"}
1
+ {"version":3,"file":"task-routing.d.ts","sourceRoot":"","sources":["../../src/lib/task-routing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAM3C,OAAO,KAAK,EAAW,IAAI,EAAY,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAML,qCAAqC,EAErC,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,OAAO,qCAAqC,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAC,CAAC;IAChG,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;IACjD,KAAK,EAAE,gBAAgB,CAAC;IACxB,QAAQ,EAAE,oBAAoB,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,8BAA8B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0CD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,cAAc,CAyExF;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,4BAA4B,EACnC,EAAE,CAAC,EAAE,QAAQ,GACZ,IAAI,CAoCN"}
package/dist/mcp/index.js CHANGED
@@ -9706,8 +9706,6 @@ function routeEnabledForTask(task, taskList) {
9706
9706
  const explicit = booleanField(task.metadata.route_enabled);
9707
9707
  if (explicit !== undefined)
9708
9708
  return explicit;
9709
- if (task.tags.includes("auto:route") || task.tags.includes("route:enabled"))
9710
- return true;
9711
9709
  const taskListDefault = taskList ? booleanField(taskList.metadata.route_enabled) : undefined;
9712
9710
  if (taskListDefault !== undefined)
9713
9711
  return taskListDefault;
@@ -9726,8 +9724,26 @@ function workflowPointersFromMetadata(metadata) {
9726
9724
  workflow_state: stringField(metadata.workflow_state) ?? stringField(nested.workflow_state) ?? stringField(nested.state)
9727
9725
  };
9728
9726
  }
9729
- function classifyProjectKind(path) {
9730
- return path.includes("/hasna/opensource/") ? "open-source" : "unknown";
9727
+ function metadataStringField(record, keys) {
9728
+ if (!record)
9729
+ return;
9730
+ for (const key of keys) {
9731
+ const value = record[key];
9732
+ if (typeof value === "string" && value.trim())
9733
+ return value.trim();
9734
+ }
9735
+ return;
9736
+ }
9737
+ function projectKindFromMetadata(...records) {
9738
+ for (const record of records) {
9739
+ const value = metadataStringField(record ?? undefined, ["project_kind", "projectKind", "source_kind", "sourceKind"]);
9740
+ if (value)
9741
+ return value;
9742
+ }
9743
+ return null;
9744
+ }
9745
+ function classifyProjectKind(_path, metadata) {
9746
+ return projectKindFromMetadata(metadata);
9731
9747
  }
9732
9748
  function isWorktreePath(path) {
9733
9749
  return path.includes("/.codewith/worktrees/") || path.includes("/.worktrees/");
@@ -9800,7 +9816,6 @@ function taskEventMetadata(task) {
9800
9816
  metadata.project_canonical_path = projectPath;
9801
9817
  }
9802
9818
  if (projectPath) {
9803
- metadata.project_kind = classifyProjectKind(projectPath);
9804
9819
  metadata.project_is_worktree = isWorktreePath(projectPath);
9805
9820
  metadata.working_dir = task.working_dir ?? projectPath;
9806
9821
  }
@@ -9812,6 +9827,10 @@ function taskEventMetadata(task) {
9812
9827
  metadata.task_list_project_id = taskList.project_id;
9813
9828
  metadata.task_list_is_project_default = Boolean(project?.task_list_id && taskList.slug === project.task_list_id);
9814
9829
  }
9830
+ const projectKind = projectKindFromMetadata(task.metadata, taskList?.metadata);
9831
+ if (projectKind) {
9832
+ metadata.project_kind = classifyProjectKind(projectPath ?? "", { project_kind: projectKind });
9833
+ }
9815
9834
  const routeEnabled = routeEnabledForTask(task, taskList);
9816
9835
  if (routeEnabled !== undefined) {
9817
9836
  metadata.route_enabled = routeEnabled;
package/dist/registry.js CHANGED
@@ -7926,8 +7926,6 @@ function routeEnabledForTask(task, taskList) {
7926
7926
  const explicit = booleanField(task.metadata.route_enabled);
7927
7927
  if (explicit !== undefined)
7928
7928
  return explicit;
7929
- if (task.tags.includes("auto:route") || task.tags.includes("route:enabled"))
7930
- return true;
7931
7929
  const taskListDefault = taskList ? booleanField(taskList.metadata.route_enabled) : undefined;
7932
7930
  if (taskListDefault !== undefined)
7933
7931
  return taskListDefault;
@@ -7949,8 +7947,26 @@ function workflowPointersFromMetadata(metadata) {
7949
7947
  function compactWorkflowPointers(pointers) {
7950
7948
  return Object.fromEntries(Object.entries(pointers).filter(([, value]) => typeof value === "string" && value.length > 0));
7951
7949
  }
7952
- function classifyProjectKind(path) {
7953
- return path.includes("/hasna/opensource/") ? "open-source" : "unknown";
7950
+ function metadataStringField(record, keys) {
7951
+ if (!record)
7952
+ return;
7953
+ for (const key of keys) {
7954
+ const value = record[key];
7955
+ if (typeof value === "string" && value.trim())
7956
+ return value.trim();
7957
+ }
7958
+ return;
7959
+ }
7960
+ function projectKindFromMetadata(...records) {
7961
+ for (const record of records) {
7962
+ const value = metadataStringField(record ?? undefined, ["project_kind", "projectKind", "source_kind", "sourceKind"]);
7963
+ if (value)
7964
+ return value;
7965
+ }
7966
+ return null;
7967
+ }
7968
+ function classifyProjectKind(_path, metadata) {
7969
+ return projectKindFromMetadata(metadata);
7954
7970
  }
7955
7971
  function isWorktreePath(path) {
7956
7972
  return path.includes("/.codewith/worktrees/") || path.includes("/.worktrees/");
@@ -8023,7 +8039,6 @@ function taskEventMetadata(task) {
8023
8039
  metadata.project_canonical_path = projectPath;
8024
8040
  }
8025
8041
  if (projectPath) {
8026
- metadata.project_kind = classifyProjectKind(projectPath);
8027
8042
  metadata.project_is_worktree = isWorktreePath(projectPath);
8028
8043
  metadata.working_dir = task.working_dir ?? projectPath;
8029
8044
  }
@@ -8035,6 +8050,10 @@ function taskEventMetadata(task) {
8035
8050
  metadata.task_list_project_id = taskList.project_id;
8036
8051
  metadata.task_list_is_project_default = Boolean(project?.task_list_id && taskList.slug === project.task_list_id);
8037
8052
  }
8053
+ const projectKind = projectKindFromMetadata(task.metadata, taskList?.metadata);
8054
+ if (projectKind) {
8055
+ metadata.project_kind = classifyProjectKind(projectPath ?? "", { project_kind: projectKind });
8056
+ }
8038
8057
  const routeEnabled = routeEnabledForTask(task, taskList);
8039
8058
  if (routeEnabled !== undefined) {
8040
8059
  metadata.route_enabled = routeEnabled;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "packageName": "@hasna/todos",
3
- "packageVersion": "0.11.71",
3
+ "packageVersion": "0.11.72",
4
4
  "repository": "https://github.com/hasna/todos.git",
5
- "gitCommit": "7cb2824a2e8d60063a31a4bdb465fce9a5d41880",
6
- "generatedAt": "2026-07-01T10:22:06.425Z"
5
+ "gitCommit": "6faf721538ddfdcd384e253bee48821966186d85",
6
+ "generatedAt": "2026-07-03T13:05:19.129Z"
7
7
  }
@@ -5060,8 +5060,6 @@ function routeEnabledForTask(task, taskList) {
5060
5060
  const explicit = booleanField(task.metadata.route_enabled);
5061
5061
  if (explicit !== undefined)
5062
5062
  return explicit;
5063
- if (task.tags.includes("auto:route") || task.tags.includes("route:enabled"))
5064
- return true;
5065
5063
  const taskListDefault = taskList ? booleanField(taskList.metadata.route_enabled) : undefined;
5066
5064
  if (taskListDefault !== undefined)
5067
5065
  return taskListDefault;
@@ -5080,8 +5078,26 @@ function workflowPointersFromMetadata(metadata) {
5080
5078
  workflow_state: stringField(metadata.workflow_state) ?? stringField(nested.workflow_state) ?? stringField(nested.state)
5081
5079
  };
5082
5080
  }
5083
- function classifyProjectKind(path) {
5084
- return path.includes("/hasna/opensource/") ? "open-source" : "unknown";
5081
+ function metadataStringField(record, keys) {
5082
+ if (!record)
5083
+ return;
5084
+ for (const key of keys) {
5085
+ const value = record[key];
5086
+ if (typeof value === "string" && value.trim())
5087
+ return value.trim();
5088
+ }
5089
+ return;
5090
+ }
5091
+ function projectKindFromMetadata(...records) {
5092
+ for (const record of records) {
5093
+ const value = metadataStringField(record ?? undefined, ["project_kind", "projectKind", "source_kind", "sourceKind"]);
5094
+ if (value)
5095
+ return value;
5096
+ }
5097
+ return null;
5098
+ }
5099
+ function classifyProjectKind(_path, metadata) {
5100
+ return projectKindFromMetadata(metadata);
5085
5101
  }
5086
5102
  function isWorktreePath(path) {
5087
5103
  return path.includes("/.codewith/worktrees/") || path.includes("/.worktrees/");
@@ -5154,7 +5170,6 @@ function taskEventMetadata(task) {
5154
5170
  metadata.project_canonical_path = projectPath;
5155
5171
  }
5156
5172
  if (projectPath) {
5157
- metadata.project_kind = classifyProjectKind(projectPath);
5158
5173
  metadata.project_is_worktree = isWorktreePath(projectPath);
5159
5174
  metadata.working_dir = task.working_dir ?? projectPath;
5160
5175
  }
@@ -5166,6 +5181,10 @@ function taskEventMetadata(task) {
5166
5181
  metadata.task_list_project_id = taskList.project_id;
5167
5182
  metadata.task_list_is_project_default = Boolean(project?.task_list_id && taskList.slug === project.task_list_id);
5168
5183
  }
5184
+ const projectKind = projectKindFromMetadata(task.metadata, taskList?.metadata);
5185
+ if (projectKind) {
5186
+ metadata.project_kind = classifyProjectKind(projectPath ?? "", { project_kind: projectKind });
5187
+ }
5169
5188
  const routeEnabled = routeEnabledForTask(task, taskList);
5170
5189
  if (routeEnabled !== undefined) {
5171
5190
  metadata.route_enabled = routeEnabled;
@@ -15665,7 +15684,7 @@ class JSONSchemaGenerator {
15665
15684
  if (val === undefined) {
15666
15685
  if (this.unrepresentable === "throw") {
15667
15686
  throw new Error("Literal `undefined` cannot be represented in JSON Schema");
15668
- }
15687
+ } else {}
15669
15688
  } else if (typeof val === "bigint") {
15670
15689
  if (this.unrepresentable === "throw") {
15671
15690
  throw new Error("BigInt literals cannot be represented in JSON Schema");
@@ -58753,7 +58772,7 @@ var require_to_json_schema = __commonJS((exports) => {
58753
58772
  if (val === undefined) {
58754
58773
  if (this.unrepresentable === "throw") {
58755
58774
  throw new Error("Literal `undefined` cannot be represented in JSON Schema");
58756
- }
58775
+ } else {}
58757
58776
  } else if (typeof val === "bigint") {
58758
58777
  if (this.unrepresentable === "throw") {
58759
58778
  throw new Error("BigInt literals cannot be represented in JSON Schema");
package/dist/storage.js CHANGED
@@ -5474,8 +5474,6 @@ function routeEnabledForTask(task, taskList) {
5474
5474
  const explicit = booleanField(task.metadata.route_enabled);
5475
5475
  if (explicit !== undefined)
5476
5476
  return explicit;
5477
- if (task.tags.includes("auto:route") || task.tags.includes("route:enabled"))
5478
- return true;
5479
5477
  const taskListDefault = taskList ? booleanField(taskList.metadata.route_enabled) : undefined;
5480
5478
  if (taskListDefault !== undefined)
5481
5479
  return taskListDefault;
@@ -5497,8 +5495,26 @@ function workflowPointersFromMetadata(metadata) {
5497
5495
  function compactWorkflowPointers(pointers) {
5498
5496
  return Object.fromEntries(Object.entries(pointers).filter(([, value]) => typeof value === "string" && value.length > 0));
5499
5497
  }
5500
- function classifyProjectKind(path) {
5501
- return path.includes("/hasna/opensource/") ? "open-source" : "unknown";
5498
+ function metadataStringField(record, keys) {
5499
+ if (!record)
5500
+ return;
5501
+ for (const key of keys) {
5502
+ const value = record[key];
5503
+ if (typeof value === "string" && value.trim())
5504
+ return value.trim();
5505
+ }
5506
+ return;
5507
+ }
5508
+ function projectKindFromMetadata(...records) {
5509
+ for (const record of records) {
5510
+ const value = metadataStringField(record ?? undefined, ["project_kind", "projectKind", "source_kind", "sourceKind"]);
5511
+ if (value)
5512
+ return value;
5513
+ }
5514
+ return null;
5515
+ }
5516
+ function classifyProjectKind(_path, metadata) {
5517
+ return projectKindFromMetadata(metadata);
5502
5518
  }
5503
5519
  function isWorktreePath(path) {
5504
5520
  return path.includes("/.codewith/worktrees/") || path.includes("/.worktrees/");
@@ -5571,7 +5587,6 @@ function taskEventMetadata(task) {
5571
5587
  metadata.project_canonical_path = projectPath;
5572
5588
  }
5573
5589
  if (projectPath) {
5574
- metadata.project_kind = classifyProjectKind(projectPath);
5575
5590
  metadata.project_is_worktree = isWorktreePath(projectPath);
5576
5591
  metadata.working_dir = task.working_dir ?? projectPath;
5577
5592
  }
@@ -5583,6 +5598,10 @@ function taskEventMetadata(task) {
5583
5598
  metadata.task_list_project_id = taskList.project_id;
5584
5599
  metadata.task_list_is_project_default = Boolean(project?.task_list_id && taskList.slug === project.task_list_id);
5585
5600
  }
5601
+ const projectKind = projectKindFromMetadata(task.metadata, taskList?.metadata);
5602
+ if (projectKind) {
5603
+ metadata.project_kind = classifyProjectKind(projectPath ?? "", { project_kind: projectKind });
5604
+ }
5586
5605
  const routeEnabled = routeEnabledForTask(task, taskList);
5587
5606
  if (routeEnabled !== undefined) {
5588
5607
  metadata.route_enabled = routeEnabled;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/todos",
3
- "version": "0.11.71",
3
+ "version": "0.11.72",
4
4
  "description": "Universal task management for AI coding agents - CLI + MCP server + interactive TUI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",