task-o-matic 0.0.13 → 0.0.15

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 (144) hide show
  1. package/dist/cli/display/progress.d.ts +15 -2
  2. package/dist/cli/display/progress.d.ts.map +1 -1
  3. package/dist/cli/display/progress.js +72 -4
  4. package/dist/commands/benchmark.d.ts.map +1 -1
  5. package/dist/commands/benchmark.js +11 -3
  6. package/dist/commands/init.d.ts.map +1 -1
  7. package/dist/commands/init.js +60 -12
  8. package/dist/commands/prd.js +7 -1
  9. package/dist/commands/tasks/delete.d.ts.map +1 -1
  10. package/dist/commands/tasks/delete.js +2 -1
  11. package/dist/commands/tasks/document/add.d.ts.map +1 -1
  12. package/dist/commands/tasks/document/add.js +5 -4
  13. package/dist/commands/tasks/document/get.d.ts.map +1 -1
  14. package/dist/commands/tasks/document/get.js +2 -1
  15. package/dist/commands/tasks/list.js +2 -2
  16. package/dist/commands/tasks/next.js +4 -4
  17. package/dist/commands/tasks/plan/set.d.ts.map +1 -1
  18. package/dist/commands/tasks/plan/set.js +11 -3
  19. package/dist/commands/tasks/show.d.ts.map +1 -1
  20. package/dist/commands/tasks/show.js +2 -1
  21. package/dist/commands/tasks/status.d.ts.map +1 -1
  22. package/dist/commands/tasks/status.js +4 -3
  23. package/dist/commands/tasks/update.d.ts.map +1 -1
  24. package/dist/commands/tasks/update.js +7 -1
  25. package/dist/lib/ai-service/ai-operations.d.ts +1 -1
  26. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
  27. package/dist/lib/ai-service/base-operations.d.ts +22 -0
  28. package/dist/lib/ai-service/base-operations.d.ts.map +1 -1
  29. package/dist/lib/ai-service/base-operations.js +29 -1
  30. package/dist/lib/ai-service/model-provider.d.ts.map +1 -1
  31. package/dist/lib/ai-service/model-provider.js +37 -6
  32. package/dist/lib/ai-service/task-operations.d.ts +2 -1
  33. package/dist/lib/ai-service/task-operations.d.ts.map +1 -1
  34. package/dist/lib/ai-service/task-operations.js +135 -173
  35. package/dist/lib/benchmark/registry.d.ts.map +1 -1
  36. package/dist/lib/benchmark/registry.js +6 -10
  37. package/dist/lib/better-t-stack-cli.d.ts +36 -21
  38. package/dist/lib/better-t-stack-cli.d.ts.map +1 -1
  39. package/dist/lib/better-t-stack-cli.js +212 -33
  40. package/dist/lib/bootstrap/cli-bootstrap.d.ts +14 -0
  41. package/dist/lib/bootstrap/cli-bootstrap.d.ts.map +1 -0
  42. package/dist/lib/bootstrap/cli-bootstrap.js +325 -0
  43. package/dist/lib/bootstrap/index.d.ts +4 -0
  44. package/dist/lib/bootstrap/index.d.ts.map +1 -0
  45. package/dist/lib/bootstrap/index.js +19 -0
  46. package/dist/lib/bootstrap/medusa-bootstrap.d.ts +14 -0
  47. package/dist/lib/bootstrap/medusa-bootstrap.d.ts.map +1 -0
  48. package/dist/lib/bootstrap/medusa-bootstrap.js +218 -0
  49. package/dist/lib/bootstrap/opentui-bootstrap.d.ts +11 -0
  50. package/dist/lib/bootstrap/opentui-bootstrap.d.ts.map +1 -0
  51. package/dist/lib/bootstrap/opentui-bootstrap.js +342 -0
  52. package/dist/lib/config-validation.d.ts +215 -0
  53. package/dist/lib/config-validation.d.ts.map +1 -0
  54. package/dist/lib/config-validation.js +246 -0
  55. package/dist/lib/config.d.ts +14 -0
  56. package/dist/lib/config.d.ts.map +1 -1
  57. package/dist/lib/config.js +37 -5
  58. package/dist/lib/storage/file-system.d.ts.map +1 -1
  59. package/dist/lib/storage/file-system.js +81 -21
  60. package/dist/lib/task-execution-core.d.ts.map +1 -1
  61. package/dist/lib/task-execution-core.js +3 -2
  62. package/dist/services/prd.d.ts +17 -0
  63. package/dist/services/prd.d.ts.map +1 -1
  64. package/dist/services/prd.js +67 -60
  65. package/dist/services/tasks.d.ts +317 -3
  66. package/dist/services/tasks.d.ts.map +1 -1
  67. package/dist/services/tasks.js +531 -185
  68. package/dist/services/workflow-ai-assistant.d.ts.map +1 -1
  69. package/dist/services/workflow-ai-assistant.js +19 -6
  70. package/dist/test/lib/ai-service/task-operations.test.d.ts +2 -0
  71. package/dist/test/lib/ai-service/task-operations.test.d.ts.map +1 -0
  72. package/dist/test/lib/ai-service/task-operations.test.js +362 -0
  73. package/dist/test/mocks/mock-ai-operations.d.ts +15 -0
  74. package/dist/test/mocks/mock-ai-operations.d.ts.map +1 -0
  75. package/dist/test/mocks/mock-ai-operations.js +107 -0
  76. package/dist/test/mocks/mock-context-builder.d.ts +10 -0
  77. package/dist/test/mocks/mock-context-builder.d.ts.map +1 -0
  78. package/dist/test/mocks/mock-context-builder.js +81 -0
  79. package/dist/test/mocks/mock-model-provider.d.ts +7 -0
  80. package/dist/test/mocks/mock-model-provider.d.ts.map +1 -0
  81. package/dist/test/mocks/mock-model-provider.js +21 -0
  82. package/dist/test/mocks/mock-service-factory.d.ts +11 -0
  83. package/dist/test/mocks/mock-service-factory.d.ts.map +1 -0
  84. package/dist/test/mocks/mock-service-factory.js +61 -0
  85. package/dist/test/mocks/mock-storage.d.ts +50 -0
  86. package/dist/test/mocks/mock-storage.d.ts.map +1 -0
  87. package/dist/test/mocks/mock-storage.js +145 -0
  88. package/dist/test/services/task-service.test.d.ts +2 -0
  89. package/dist/test/services/task-service.test.d.ts.map +1 -0
  90. package/dist/test/services/task-service.test.js +352 -0
  91. package/dist/test/test-mock-setup.d.ts +26 -0
  92. package/dist/test/test-mock-setup.d.ts.map +1 -0
  93. package/dist/test/test-mock-setup.js +41 -0
  94. package/dist/test/test-setup.d.ts +9 -0
  95. package/dist/test/test-setup.d.ts.map +1 -0
  96. package/dist/test/test-setup.js +44 -0
  97. package/dist/test/test-utils.d.ts +22 -0
  98. package/dist/test/test-utils.d.ts.map +1 -0
  99. package/dist/test/test-utils.js +37 -0
  100. package/dist/test/utils/ai-operation-utility.test.d.ts +2 -0
  101. package/dist/test/utils/ai-operation-utility.test.d.ts.map +1 -0
  102. package/dist/test/utils/ai-operation-utility.test.js +290 -0
  103. package/dist/test/utils/error-handling.test.d.ts +2 -0
  104. package/dist/test/utils/error-handling.test.d.ts.map +1 -0
  105. package/dist/test/utils/error-handling.test.js +231 -0
  106. package/dist/types/index.d.ts +36 -1
  107. package/dist/types/index.d.ts.map +1 -1
  108. package/dist/types/results.d.ts +60 -6
  109. package/dist/types/results.d.ts.map +1 -1
  110. package/dist/utils/ai-operation-utility.d.ts +142 -0
  111. package/dist/utils/ai-operation-utility.d.ts.map +1 -0
  112. package/dist/utils/ai-operation-utility.js +288 -0
  113. package/dist/utils/ai-service-factory.d.ts +10 -0
  114. package/dist/utils/ai-service-factory.d.ts.map +1 -1
  115. package/dist/utils/ai-service-factory.js +19 -1
  116. package/dist/utils/cli-validators.d.ts +2 -2
  117. package/dist/utils/cli-validators.d.ts.map +1 -1
  118. package/dist/utils/cli-validators.js +7 -6
  119. package/dist/utils/error-utils.d.ts +70 -0
  120. package/dist/utils/error-utils.d.ts.map +1 -0
  121. package/dist/utils/error-utils.js +104 -0
  122. package/dist/utils/file-utils.d.ts +49 -0
  123. package/dist/utils/file-utils.d.ts.map +1 -0
  124. package/dist/utils/file-utils.js +82 -0
  125. package/dist/utils/id-generator.d.ts +92 -0
  126. package/dist/utils/id-generator.d.ts.map +1 -0
  127. package/dist/utils/id-generator.js +146 -0
  128. package/dist/utils/model-executor-parser.d.ts +1 -1
  129. package/dist/utils/model-executor-parser.d.ts.map +1 -1
  130. package/dist/utils/model-executor-parser.js +3 -2
  131. package/dist/utils/stack-formatter.d.ts +2 -1
  132. package/dist/utils/stack-formatter.d.ts.map +1 -1
  133. package/dist/utils/stack-formatter.js +8 -2
  134. package/dist/utils/storage-utils.d.ts +49 -0
  135. package/dist/utils/storage-utils.d.ts.map +1 -0
  136. package/dist/utils/storage-utils.js +80 -0
  137. package/dist/utils/streaming-utils.d.ts +38 -0
  138. package/dist/utils/streaming-utils.d.ts.map +1 -0
  139. package/dist/utils/streaming-utils.js +56 -0
  140. package/dist/utils/task-o-matic-error.d.ts +206 -0
  141. package/dist/utils/task-o-matic-error.d.ts.map +1 -0
  142. package/dist/utils/task-o-matic-error.js +304 -0
  143. package/docs/agents/cli.md +58 -149
  144. package/package.json +2 -2
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockContextBuilder = void 0;
4
+ class MockContextBuilder {
5
+ storage;
6
+ constructor(storage) {
7
+ this.storage = storage;
8
+ }
9
+ async buildContextForNewTask(title, content) {
10
+ return {
11
+ task: {
12
+ id: "new-task",
13
+ title,
14
+ description: content || "",
15
+ fullContent: content,
16
+ },
17
+ stack: {
18
+ projectName: "test-project",
19
+ frontend: "next",
20
+ backend: "hono",
21
+ database: "sqlite",
22
+ auth: "better-auth",
23
+ runtime: "node",
24
+ api: "none",
25
+ payments: "none",
26
+ orm: "drizzle",
27
+ dbSetup: "none",
28
+ packageManager: "npm",
29
+ git: true,
30
+ webDeploy: "none",
31
+ serverDeploy: "none",
32
+ install: true,
33
+ addons: [],
34
+ examples: [],
35
+ createdAt: new Date().toISOString(),
36
+ _source: "mock",
37
+ },
38
+ existingResearch: {},
39
+ };
40
+ }
41
+ async buildContext(taskId) {
42
+ const task = await this.storage.getTask(taskId);
43
+ if (!task) {
44
+ throw new Error(`Task ${taskId} not found`);
45
+ }
46
+ return {
47
+ task: {
48
+ id: task.id,
49
+ title: task.title,
50
+ description: task.description || "",
51
+ fullContent: task.content || task.description,
52
+ },
53
+ stack: {
54
+ projectName: "test-project",
55
+ frontend: "next",
56
+ backend: "hono",
57
+ database: "sqlite",
58
+ auth: "better-auth",
59
+ runtime: "node",
60
+ api: "none",
61
+ payments: "none",
62
+ orm: "drizzle",
63
+ dbSetup: "none",
64
+ packageManager: "npm",
65
+ git: true,
66
+ webDeploy: "none",
67
+ serverDeploy: "none",
68
+ install: true,
69
+ addons: [],
70
+ examples: [],
71
+ createdAt: new Date().toISOString(),
72
+ _source: "mock",
73
+ },
74
+ existingResearch: {},
75
+ };
76
+ }
77
+ isDocumentationFresh(documentation) {
78
+ return true;
79
+ }
80
+ }
81
+ exports.MockContextBuilder = MockContextBuilder;
@@ -0,0 +1,7 @@
1
+ import { AIConfig } from "../../types";
2
+ export declare class MockModelProvider {
3
+ private config;
4
+ getAIConfig(): AIConfig;
5
+ setAIConfig(config: Partial<AIConfig>): void;
6
+ }
7
+ //# sourceMappingURL=mock-model-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-model-provider.d.ts","sourceRoot":"","sources":["../../../src/test/mocks/mock-model-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAQZ;IAEF,WAAW,IAAI,QAAQ;IAIvB,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;CAG7C"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockModelProvider = void 0;
4
+ class MockModelProvider {
5
+ config = {
6
+ provider: "openrouter",
7
+ model: "anthropic/claude-3.5-sonnet",
8
+ apiKey: "test-api-key",
9
+ baseURL: "https://openrouter.ai/api/v1",
10
+ maxTokens: 4096,
11
+ temperature: 0.7,
12
+ context7Enabled: true,
13
+ };
14
+ getAIConfig() {
15
+ return this.config;
16
+ }
17
+ setAIConfig(config) {
18
+ this.config = { ...this.config, ...config };
19
+ }
20
+ }
21
+ exports.MockModelProvider = MockModelProvider;
@@ -0,0 +1,11 @@
1
+ import { MockStorage } from "./mock-storage";
2
+ import { MockAIOperations } from "./mock-ai-operations";
3
+ import { MockModelProvider } from "./mock-model-provider";
4
+ import { MockContextBuilder } from "./mock-context-builder";
5
+ export declare function resetMockServices(): void;
6
+ export declare function getMockStorage(): MockStorage;
7
+ export declare function getMockAIOperations(): MockAIOperations;
8
+ export declare function getMockModelProvider(): MockModelProvider;
9
+ export declare function getMockContextBuilder(): MockContextBuilder;
10
+ export declare function mockServiceFactory(): any;
11
+ //# sourceMappingURL=mock-service-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-service-factory.d.ts","sourceRoot":"","sources":["../../../src/test/mocks/mock-service-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAU5D,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAED,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED,wBAAgB,mBAAmB,IAAI,gBAAgB,CAKtD;AAED,wBAAgB,oBAAoB,IAAI,iBAAiB,CAKxD;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAGD,wBAAgB,kBAAkB,QAcjC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resetMockServices = resetMockServices;
4
+ exports.getMockStorage = getMockStorage;
5
+ exports.getMockAIOperations = getMockAIOperations;
6
+ exports.getMockModelProvider = getMockModelProvider;
7
+ exports.getMockContextBuilder = getMockContextBuilder;
8
+ exports.mockServiceFactory = mockServiceFactory;
9
+ const mock_storage_1 = require("./mock-storage");
10
+ const mock_ai_operations_1 = require("./mock-ai-operations");
11
+ const mock_model_provider_1 = require("./mock-model-provider");
12
+ const mock_context_builder_1 = require("./mock-context-builder");
13
+ let mockStorage;
14
+ let mockAIOperations;
15
+ let mockModelProvider;
16
+ let mockContextBuilder;
17
+ function resetMockServices() {
18
+ mockStorage = new mock_storage_1.MockStorage();
19
+ mockAIOperations = new mock_ai_operations_1.MockAIOperations();
20
+ mockModelProvider = new mock_model_provider_1.MockModelProvider();
21
+ mockContextBuilder = new mock_context_builder_1.MockContextBuilder(mockStorage);
22
+ }
23
+ function getMockStorage() {
24
+ if (!mockStorage) {
25
+ resetMockServices();
26
+ }
27
+ return mockStorage;
28
+ }
29
+ function getMockAIOperations() {
30
+ if (!mockAIOperations) {
31
+ resetMockServices();
32
+ }
33
+ return mockAIOperations;
34
+ }
35
+ function getMockModelProvider() {
36
+ if (!mockModelProvider) {
37
+ resetMockServices();
38
+ }
39
+ return mockModelProvider;
40
+ }
41
+ function getMockContextBuilder() {
42
+ if (!mockContextBuilder) {
43
+ resetMockServices();
44
+ }
45
+ return mockContextBuilder;
46
+ }
47
+ // Mock the actual service factory functions
48
+ function mockServiceFactory() {
49
+ // Override the real service factory functions
50
+ const originalFactory = jest.requireActual("../../utils/ai-service-factory");
51
+ return {
52
+ ...originalFactory,
53
+ getStorage: () => getMockStorage(),
54
+ getAIOperations: () => getMockAIOperations(),
55
+ getModelProvider: () => getMockModelProvider(),
56
+ getContextBuilder: () => getMockContextBuilder(),
57
+ initializeServices: async () => {
58
+ // No-op for tests
59
+ },
60
+ };
61
+ }
@@ -0,0 +1,50 @@
1
+ import { TaskRepository } from "../../lib/storage/types";
2
+ import { Task, CreateTaskRequest, TaskAIMetadata } from "../../types";
3
+ export declare class MockStorage implements TaskRepository {
4
+ private tasks;
5
+ private taskContents;
6
+ private taskAIMetadata;
7
+ private plans;
8
+ private documentationFiles;
9
+ private taskIdCounter;
10
+ createTask(request: CreateTaskRequest, aiMetadata?: TaskAIMetadata): Promise<Task>;
11
+ getTask(id: string): Promise<Task | null>;
12
+ getTasks(): Promise<Task[]>;
13
+ getTopLevelTasks(): Promise<Task[]>;
14
+ getSubtasks(parentId: string): Promise<Task[]>;
15
+ updateTask(id: string, updates: Partial<Task>): Promise<Task | null>;
16
+ deleteTask(id: string): Promise<boolean>;
17
+ saveTaskContent(taskId: string, content: string): Promise<string>;
18
+ getTaskContent(taskId: string): Promise<string | null>;
19
+ deleteTaskContent(taskId: string): Promise<void>;
20
+ migrateTaskContent(): Promise<number>;
21
+ cleanupOrphanedContent(): Promise<number>;
22
+ saveTaskAIMetadata(metadata: TaskAIMetadata): Promise<void>;
23
+ getTaskAIMetadata(taskId: string): Promise<TaskAIMetadata | null>;
24
+ deleteTaskAIMetadata(taskId: string): Promise<void>;
25
+ saveEnhancedTaskContent(taskId: string, content: string): Promise<string>;
26
+ savePlan(taskId: string, plan: string): Promise<void>;
27
+ getPlan(taskId: string): Promise<{
28
+ plan: string;
29
+ createdAt: number;
30
+ updatedAt: number;
31
+ } | null>;
32
+ listPlans(): Promise<Array<{
33
+ taskId: string;
34
+ plan: string;
35
+ createdAt: number;
36
+ updatedAt: number;
37
+ }>>;
38
+ deletePlan(taskId: string): Promise<boolean>;
39
+ validateStorageIntegrity(): Promise<{
40
+ isValid: boolean;
41
+ issues: string[];
42
+ }>;
43
+ sanitizeForFilename(input: string): string;
44
+ saveTaskDocumentation(taskId: string, content: string): Promise<string>;
45
+ getTaskDocumentation(taskId: string): Promise<string | null>;
46
+ saveContext7Documentation(library: string, query: string, content: string): Promise<string>;
47
+ getDocumentationFile(fileName: string): Promise<string | null>;
48
+ listDocumentationFiles(): Promise<string[]>;
49
+ }
50
+ //# sourceMappingURL=mock-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-storage.d.ts","sourceRoot":"","sources":["../../../src/test/mocks/mock-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockStorage = void 0;
4
+ class MockStorage {
5
+ tasks = [];
6
+ taskContents = {};
7
+ taskAIMetadata = {};
8
+ plans = {};
9
+ documentationFiles = {};
10
+ taskIdCounter = 1;
11
+ async createTask(request, aiMetadata) {
12
+ const task = {
13
+ id: (this.taskIdCounter++).toString(),
14
+ title: request.title,
15
+ description: request.description || "",
16
+ content: request.content || "",
17
+ status: request.status || "todo",
18
+ estimatedEffort: request.estimatedEffort || "medium",
19
+ createdAt: Date.now(),
20
+ updatedAt: Date.now(),
21
+ parentId: request.parentId,
22
+ dependencies: request.dependencies || [],
23
+ tags: request.tags || [],
24
+ prdFile: request.prdFile,
25
+ };
26
+ this.tasks.push(task);
27
+ if (aiMetadata) {
28
+ this.taskAIMetadata[task.id] = aiMetadata;
29
+ }
30
+ return task;
31
+ }
32
+ async getTask(id) {
33
+ return this.tasks.find((task) => task.id === id) || null;
34
+ }
35
+ async getTasks() {
36
+ return [...this.tasks];
37
+ }
38
+ async getTopLevelTasks() {
39
+ return this.tasks.filter((task) => !task.parentId);
40
+ }
41
+ async getSubtasks(parentId) {
42
+ return this.tasks.filter((task) => task.parentId === parentId);
43
+ }
44
+ async updateTask(id, updates) {
45
+ const taskIndex = this.tasks.findIndex((task) => task.id === id);
46
+ if (taskIndex === -1)
47
+ return null;
48
+ const updatedTask = {
49
+ ...this.tasks[taskIndex],
50
+ ...updates,
51
+ updatedAt: Date.now(),
52
+ };
53
+ this.tasks[taskIndex] = updatedTask;
54
+ return updatedTask;
55
+ }
56
+ async deleteTask(id) {
57
+ const taskIndex = this.tasks.findIndex((task) => task.id === id);
58
+ if (taskIndex === -1)
59
+ return false;
60
+ this.tasks.splice(taskIndex, 1);
61
+ delete this.taskContents[id];
62
+ delete this.taskAIMetadata[id];
63
+ delete this.plans[id];
64
+ return true;
65
+ }
66
+ async saveTaskContent(taskId, content) {
67
+ this.taskContents[taskId] = content;
68
+ return `content-${taskId}.md`;
69
+ }
70
+ async getTaskContent(taskId) {
71
+ return this.taskContents[taskId] || null;
72
+ }
73
+ async deleteTaskContent(taskId) {
74
+ delete this.taskContents[taskId];
75
+ }
76
+ async migrateTaskContent() {
77
+ return 0;
78
+ }
79
+ async cleanupOrphanedContent() {
80
+ return 0;
81
+ }
82
+ async saveTaskAIMetadata(metadata) {
83
+ this.taskAIMetadata[metadata.taskId] = metadata;
84
+ }
85
+ async getTaskAIMetadata(taskId) {
86
+ return this.taskAIMetadata[taskId] || null;
87
+ }
88
+ async deleteTaskAIMetadata(taskId) {
89
+ delete this.taskAIMetadata[taskId];
90
+ }
91
+ async saveEnhancedTaskContent(taskId, content) {
92
+ this.taskContents[taskId] = content;
93
+ return `enhanced-${taskId}.md`;
94
+ }
95
+ async savePlan(taskId, plan) {
96
+ this.plans[taskId] = {
97
+ plan,
98
+ createdAt: Date.now(),
99
+ updatedAt: Date.now(),
100
+ };
101
+ }
102
+ async getPlan(taskId) {
103
+ return this.plans[taskId] || null;
104
+ }
105
+ async listPlans() {
106
+ return Object.entries(this.plans).map(([taskId, planData]) => ({
107
+ taskId,
108
+ ...planData,
109
+ }));
110
+ }
111
+ async deletePlan(taskId) {
112
+ if (this.plans[taskId]) {
113
+ delete this.plans[taskId];
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+ async validateStorageIntegrity() {
119
+ return { isValid: true, issues: [] };
120
+ }
121
+ sanitizeForFilename(input) {
122
+ return input.replace(/[^a-zA-Z0-9]/g, "-").toLowerCase();
123
+ }
124
+ async saveTaskDocumentation(taskId, content) {
125
+ const filename = `docs/${taskId}.md`;
126
+ this.documentationFiles[filename] = content;
127
+ return filename;
128
+ }
129
+ async getTaskDocumentation(taskId) {
130
+ const filename = `docs/${taskId}.md`;
131
+ return this.documentationFiles[filename] || null;
132
+ }
133
+ async saveContext7Documentation(library, query, content) {
134
+ const filename = `docs/${library}/${query}.md`;
135
+ this.documentationFiles[filename] = content;
136
+ return filename;
137
+ }
138
+ async getDocumentationFile(fileName) {
139
+ return this.documentationFiles[fileName] || null;
140
+ }
141
+ async listDocumentationFiles() {
142
+ return Object.keys(this.documentationFiles);
143
+ }
144
+ }
145
+ exports.MockStorage = MockStorage;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-service.test.d.ts","sourceRoot":"","sources":["../../../src/test/services/task-service.test.ts"],"names":[],"mappings":""}