@perrylink/dsh-ticktick 0.1.2

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.
Files changed (71) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +201 -0
  3. package/README.es.md +41 -0
  4. package/README.hi.md +33 -0
  5. package/README.md +111 -0
  6. package/README.pt.md +41 -0
  7. package/README.zh.md +111 -0
  8. package/cordis.patch.yml +35 -0
  9. package/lib/client.js +6233 -0
  10. package/lib/client.js.map +1 -0
  11. package/lib/index.js +1349 -0
  12. package/lib/typert.host.js +26 -0
  13. package/lib/types/client/TicktickAction.d.ts +29 -0
  14. package/lib/types/client/TicktickAction.d.ts.map +1 -0
  15. package/lib/types/client/TicktickSettingsCard.d.ts +27 -0
  16. package/lib/types/client/TicktickSettingsCard.d.ts.map +1 -0
  17. package/lib/types/client/api.d.ts +34 -0
  18. package/lib/types/client/api.d.ts.map +1 -0
  19. package/lib/types/client/dates.d.ts +26 -0
  20. package/lib/types/client/dates.d.ts.map +1 -0
  21. package/lib/types/client/index.d.ts +34 -0
  22. package/lib/types/client/index.d.ts.map +1 -0
  23. package/lib/types/client/locales.d.ts +61 -0
  24. package/lib/types/client/locales.d.ts.map +1 -0
  25. package/lib/types/client/order.d.ts +25 -0
  26. package/lib/types/client/order.d.ts.map +1 -0
  27. package/lib/types/client/remote.d.ts +260 -0
  28. package/lib/types/client/remote.d.ts.map +1 -0
  29. package/lib/types/client/styles.d.ts +13 -0
  30. package/lib/types/client/styles.d.ts.map +1 -0
  31. package/lib/types/config.d.ts +64 -0
  32. package/lib/types/config.d.ts.map +1 -0
  33. package/lib/types/domain.d.ts +70 -0
  34. package/lib/types/domain.d.ts.map +1 -0
  35. package/lib/types/index.d.ts +56 -0
  36. package/lib/types/index.d.ts.map +1 -0
  37. package/lib/types/mcp.d.ts +94 -0
  38. package/lib/types/mcp.d.ts.map +1 -0
  39. package/lib/types/service.d.ts +160 -0
  40. package/lib/types/service.d.ts.map +1 -0
  41. package/lib/types/tools.d.ts +18 -0
  42. package/lib/types/tools.d.ts.map +1 -0
  43. package/lib/types/typert.host.d.ts +216 -0
  44. package/lib/types/typert.host.d.ts.map +1 -0
  45. package/lib/types/wire.d.ts +561 -0
  46. package/lib/types/wire.d.ts.map +1 -0
  47. package/lib/wire-C-vDxxnC.js +5288 -0
  48. package/package.json +187 -0
  49. package/probes/lib.mjs +65 -0
  50. package/probes/probe-bootstrap.mjs +10 -0
  51. package/probes/probe-crud.mjs +15 -0
  52. package/probes/probe-due.mjs +28 -0
  53. package/probes/probe-queries.mjs +18 -0
  54. package/probes/probe-reorder.mjs +24 -0
  55. package/src/client/TicktickAction.tsx +356 -0
  56. package/src/client/TicktickSettingsCard.tsx +182 -0
  57. package/src/client/api.ts +56 -0
  58. package/src/client/dates.ts +61 -0
  59. package/src/client/index.ts +119 -0
  60. package/src/client/locales.ts +113 -0
  61. package/src/client/order.ts +37 -0
  62. package/src/client/remote.ts +76 -0
  63. package/src/client/styles.ts +48 -0
  64. package/src/config.ts +136 -0
  65. package/src/domain.ts +224 -0
  66. package/src/index.ts +139 -0
  67. package/src/mcp.ts +213 -0
  68. package/src/service.ts +403 -0
  69. package/src/tools.ts +336 -0
  70. package/src/typert.host.ts +25 -0
  71. package/src/wire.ts +401 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,iDAAiD;AACjD,eAAO,MAAM,eAAe,4BAA4B,CAAA;AAExD,uDAAuD;AACvD,eAAO,MAAM,4BAA4B,QAAS,CAAA;AAElD,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,SAAU,CAAA;AAE/C,yEAAyE;AACzE,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,6CAA6C;AAC7C,MAAM,WAAW,MAAM;IACrB,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,uEAAuE;IACvE,KAAK,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC1B;AAED,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAA;IACzB,iDAAiD;IACjD,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,4CAA4C;IAC5C,KAAK,EAAE,QAAQ,CAAA;CAChB;AAED,6DAA6D;AAC7D,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CA8B3B,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAkCxE"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Tool discovery and task normalization over the TickTick MCP tool list:
3
+ * names are resolved by pattern (pinnable per deployment) and results are
4
+ * normalized into a stable `{ id, title, done, projectId, dueDate,
5
+ * sortOrder }` view. Ported from the measured 0.1.0-era bridge; the wire
6
+ * facts (list order = descending sortOrder, inbox ids carry 'inbox') were
7
+ * verified against the live endpoint.
8
+ *
9
+ * @module dsh-ticktick/domain
10
+ */
11
+ import type { McpCallResult, McpTool } from './mcp.js';
12
+ import type { ToolPins } from './config.js';
13
+ /** The resolved raw MCP tool names for the bridge operations. */
14
+ export interface ToolResolver {
15
+ readonly projects: string;
16
+ readonly tasks: string;
17
+ readonly create: string;
18
+ readonly complete: string;
19
+ readonly remove: string;
20
+ readonly update: string;
21
+ readonly move: string;
22
+ /** `list_completed_tasks_by_date` (P2 completed view). */
23
+ readonly completed: string;
24
+ /** `search` or `search_task` (P2 full-text search). */
25
+ readonly search: string;
26
+ /** `get_task_by_id` (P2 read-after-write verification). */
27
+ readonly getTask: string;
28
+ /** `batch_add_tasks` (P2 batch create). */
29
+ readonly batchAdd: string;
30
+ }
31
+ /** Stable task view the widget and tools render. */
32
+ export interface TicktickTask {
33
+ readonly id: string;
34
+ readonly title: string;
35
+ readonly done: boolean;
36
+ /** Owning project, required by TickTick's complete_task call. */
37
+ readonly projectId?: string;
38
+ /** ISO due date (TickTick date-time), absent when the task has none. */
39
+ readonly dueDate?: string;
40
+ /** TickTick sort order (list order is descending). */
41
+ readonly sortOrder?: number;
42
+ }
43
+ /** One project entry from `list_projects` (the virtual inbox included). */
44
+ export interface TicktickProject {
45
+ readonly id: string;
46
+ readonly name: string;
47
+ }
48
+ /**
49
+ * Pick the raw tool names for the eleven operations, honoring pins.
50
+ * A pin that is not advertised falls back to pattern discovery, then to
51
+ * the first advertised tool, then to the pin itself (an empty resolver
52
+ * surfaces as a failed call, never a silent no-op).
53
+ * @param tools - the advertised tool list.
54
+ * @param pins - config-level name pins.
55
+ * @returns the resolved names.
56
+ */
57
+ export declare function resolveTools(tools: readonly McpTool[], pins: ToolPins): ToolResolver;
58
+ /** Parse the project entries out of a `list_projects` result (object or array payloads). */
59
+ export declare function normalizeProjects(result: McpCallResult): readonly TicktickProject[];
60
+ /** Normalize a tools/call result into the stable task view. */
61
+ export declare function normalizeTasks(result: McpCallResult): readonly TicktickTask[];
62
+ /**
63
+ * Whether a project id names the virtual inbox. Measured wire fact: inbox
64
+ * ids carry the literal 'inbox' (either exactly or inside an internal id),
65
+ * while regular projects are hex ids.
66
+ * @param projectId - the project id.
67
+ * @returns true for inbox ids.
68
+ */
69
+ export declare function isInboxProject(projectId: string): boolean;
70
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../src/domain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,wEAAwE;IACxE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAcD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,CAyBpF;AAMD,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,eAAe,EAAE,CA2BnF;AA2CD,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,YAAY,EAAE,CAoC7E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * `dsh-ticktick` — the TickTick (Dida365) task bridge for DeepSeek Harness.
3
+ *
4
+ * Host half: mounts the `ticktick` Remote service (status plus the seven
5
+ * task operations over the official TickTick MCP endpoint), registers the
6
+ * eight curated `ticktick_*` tools on the shared service, installs the
7
+ * `ticktick` settings namespace (token / token file / endpoint / protected
8
+ * ids) that the browser settings card edits, and announces the tool set in
9
+ * one system-prompt section.
10
+ *
11
+ * The token is re-read per request: the settings card's secret field wins,
12
+ * then the token file (`$DSH_HOME/.ticktick-token` by default). Writing the
13
+ * file activates the bridge without a config change.
14
+ *
15
+ * Function plugin — no default export (the Loader unwraps
16
+ * `exports.default ?? exports`).
17
+ *
18
+ * @module dsh-ticktick
19
+ */
20
+ import type { Context } from '@deepseek-ai/cordis';
21
+ import z from '@deepseek-ai/schemastery';
22
+ import { type Config, type ResolvedConfig } from './config.js';
23
+ import { type TicktickSettings } from './wire.js';
24
+ export declare const name = "ticktick";
25
+ /** Hard services: the tool registry and the prompt assembly. `settings` is an optional child. */
26
+ export declare const inject: string[];
27
+ export { Config, resolveConfig, DEFAULT_MCP_URL, DEFAULT_TOOL_CALL_TIMEOUT_MS } from './config.js';
28
+ export { TicktickService } from './service.js';
29
+ export type { TicktickServiceConfig } from './service.js';
30
+ export { buildTicktickTools } from './tools.js';
31
+ export { McpStreamableClient, parseMcpMessage } from './mcp.js';
32
+ export type { McpCallResult, McpClientFace, McpTool } from './mcp.js';
33
+ export { isInboxProject, normalizeProjects, normalizeTasks, resolveTools } from './domain.js';
34
+ export type { TicktickProject, TicktickTask, ToolResolver } from './domain.js';
35
+ export type * from './wire.js';
36
+ /** Settings namespace the browser card edits (paired by this exact key). */
37
+ export declare const SETTINGS_NS = "ticktick";
38
+ /** Schemastery schema for the settings namespace (the card renders this). */
39
+ export declare const TicktickSettingsSchema: z<TicktickSettings>;
40
+ /**
41
+ * Resolve the current Bearer token: the settings card's secret wins, then
42
+ * the DIDA365_TOKEN environment variable, then the configured token file.
43
+ * @param settings - current settings layer.
44
+ * @param resolved - loader config.
45
+ * @returns the token, or `null` when unconfigured.
46
+ */
47
+ export declare function resolveToken(settings: TicktickSettings, resolved: ResolvedConfig): string | null;
48
+ /**
49
+ * Mount the bridge: the settings namespace, the Remote service, the eight
50
+ * tools, and the usage announcement.
51
+ *
52
+ * @param ctx - context carrying tools + systemPrompt.
53
+ * @param config - raw loader config; defaults applied through {@link resolveConfig}.
54
+ */
55
+ export declare function apply(ctx: Context, config: Config | undefined): Promise<void>;
56
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAkC,KAAK,MAAM,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAA;AAG9F,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAEvE,eAAO,MAAM,IAAI,aAAa,CAAA;AAE9B,iGAAiG;AACjG,eAAO,MAAM,MAAM,UAA4B,CAAA;AAE/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/D,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC7F,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9E,mBAAmB,WAAW,CAAA;AAE9B,4EAA4E;AAC5E,eAAO,MAAM,WAAW,aAAuB,CAAA;AAE/C,6EAA6E;AAC7E,eAAO,MAAM,sBAAsB,EAAE,CAAC,CAAC,gBAAgB,CAKrD,CAAA;AAOF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAUhG;AAED;;;;;;GAMG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CnF"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Minimal Model Context Protocol streamable-HTTP client for the TickTick
3
+ * endpoint: initialize, tools/list, and tools/call, accepting SSE or JSON
4
+ * responses, propagating the session id and the negotiated protocol version,
5
+ * honoring Retry-After on 429, and surfacing tool-level `isError` failures
6
+ * as thrown errors.
7
+ *
8
+ * @module dsh-ticktick/mcp
9
+ */
10
+ /** One tool as advertised by `tools/list`. */
11
+ export interface McpTool {
12
+ readonly name: string;
13
+ readonly description?: string;
14
+ readonly inputSchema?: {
15
+ readonly properties?: Readonly<Record<string, {
16
+ readonly type?: string;
17
+ }>>;
18
+ readonly required?: readonly string[];
19
+ };
20
+ }
21
+ /** Settled `tools/call` result (text blocks or structured content). */
22
+ export interface McpCallResult {
23
+ readonly content?: readonly {
24
+ readonly type: string;
25
+ readonly text?: string;
26
+ }[];
27
+ readonly structuredContent?: unknown;
28
+ }
29
+ /** Structural face of the MCP client the service drives (test seam). */
30
+ export interface McpClientFace {
31
+ initialize(): Promise<void>;
32
+ listTools(): Promise<readonly McpTool[]>;
33
+ callTool(name: string, args: Record<string, unknown>): Promise<McpCallResult>;
34
+ }
35
+ /**
36
+ * Parse one MCP response body: the last SSE `data:` payload, or plain JSON.
37
+ * @param body - raw response text.
38
+ * @returns the parsed message, or `undefined` for an empty body.
39
+ */
40
+ export declare function parseMcpMessage(body: string): unknown | undefined;
41
+ /** Fetch face, injectable for tests. */
42
+ export type FetchFace = (url: string, init?: RequestInit) => Promise<Response>;
43
+ /**
44
+ * Streamable-HTTP MCP client with Bearer auth. Requests are simple POSTs;
45
+ * notifications tolerate empty responses. A 429 response is retried once
46
+ * after the server's Retry-After delay (bounded to one minute).
47
+ */
48
+ export declare class McpStreamableClient implements McpClientFace {
49
+ private readonly url;
50
+ private readonly token;
51
+ private readonly timeoutMs;
52
+ private readonly fetchFn;
53
+ private sessionId;
54
+ private protocolVersion;
55
+ private nextId;
56
+ /**
57
+ * @param url - MCP server URL (e.g. https://mcp.dida365.com).
58
+ * @param token - Bearer token (the TickTick API 口令).
59
+ * @param timeoutMs - per-request deadline in milliseconds.
60
+ * @param fetchFn - fetch implementation (defaults to global fetch).
61
+ */
62
+ constructor(url: string, token: string, timeoutMs: number, fetchFn?: FetchFace);
63
+ /** Perform the initialize handshake and send the initialized notification. */
64
+ initialize(): Promise<void>;
65
+ /** Fetch the server's tool list. */
66
+ listTools(): Promise<readonly McpTool[]>;
67
+ /**
68
+ * Invoke one tool. A tool-level failure (the MCP result flag `isError`)
69
+ * throws with the server's message — TickTick reports validation failures
70
+ * that way, not as JSON-RPC errors.
71
+ * @param name - the raw MCP tool name.
72
+ * @param args - the tool arguments object.
73
+ * @returns the settled result (text blocks or structured content).
74
+ */
75
+ callTool(name: string, args: Record<string, unknown>): Promise<McpCallResult>;
76
+ /**
77
+ * Send one request and parse the response message: a 429 is retried once
78
+ * after Retry-After, any other non-2xx status throws, and an empty body
79
+ * (notification success) parses to `undefined`.
80
+ * @param request - JSON-RPC payload.
81
+ * @param carryHeaders - include session/protocol headers (false for initialize).
82
+ * @returns the parsed message, or `undefined` for an empty body.
83
+ */
84
+ private post;
85
+ /**
86
+ * Send one request, retrying once after Retry-After when the server
87
+ * answers 429.
88
+ * @param request - JSON-RPC payload.
89
+ * @param carryHeaders - include session/protocol headers (false for initialize).
90
+ * @returns the raw response (body not yet read).
91
+ */
92
+ private send;
93
+ }
94
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAA;QAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KACtC,CAAA;CACF;AAED,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC/E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,wEAAwE;AACxE,MAAM,WAAW,aAAa;IAC5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,SAAS,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC,CAAA;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;CAC9E;AAUD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAQjE;AAED,wCAAwC;AACxC,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAE9E;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAYrD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,eAAe,CAAoB;IAC3C,OAAO,CAAC,MAAM,CAAI;IAElB;;;;;OAKG;gBAEgB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,SAAiB;IAG7C,8EAA8E;IACxE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBjC,oCAAoC;IAC9B,SAAS,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,CAAC;IAO9C;;;;;;;OAOG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBnF;;;;;;;OAOG;YACW,IAAI;IASlB;;;;;;OAMG;YACW,IAAI;CAqBnB"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * The TickTick bridge's host service: drives one lazily bootstrapped MCP
3
+ * streamable-HTTP client against the TickTick endpoint and serves the eight
4
+ * panel/model operations under the `ticktick` Typert Remote namespace.
5
+ *
6
+ * Measured wire facts (live endpoint, 0.1.0 era) encoded here:
7
+ * - list order is descending `sortOrder`; reorder = move_task with the new
8
+ * sortOrder (project tasks) or update_task (inbox tasks);
9
+ * - `update_task` crashes server-side for tasks inside regular projects
10
+ * ("Expecting value: line 1 column 1") — project due dates take the
11
+ * direct-update attempt first and fall back to the move-to-inbox →
12
+ * update → move-back detour on that signature;
13
+ * - clearing a due date writes the epoch sentinel;
14
+ * - a project whose response fails server-side validation (historical
15
+ * `repeatFrom: ''` data) is skipped and reported as a warning, never
16
+ * silently dropped.
17
+ *
18
+ * @module dsh-ticktick/service
19
+ */
20
+ import type { Context } from '@deepseek-ai/cordis';
21
+ import { TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol';
22
+ import type { ToolPins } from './config.js';
23
+ import { type TicktickProject } from './domain.js';
24
+ import { type McpClientFace } from './mcp.js';
25
+ import type { TicktickAddResult, TicktickOkResult, TicktickProbeResult, TicktickStatus, TicktickTasksResult } from './wire.js';
26
+ declare module '@deepseek-ai/dsh-typert-protocol' {
27
+ interface RemoteErrorDetailsMap {
28
+ /** No Bearer token is resolvable from the token file or settings. */
29
+ 'ticktick/no-token': Record<string, never>;
30
+ /** The operation named a task on the protected-id list. */
31
+ 'ticktick/protected': {
32
+ readonly taskId: string;
33
+ };
34
+ /** A required argument is missing or malformed. */
35
+ 'ticktick/bad-request': {
36
+ readonly field: string;
37
+ };
38
+ /** The MCP endpoint rejected or failed the tool call. */
39
+ 'ticktick/tool-error': {
40
+ readonly tool: string;
41
+ };
42
+ }
43
+ }
44
+ declare module '@deepseek-ai/cordis' {
45
+ interface Context {
46
+ /** TickTick task bridge service (this package). */
47
+ ticktick: TicktickService;
48
+ }
49
+ }
50
+ /** Runtime policy the service reads; the token getter re-reads at call time. */
51
+ export interface TicktickServiceConfig {
52
+ /** Resolve the current Bearer token (file or settings); `null` = unconfigured. */
53
+ getToken(): string | null;
54
+ /** TickTick MCP endpoint. */
55
+ readonly mcpUrl: string;
56
+ /** Per-tools/call deadline in milliseconds. */
57
+ readonly toolCallTimeoutMs: number;
58
+ /** Task ids every mutating operation refuses. */
59
+ readonly protectedTaskIds: readonly string[];
60
+ /** Raw tool-name pins. */
61
+ readonly pins: ToolPins;
62
+ }
63
+ /** Default client factory: the real streamable-HTTP client. */
64
+ export type ClientFactory = (url: string, token: string, timeoutMs: number) => McpClientFace;
65
+ /**
66
+ * Host service for the TickTick bridge: status plus the seven task
67
+ * operations, exported over the `ticktick` Remote namespace (hand-written
68
+ * `./typert` manifest, no decorators).
69
+ */
70
+ export declare class TicktickService extends TypertRemoteService {
71
+ private readonly config;
72
+ private readonly createClient;
73
+ /** The MCP client, lazily bootstrapped per token. */
74
+ private client;
75
+ /** Resolved tool names for the bootstrapped client. */
76
+ private resolver;
77
+ /** Token the current client was built for. */
78
+ private tokenAtBoot;
79
+ /** Most recent bridge error message; `null` when the last call settled. */
80
+ private lastError;
81
+ /** Whether the current token has produced a boot error (avoid hot loops). */
82
+ private bootFailed;
83
+ /**
84
+ * @param ctx - owning Cordis context.
85
+ * @param config - runtime policy (token getter, endpoint, timeout, guards, pins).
86
+ * @param createClient - test seam: client factory (defaults to the real MCP client).
87
+ */
88
+ constructor(ctx: Context, config: TicktickServiceConfig, createClient?: ClientFactory);
89
+ /** Connection and configuration facts (no handshake forced). */
90
+ status(): TicktickStatus;
91
+ /** Drop the bootstrapped client so the next call re-reads the token. */
92
+ reset(): void;
93
+ /**
94
+ * One-shot connectivity check over a throwaway client (the cached bridge
95
+ * client is untouched): initialize + tool listing against the current
96
+ * token. Feeds the settings card's "test connection" button.
97
+ */
98
+ probe(): Promise<TicktickProbeResult>;
99
+ /** List the user's projects (the virtual inbox included). */
100
+ projects(): Promise<{
101
+ projects: readonly TicktickProject[];
102
+ }>;
103
+ /**
104
+ * Aggregate undone tasks: one project when named, else every project.
105
+ * Projects whose response fails server-side validation are skipped and
106
+ * reported as warnings; each project's chunk stays sorted by descending
107
+ * sortOrder (the measured list order).
108
+ */
109
+ tasks(projectId?: string): Promise<TicktickTasksResult>;
110
+ /**
111
+ * Completed tasks within a window (P2): `list_completed_tasks_by_date`
112
+ * with a startDate `days` back (default 30) and an optional project.
113
+ */
114
+ completed(projectId?: string, days?: number): Promise<TicktickTasksResult>;
115
+ /** Full-text search over TickTick tasks (P2): `search` / `search_task`. */
116
+ search(query: string): Promise<TicktickTasksResult>;
117
+ /** Batch-create tasks (P2): `batch_add_tasks` over the OpenTask rows. */
118
+ batchAdd(tasks: readonly {
119
+ title: string;
120
+ projectId?: string;
121
+ dueDate?: string;
122
+ }[]): Promise<{
123
+ created: number;
124
+ }>;
125
+ /** Create one task; a named project places it there, otherwise the Inbox. */
126
+ add(title: string, projectId?: string, dueDate?: string): Promise<TicktickAddResult>;
127
+ /** Mark one task complete (TickTick needs both the project and the task id). */
128
+ complete(id: string, projectId: string): Promise<TicktickOkResult>;
129
+ /** Delete one task (TickTick needs both the project and the task id). */
130
+ remove(id: string, projectId: string): Promise<TicktickOkResult>;
131
+ /**
132
+ * Set (or clear) one task's due date. Inbox tasks update directly.
133
+ * Project tasks try the direct update first and fall back to the measured
134
+ * move-to-inbox → update → move-back detour when the server answers with
135
+ * its update_task crash signature.
136
+ */
137
+ setDue(id: string, projectId: string | undefined, dueDate?: string): Promise<TicktickOkResult>;
138
+ /**
139
+ * Move one task to a new position: inbox tasks take update_task with the
140
+ * new sortOrder; project tasks take a same-project move carrying the new
141
+ * sortOrder (the list order is descending sortOrder).
142
+ */
143
+ reorder(id: string, projectId: string | undefined, sortOrder: number): Promise<TicktickOkResult>;
144
+ /** Reject a mutating operation naming an id on the protected list. */
145
+ private assertNotProtected;
146
+ /** Validate the id pair required by complete/delete. */
147
+ private requireIds;
148
+ /**
149
+ * Lazily bootstrap the MCP client and tool resolver for the active token.
150
+ * A token change or a 401-triggered reset rebuilds the client.
151
+ */
152
+ private ensure;
153
+ /**
154
+ * One tools/call with error mapping: tool-level failures carry their raw
155
+ * tool name; a 401 signature resets the client once so the next call
156
+ * re-reads the token file.
157
+ */
158
+ private call;
159
+ }
160
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The curated model-facing tools of the TickTick bridge. All eight reuse the
3
+ * host service's business methods, so the model and the widget share one
4
+ * policy (protected ids, workarounds, error codes). Each `output.schema`
5
+ * returns a structured JSON value — the Code Mode `await tools.ticktick_*`
6
+ * surface derives from it — while `output.render` carries the human text.
7
+ *
8
+ * @module dsh-ticktick/tools
9
+ */
10
+ import { defineTool } from '@deepseek-ai/dsh-tools';
11
+ import type { TicktickService } from './service.js';
12
+ /**
13
+ * Build the eight tools bound to one service instance.
14
+ * @param service - the mounted TickTick service.
15
+ * @returns the registered tool definitions.
16
+ */
17
+ export declare function buildTicktickTools(service: TicktickService): ReturnType<typeof defineTool>[];
18
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAgCnD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,EAAE,CA+R5F"}
@@ -0,0 +1,216 @@
1
+ /**
2
+ * The hand-written Typert HOST manifest for `dsh-ticktick`, exported as
3
+ * `./typert` so the harness's typert-loader registers the `ticktick`
4
+ * invocations automatically when this plugin mounts. Same shape as a
5
+ * generator output (validated by the loader): package face, empty model and
6
+ * schemas, and the canonical invocation list shared with the client Remote
7
+ * contribution (`src/wire.ts`).
8
+ *
9
+ * @module dsh-ticktick/typert
10
+ */
11
+ /** Host Typert manifest (validated by `@deepseek-ai/dsh-typert-loader`). */
12
+ export declare const TYPERT: Readonly<{
13
+ package: "dsh-ticktick";
14
+ face: "host";
15
+ schemas: readonly never[];
16
+ invocations: readonly (Readonly<{
17
+ readonly id: "dsh-ticktick#ticktick/status";
18
+ readonly service: "ticktick";
19
+ readonly namespace: "ticktick";
20
+ readonly method: "status";
21
+ readonly invocation: Readonly<{
22
+ kind: "direct";
23
+ }>;
24
+ readonly parameters: readonly never[];
25
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
26
+ readonly sourceLocation: Readonly<{
27
+ file: "src/wire.ts";
28
+ line: 1;
29
+ column: 1;
30
+ }>;
31
+ }> | Readonly<{
32
+ readonly id: "dsh-ticktick#ticktick/projects";
33
+ readonly service: "ticktick";
34
+ readonly namespace: "ticktick";
35
+ readonly method: "projects";
36
+ readonly invocation: Readonly<{
37
+ kind: "direct";
38
+ }>;
39
+ readonly parameters: readonly never[];
40
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
41
+ readonly sourceLocation: Readonly<{
42
+ file: "src/wire.ts";
43
+ line: 1;
44
+ column: 1;
45
+ }>;
46
+ }> | Readonly<{
47
+ readonly id: "dsh-ticktick#ticktick/tasks";
48
+ readonly service: "ticktick";
49
+ readonly namespace: "ticktick";
50
+ readonly method: "tasks";
51
+ readonly invocation: Readonly<{
52
+ kind: "direct";
53
+ }>;
54
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
55
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
56
+ readonly sourceLocation: Readonly<{
57
+ file: "src/wire.ts";
58
+ line: 1;
59
+ column: 1;
60
+ }>;
61
+ }> | Readonly<{
62
+ readonly id: "dsh-ticktick#ticktick/add";
63
+ readonly service: "ticktick";
64
+ readonly namespace: "ticktick";
65
+ readonly method: "add";
66
+ readonly invocation: Readonly<{
67
+ kind: "direct";
68
+ }>;
69
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
70
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
71
+ readonly sourceLocation: Readonly<{
72
+ file: "src/wire.ts";
73
+ line: 1;
74
+ column: 1;
75
+ }>;
76
+ }> | Readonly<{
77
+ readonly id: "dsh-ticktick#ticktick/complete";
78
+ readonly service: "ticktick";
79
+ readonly namespace: "ticktick";
80
+ readonly method: "complete";
81
+ readonly invocation: Readonly<{
82
+ kind: "direct";
83
+ }>;
84
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
85
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
86
+ readonly sourceLocation: Readonly<{
87
+ file: "src/wire.ts";
88
+ line: 1;
89
+ column: 1;
90
+ }>;
91
+ }> | Readonly<{
92
+ readonly id: "dsh-ticktick#ticktick/remove";
93
+ readonly service: "ticktick";
94
+ readonly namespace: "ticktick";
95
+ readonly method: "remove";
96
+ readonly invocation: Readonly<{
97
+ kind: "direct";
98
+ }>;
99
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
100
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
101
+ readonly sourceLocation: Readonly<{
102
+ file: "src/wire.ts";
103
+ line: 1;
104
+ column: 1;
105
+ }>;
106
+ }> | Readonly<{
107
+ readonly id: "dsh-ticktick#ticktick/setDue";
108
+ readonly service: "ticktick";
109
+ readonly namespace: "ticktick";
110
+ readonly method: "setDue";
111
+ readonly invocation: Readonly<{
112
+ kind: "direct";
113
+ }>;
114
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
115
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
116
+ readonly sourceLocation: Readonly<{
117
+ file: "src/wire.ts";
118
+ line: 1;
119
+ column: 1;
120
+ }>;
121
+ }> | Readonly<{
122
+ readonly id: "dsh-ticktick#ticktick/reorder";
123
+ readonly service: "ticktick";
124
+ readonly namespace: "ticktick";
125
+ readonly method: "reorder";
126
+ readonly invocation: Readonly<{
127
+ kind: "direct";
128
+ }>;
129
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
130
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
131
+ readonly sourceLocation: Readonly<{
132
+ file: "src/wire.ts";
133
+ line: 1;
134
+ column: 1;
135
+ }>;
136
+ }> | Readonly<{
137
+ readonly id: "dsh-ticktick#ticktick/completed";
138
+ readonly service: "ticktick";
139
+ readonly namespace: "ticktick";
140
+ readonly method: "completed";
141
+ readonly invocation: Readonly<{
142
+ kind: "direct";
143
+ }>;
144
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
145
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
146
+ readonly sourceLocation: Readonly<{
147
+ file: "src/wire.ts";
148
+ line: 1;
149
+ column: 1;
150
+ }>;
151
+ }> | Readonly<{
152
+ readonly id: "dsh-ticktick#ticktick/search";
153
+ readonly service: "ticktick";
154
+ readonly namespace: "ticktick";
155
+ readonly method: "search";
156
+ readonly invocation: Readonly<{
157
+ kind: "direct";
158
+ }>;
159
+ readonly parameters: readonly import("@deepseek-ai/dsh-typert-protocol").InvocationParameterDescriptor[];
160
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
161
+ readonly sourceLocation: Readonly<{
162
+ file: "src/wire.ts";
163
+ line: 1;
164
+ column: 1;
165
+ }>;
166
+ }> | Readonly<{
167
+ readonly id: "dsh-ticktick#ticktick/batchAdd";
168
+ readonly service: "ticktick";
169
+ readonly namespace: "ticktick";
170
+ readonly method: "batchAdd";
171
+ readonly invocation: Readonly<{
172
+ kind: "direct";
173
+ }>;
174
+ readonly parameters: readonly Readonly<{
175
+ name: string;
176
+ wire: string;
177
+ source: "json";
178
+ codec: Readonly<{
179
+ mode: "strict";
180
+ typeSymbol: "dsh-ticktick/types#BatchAddTasks";
181
+ schema: import("zod").ZodArray<import("zod").ZodObject<{
182
+ title: import("zod").ZodString;
183
+ projectId: import("zod").ZodOptional<import("zod").ZodString>;
184
+ dueDate: import("zod").ZodOptional<import("zod").ZodString>;
185
+ }, import("zod/v4/core").$strip>>;
186
+ }>;
187
+ }>[];
188
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
189
+ readonly sourceLocation: Readonly<{
190
+ file: "src/wire.ts";
191
+ line: 1;
192
+ column: 1;
193
+ }>;
194
+ }> | Readonly<{
195
+ readonly id: "dsh-ticktick#ticktick/probe";
196
+ readonly service: "ticktick";
197
+ readonly namespace: "ticktick";
198
+ readonly method: "probe";
199
+ readonly invocation: Readonly<{
200
+ kind: "direct";
201
+ }>;
202
+ readonly parameters: readonly never[];
203
+ readonly result: import("@deepseek-ai/dsh-typert-protocol").TypertCodec;
204
+ readonly sourceLocation: Readonly<{
205
+ file: "src/wire.ts";
206
+ line: 1;
207
+ column: 1;
208
+ }>;
209
+ }>)[];
210
+ model: Readonly<{
211
+ services: readonly never[];
212
+ events: readonly never[];
213
+ objects: readonly never[];
214
+ }>;
215
+ }>;
216
+ //# sourceMappingURL=typert.host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typert.host.d.ts","sourceRoot":"","sources":["../../src/typert.host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,4EAA4E;AAC5E,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUjB,CAAA"}