@romandp/context-memory-mcp 1.0.0

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 (91) hide show
  1. package/README.md +454 -0
  2. package/bin/mcp-memory.js +306 -0
  3. package/dist/config/paths.d.ts +10 -0
  4. package/dist/config/paths.d.ts.map +1 -0
  5. package/dist/config/paths.js +41 -0
  6. package/dist/config/paths.js.map +1 -0
  7. package/dist/db/init.d.ts +6 -0
  8. package/dist/db/init.d.ts.map +1 -0
  9. package/dist/db/init.js +37 -0
  10. package/dist/db/init.js.map +1 -0
  11. package/dist/db/migrations/runner.d.ts +9 -0
  12. package/dist/db/migrations/runner.d.ts.map +1 -0
  13. package/dist/db/migrations/runner.js +285 -0
  14. package/dist/db/migrations/runner.js.map +1 -0
  15. package/dist/db/schema.d.ts +51 -0
  16. package/dist/db/schema.d.ts.map +1 -0
  17. package/dist/db/schema.js +496 -0
  18. package/dist/db/schema.js.map +1 -0
  19. package/dist/http/routes.d.ts +3 -0
  20. package/dist/http/routes.d.ts.map +1 -0
  21. package/dist/http/routes.js +968 -0
  22. package/dist/http/routes.js.map +1 -0
  23. package/dist/http/server.d.ts +5 -0
  24. package/dist/http/server.d.ts.map +1 -0
  25. package/dist/http/server.js +45 -0
  26. package/dist/http/server.js.map +1 -0
  27. package/dist/http/swagger.d.ts +2 -0
  28. package/dist/http/swagger.d.ts.map +1 -0
  29. package/dist/http/swagger.js +101 -0
  30. package/dist/http/swagger.js.map +1 -0
  31. package/dist/index.d.ts +2 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +139 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/memory/budget.d.ts +22 -0
  36. package/dist/memory/budget.d.ts.map +1 -0
  37. package/dist/memory/budget.js +51 -0
  38. package/dist/memory/budget.js.map +1 -0
  39. package/dist/memory/facts.d.ts +3 -0
  40. package/dist/memory/facts.d.ts.map +1 -0
  41. package/dist/memory/facts.js +63 -0
  42. package/dist/memory/facts.js.map +1 -0
  43. package/dist/memory/rebuild.d.ts +4 -0
  44. package/dist/memory/rebuild.d.ts.map +1 -0
  45. package/dist/memory/rebuild.js +31 -0
  46. package/dist/memory/rebuild.js.map +1 -0
  47. package/dist/memory/response.d.ts +11 -0
  48. package/dist/memory/response.d.ts.map +1 -0
  49. package/dist/memory/response.js +20 -0
  50. package/dist/memory/response.js.map +1 -0
  51. package/dist/memory/summary.d.ts +3 -0
  52. package/dist/memory/summary.d.ts.map +1 -0
  53. package/dist/memory/summary.js +67 -0
  54. package/dist/memory/summary.js.map +1 -0
  55. package/dist/memory/toon.d.ts +20 -0
  56. package/dist/memory/toon.d.ts.map +1 -0
  57. package/dist/memory/toon.js +102 -0
  58. package/dist/memory/toon.js.map +1 -0
  59. package/dist/memory/view.d.ts +4 -0
  60. package/dist/memory/view.d.ts.map +1 -0
  61. package/dist/memory/view.js +7 -0
  62. package/dist/memory/view.js.map +1 -0
  63. package/dist/server/setup.d.ts +9 -0
  64. package/dist/server/setup.d.ts.map +1 -0
  65. package/dist/server/setup.js +291 -0
  66. package/dist/server/setup.js.map +1 -0
  67. package/dist/tools/audit.d.ts +2 -0
  68. package/dist/tools/audit.d.ts.map +1 -0
  69. package/dist/tools/audit.js +22 -0
  70. package/dist/tools/audit.js.map +1 -0
  71. package/dist/tools/context.d.ts +5 -0
  72. package/dist/tools/context.d.ts.map +1 -0
  73. package/dist/tools/context.js +104 -0
  74. package/dist/tools/context.js.map +1 -0
  75. package/dist/tools/entry.d.ts +9 -0
  76. package/dist/tools/entry.d.ts.map +1 -0
  77. package/dist/tools/entry.js +214 -0
  78. package/dist/tools/entry.js.map +1 -0
  79. package/dist/tools/project.d.ts +4 -0
  80. package/dist/tools/project.d.ts.map +1 -0
  81. package/dist/tools/project.js +54 -0
  82. package/dist/tools/project.js.map +1 -0
  83. package/dist/tools/task.d.ts +4 -0
  84. package/dist/tools/task.d.ts.map +1 -0
  85. package/dist/tools/task.js +49 -0
  86. package/dist/tools/task.js.map +1 -0
  87. package/dist/types/context.d.ts +139 -0
  88. package/dist/types/context.d.ts.map +1 -0
  89. package/dist/types/context.js +2 -0
  90. package/dist/types/context.js.map +1 -0
  91. package/package.json +68 -0
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { getAuditLog } from '../db/schema.js';
3
+ const GetAuditSchema = z.object({
4
+ entity_type: z.enum(['entry', 'task']).optional(),
5
+ entity_id: z.string().optional(),
6
+ project_id: z.string().optional(),
7
+ page: z.number().int().positive().optional(),
8
+ limit: z.number().int().positive().max(200).optional(),
9
+ });
10
+ export async function handleAuditGet(input) {
11
+ const v = GetAuditSchema.parse(input);
12
+ const params = v.page || v.limit ? { page: v.page, limit: v.limit } : undefined;
13
+ const { data, total } = getAuditLog({ entity_type: v.entity_type, entity_id: v.entity_id, project_id: v.project_id }, params);
14
+ const result = { success: true, count: data.length, entries: data };
15
+ if (params) {
16
+ const pageNum = v.page || 1;
17
+ const limitNum = v.limit || total;
18
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
19
+ }
20
+ return result;
21
+ }
22
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAc;IACjD,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAW,CACjC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,EAChF,MAAM,CACP,CAAC;IACF,MAAM,MAAM,GAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC;QAClC,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function handleAddDecision(input: unknown): Promise<any>;
2
+ export declare function handleAddRelationship(input: unknown): Promise<any>;
3
+ export declare function handleGetEntryContext(input: unknown): Promise<any>;
4
+ export declare function handleMemoryFactsGet(input: unknown): Promise<any>;
5
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAyCA,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAepE;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAiBxE;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAYxE;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAiBvE"}
@@ -0,0 +1,104 @@
1
+ import { z } from 'zod';
2
+ import { addDesignDecision, addEntryRelationship, getCompactEntryContext, getEntryContext, getEntry, listMemoryFacts } from '../db/schema.js';
3
+ import { randomUUID } from 'crypto';
4
+ import { rebuildEntryMemory } from '../memory/rebuild.js';
5
+ import { applyCursor, applyFactCharBudget, applyItemBudget, buildNextCursor } from '../memory/budget.js';
6
+ import { withMetrics } from '../memory/response.js';
7
+ import { parseFormat, parseView } from '../memory/view.js';
8
+ import { setToonMeta, toToonEntryContext, toToonFacts } from '../memory/toon.js';
9
+ const AddDecisionSchema = z.object({
10
+ entry_id: z.string().min(1),
11
+ decision: z.string().min(1),
12
+ rationale: z.string().min(1),
13
+ alternatives_considered: z.string().optional(),
14
+ });
15
+ const AddRelationshipSchema = z.object({
16
+ source_entry_id: z.string().min(1),
17
+ target_entry_id: z.string().min(1),
18
+ relationship_type: z.enum(['depends_on', 'implements', 'related_to', 'supersedes']),
19
+ });
20
+ const GetContextSchema = z.object({
21
+ entry_id: z.string().min(1),
22
+ view: z.enum(['full', 'summary', 'compact']).optional(),
23
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
24
+ });
25
+ const GetFactsSchema = z.object({
26
+ project_id: z.string().optional(),
27
+ entry_id: z.string().optional(),
28
+ kind: z.string().optional(),
29
+ page: z.number().int().positive().optional(),
30
+ limit: z.number().int().positive().max(200).optional(),
31
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
32
+ max_items: z.number().int().positive().max(200).optional(),
33
+ max_chars: z.number().int().positive().optional(),
34
+ cursor: z.string().optional(),
35
+ });
36
+ export async function handleAddDecision(input) {
37
+ const v = AddDecisionSchema.parse(input);
38
+ const existing = getEntry(v.entry_id);
39
+ if (!existing)
40
+ return { success: false, message: `Entry ${v.entry_id} not found` };
41
+ const id = randomUUID();
42
+ const now = new Date().toISOString();
43
+ const dd = {
44
+ id, entry_id: v.entry_id, decision: v.decision,
45
+ rationale: v.rationale, alternatives_considered: v.alternatives_considered,
46
+ created_at: now,
47
+ };
48
+ addDesignDecision(dd);
49
+ rebuildEntryMemory(v.entry_id);
50
+ return { success: true, id, message: `Decision "${v.decision}" recorded` };
51
+ }
52
+ export async function handleAddRelationship(input) {
53
+ const v = AddRelationshipSchema.parse(input);
54
+ const source = getEntry(v.source_entry_id);
55
+ if (!source)
56
+ return { success: false, message: `Source entry ${v.source_entry_id} not found` };
57
+ const target = getEntry(v.target_entry_id);
58
+ if (!target)
59
+ return { success: false, message: `Target entry ${v.target_entry_id} not found` };
60
+ const id = randomUUID();
61
+ const now = new Date().toISOString();
62
+ const rel = {
63
+ id, source_entry_id: v.source_entry_id, target_entry_id: v.target_entry_id,
64
+ relationship_type: v.relationship_type, created_at: now,
65
+ };
66
+ addEntryRelationship(rel);
67
+ rebuildEntryMemory(v.source_entry_id);
68
+ rebuildEntryMemory(v.target_entry_id);
69
+ return { success: true, id, message: `Relationship "${v.relationship_type}" created` };
70
+ }
71
+ export async function handleGetEntryContext(input) {
72
+ const v = GetContextSchema.parse(input);
73
+ const view = parseView(v.view);
74
+ const format = parseFormat(v.format);
75
+ if (view !== 'full') {
76
+ const ctx = getCompactEntryContext(v.entry_id);
77
+ if (!ctx)
78
+ return { success: false, message: `Entry ${v.entry_id} not found` };
79
+ return format === 'json' ? withMetrics({ success: true, context: ctx }) : setToonMeta(toToonEntryContext(ctx, format), { count: 1 });
80
+ }
81
+ const ctx = getEntryContext(v.entry_id);
82
+ if (!ctx)
83
+ return { success: false, message: `Entry ${v.entry_id} not found` };
84
+ return { success: true, context: ctx };
85
+ }
86
+ export async function handleMemoryFactsGet(input) {
87
+ const v = GetFactsSchema.parse(input);
88
+ const format = parseFormat(v.format);
89
+ const params = v.page || v.limit ? { page: v.page, limit: v.limit } : undefined;
90
+ const { data, total } = listMemoryFacts({ project_id: v.project_id, entry_id: v.entry_id, kind: v.kind }, params);
91
+ const cursorData = applyCursor(data, v.cursor);
92
+ const itemBudget = applyItemBudget(cursorData, v.max_items);
93
+ const charBudget = applyFactCharBudget(itemBudget.items, v.max_chars);
94
+ const truncated = itemBudget.truncated || charBudget.truncated;
95
+ const nextCursor = buildNextCursor(cursorData, charBudget.items, truncated);
96
+ const result = format === 'json' ? withMetrics({ success: true, count: charBudget.items.length, facts: charBudget.items, truncated, next_cursor: nextCursor }) : setToonMeta(toToonFacts(charBudget.items, format), { truncated, next: nextCursor, count: charBudget.items.length });
97
+ if (format === 'json' && params) {
98
+ const pageNum = v.page || 1;
99
+ const limitNum = v.limit || total;
100
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
101
+ }
102
+ return result;
103
+ }
104
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE9I,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/C,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;CACpF,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACtD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IAC1D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAc;IACpD,MAAM,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,YAAY,EAAE,CAAC;IAEnF,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,EAAE,GAAmB;QACzB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ;QAC9C,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAC,uBAAuB;QAC1E,UAAU,EAAE,GAAG;KAChB,CAAC;IACF,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtB,kBAAkB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,QAAQ,YAAY,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAc;IACxD,MAAM,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,eAAe,YAAY,EAAE,CAAC;IAC/F,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,eAAe,YAAY,EAAE,CAAC;IAE/F,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,GAAG,GAAsB;QAC7B,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe;QAC1E,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,EAAE,UAAU,EAAE,GAAG;KACxD,CAAC;IACF,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC1B,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACtC,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC,iBAAiB,WAAW,EAAE,CAAC;AACzF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAAc;IACxD,MAAM,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,YAAY,EAAE,CAAC;QAC9E,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACvI,CAAC;IACD,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,YAAY,EAAE,CAAC;IAC9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAAc;IACvD,MAAM,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAClH,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IACtE,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;IAC/D,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAQ,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1R,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC;QAClC,MAAM,CAAC,UAAU,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9G,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function handleEntryCreate(input: unknown): Promise<any>;
2
+ export declare function handleEntryGet(input: unknown): Promise<any>;
3
+ export declare function handleEntrySearch(input: unknown): Promise<any>;
4
+ export declare function handleGlobalEntrySearch(input: unknown): Promise<any>;
5
+ export declare function handleEntryUpdate(input: unknown): Promise<any>;
6
+ export declare function handleEntryDelete(input: unknown): Promise<any>;
7
+ export declare function handleEntryGetSummary(input: unknown): Promise<any>;
8
+ export declare function handleEntryBatchGet(input: unknown): Promise<any>;
9
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../../src/tools/entry.ts"],"names":[],"mappings":"AAkEA,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAQpE;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAuBjE;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CA4BpE;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CA4B1E;AAWD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAcpE;AAMD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAMpE;AAOD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAMxE;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAWtE"}
@@ -0,0 +1,214 @@
1
+ import { z } from 'zod';
2
+ import { createEntry, getCompactEntriesByIds, getCompactEntry, getEntry, getProjectEntries, searchCompactEntries, searchEntries, searchAllEntries, updateEntry, deleteEntry } from '../db/schema.js';
3
+ import { randomUUID } from 'crypto';
4
+ import { rebuildEntryMemory } from '../memory/rebuild.js';
5
+ import { applyCompactEntryCharBudget, applyCursor, applyItemBudget, buildNextCursor } from '../memory/budget.js';
6
+ import { withMetrics } from '../memory/response.js';
7
+ import { parseFormat, parseView } from '../memory/view.js';
8
+ import { setToonMeta, toToonEntrySummary, toToonSearchResults } from '../memory/toon.js';
9
+ function isDefined(value) {
10
+ return value !== null;
11
+ }
12
+ const CreateSchema = z.object({
13
+ project_id: z.string().min(1),
14
+ section: z.enum(['plan', 'design', 'tasks', 'general']),
15
+ title: z.string().min(1),
16
+ content: z.string().optional().default(''),
17
+ status: z.enum(['draft', 'review', 'done']).optional().default('draft'),
18
+ parent_id: z.string().optional(),
19
+ });
20
+ const GetSchema = z.object({
21
+ project_id: z.string().min(1),
22
+ section: z.enum(['plan', 'design', 'tasks', 'general']).optional(),
23
+ page: z.number().int().positive().optional(),
24
+ limit: z.number().int().positive().max(200).optional(),
25
+ view: z.enum(['full', 'summary', 'compact']).optional(),
26
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
27
+ max_items: z.number().int().positive().max(200).optional(),
28
+ max_chars: z.number().int().positive().optional(),
29
+ cursor: z.string().optional(),
30
+ });
31
+ const SearchSchema = z.object({
32
+ project_id: z.string().min(1),
33
+ query: z.string().min(1),
34
+ page: z.number().int().positive().optional(),
35
+ limit: z.number().int().positive().max(200).optional(),
36
+ view: z.enum(['full', 'summary', 'compact']).optional(),
37
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
38
+ max_items: z.number().int().positive().max(200).optional(),
39
+ max_chars: z.number().int().positive().optional(),
40
+ cursor: z.string().optional(),
41
+ });
42
+ const SearchGlobalSchema = z.object({
43
+ query: z.string().min(1),
44
+ page: z.number().int().positive().optional(),
45
+ limit: z.number().int().positive().max(200).optional(),
46
+ view: z.enum(['full', 'summary', 'compact']).optional(),
47
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
48
+ max_items: z.number().int().positive().max(200).optional(),
49
+ max_chars: z.number().int().positive().optional(),
50
+ cursor: z.string().optional(),
51
+ });
52
+ const BatchSchema = z.object({
53
+ entry_ids: z.array(z.string().min(1)).min(1).max(200),
54
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
55
+ max_items: z.number().int().positive().max(200).optional(),
56
+ max_chars: z.number().int().positive().optional(),
57
+ cursor: z.string().optional(),
58
+ });
59
+ export async function handleEntryCreate(input) {
60
+ const v = CreateSchema.parse(input);
61
+ const id = randomUUID();
62
+ const now = new Date().toISOString();
63
+ const entry = { id, project_id: v.project_id, section: v.section, title: v.title, content: v.content || '', status: v.status || 'draft', parent_id: v.parent_id, created_at: now, updated_at: now };
64
+ createEntry(entry);
65
+ rebuildEntryMemory(id);
66
+ return { success: true, id, message: `Entry "${v.title}" created in ${v.section}` };
67
+ }
68
+ export async function handleEntryGet(input) {
69
+ const v = GetSchema.parse(input);
70
+ const view = parseView(v.view);
71
+ const format = parseFormat(v.format);
72
+ const params = v.page || v.limit ? { page: v.page, limit: v.limit } : undefined;
73
+ const { data, total } = getProjectEntries(v.project_id, v.section, params);
74
+ if (view !== 'full') {
75
+ const entries = applyCursor(data.map(entry => getCompactEntry(entry.id)).filter(isDefined), v.cursor);
76
+ const itemBudget = applyItemBudget(entries, v.max_items);
77
+ const charBudget = applyCompactEntryCharBudget(itemBudget.items, v.max_chars);
78
+ const truncated = itemBudget.truncated || charBudget.truncated;
79
+ const nextCursor = buildNextCursor(entries, charBudget.items, truncated);
80
+ return format === 'json'
81
+ ? withMetrics({ success: true, count: charBudget.items.length, entries: charBudget.items, truncated, next_cursor: nextCursor })
82
+ : setToonMeta(toToonSearchResults(charBudget.items, format, { truncated, next: nextCursor }), { truncated, next: nextCursor, count: charBudget.items.length });
83
+ }
84
+ const result = { success: true, count: data.length, entries: data };
85
+ if (params) {
86
+ const pageNum = v.page || 1;
87
+ const limitNum = v.limit || total;
88
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
89
+ }
90
+ return result;
91
+ }
92
+ export async function handleEntrySearch(input) {
93
+ const v = SearchSchema.parse(input);
94
+ const view = parseView(v.view);
95
+ const format = parseFormat(v.format);
96
+ const params = v.page || v.limit ? { page: v.page, limit: v.limit } : undefined;
97
+ if (view !== 'full') {
98
+ const { data, total } = searchCompactEntries(v.query, v.project_id, params);
99
+ const cursorData = applyCursor(data, v.cursor);
100
+ const itemBudget = applyItemBudget(cursorData, v.max_items);
101
+ const charBudget = applyCompactEntryCharBudget(itemBudget.items, v.max_chars);
102
+ const truncated = itemBudget.truncated || charBudget.truncated;
103
+ const nextCursor = buildNextCursor(cursorData, charBudget.items, truncated);
104
+ const result = format === 'json' ? withMetrics({ success: true, count: charBudget.items.length, results: charBudget.items, truncated, next_cursor: nextCursor }) : setToonMeta(toToonSearchResults(charBudget.items, format, { truncated, next: nextCursor }), { truncated, next: nextCursor, count: charBudget.items.length });
105
+ if (format === 'json' && params) {
106
+ const pageNum = v.page || 1;
107
+ const limitNum = v.limit || total;
108
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
109
+ }
110
+ return result;
111
+ }
112
+ const { data, total } = searchEntries(v.project_id, v.query, params);
113
+ const result = { success: true, count: data.length, results: data };
114
+ if (params) {
115
+ const pageNum = v.page || 1;
116
+ const limitNum = v.limit || total;
117
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
118
+ }
119
+ return result;
120
+ }
121
+ export async function handleGlobalEntrySearch(input) {
122
+ const v = SearchGlobalSchema.parse(input);
123
+ const view = parseView(v.view);
124
+ const format = parseFormat(v.format);
125
+ const params = v.page || v.limit ? { page: v.page, limit: v.limit } : undefined;
126
+ if (view !== 'full') {
127
+ const { data, total } = searchCompactEntries(v.query, undefined, params);
128
+ const cursorData = applyCursor(data, v.cursor);
129
+ const itemBudget = applyItemBudget(cursorData, v.max_items);
130
+ const charBudget = applyCompactEntryCharBudget(itemBudget.items, v.max_chars);
131
+ const truncated = itemBudget.truncated || charBudget.truncated;
132
+ const nextCursor = buildNextCursor(cursorData, charBudget.items, truncated);
133
+ const result = format === 'json' ? withMetrics({ success: true, count: charBudget.items.length, results: charBudget.items, truncated, next_cursor: nextCursor }) : setToonMeta(toToonSearchResults(charBudget.items, format, { truncated, next: nextCursor }), { truncated, next: nextCursor, count: charBudget.items.length });
134
+ if (format === 'json' && params) {
135
+ const pageNum = v.page || 1;
136
+ const limitNum = v.limit || total;
137
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
138
+ }
139
+ return result;
140
+ }
141
+ const { data, total } = searchAllEntries(v.query, params);
142
+ const result = { success: true, count: data.length, results: data };
143
+ if (params) {
144
+ const pageNum = v.page || 1;
145
+ const limitNum = v.limit || total;
146
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
147
+ }
148
+ return result;
149
+ }
150
+ const UpdateSchema = z.object({
151
+ id: z.string().min(1),
152
+ title: z.string().optional(),
153
+ content: z.string().optional(),
154
+ status: z.enum(['draft', 'review', 'done']).optional(),
155
+ section: z.enum(['plan', 'design', 'tasks', 'general']).optional(),
156
+ parent_id: z.string().optional().nullable(),
157
+ });
158
+ export async function handleEntryUpdate(input) {
159
+ const v = UpdateSchema.parse(input);
160
+ const existing = getEntry(v.id);
161
+ if (!existing)
162
+ return { success: false, message: `Entry ${v.id} not found` };
163
+ const updates = {};
164
+ if (v.title !== undefined)
165
+ updates.title = v.title;
166
+ if (v.content !== undefined)
167
+ updates.content = v.content;
168
+ if (v.status !== undefined)
169
+ updates.status = v.status;
170
+ if (v.section !== undefined)
171
+ updates.section = v.section;
172
+ if (v.parent_id !== undefined)
173
+ updates.parent_id = v.parent_id || undefined;
174
+ updateEntry(v.id, updates);
175
+ rebuildEntryMemory(v.id);
176
+ const updated = getEntry(v.id);
177
+ return { success: true, entry: updated, message: `Entry ${v.id} updated` };
178
+ }
179
+ const DeleteSchema = z.object({
180
+ id: z.string().min(1),
181
+ });
182
+ export async function handleEntryDelete(input) {
183
+ const v = DeleteSchema.parse(input);
184
+ const existing = getEntry(v.id);
185
+ if (!existing)
186
+ return { success: false, message: `Entry ${v.id} not found` };
187
+ deleteEntry(v.id);
188
+ return { success: true, message: `Entry ${v.id} deleted` };
189
+ }
190
+ const SummarySchema = z.object({
191
+ entry_id: z.string().min(1),
192
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
193
+ });
194
+ export async function handleEntryGetSummary(input) {
195
+ const v = SummarySchema.parse(input);
196
+ const format = parseFormat(v.format);
197
+ const entry = getCompactEntry(v.entry_id);
198
+ if (!entry)
199
+ return { success: false, message: `Entry ${v.entry_id} not found` };
200
+ return format === 'json' ? { success: true, entry } : toToonEntrySummary(entry, format);
201
+ }
202
+ export async function handleEntryBatchGet(input) {
203
+ const v = BatchSchema.parse(input);
204
+ const format = parseFormat(v.format);
205
+ const entries = applyCursor(getCompactEntriesByIds(v.entry_ids), v.cursor);
206
+ const itemBudget = applyItemBudget(entries, v.max_items);
207
+ const charBudget = applyCompactEntryCharBudget(itemBudget.items, v.max_chars);
208
+ const truncated = itemBudget.truncated || charBudget.truncated;
209
+ const nextCursor = buildNextCursor(entries, charBudget.items, truncated);
210
+ return format === 'json'
211
+ ? withMetrics({ success: true, count: charBudget.items.length, entries: charBudget.items, truncated, next_cursor: nextCursor })
212
+ : setToonMeta(toToonSearchResults(charBudget.items, format, { truncated, next: nextCursor }), { truncated, next: nextCursor, count: charBudget.items.length });
213
+ }
214
+ //# sourceMappingURL=entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/tools/entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function handleProjectCreate(input: unknown): Promise<any>;
2
+ export declare function handleProjectList(input?: unknown): Promise<any>;
3
+ export declare function handleProjectGet(input: unknown): Promise<any>;
4
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"AAcA,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAOtE;AAED,wBAAsB,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAUrE;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAoBnE"}
@@ -0,0 +1,54 @@
1
+ import { z } from 'zod';
2
+ import { createProject, getProject, getAllProjects, getProjectCompact } from '../db/schema.js';
3
+ import { getClassifications } from '../db/schema.js';
4
+ import { getProjectEntries, getProjectTasks } from '../db/schema.js';
5
+ import { randomUUID } from 'crypto';
6
+ import { parseFormat } from '../memory/view.js';
7
+ import { toToonProjectCompact } from '../memory/toon.js';
8
+ const CreateSchema = z.object({
9
+ name: z.string().min(1),
10
+ description: z.string().optional(),
11
+ });
12
+ export async function handleProjectCreate(input) {
13
+ const v = CreateSchema.parse(input);
14
+ const id = randomUUID();
15
+ const now = new Date().toISOString();
16
+ const project = { id, name: v.name, description: v.description, status: 'active', created_at: now, updated_at: now };
17
+ createProject(project);
18
+ return { success: true, id, message: `Project "${v.name}" created` };
19
+ }
20
+ export async function handleProjectList(input) {
21
+ const params = input ? z.object({ page: z.number().int().positive().optional(), limit: z.number().int().positive().max(200).optional() }).optional().parse(input) : undefined;
22
+ const { data, total } = getAllProjects(params);
23
+ const result = { success: true, projects: data };
24
+ if (params?.page || params?.limit) {
25
+ const pageNum = params?.page || 1;
26
+ const limitNum = params?.limit || total;
27
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
28
+ }
29
+ return result;
30
+ }
31
+ export async function handleProjectGet(input) {
32
+ const { id, view, format, entry_limit, task_limit } = z.object({
33
+ id: z.string().min(1),
34
+ view: z.enum(['full', 'summary', 'compact']).optional(),
35
+ format: z.enum(['json', 'toon-r', 'toon-d']).optional(),
36
+ entry_limit: z.number().int().positive().optional(),
37
+ task_limit: z.number().int().positive().optional(),
38
+ }).parse(input);
39
+ const project = getProject(id);
40
+ if (!project)
41
+ return { success: false, message: `Project ${id} not found` };
42
+ if (view === 'summary' || view === 'compact') {
43
+ const compact = getProjectCompact(id, { entryLimit: entry_limit, taskLimit: task_limit });
44
+ if (!compact)
45
+ return { success: false, message: `Project ${id} not found` };
46
+ const resolvedFormat = parseFormat(format);
47
+ return resolvedFormat === 'json' ? { success: true, ...compact } : toToonProjectCompact(compact, resolvedFormat);
48
+ }
49
+ const { data: entries } = getProjectEntries(id);
50
+ const { data: tasks } = getProjectTasks(id);
51
+ const classifications = getClassifications('project', id);
52
+ return { success: true, project, entries, tasks, classifications };
53
+ }
54
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/tools/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function handleTaskCreate(input: unknown): Promise<any>;
2
+ export declare function handleTaskList(input: unknown): Promise<any>;
3
+ export declare function handleTaskUpdate(input: unknown): Promise<any>;
4
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"AAyBA,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAOnE;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAWjE;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAMnE"}
@@ -0,0 +1,49 @@
1
+ import { z } from 'zod';
2
+ import { createTask, getTask, getProjectTasks, updateTask } from '../db/schema.js';
3
+ import { randomUUID } from 'crypto';
4
+ const CreateSchema = z.object({
5
+ project_id: z.string().min(1),
6
+ sdd_entry_id: z.string().optional(),
7
+ title: z.string().min(1),
8
+ description: z.string().optional(),
9
+ priority: z.enum(['low', 'medium', 'high', 'critical']).optional().default('medium'),
10
+ });
11
+ const ListSchema = z.object({
12
+ project_id: z.string().min(1),
13
+ sdd_entry_id: z.string().optional(),
14
+ page: z.number().int().positive().optional(),
15
+ limit: z.number().int().positive().max(200).optional(),
16
+ });
17
+ const UpdateSchema = z.object({
18
+ id: z.string().min(1),
19
+ status: z.enum(['pending', 'in_progress', 'completed', 'cancelled']),
20
+ });
21
+ export async function handleTaskCreate(input) {
22
+ const v = CreateSchema.parse(input);
23
+ const id = randomUUID();
24
+ const now = new Date().toISOString();
25
+ const task = { id, project_id: v.project_id, sdd_entry_id: v.sdd_entry_id, title: v.title, description: v.description, status: 'pending', priority: v.priority || 'medium', created_at: now, updated_at: now };
26
+ createTask(task);
27
+ return { success: true, id, message: `Task "${v.title}" created` };
28
+ }
29
+ export async function handleTaskList(input) {
30
+ const v = ListSchema.parse(input);
31
+ const params = v.page || v.limit ? { page: v.page, limit: v.limit } : undefined;
32
+ const { data, total } = getProjectTasks(v.project_id, v.sdd_entry_id, params);
33
+ const result = { success: true, count: data.length, tasks: data };
34
+ if (params) {
35
+ const pageNum = v.page || 1;
36
+ const limitNum = v.limit || total;
37
+ result.pagination = { page: pageNum, limit: limitNum, total, totalPages: Math.ceil(total / limitNum) || 1 };
38
+ }
39
+ return result;
40
+ }
41
+ export async function handleTaskUpdate(input) {
42
+ const v = UpdateSchema.parse(input);
43
+ const existing = getTask(v.id);
44
+ if (!existing)
45
+ return { success: false, message: `Task ${v.id} not found` };
46
+ updateTask(v.id, { status: v.status });
47
+ return { success: true, message: `Task ${v.id} updated to ${v.status}` };
48
+ }
49
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/tools/task.ts"],"names":[],"mappings":"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"}