@codeguide/core 0.0.11 → 0.0.12
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.
- package/README.md +1 -1
- package/codeguide.ts +14 -0
- package/dist/codeguide.d.ts +9 -1
- package/dist/codeguide.js +5 -0
- package/dist/services/codespace/codespace-service.d.ts +6 -0
- package/dist/services/codespace/codespace-service.js +13 -0
- package/dist/services/codespace/codespace-types.d.ts +18 -0
- package/dist/services/codespace/codespace-types.js +2 -0
- package/dist/services/codespace/index.d.ts +2 -0
- package/dist/services/codespace/index.js +20 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +4 -1
- package/dist/services/tasks/task-service.d.ts +2 -2
- package/dist/services/tasks/task-service.js +34 -5
- package/dist/services/tasks/task-types.d.ts +22 -13
- package/package.json +1 -1
- package/services/codespace/codespace-service.ts +17 -0
- package/services/codespace/codespace-types.ts +21 -0
- package/services/codespace/index.ts +2 -0
- package/services/index.ts +2 -0
- package/services/tasks/task-service.ts +41 -8
- package/services/tasks/task-types.ts +23 -14
package/README.md
CHANGED
package/codeguide.ts
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
ApiKeyEnhancedService,
|
|
16
16
|
SubscriptionService,
|
|
17
17
|
CancellationFunnelService,
|
|
18
|
+
CodespaceService,
|
|
18
19
|
} from './services'
|
|
19
20
|
import { APIServiceConfig, CodeGuideOptions } from './types'
|
|
20
21
|
|
|
@@ -27,6 +28,7 @@ export class CodeGuide {
|
|
|
27
28
|
public apiKeyEnhanced: ApiKeyEnhancedService
|
|
28
29
|
public subscription: SubscriptionService
|
|
29
30
|
public cancellationFunnel: CancellationFunnelService
|
|
31
|
+
public codespace: CodespaceService
|
|
30
32
|
private options: CodeGuideOptions
|
|
31
33
|
|
|
32
34
|
constructor(config: APIServiceConfig, options: CodeGuideOptions = {}) {
|
|
@@ -41,6 +43,7 @@ export class CodeGuide {
|
|
|
41
43
|
this.apiKeyEnhanced = new ApiKeyEnhancedService(config)
|
|
42
44
|
this.subscription = new SubscriptionService(config)
|
|
43
45
|
this.cancellationFunnel = new CancellationFunnelService(config)
|
|
46
|
+
this.codespace = new CodespaceService(config)
|
|
44
47
|
}
|
|
45
48
|
|
|
46
49
|
// Convenience method for backward compatibility
|
|
@@ -73,6 +76,17 @@ export class CodeGuide {
|
|
|
73
76
|
return this.usage.healthCheck()
|
|
74
77
|
}
|
|
75
78
|
|
|
79
|
+
// Helper method to create task group with codespace task integration
|
|
80
|
+
async createTaskGroupWithCodespace(request: {
|
|
81
|
+
name: string
|
|
82
|
+
description?: string
|
|
83
|
+
project_id: string
|
|
84
|
+
include_codespace_task?: boolean
|
|
85
|
+
project_description?: string
|
|
86
|
+
}): Promise<any> {
|
|
87
|
+
return this.tasks.createTaskGroupWithCodespace(request, this.codespace)
|
|
88
|
+
}
|
|
89
|
+
|
|
76
90
|
setOptions(options: Partial<CodeGuideOptions>): void {
|
|
77
91
|
this.options = { ...this.options, ...options }
|
|
78
92
|
}
|
package/dist/codeguide.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { GenerationService, ProjectService, UsageService, RepositoryAnalysisService, TaskService, ApiKeyEnhancedService, SubscriptionService, CancellationFunnelService } from './services';
|
|
1
|
+
import { GenerationService, ProjectService, UsageService, RepositoryAnalysisService, TaskService, ApiKeyEnhancedService, SubscriptionService, CancellationFunnelService, CodespaceService } from './services';
|
|
2
2
|
import { APIServiceConfig, CodeGuideOptions } from './types';
|
|
3
3
|
export declare class CodeGuide {
|
|
4
4
|
generation: GenerationService;
|
|
@@ -9,9 +9,17 @@ export declare class CodeGuide {
|
|
|
9
9
|
apiKeyEnhanced: ApiKeyEnhancedService;
|
|
10
10
|
subscription: SubscriptionService;
|
|
11
11
|
cancellationFunnel: CancellationFunnelService;
|
|
12
|
+
codespace: CodespaceService;
|
|
12
13
|
private options;
|
|
13
14
|
constructor(config: APIServiceConfig, options?: CodeGuideOptions);
|
|
14
15
|
getGuidance(prompt: string): Promise<any>;
|
|
15
16
|
isHealthy(): Promise<boolean>;
|
|
17
|
+
createTaskGroupWithCodespace(request: {
|
|
18
|
+
name: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
project_id: string;
|
|
21
|
+
include_codespace_task?: boolean;
|
|
22
|
+
project_description?: string;
|
|
23
|
+
}): Promise<any>;
|
|
16
24
|
setOptions(options: Partial<CodeGuideOptions>): void;
|
|
17
25
|
}
|
package/dist/codeguide.js
CHANGED
|
@@ -24,6 +24,7 @@ class CodeGuide {
|
|
|
24
24
|
this.apiKeyEnhanced = new services_1.ApiKeyEnhancedService(config);
|
|
25
25
|
this.subscription = new services_1.SubscriptionService(config);
|
|
26
26
|
this.cancellationFunnel = new services_1.CancellationFunnelService(config);
|
|
27
|
+
this.codespace = new services_1.CodespaceService(config);
|
|
27
28
|
}
|
|
28
29
|
// Convenience method for backward compatibility
|
|
29
30
|
async getGuidance(prompt) {
|
|
@@ -49,6 +50,10 @@ class CodeGuide {
|
|
|
49
50
|
async isHealthy() {
|
|
50
51
|
return this.usage.healthCheck();
|
|
51
52
|
}
|
|
53
|
+
// Helper method to create task group with codespace task integration
|
|
54
|
+
async createTaskGroupWithCodespace(request) {
|
|
55
|
+
return this.tasks.createTaskGroupWithCodespace(request, this.codespace);
|
|
56
|
+
}
|
|
52
57
|
setOptions(options) {
|
|
53
58
|
this.options = { ...this.options, ...options };
|
|
54
59
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BaseService } from '../base/base-service';
|
|
2
|
+
import { GenerateTaskTitleRequest, GenerateTaskTitleResponse, CreateCodespaceTaskRequest, CreateCodespaceTaskResponse } from './codespace-types';
|
|
3
|
+
export declare class CodespaceService extends BaseService {
|
|
4
|
+
generateTaskTitle(request: GenerateTaskTitleRequest): Promise<GenerateTaskTitleResponse>;
|
|
5
|
+
createCodespaceTask(request: CreateCodespaceTaskRequest): Promise<CreateCodespaceTaskResponse>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodespaceService = void 0;
|
|
4
|
+
const base_service_1 = require("../base/base-service");
|
|
5
|
+
class CodespaceService extends base_service_1.BaseService {
|
|
6
|
+
async generateTaskTitle(request) {
|
|
7
|
+
return this.post('/codespace/generate-task-title', request);
|
|
8
|
+
}
|
|
9
|
+
async createCodespaceTask(request) {
|
|
10
|
+
return this.post('/codespace/create-task', request);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.CodespaceService = CodespaceService;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface GenerateTaskTitleRequest {
|
|
2
|
+
task_description: string;
|
|
3
|
+
}
|
|
4
|
+
export interface GenerateTaskTitleResponse {
|
|
5
|
+
success: boolean;
|
|
6
|
+
title: string;
|
|
7
|
+
message: string;
|
|
8
|
+
fallback_used: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface CreateCodespaceTaskRequest {
|
|
11
|
+
title: string;
|
|
12
|
+
description: string;
|
|
13
|
+
}
|
|
14
|
+
export interface CreateCodespaceTaskResponse {
|
|
15
|
+
success: boolean;
|
|
16
|
+
task_id: string;
|
|
17
|
+
message: string;
|
|
18
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.CodespaceService = void 0;
|
|
18
|
+
var codespace_service_1 = require("./codespace-service");
|
|
19
|
+
Object.defineProperty(exports, "CodespaceService", { enumerable: true, get: function () { return codespace_service_1.CodespaceService; } });
|
|
20
|
+
__exportStar(require("./codespace-types"), exports);
|
package/dist/services/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export { TaskService } from './tasks';
|
|
|
7
7
|
export { ApiKeyEnhancedService } from './api-key-enhanced';
|
|
8
8
|
export { SubscriptionService } from './subscriptions';
|
|
9
9
|
export { CancellationFunnelService } from './cancellation-funnel';
|
|
10
|
+
export { CodespaceService } from './codespace';
|
|
10
11
|
export * from './generation';
|
|
11
12
|
export * from './projects';
|
|
12
13
|
export * from './usage';
|
|
@@ -15,3 +16,4 @@ export * from './tasks';
|
|
|
15
16
|
export * from './api-key-enhanced';
|
|
16
17
|
export * from './subscriptions';
|
|
17
18
|
export * from './cancellation-funnel';
|
|
19
|
+
export * from './codespace';
|
package/dist/services/index.js
CHANGED
|
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.CancellationFunnelService = exports.SubscriptionService = exports.ApiKeyEnhancedService = exports.TaskService = exports.RepositoryAnalysisService = exports.UsageService = exports.ProjectService = exports.GenerationService = exports.BaseService = void 0;
|
|
20
|
+
exports.CodespaceService = exports.CancellationFunnelService = exports.SubscriptionService = exports.ApiKeyEnhancedService = exports.TaskService = exports.RepositoryAnalysisService = exports.UsageService = exports.ProjectService = exports.GenerationService = exports.BaseService = void 0;
|
|
21
21
|
const dotenv_1 = __importDefault(require("dotenv"));
|
|
22
22
|
const path_1 = __importDefault(require("path"));
|
|
23
23
|
// Load environment variables from project root
|
|
@@ -43,6 +43,8 @@ var subscriptions_1 = require("./subscriptions");
|
|
|
43
43
|
Object.defineProperty(exports, "SubscriptionService", { enumerable: true, get: function () { return subscriptions_1.SubscriptionService; } });
|
|
44
44
|
var cancellation_funnel_1 = require("./cancellation-funnel");
|
|
45
45
|
Object.defineProperty(exports, "CancellationFunnelService", { enumerable: true, get: function () { return cancellation_funnel_1.CancellationFunnelService; } });
|
|
46
|
+
var codespace_1 = require("./codespace");
|
|
47
|
+
Object.defineProperty(exports, "CodespaceService", { enumerable: true, get: function () { return codespace_1.CodespaceService; } });
|
|
46
48
|
// Re-export all types for convenience
|
|
47
49
|
__exportStar(require("./generation"), exports);
|
|
48
50
|
__exportStar(require("./projects"), exports);
|
|
@@ -52,3 +54,4 @@ __exportStar(require("./tasks"), exports);
|
|
|
52
54
|
__exportStar(require("./api-key-enhanced"), exports);
|
|
53
55
|
__exportStar(require("./subscriptions"), exports);
|
|
54
56
|
__exportStar(require("./cancellation-funnel"), exports);
|
|
57
|
+
__exportStar(require("./codespace"), exports);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { BaseService } from '../base/base-service';
|
|
2
|
-
import { TaskGroup, ProjectTask, CreateTaskGroupRequest, UpdateTaskGroupRequest, CreateProjectTaskRequest, UpdateProjectTaskRequest, PaginatedTaskGroupsRequest, PaginatedTaskGroupsResponse, PaginatedProjectTasksRequest, PaginatedProjectTasksResponse, GenerateTasksRequest, GenerateTasksResponse, GetTasksByProjectRequest, GetTasksByProjectResponse,
|
|
2
|
+
import { TaskGroup, ProjectTask, CreateTaskGroupRequest, UpdateTaskGroupRequest, CreateProjectTaskRequest, UpdateProjectTaskRequest, PaginatedTaskGroupsRequest, PaginatedTaskGroupsResponse, PaginatedProjectTasksRequest, PaginatedProjectTasksResponse, GenerateTasksRequest, GenerateTasksResponse, GetTasksByProjectRequest, GetTasksByProjectResponse, UpdateTaskRequest, UpdateTaskResponse } from './task-types';
|
|
3
3
|
export declare class TaskService extends BaseService {
|
|
4
4
|
getAllTaskGroups(): Promise<TaskGroup[]>;
|
|
5
5
|
getPaginatedTaskGroups(params: PaginatedTaskGroupsRequest): Promise<PaginatedTaskGroupsResponse>;
|
|
6
6
|
getTaskGroupById(taskGroupId: string): Promise<TaskGroup>;
|
|
7
7
|
createTaskGroup(request: CreateTaskGroupRequest): Promise<TaskGroup>;
|
|
8
|
+
createTaskGroupWithCodespace(request: CreateTaskGroupRequest, codespaceService: any): Promise<TaskGroup>;
|
|
8
9
|
updateTaskGroup(taskGroupId: string, request: UpdateTaskGroupRequest): Promise<TaskGroup>;
|
|
9
10
|
deleteTaskGroup(taskGroupId: string): Promise<{
|
|
10
11
|
status: string;
|
|
@@ -25,6 +26,5 @@ export declare class TaskService extends BaseService {
|
|
|
25
26
|
}>;
|
|
26
27
|
generateTasks(request: GenerateTasksRequest): Promise<GenerateTasksResponse>;
|
|
27
28
|
getTasksByProject(request: GetTasksByProjectRequest): Promise<GetTasksByProjectResponse>;
|
|
28
|
-
startTask(request: StartTaskRequest): Promise<StartTaskResponse>;
|
|
29
29
|
updateTask(taskId: string, request: UpdateTaskRequest): Promise<UpdateTaskResponse>;
|
|
30
30
|
}
|
|
@@ -27,8 +27,41 @@ class TaskService extends base_service_1.BaseService {
|
|
|
27
27
|
const response = await this.post('/task-groups', request);
|
|
28
28
|
return response.data;
|
|
29
29
|
}
|
|
30
|
+
async createTaskGroupWithCodespace(request, codespaceService) {
|
|
31
|
+
// First, create the basic task group
|
|
32
|
+
const taskGroupResponse = await this.post('/task-groups', {
|
|
33
|
+
name: request.name,
|
|
34
|
+
description: request.description,
|
|
35
|
+
project_id: request.project_id,
|
|
36
|
+
});
|
|
37
|
+
let taskGroup = taskGroupResponse.data;
|
|
38
|
+
// If codespace task creation is requested and project description is provided
|
|
39
|
+
if (request.include_codespace_task && request.project_description) {
|
|
40
|
+
try {
|
|
41
|
+
// Step 1: Generate codespace task title using project description
|
|
42
|
+
const titleResponse = await codespaceService.generateTaskTitle({
|
|
43
|
+
task_description: request.project_description,
|
|
44
|
+
});
|
|
45
|
+
// Step 2: Create codespace task using generated title and project description
|
|
46
|
+
const createTaskResponse = await codespaceService.createCodespaceTask({
|
|
47
|
+
title: titleResponse.title,
|
|
48
|
+
description: request.project_description,
|
|
49
|
+
});
|
|
50
|
+
// Step 3: Update task group with codespace_task_id
|
|
51
|
+
const updateResponse = await this.updateTaskGroup(taskGroup.id, {
|
|
52
|
+
codespace_task_id: createTaskResponse.task_id,
|
|
53
|
+
});
|
|
54
|
+
taskGroup = updateResponse;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.warn('Failed to create codespace task, but task group was created successfully:', error);
|
|
58
|
+
// Continue without codespace task if it fails
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return taskGroup;
|
|
62
|
+
}
|
|
30
63
|
async updateTaskGroup(taskGroupId, request) {
|
|
31
|
-
const response = await this.put(`/task-groups/${taskGroupId}`, request);
|
|
64
|
+
const response = await this.put(`/project-tasks/task-groups/${taskGroupId}`, request);
|
|
32
65
|
return response.data;
|
|
33
66
|
}
|
|
34
67
|
async deleteTaskGroup(taskGroupId) {
|
|
@@ -93,10 +126,6 @@ class TaskService extends base_service_1.BaseService {
|
|
|
93
126
|
const url = `/project-tasks/by-project/${request.project_id}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;
|
|
94
127
|
return this.get(url);
|
|
95
128
|
}
|
|
96
|
-
// Start Task
|
|
97
|
-
async startTask(request) {
|
|
98
|
-
return this.post(`/project-tasks/${request.task_id}/start`, request);
|
|
99
|
-
}
|
|
100
129
|
// Update Task
|
|
101
130
|
async updateTask(taskId, request) {
|
|
102
131
|
return this.put(`/project-tasks/${taskId}`, request);
|
|
@@ -7,12 +7,26 @@ export interface TaskGroup {
|
|
|
7
7
|
created_at: string;
|
|
8
8
|
updated_at: string;
|
|
9
9
|
project_tasks: ProjectTask[];
|
|
10
|
+
prd_content?: string;
|
|
11
|
+
raw_tasks?: {
|
|
12
|
+
tasks: RawTask[];
|
|
13
|
+
expanded_tasks: RawTask[];
|
|
14
|
+
};
|
|
15
|
+
codespace_task_id?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface RawTask {
|
|
18
|
+
id: number;
|
|
19
|
+
title: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
priority?: string;
|
|
22
|
+
status?: string;
|
|
10
23
|
}
|
|
11
24
|
export interface ProjectTask {
|
|
12
25
|
id: string;
|
|
13
26
|
title: string;
|
|
14
27
|
description?: string;
|
|
15
28
|
status: string;
|
|
29
|
+
priority?: string;
|
|
16
30
|
user_id: string;
|
|
17
31
|
task_group_id: string;
|
|
18
32
|
parent_task_id?: string;
|
|
@@ -25,11 +39,17 @@ export interface CreateTaskGroupRequest {
|
|
|
25
39
|
name: string;
|
|
26
40
|
description?: string;
|
|
27
41
|
project_id: string;
|
|
42
|
+
include_codespace_task?: boolean;
|
|
43
|
+
project_description?: string;
|
|
28
44
|
}
|
|
29
45
|
export interface UpdateTaskGroupRequest {
|
|
30
|
-
name?: string;
|
|
31
|
-
description?: string;
|
|
32
46
|
project_id?: string;
|
|
47
|
+
prd_content?: string;
|
|
48
|
+
raw_tasks?: {
|
|
49
|
+
tasks: RawTask[];
|
|
50
|
+
expanded_tasks: RawTask[];
|
|
51
|
+
};
|
|
52
|
+
codespace_task_id?: string;
|
|
33
53
|
}
|
|
34
54
|
export interface CreateProjectTaskRequest {
|
|
35
55
|
title: string;
|
|
@@ -118,18 +138,7 @@ export interface GetTasksByProjectResponse {
|
|
|
118
138
|
tasks: ProjectTask[];
|
|
119
139
|
};
|
|
120
140
|
}
|
|
121
|
-
export interface StartTaskRequest {
|
|
122
|
-
task_id: string;
|
|
123
|
-
}
|
|
124
|
-
export interface StartTaskResponse {
|
|
125
|
-
status: string;
|
|
126
|
-
message: string;
|
|
127
|
-
data: {
|
|
128
|
-
task: ProjectTask;
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
141
|
export interface UpdateTaskRequest {
|
|
132
|
-
task_id: string;
|
|
133
142
|
status?: string;
|
|
134
143
|
ai_result?: string;
|
|
135
144
|
title?: string;
|
package/package.json
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseService } from '../base/base-service'
|
|
2
|
+
import {
|
|
3
|
+
GenerateTaskTitleRequest,
|
|
4
|
+
GenerateTaskTitleResponse,
|
|
5
|
+
CreateCodespaceTaskRequest,
|
|
6
|
+
CreateCodespaceTaskResponse,
|
|
7
|
+
} from './codespace-types'
|
|
8
|
+
|
|
9
|
+
export class CodespaceService extends BaseService {
|
|
10
|
+
async generateTaskTitle(request: GenerateTaskTitleRequest): Promise<GenerateTaskTitleResponse> {
|
|
11
|
+
return this.post<GenerateTaskTitleResponse>('/codespace/generate-task-title', request)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async createCodespaceTask(request: CreateCodespaceTaskRequest): Promise<CreateCodespaceTaskResponse> {
|
|
15
|
+
return this.post<CreateCodespaceTaskResponse>('/codespace/create-task', request)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface GenerateTaskTitleRequest {
|
|
2
|
+
task_description: string
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface GenerateTaskTitleResponse {
|
|
6
|
+
success: boolean
|
|
7
|
+
title: string
|
|
8
|
+
message: string
|
|
9
|
+
fallback_used: boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface CreateCodespaceTaskRequest {
|
|
13
|
+
title: string
|
|
14
|
+
description: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface CreateCodespaceTaskResponse {
|
|
18
|
+
success: boolean
|
|
19
|
+
task_id: string
|
|
20
|
+
message: string
|
|
21
|
+
}
|
package/services/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ export { TaskService } from './tasks'
|
|
|
16
16
|
export { ApiKeyEnhancedService } from './api-key-enhanced'
|
|
17
17
|
export { SubscriptionService } from './subscriptions'
|
|
18
18
|
export { CancellationFunnelService } from './cancellation-funnel'
|
|
19
|
+
export { CodespaceService } from './codespace'
|
|
19
20
|
|
|
20
21
|
// Re-export all types for convenience
|
|
21
22
|
export * from './generation'
|
|
@@ -26,3 +27,4 @@ export * from './tasks'
|
|
|
26
27
|
export * from './api-key-enhanced'
|
|
27
28
|
export * from './subscriptions'
|
|
28
29
|
export * from './cancellation-funnel'
|
|
30
|
+
export * from './codespace'
|
|
@@ -18,8 +18,6 @@ import {
|
|
|
18
18
|
GenerateTasksResponse,
|
|
19
19
|
GetTasksByProjectRequest,
|
|
20
20
|
GetTasksByProjectResponse,
|
|
21
|
-
StartTaskRequest,
|
|
22
|
-
StartTaskResponse,
|
|
23
21
|
UpdateTaskRequest,
|
|
24
22
|
UpdateTaskResponse,
|
|
25
23
|
} from './task-types'
|
|
@@ -54,8 +52,48 @@ export class TaskService extends BaseService {
|
|
|
54
52
|
return response.data
|
|
55
53
|
}
|
|
56
54
|
|
|
55
|
+
async createTaskGroupWithCodespace(
|
|
56
|
+
request: CreateTaskGroupRequest,
|
|
57
|
+
codespaceService: any
|
|
58
|
+
): Promise<TaskGroup> {
|
|
59
|
+
// First, create the basic task group
|
|
60
|
+
const taskGroupResponse = await this.post<TaskGroupResponse>('/task-groups', {
|
|
61
|
+
name: request.name,
|
|
62
|
+
description: request.description,
|
|
63
|
+
project_id: request.project_id,
|
|
64
|
+
})
|
|
65
|
+
let taskGroup = taskGroupResponse.data
|
|
66
|
+
|
|
67
|
+
// If codespace task creation is requested and project description is provided
|
|
68
|
+
if (request.include_codespace_task && request.project_description) {
|
|
69
|
+
try {
|
|
70
|
+
// Step 1: Generate codespace task title using project description
|
|
71
|
+
const titleResponse = await codespaceService.generateTaskTitle({
|
|
72
|
+
task_description: request.project_description,
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
// Step 2: Create codespace task using generated title and project description
|
|
76
|
+
const createTaskResponse = await codespaceService.createCodespaceTask({
|
|
77
|
+
title: titleResponse.title,
|
|
78
|
+
description: request.project_description,
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// Step 3: Update task group with codespace_task_id
|
|
82
|
+
const updateResponse = await this.updateTaskGroup(taskGroup.id, {
|
|
83
|
+
codespace_task_id: createTaskResponse.task_id,
|
|
84
|
+
})
|
|
85
|
+
taskGroup = updateResponse
|
|
86
|
+
} catch (error) {
|
|
87
|
+
console.warn('Failed to create codespace task, but task group was created successfully:', error)
|
|
88
|
+
// Continue without codespace task if it fails
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return taskGroup
|
|
93
|
+
}
|
|
94
|
+
|
|
57
95
|
async updateTaskGroup(taskGroupId: string, request: UpdateTaskGroupRequest): Promise<TaskGroup> {
|
|
58
|
-
const response = await this.put<TaskGroupResponse>(`/task-groups/${taskGroupId}`, request)
|
|
96
|
+
const response = await this.put<TaskGroupResponse>(`/project-tasks/task-groups/${taskGroupId}`, request)
|
|
59
97
|
return response.data
|
|
60
98
|
}
|
|
61
99
|
|
|
@@ -131,11 +169,6 @@ export class TaskService extends BaseService {
|
|
|
131
169
|
return this.get<GetTasksByProjectResponse>(url)
|
|
132
170
|
}
|
|
133
171
|
|
|
134
|
-
// Start Task
|
|
135
|
-
async startTask(request: StartTaskRequest): Promise<StartTaskResponse> {
|
|
136
|
-
return this.post<StartTaskResponse>(`/project-tasks/${request.task_id}/start`, request)
|
|
137
|
-
}
|
|
138
|
-
|
|
139
172
|
// Update Task
|
|
140
173
|
async updateTask(taskId: string, request: UpdateTaskRequest): Promise<UpdateTaskResponse> {
|
|
141
174
|
return this.put<UpdateTaskResponse>(`/project-tasks/${taskId}`, request)
|
|
@@ -7,6 +7,20 @@ export interface TaskGroup {
|
|
|
7
7
|
created_at: string
|
|
8
8
|
updated_at: string
|
|
9
9
|
project_tasks: ProjectTask[]
|
|
10
|
+
prd_content?: string
|
|
11
|
+
raw_tasks?: {
|
|
12
|
+
tasks: RawTask[]
|
|
13
|
+
expanded_tasks: RawTask[]
|
|
14
|
+
}
|
|
15
|
+
codespace_task_id?: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface RawTask {
|
|
19
|
+
id: number
|
|
20
|
+
title: string
|
|
21
|
+
description?: string
|
|
22
|
+
priority?: string
|
|
23
|
+
status?: string
|
|
10
24
|
}
|
|
11
25
|
|
|
12
26
|
export interface ProjectTask {
|
|
@@ -14,6 +28,7 @@ export interface ProjectTask {
|
|
|
14
28
|
title: string
|
|
15
29
|
description?: string
|
|
16
30
|
status: string
|
|
31
|
+
priority?: string
|
|
17
32
|
user_id: string
|
|
18
33
|
task_group_id: string
|
|
19
34
|
parent_task_id?: string
|
|
@@ -27,12 +42,18 @@ export interface CreateTaskGroupRequest {
|
|
|
27
42
|
name: string
|
|
28
43
|
description?: string
|
|
29
44
|
project_id: string
|
|
45
|
+
include_codespace_task?: boolean
|
|
46
|
+
project_description?: string
|
|
30
47
|
}
|
|
31
48
|
|
|
32
49
|
export interface UpdateTaskGroupRequest {
|
|
33
|
-
name?: string
|
|
34
|
-
description?: string
|
|
35
50
|
project_id?: string
|
|
51
|
+
prd_content?: string
|
|
52
|
+
raw_tasks?: {
|
|
53
|
+
tasks: RawTask[]
|
|
54
|
+
expanded_tasks: RawTask[]
|
|
55
|
+
}
|
|
56
|
+
codespace_task_id?: string
|
|
36
57
|
}
|
|
37
58
|
|
|
38
59
|
export interface CreateProjectTaskRequest {
|
|
@@ -136,20 +157,8 @@ export interface GetTasksByProjectResponse {
|
|
|
136
157
|
}
|
|
137
158
|
}
|
|
138
159
|
|
|
139
|
-
export interface StartTaskRequest {
|
|
140
|
-
task_id: string
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export interface StartTaskResponse {
|
|
144
|
-
status: string
|
|
145
|
-
message: string
|
|
146
|
-
data: {
|
|
147
|
-
task: ProjectTask
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
160
|
|
|
151
161
|
export interface UpdateTaskRequest {
|
|
152
|
-
task_id: string
|
|
153
162
|
status?: string
|
|
154
163
|
ai_result?: string
|
|
155
164
|
title?: string
|