@mcoda/core 0.1.4

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 (142) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +9 -0
  4. package/dist/api/AgentsApi.d.ts +36 -0
  5. package/dist/api/AgentsApi.d.ts.map +1 -0
  6. package/dist/api/AgentsApi.js +176 -0
  7. package/dist/api/QaTasksApi.d.ts +8 -0
  8. package/dist/api/QaTasksApi.d.ts.map +1 -0
  9. package/dist/api/QaTasksApi.js +36 -0
  10. package/dist/api/TasksApi.d.ts +7 -0
  11. package/dist/api/TasksApi.d.ts.map +1 -0
  12. package/dist/api/TasksApi.js +34 -0
  13. package/dist/config/ConfigService.d.ts +3 -0
  14. package/dist/config/ConfigService.d.ts.map +1 -0
  15. package/dist/config/ConfigService.js +2 -0
  16. package/dist/domain/dependencies/Dependency.d.ts +3 -0
  17. package/dist/domain/dependencies/Dependency.d.ts.map +1 -0
  18. package/dist/domain/dependencies/Dependency.js +2 -0
  19. package/dist/domain/epics/Epic.d.ts +3 -0
  20. package/dist/domain/epics/Epic.d.ts.map +1 -0
  21. package/dist/domain/epics/Epic.js +2 -0
  22. package/dist/domain/projects/Project.d.ts +3 -0
  23. package/dist/domain/projects/Project.d.ts.map +1 -0
  24. package/dist/domain/projects/Project.js +2 -0
  25. package/dist/domain/tasks/Task.d.ts +3 -0
  26. package/dist/domain/tasks/Task.d.ts.map +1 -0
  27. package/dist/domain/tasks/Task.js +2 -0
  28. package/dist/domain/userStories/UserStory.d.ts +3 -0
  29. package/dist/domain/userStories/UserStory.d.ts.map +1 -0
  30. package/dist/domain/userStories/UserStory.js +2 -0
  31. package/dist/index.d.ts +28 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +27 -0
  34. package/dist/prompts/PdrPrompts.d.ts +4 -0
  35. package/dist/prompts/PdrPrompts.d.ts.map +1 -0
  36. package/dist/prompts/PdrPrompts.js +21 -0
  37. package/dist/prompts/PromptLoader.d.ts +3 -0
  38. package/dist/prompts/PromptLoader.d.ts.map +1 -0
  39. package/dist/prompts/PromptLoader.js +2 -0
  40. package/dist/prompts/SdsPrompts.d.ts +5 -0
  41. package/dist/prompts/SdsPrompts.d.ts.map +1 -0
  42. package/dist/prompts/SdsPrompts.js +44 -0
  43. package/dist/services/agents/AgentManagementService.d.ts +3 -0
  44. package/dist/services/agents/AgentManagementService.d.ts.map +1 -0
  45. package/dist/services/agents/AgentManagementService.js +2 -0
  46. package/dist/services/agents/GatewayAgentService.d.ts +92 -0
  47. package/dist/services/agents/GatewayAgentService.d.ts.map +1 -0
  48. package/dist/services/agents/GatewayAgentService.js +870 -0
  49. package/dist/services/agents/RoutingApiClient.d.ts +23 -0
  50. package/dist/services/agents/RoutingApiClient.d.ts.map +1 -0
  51. package/dist/services/agents/RoutingApiClient.js +62 -0
  52. package/dist/services/agents/RoutingService.d.ts +50 -0
  53. package/dist/services/agents/RoutingService.d.ts.map +1 -0
  54. package/dist/services/agents/RoutingService.js +386 -0
  55. package/dist/services/agents/generated/RoutingApiClient.d.ts +21 -0
  56. package/dist/services/agents/generated/RoutingApiClient.d.ts.map +1 -0
  57. package/dist/services/agents/generated/RoutingApiClient.js +68 -0
  58. package/dist/services/backlog/BacklogService.d.ts +98 -0
  59. package/dist/services/backlog/BacklogService.d.ts.map +1 -0
  60. package/dist/services/backlog/BacklogService.js +453 -0
  61. package/dist/services/backlog/TaskOrderingService.d.ts +88 -0
  62. package/dist/services/backlog/TaskOrderingService.d.ts.map +1 -0
  63. package/dist/services/backlog/TaskOrderingService.js +675 -0
  64. package/dist/services/docs/DocsService.d.ts +82 -0
  65. package/dist/services/docs/DocsService.d.ts.map +1 -0
  66. package/dist/services/docs/DocsService.js +1631 -0
  67. package/dist/services/estimate/EstimateService.d.ts +12 -0
  68. package/dist/services/estimate/EstimateService.d.ts.map +1 -0
  69. package/dist/services/estimate/EstimateService.js +103 -0
  70. package/dist/services/estimate/VelocityService.d.ts +19 -0
  71. package/dist/services/estimate/VelocityService.d.ts.map +1 -0
  72. package/dist/services/estimate/VelocityService.js +237 -0
  73. package/dist/services/estimate/types.d.ts +30 -0
  74. package/dist/services/estimate/types.d.ts.map +1 -0
  75. package/dist/services/estimate/types.js +1 -0
  76. package/dist/services/execution/ExecutionService.d.ts +3 -0
  77. package/dist/services/execution/ExecutionService.d.ts.map +1 -0
  78. package/dist/services/execution/ExecutionService.js +2 -0
  79. package/dist/services/execution/QaFollowupService.d.ts +38 -0
  80. package/dist/services/execution/QaFollowupService.d.ts.map +1 -0
  81. package/dist/services/execution/QaFollowupService.js +236 -0
  82. package/dist/services/execution/QaProfileService.d.ts +22 -0
  83. package/dist/services/execution/QaProfileService.d.ts.map +1 -0
  84. package/dist/services/execution/QaProfileService.js +142 -0
  85. package/dist/services/execution/QaTasksService.d.ts +101 -0
  86. package/dist/services/execution/QaTasksService.d.ts.map +1 -0
  87. package/dist/services/execution/QaTasksService.js +1117 -0
  88. package/dist/services/execution/TaskSelectionService.d.ts +50 -0
  89. package/dist/services/execution/TaskSelectionService.d.ts.map +1 -0
  90. package/dist/services/execution/TaskSelectionService.js +281 -0
  91. package/dist/services/execution/TaskStateService.d.ts +19 -0
  92. package/dist/services/execution/TaskStateService.d.ts.map +1 -0
  93. package/dist/services/execution/TaskStateService.js +59 -0
  94. package/dist/services/execution/WorkOnTasksService.d.ts +80 -0
  95. package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -0
  96. package/dist/services/execution/WorkOnTasksService.js +1833 -0
  97. package/dist/services/jobs/JobInsightsService.d.ts +97 -0
  98. package/dist/services/jobs/JobInsightsService.d.ts.map +1 -0
  99. package/dist/services/jobs/JobInsightsService.js +263 -0
  100. package/dist/services/jobs/JobResumeService.d.ts +16 -0
  101. package/dist/services/jobs/JobResumeService.d.ts.map +1 -0
  102. package/dist/services/jobs/JobResumeService.js +113 -0
  103. package/dist/services/jobs/JobService.d.ts +149 -0
  104. package/dist/services/jobs/JobService.d.ts.map +1 -0
  105. package/dist/services/jobs/JobService.js +490 -0
  106. package/dist/services/jobs/JobsApiClient.d.ts +73 -0
  107. package/dist/services/jobs/JobsApiClient.d.ts.map +1 -0
  108. package/dist/services/jobs/JobsApiClient.js +67 -0
  109. package/dist/services/openapi/OpenApiService.d.ts +54 -0
  110. package/dist/services/openapi/OpenApiService.d.ts.map +1 -0
  111. package/dist/services/openapi/OpenApiService.js +503 -0
  112. package/dist/services/planning/CreateTasksService.d.ts +68 -0
  113. package/dist/services/planning/CreateTasksService.d.ts.map +1 -0
  114. package/dist/services/planning/CreateTasksService.js +989 -0
  115. package/dist/services/planning/KeyHelpers.d.ts +5 -0
  116. package/dist/services/planning/KeyHelpers.d.ts.map +1 -0
  117. package/dist/services/planning/KeyHelpers.js +62 -0
  118. package/dist/services/planning/PlanningService.d.ts +3 -0
  119. package/dist/services/planning/PlanningService.d.ts.map +1 -0
  120. package/dist/services/planning/PlanningService.js +2 -0
  121. package/dist/services/planning/RefineTasksService.d.ts +56 -0
  122. package/dist/services/planning/RefineTasksService.d.ts.map +1 -0
  123. package/dist/services/planning/RefineTasksService.js +1328 -0
  124. package/dist/services/review/CodeReviewService.d.ts +103 -0
  125. package/dist/services/review/CodeReviewService.d.ts.map +1 -0
  126. package/dist/services/review/CodeReviewService.js +1187 -0
  127. package/dist/services/system/SystemUpdateService.d.ts +55 -0
  128. package/dist/services/system/SystemUpdateService.d.ts.map +1 -0
  129. package/dist/services/system/SystemUpdateService.js +136 -0
  130. package/dist/services/tasks/TaskApiResolver.d.ts +7 -0
  131. package/dist/services/tasks/TaskApiResolver.d.ts.map +1 -0
  132. package/dist/services/tasks/TaskApiResolver.js +41 -0
  133. package/dist/services/tasks/TaskDetailService.d.ts +106 -0
  134. package/dist/services/tasks/TaskDetailService.d.ts.map +1 -0
  135. package/dist/services/tasks/TaskDetailService.js +332 -0
  136. package/dist/services/telemetry/TelemetryService.d.ts +53 -0
  137. package/dist/services/telemetry/TelemetryService.d.ts.map +1 -0
  138. package/dist/services/telemetry/TelemetryService.js +434 -0
  139. package/dist/workspace/WorkspaceManager.d.ts +35 -0
  140. package/dist/workspace/WorkspaceManager.d.ts.map +1 -0
  141. package/dist/workspace/WorkspaceManager.js +201 -0
  142. package/package.json +45 -0
@@ -0,0 +1,55 @@
1
+ import { ApplyUpdateResponse, UpdateChannel, UpdateInfo } from "@mcoda/shared";
2
+ import { GlobalCommandStatus, GlobalRepository } from "@mcoda/db";
3
+ import { SystemClient } from "@mcoda/integrations";
4
+ interface ReleasesState {
5
+ lastCheck?: (UpdateInfo & {
6
+ checkedAt: string;
7
+ });
8
+ preferences?: {
9
+ channel?: UpdateChannel;
10
+ };
11
+ }
12
+ export interface UpdateCheckResult {
13
+ info: UpdateInfo;
14
+ checkedAt: string;
15
+ channel: UpdateChannel;
16
+ }
17
+ export type ApplyStatus = ApplyUpdateResponse["status"];
18
+ export interface ApplyResult extends ApplyUpdateResponse {
19
+ targetVersion: string;
20
+ npmCommand: string;
21
+ }
22
+ export declare class SystemUpdateService {
23
+ private client;
24
+ private repo?;
25
+ private mcodaDir;
26
+ private constructor();
27
+ static create(baseUrl?: string, options?: {
28
+ client?: SystemClient;
29
+ repo?: GlobalRepository;
30
+ mcodaDir?: string;
31
+ }): Promise<SystemUpdateService>;
32
+ close(): Promise<void>;
33
+ private releasesPath;
34
+ readState(): Promise<ReleasesState>;
35
+ private writeState;
36
+ startRun(payload: Record<string, unknown>): Promise<string | undefined>;
37
+ finishRun(id: string | undefined, update: {
38
+ status: GlobalCommandStatus;
39
+ exitCode?: number;
40
+ errorSummary?: string | null;
41
+ result?: Record<string, unknown>;
42
+ }): Promise<void>;
43
+ resolveChannel(preferred?: UpdateChannel): Promise<UpdateChannel>;
44
+ savePreferredChannel(channel: UpdateChannel): Promise<void>;
45
+ checkUpdate(channel?: UpdateChannel): Promise<UpdateCheckResult>;
46
+ applyUpdate(channel?: UpdateChannel): Promise<ApplyUpdateResponse>;
47
+ recordApplyState(info: UpdateInfo, channel: UpdateChannel, targetVersion: string): Promise<void>;
48
+ runNpmInstall(targetVersion: string, options?: {
49
+ quiet?: boolean;
50
+ }): Promise<{
51
+ code: number;
52
+ }>;
53
+ }
54
+ export {};
55
+ //# sourceMappingURL=SystemUpdateService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemUpdateService.d.ts","sourceRoot":"","sources":["../../../src/services/system/SystemUpdateService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAc,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAInD,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,CAAC,UAAU,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,WAAW,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,aAAa,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAExD,MAAM,WAAW,WAAY,SAAQ,mBAAmB;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAiBD,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,IAAI,CAAC;IAJf,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;WAQM,MAAM,CACjB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,YAAY,CAAC;QAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAClF,OAAO,CAAC,mBAAmB,CAAC;IAezB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,CAAC,YAAY;IAId,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;YAI3B,UAAU;IAKlB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAWvE,SAAS,CACb,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,MAAM,EAAE;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GACzH,OAAO,CAAC,IAAI,CAAC;IAWV,cAAc,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAKjE,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBhE,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAKlE,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CASzG"}
@@ -0,0 +1,136 @@
1
+ import path from "node:path";
2
+ import { promises as fs } from "node:fs";
3
+ import { spawn } from "node:child_process";
4
+ import { PathHelper } from "@mcoda/shared";
5
+ import { GlobalRepository } from "@mcoda/db";
6
+ import { SystemClient } from "@mcoda/integrations";
7
+ const nowIso = () => new Date().toISOString();
8
+ const normalizeChannel = (channel) => {
9
+ if (!channel)
10
+ return "stable";
11
+ if (channel === "stable" || channel === "beta" || channel === "nightly")
12
+ return channel;
13
+ throw new Error(`Unsupported channel: ${channel}`);
14
+ };
15
+ const parseJson = async (filePath) => {
16
+ try {
17
+ const raw = await fs.readFile(filePath, "utf8");
18
+ return JSON.parse(raw);
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ };
24
+ export class SystemUpdateService {
25
+ constructor(client, repo, options = {}) {
26
+ this.client = client;
27
+ this.repo = repo;
28
+ this.mcodaDir = options.mcodaDir ?? PathHelper.getGlobalMcodaDir();
29
+ }
30
+ static async create(baseUrl, options = {}) {
31
+ const client = options.client ??
32
+ new SystemClient(baseUrl ?? process.env.MCODA_API_BASE_URL ?? process.env.MCODA_SYSTEM_API_URL);
33
+ let repo = options.repo;
34
+ if (!repo) {
35
+ try {
36
+ repo = await GlobalRepository.create();
37
+ }
38
+ catch {
39
+ repo = undefined;
40
+ }
41
+ }
42
+ return new SystemUpdateService(client, repo, { mcodaDir: options.mcodaDir });
43
+ }
44
+ async close() {
45
+ if (this.repo) {
46
+ await this.repo.close();
47
+ }
48
+ }
49
+ releasesPath() {
50
+ return path.join(this.mcodaDir, "releases.json");
51
+ }
52
+ async readState() {
53
+ return (await parseJson(this.releasesPath())) ?? {};
54
+ }
55
+ async writeState(state) {
56
+ await PathHelper.ensureDir(this.mcodaDir);
57
+ await fs.writeFile(this.releasesPath(), JSON.stringify(state, null, 2), "utf8");
58
+ }
59
+ async startRun(payload) {
60
+ const startedAt = nowIso();
61
+ const run = await this.repo?.createCommandRun({
62
+ commandName: "update",
63
+ startedAt,
64
+ status: "running",
65
+ payload,
66
+ });
67
+ return run?.id;
68
+ }
69
+ async finishRun(id, update) {
70
+ if (!id || !this.repo)
71
+ return;
72
+ await this.repo.completeCommandRun(id, {
73
+ status: update.status,
74
+ completedAt: nowIso(),
75
+ exitCode: update.exitCode ?? null,
76
+ errorSummary: update.errorSummary ?? null,
77
+ result: update.result,
78
+ });
79
+ }
80
+ async resolveChannel(preferred) {
81
+ const state = await this.readState();
82
+ return normalizeChannel(preferred ?? state.preferences?.channel ?? "stable");
83
+ }
84
+ async savePreferredChannel(channel) {
85
+ const state = await this.readState();
86
+ await this.writeState({
87
+ ...state,
88
+ preferences: { ...(state.preferences ?? {}), channel },
89
+ });
90
+ }
91
+ async checkUpdate(channel) {
92
+ const resolved = await this.resolveChannel(channel);
93
+ const info = await this.client.checkUpdate(resolved);
94
+ const checkedAt = nowIso();
95
+ const state = await this.readState();
96
+ await this.writeState({
97
+ ...state,
98
+ preferences: { ...(state.preferences ?? {}), channel: resolved },
99
+ lastCheck: {
100
+ ...info,
101
+ checkedAt,
102
+ channel: resolved,
103
+ },
104
+ });
105
+ return { info, checkedAt, channel: resolved };
106
+ }
107
+ async applyUpdate(channel) {
108
+ const resolved = channel ? normalizeChannel(channel) : undefined;
109
+ return this.client.applyUpdate(resolved ? { channel: resolved } : undefined);
110
+ }
111
+ async recordApplyState(info, channel, targetVersion) {
112
+ const checkedAt = nowIso();
113
+ const state = await this.readState();
114
+ await this.writeState({
115
+ ...state,
116
+ preferences: { ...(state.preferences ?? {}), channel },
117
+ lastCheck: {
118
+ ...info,
119
+ currentVersion: targetVersion,
120
+ latestVersion: targetVersion,
121
+ updateAvailable: false,
122
+ channel,
123
+ checkedAt,
124
+ },
125
+ });
126
+ }
127
+ async runNpmInstall(targetVersion, options = {}) {
128
+ return new Promise((resolve, reject) => {
129
+ const child = spawn("npm", ["install", "-g", `mcoda@${targetVersion}`], {
130
+ stdio: options.quiet ? "ignore" : "inherit",
131
+ });
132
+ child.on("error", (error) => reject(error));
133
+ child.on("close", (code) => resolve({ code: code ?? 0 }));
134
+ });
135
+ }
136
+ }
@@ -0,0 +1,7 @@
1
+ export declare class TaskApiResolver {
2
+ private baseUrl?;
3
+ constructor(baseUrl?: string | undefined);
4
+ private getBaseUrl;
5
+ resolveTaskId(taskKey: string, projectKey?: string): Promise<string | undefined>;
6
+ }
7
+ //# sourceMappingURL=TaskApiResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskApiResolver.d.ts","sourceRoot":"","sources":["../../../src/services/tasks/TaskApiResolver.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IACd,OAAO,CAAC,OAAO,CAAC;gBAAR,OAAO,CAAC,EAAE,MAAM,YAAA;IAEpC,OAAO,CAAC,UAAU;IAIZ,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CA6BvF"}
@@ -0,0 +1,41 @@
1
+ export class TaskApiResolver {
2
+ constructor(baseUrl) {
3
+ this.baseUrl = baseUrl;
4
+ }
5
+ getBaseUrl() {
6
+ return this.baseUrl ?? process.env.MCODA_API_BASE_URL ?? process.env.MCODA_TASKS_API_URL;
7
+ }
8
+ async resolveTaskId(taskKey, projectKey) {
9
+ const base = this.getBaseUrl();
10
+ if (!base)
11
+ return undefined;
12
+ try {
13
+ const url = new URL("/tasks", base);
14
+ url.searchParams.set("key", taskKey);
15
+ if (projectKey) {
16
+ url.searchParams.set("project", projectKey);
17
+ }
18
+ const resp = await fetch(url, { headers: { accept: "application/json" } });
19
+ if (!resp.ok)
20
+ return undefined;
21
+ const body = await resp.json();
22
+ const candidates = Array.isArray(body)
23
+ ? body
24
+ : Array.isArray(body?.tasks)
25
+ ? body.tasks
26
+ : Array.isArray(body?.data)
27
+ ? body.data
28
+ : [];
29
+ if (!candidates.length)
30
+ return undefined;
31
+ if (candidates.length > 1 && !projectKey) {
32
+ throw new Error(`Multiple tasks found with key "${taskKey}" via OpenAPI; please specify --project.`);
33
+ }
34
+ const taskId = candidates[0]?.id ?? candidates[0]?.task_id;
35
+ return typeof taskId === "string" ? taskId : undefined;
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,106 @@
1
+ import { WorkspaceRepository, type TaskCommentRow } from "@mcoda/db";
2
+ import type { WorkspaceResolution } from "../../workspace/WorkspaceManager.js";
3
+ export interface DependencySummary {
4
+ taskId: string;
5
+ key: string;
6
+ status: string;
7
+ relationType: string;
8
+ }
9
+ export interface TaskLogSummary {
10
+ taskRunId: string;
11
+ timestamp: string;
12
+ level?: string | null;
13
+ source?: string | null;
14
+ message?: string | null;
15
+ command?: string;
16
+ status?: string;
17
+ details?: Record<string, unknown> | null;
18
+ }
19
+ export interface TaskRevisionSummary {
20
+ id: string;
21
+ jobId?: string | null;
22
+ commandRunId?: string | null;
23
+ changedAt: string;
24
+ statusBefore?: string;
25
+ statusAfter?: string;
26
+ storyPointsBefore?: number | null;
27
+ storyPointsAfter?: number | null;
28
+ changedFields?: string[];
29
+ snapshotBefore?: Record<string, unknown> | null;
30
+ snapshotAfter?: Record<string, unknown> | null;
31
+ }
32
+ export interface TaskDetailRecord {
33
+ id: string;
34
+ key: string;
35
+ title: string;
36
+ description?: string | null;
37
+ type?: string | null;
38
+ status: string;
39
+ storyPoints?: number | null;
40
+ priority?: number | null;
41
+ assignedAgentId?: string | null;
42
+ assignedAgentSlug?: string | null;
43
+ assigneeHuman?: string | null;
44
+ vcsBranch?: string | null;
45
+ vcsBaseBranch?: string | null;
46
+ vcsLastCommitSha?: string | null;
47
+ metadata?: Record<string, unknown> | null;
48
+ project: {
49
+ id: string;
50
+ key: string;
51
+ name?: string | null;
52
+ };
53
+ epic: {
54
+ id: string;
55
+ key: string;
56
+ title: string;
57
+ };
58
+ story: {
59
+ id: string;
60
+ key: string;
61
+ title: string;
62
+ };
63
+ createdAt: string;
64
+ updatedAt: string;
65
+ }
66
+ export interface TaskDetailResult {
67
+ task: TaskDetailRecord;
68
+ dependencies: {
69
+ upstream: DependencySummary[];
70
+ downstream: DependencySummary[];
71
+ };
72
+ comments: TaskCommentRow[];
73
+ logs?: TaskLogSummary[];
74
+ history?: TaskRevisionSummary[];
75
+ }
76
+ export interface TaskDetailOptions {
77
+ taskKey: string;
78
+ projectKey?: string;
79
+ includeLogs?: boolean;
80
+ includeHistory?: boolean;
81
+ commentsLimit?: number;
82
+ logsLimit?: number;
83
+ historyLimit?: number;
84
+ }
85
+ export declare class TaskDetailService {
86
+ private workspace;
87
+ private db;
88
+ private repo;
89
+ private globalRepo?;
90
+ private apiResolver;
91
+ private constructor();
92
+ static create(workspace: WorkspaceResolution): Promise<TaskDetailService>;
93
+ close(): Promise<void>;
94
+ getRepository(): WorkspaceRepository;
95
+ getTaskDetail(options: TaskDetailOptions): Promise<TaskDetailResult>;
96
+ private resolveTask;
97
+ private getDependencies;
98
+ private resolveTaskById;
99
+ private getLogs;
100
+ private resolveAgentSlug;
101
+ private getHistory;
102
+ private safeParse;
103
+ private pickField;
104
+ private diffFields;
105
+ }
106
+ //# sourceMappingURL=TaskDetailService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TaskDetailService.d.ts","sourceRoot":"","sources":["../../../src/services/tasks/TaskDetailService.ts"],"names":[],"mappings":"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"}