@fiftth/fiftth-cli 1.0.1 → 1.1.1
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/.fiftthnexus/.github/workflows/copilot-orchestrator.yml +78 -0
- package/.fiftthnexus/actions/Dockerfile +34 -0
- package/.fiftthnexus/actions/copilot-agent.mjs +269 -0
- package/.fiftthnexus/actions/package.json +8 -0
- package/.fiftthnexus/orchestrator.ts +2304 -0
- package/.fiftthnexus/skills/env-implement-prompt.md +65 -0
- package/.fiftthnexus/skills/env-plan-prompt.md +33 -0
- package/.fiftthnexus/skills/env-review-prompt.md +61 -0
- package/.fiftthnexus/skills/grill-me.md +9 -0
- package/.fiftthnexus/skills/prd-to-issues.md +150 -0
- package/.fiftthnexus/skills/write-prd.md +70 -0
- package/README.md +216 -25
- package/dist/api/client.d.ts +6 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +13 -2
- package/dist/api/client.js.map +1 -1
- package/dist/commands/checkout.d.ts +6 -1
- package/dist/commands/checkout.d.ts.map +1 -1
- package/dist/commands/checkout.js +415 -44
- package/dist/commands/checkout.js.map +1 -1
- package/dist/commands/login.d.ts +0 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +83 -32
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/model.d.ts +2 -0
- package/dist/commands/model.d.ts.map +1 -0
- package/dist/commands/model.js +32 -0
- package/dist/commands/model.js.map +1 -0
- package/dist/commands/planningContext.d.ts +6 -0
- package/dist/commands/planningContext.d.ts.map +1 -0
- package/dist/commands/planningContext.js +91 -0
- package/dist/commands/planningContext.js.map +1 -0
- package/dist/commands/repo.d.ts.map +1 -1
- package/dist/commands/repo.js +38 -15
- package/dist/commands/repo.js.map +1 -1
- package/dist/commands/skills.d.ts +2 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +123 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/use.d.ts +1 -5
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +63 -48
- package/dist/commands/use.js.map +1 -1
- package/dist/index.js +86 -27
- package/dist/index.js.map +1 -1
- package/dist/services/nexusService.d.ts +30 -0
- package/dist/services/nexusService.d.ts.map +1 -0
- package/dist/services/nexusService.js +188 -0
- package/dist/services/nexusService.js.map +1 -0
- package/dist/services/prdService.d.ts +12 -0
- package/dist/services/prdService.d.ts.map +1 -0
- package/dist/services/prdService.js +103 -0
- package/dist/services/prdService.js.map +1 -0
- package/dist/services/taskSelection.d.ts +10 -0
- package/dist/services/taskSelection.d.ts.map +1 -0
- package/dist/services/taskSelection.js +112 -0
- package/dist/services/taskSelection.js.map +1 -0
- package/dist/services/taskService.d.ts +23 -1
- package/dist/services/taskService.d.ts.map +1 -1
- package/dist/services/taskService.js +118 -12
- package/dist/services/taskService.js.map +1 -1
- package/dist/utils/config.d.ts +2 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +20 -3
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/dashboard.d.ts +65 -0
- package/dist/utils/dashboard.d.ts.map +1 -0
- package/dist/utils/dashboard.js +205 -0
- package/dist/utils/dashboard.js.map +1 -0
- package/dist/utils/models.d.ts +14 -0
- package/dist/utils/models.d.ts.map +1 -0
- package/dist/utils/models.js +89 -0
- package/dist/utils/models.js.map +1 -0
- package/dist/utils/ui.d.ts +6 -0
- package/dist/utils/ui.d.ts.map +1 -1
- package/dist/utils/ui.js +22 -1
- package/dist/utils/ui.js.map +1 -1
- package/dist/utils/version.d.ts +4 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +26 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +9 -4
- package/.github/workflows/publish-npm.yml +0 -62
- package/dist/commands/tasks.d.ts +0 -2
- package/dist/commands/tasks.d.ts.map +0 -1
- package/dist/commands/tasks.js +0 -69
- package/dist/commands/tasks.js.map +0 -1
- package/dist/context/runtimeContext.d.ts +0 -14
- package/dist/context/runtimeContext.d.ts.map +0 -1
- package/dist/context/runtimeContext.js +0 -21
- package/dist/context/runtimeContext.js.map +0 -1
- package/dist/services/taskContext.d.ts +0 -14
- package/dist/services/taskContext.d.ts.map +0 -1
- package/dist/services/taskContext.js +0 -15
- package/dist/services/taskContext.js.map +0 -1
- package/dist/utils/api.d.ts +0 -10
- package/dist/utils/api.d.ts.map +0 -1
- package/dist/utils/api.js +0 -25
- package/dist/utils/api.js.map +0 -1
- package/src/api/client.ts +0 -31
- package/src/commands/checkout.ts +0 -101
- package/src/commands/login.ts +0 -145
- package/src/commands/repo.ts +0 -113
- package/src/commands/tasks.ts +0 -86
- package/src/commands/use.ts +0 -149
- package/src/config/configService.ts +0 -56
- package/src/context/runtimeContext.ts +0 -42
- package/src/git/gitService.ts +0 -29
- package/src/index.ts +0 -133
- package/src/services/taskContext.ts +0 -32
- package/src/services/taskService.ts +0 -53
- package/src/utils/api.ts +0 -41
- package/src/utils/config.ts +0 -48
- package/src/utils/ui.ts +0 -46
- package/tsconfig.json +0 -18
- package/vitest.config.ts +0 -8
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { execFileSync, execSync } from 'child_process';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
const GH_SEARCH_LIMIT = '100';
|
|
4
|
+
const GITHUB_REPOSITORY_FULL_NAME_PATTERN = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
|
|
5
|
+
function resolveGhExecutable() {
|
|
6
|
+
try {
|
|
7
|
+
const found = execSync(process.platform === 'win32' ? 'where.exe gh' : 'which gh', { encoding: 'utf-8', stdio: 'pipe' }).split(/\r?\n/)[0]?.trim();
|
|
8
|
+
if (found) {
|
|
9
|
+
return found;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// fall through to known locations
|
|
14
|
+
}
|
|
15
|
+
const candidates = [
|
|
16
|
+
'C:\\Program Files\\GitHub CLI\\gh.exe',
|
|
17
|
+
`${process.env.LOCALAPPDATA ?? ''}\\Programs\\GitHub CLI\\gh.exe`,
|
|
18
|
+
`${process.env.ProgramFiles ?? ''}\\GitHub CLI\\gh.exe`,
|
|
19
|
+
];
|
|
20
|
+
for (const candidate of candidates) {
|
|
21
|
+
if (candidate && existsSync(candidate)) {
|
|
22
|
+
return candidate;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return 'gh';
|
|
26
|
+
}
|
|
27
|
+
const GH_EXECUTABLE = resolveGhExecutable();
|
|
28
|
+
function ghEnv() {
|
|
29
|
+
const env = { ...process.env };
|
|
30
|
+
delete env.GH_TOKEN;
|
|
31
|
+
delete env.GITHUB_TOKEN;
|
|
32
|
+
return env;
|
|
33
|
+
}
|
|
34
|
+
function runGhJsonCommand(args) {
|
|
35
|
+
const output = execFileSync(GH_EXECUTABLE, args, {
|
|
36
|
+
encoding: 'utf-8',
|
|
37
|
+
env: ghEnv(),
|
|
38
|
+
maxBuffer: 5 * 1024 * 1024,
|
|
39
|
+
stdio: 'pipe',
|
|
40
|
+
});
|
|
41
|
+
return JSON.parse(output);
|
|
42
|
+
}
|
|
43
|
+
function parseTaskIdMetadata(body) {
|
|
44
|
+
if (!body) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const match = body.match(/^task-id:\s*(.+)$/im);
|
|
48
|
+
const taskId = match?.[1]?.trim();
|
|
49
|
+
return taskId ? taskId : null;
|
|
50
|
+
}
|
|
51
|
+
function assertValidRepositoryFullName(repositoryFullName) {
|
|
52
|
+
if (!GITHUB_REPOSITORY_FULL_NAME_PATTERN.test(repositoryFullName)) {
|
|
53
|
+
throw new Error(`Invalid repository name: ${repositoryFullName}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function matchesPrdTitle(title, taskId) {
|
|
57
|
+
return title.startsWith(`PRD[${taskId}]:`);
|
|
58
|
+
}
|
|
59
|
+
function listOpenRepositoryPrds(repositoryFullName, taskId) {
|
|
60
|
+
assertValidRepositoryFullName(repositoryFullName);
|
|
61
|
+
const searchQuery = `label:"dev-report" state:open \"PRD[${taskId}]:\"`;
|
|
62
|
+
return runGhJsonCommand([
|
|
63
|
+
'issue',
|
|
64
|
+
'list',
|
|
65
|
+
'--repo',
|
|
66
|
+
repositoryFullName,
|
|
67
|
+
'--state',
|
|
68
|
+
'open',
|
|
69
|
+
'--label',
|
|
70
|
+
'dev-report',
|
|
71
|
+
'--search',
|
|
72
|
+
searchQuery,
|
|
73
|
+
'--json',
|
|
74
|
+
'number,title,body,url',
|
|
75
|
+
'--limit',
|
|
76
|
+
GH_SEARCH_LIMIT,
|
|
77
|
+
]);
|
|
78
|
+
}
|
|
79
|
+
function mapRepositoryPrdMatch(issue) {
|
|
80
|
+
return {
|
|
81
|
+
number: issue.number,
|
|
82
|
+
title: issue.title,
|
|
83
|
+
url: issue.url,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function findMatchingPrds(issues, taskId) {
|
|
87
|
+
return issues
|
|
88
|
+
.filter((issue) => matchesPrdTitle(issue.title, taskId))
|
|
89
|
+
.filter((issue) => parseTaskIdMetadata(issue.body) === taskId)
|
|
90
|
+
.map(mapRepositoryPrdMatch);
|
|
91
|
+
}
|
|
92
|
+
export async function resolveRepositoryPrd(repositoryFullName, taskId) {
|
|
93
|
+
const issues = listOpenRepositoryPrds(repositoryFullName, taskId);
|
|
94
|
+
const matches = findMatchingPrds(issues, taskId);
|
|
95
|
+
if (matches.length === 0) {
|
|
96
|
+
return { status: 'missing', matches: [] };
|
|
97
|
+
}
|
|
98
|
+
if (matches.length > 1) {
|
|
99
|
+
return { status: 'ambiguous', matches };
|
|
100
|
+
}
|
|
101
|
+
return { status: 'found', matches };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=prdService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prdService.js","sourceRoot":"","sources":["../../src/services/prdService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Task } from './taskService.js';
|
|
2
|
+
interface WorkspaceTasksResult {
|
|
3
|
+
workspaceName?: string;
|
|
4
|
+
tasks: Task[];
|
|
5
|
+
}
|
|
6
|
+
export declare function fetchWorkspaceTasks(): Promise<WorkspaceTasksResult>;
|
|
7
|
+
export declare function promptForTaskSelection(tasks: Task[]): Promise<Task>;
|
|
8
|
+
export declare function resolveSelectedTask(taskId?: string): Promise<Task>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=taskSelection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskSelection.d.ts","sourceRoot":"","sources":["../../src/services/taskSelection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAM9D,UAAU,oBAAoB;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,IAAI,EAAE,CAAA;CACd;AAoDD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAYzE;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDzE;AAED,wBAAsB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAexE"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import inquirer from 'inquirer';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { loadConfig } from '../utils/config.js';
|
|
4
|
+
import { buildGlobalMetrics, getDockerRuntimeStatus, renderDashboard } from '../utils/dashboard.js';
|
|
5
|
+
import { resolveConfiguredModel } from '../utils/models.js';
|
|
6
|
+
import { getCliVersionLabel } from '../utils/version.js';
|
|
7
|
+
import { cmd, fail, info, muted, ok } from '../utils/ui.js';
|
|
8
|
+
import { fetchActiveTasks } from './taskService.js';
|
|
9
|
+
const FIFTTH_GOLD = '#C8A96A';
|
|
10
|
+
const CLI_VERSION = getCliVersionLabel();
|
|
11
|
+
function exitWithMessage(message, code = 1) {
|
|
12
|
+
console.error(`\n${message}\n`);
|
|
13
|
+
process.exit(code);
|
|
14
|
+
}
|
|
15
|
+
function requireAuthenticatedWorkspace() {
|
|
16
|
+
const config = loadConfig();
|
|
17
|
+
if (!config.token) {
|
|
18
|
+
exitWithMessage(`${fail('Not authenticated.')} ${muted(`Run ${cmd('fiftth login')} first.`)}`);
|
|
19
|
+
}
|
|
20
|
+
if (!config.workspaceId) {
|
|
21
|
+
exitWithMessage(`${fail('Workspace not selected.')} ${muted(`Run ${cmd('fiftth use')} first.`)}`);
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
workspace: config.workspace,
|
|
25
|
+
workspaceId: config.workspaceId,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function findTaskById(tasks, taskId) {
|
|
29
|
+
return tasks.find((task) => task.id === taskId);
|
|
30
|
+
}
|
|
31
|
+
function buildTaskChoices(tasks) {
|
|
32
|
+
return tasks.map((task) => ({
|
|
33
|
+
name: chalk.hex(FIFTTH_GOLD)(task.title) + ' ' + chalk.hex('#8D8D8D')(`(${task.id})`),
|
|
34
|
+
short: task.title,
|
|
35
|
+
value: task.id,
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
function renderTaskScreen(title, lines) {
|
|
39
|
+
const config = loadConfig();
|
|
40
|
+
console.log(renderDashboard({
|
|
41
|
+
title,
|
|
42
|
+
subtitle: 'active task routing for checkout and planning',
|
|
43
|
+
metrics: buildGlobalMetrics({
|
|
44
|
+
workspace: config.workspace,
|
|
45
|
+
loggedIn: Boolean(config.token),
|
|
46
|
+
model: resolveConfiguredModel(config),
|
|
47
|
+
cliVersion: CLI_VERSION,
|
|
48
|
+
dockerStatus: getDockerRuntimeStatus(),
|
|
49
|
+
}),
|
|
50
|
+
panels: [{ title: 'tasks', lines }],
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
export async function fetchWorkspaceTasks() {
|
|
54
|
+
const { workspace, workspaceId } = requireAuthenticatedWorkspace();
|
|
55
|
+
try {
|
|
56
|
+
const tasks = await fetchActiveTasks(workspaceId);
|
|
57
|
+
return {
|
|
58
|
+
workspaceName: workspace,
|
|
59
|
+
tasks,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
exitWithMessage(fail('Failed to fetch tasks from API.'));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export async function promptForTaskSelection(tasks) {
|
|
67
|
+
if (tasks.length === 0) {
|
|
68
|
+
renderTaskScreen('task selection', [info('No active tasks found.')]);
|
|
69
|
+
process.exit(0);
|
|
70
|
+
}
|
|
71
|
+
const questions = [
|
|
72
|
+
{
|
|
73
|
+
type: 'list',
|
|
74
|
+
name: 'selectedTaskId',
|
|
75
|
+
prefix: chalk.hex(FIFTTH_GOLD)('◆'),
|
|
76
|
+
message: chalk.hex(FIFTTH_GOLD)('Choose a task'),
|
|
77
|
+
loop: false,
|
|
78
|
+
pageSize: 10,
|
|
79
|
+
choices: buildTaskChoices(tasks),
|
|
80
|
+
theme: {
|
|
81
|
+
icon: {
|
|
82
|
+
cursor: chalk.hex(FIFTTH_GOLD)('◆'),
|
|
83
|
+
},
|
|
84
|
+
style: {
|
|
85
|
+
answer: (text) => chalk.hex(FIFTTH_GOLD)(text),
|
|
86
|
+
message: (text) => chalk.hex(FIFTTH_GOLD)(text),
|
|
87
|
+
highlight: (text) => chalk.hex(FIFTTH_GOLD).bold(text),
|
|
88
|
+
help: (text) => chalk.hex('#8D8D8D')(text),
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
const { selectedTaskId } = await inquirer.prompt(questions);
|
|
94
|
+
const selectedTask = findTaskById(tasks, selectedTaskId);
|
|
95
|
+
if (!selectedTask) {
|
|
96
|
+
exitWithMessage(fail('No active tasks found.'));
|
|
97
|
+
}
|
|
98
|
+
return selectedTask;
|
|
99
|
+
}
|
|
100
|
+
export async function resolveSelectedTask(taskId) {
|
|
101
|
+
const { tasks } = await fetchWorkspaceTasks();
|
|
102
|
+
if (taskId) {
|
|
103
|
+
const matchedTask = findTaskById(tasks, taskId);
|
|
104
|
+
if (!matchedTask) {
|
|
105
|
+
exitWithMessage(fail('Task not found among active tasks.'));
|
|
106
|
+
}
|
|
107
|
+
renderTaskScreen('task selection', [ok(`Task selected: ${matchedTask.title}`)]);
|
|
108
|
+
return matchedTask;
|
|
109
|
+
}
|
|
110
|
+
return promptForTaskSelection(tasks);
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=taskSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taskSelection.js","sourceRoot":"","sources":["../../src/services/taskSelection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
type RepositoryExecutionStage = 'REPO_READY' | 'REPO_COMPLETED';
|
|
1
2
|
export interface TaskRepository {
|
|
3
|
+
id: string;
|
|
2
4
|
fullName: string;
|
|
3
|
-
branch: string;
|
|
4
5
|
}
|
|
5
6
|
export interface Task {
|
|
6
7
|
id: string;
|
|
@@ -8,6 +9,27 @@ export interface Task {
|
|
|
8
9
|
column: string;
|
|
9
10
|
repositories: TaskRepository[];
|
|
10
11
|
}
|
|
12
|
+
export interface TargetBranchMetadata {
|
|
13
|
+
fullName?: string;
|
|
14
|
+
repoName?: string;
|
|
15
|
+
baseBranch?: string;
|
|
16
|
+
targetBranch: string;
|
|
17
|
+
}
|
|
18
|
+
interface RepositoryExecutionStageInput {
|
|
19
|
+
taskId: string;
|
|
20
|
+
repositoryId: string;
|
|
21
|
+
stage: RepositoryExecutionStage;
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
interface FailExecutionStageInput extends RepositoryExecutionStageInput {
|
|
25
|
+
error: string;
|
|
26
|
+
}
|
|
11
27
|
export declare function moveTaskToHumanReview(taskId: string): Promise<void>;
|
|
28
|
+
export declare function moveTaskToInProgress(taskId: string): Promise<void>;
|
|
12
29
|
export declare function fetchActiveTasks(workspaceId: string): Promise<Task[]>;
|
|
30
|
+
export declare function startRepositoryExecutionStage(input: RepositoryExecutionStageInput): Promise<void>;
|
|
31
|
+
export declare function completeRepositoryExecutionStage(input: RepositoryExecutionStageInput): Promise<void>;
|
|
32
|
+
export declare function failRepositoryExecutionStage(input: FailExecutionStageInput): Promise<void>;
|
|
33
|
+
export declare function fetchTaskTargetBranches(taskId: string): Promise<TargetBranchMetadata[]>;
|
|
34
|
+
export {};
|
|
13
35
|
//# sourceMappingURL=taskService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskService.d.ts","sourceRoot":"","sources":["../../src/services/taskService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"taskService.d.ts","sourceRoot":"","sources":["../../src/services/taskService.ts"],"names":[],"mappings":"AAKA,KAAK,wBAAwB,GAAG,YAAY,GAAG,gBAAgB,CAAA;AAe/D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,cAAc,EAAE,CAAA;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB;AAoBD,UAAU,6BAA6B;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAED,UAAU,uBAAwB,SAAQ,6BAA6B;IACrE,KAAK,EAAE,MAAM,CAAA;CACd;AAmID,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAExE;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAQ3E;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,gCAAgC,CACpD,KAAK,EAAE,6BAA6B,GACnC,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAmB7F"}
|
|
@@ -1,26 +1,132 @@
|
|
|
1
1
|
import { createApiClient } from '../api/client.js';
|
|
2
2
|
const ALLOWED_COLUMNS = new Set(['IN_PROGRESS', 'HUMAN_REVIEW']);
|
|
3
|
-
|
|
3
|
+
const IGNORABLE_EXECUTION_STAGE_ERROR_CODES = new Set([
|
|
4
|
+
'STAGE_ALREADY_IN_PROGRESS',
|
|
5
|
+
'STAGE_ALREADY_EXISTS',
|
|
6
|
+
]);
|
|
7
|
+
function taskMoveEndpoint(taskId) {
|
|
8
|
+
return `/tasks/${taskId}/move`;
|
|
9
|
+
}
|
|
10
|
+
function taskExecutionStagesEndpoint(taskId) {
|
|
11
|
+
return `/tasks/${taskId}/execution-stages`;
|
|
12
|
+
}
|
|
13
|
+
function mapTaskRepository(repository) {
|
|
14
|
+
return {
|
|
15
|
+
id: repository.id,
|
|
16
|
+
fullName: repository.fullName,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function mapTask(task) {
|
|
20
|
+
return {
|
|
21
|
+
id: task.id,
|
|
22
|
+
title: task.title,
|
|
23
|
+
column: task.column,
|
|
24
|
+
repositories: (task.repositories ?? []).map(mapTaskRepository),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function readMetadataString(metadata, key) {
|
|
28
|
+
const value = metadata?.[key];
|
|
29
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
30
|
+
}
|
|
31
|
+
function buildTargetBranchMetadata(repository, historyEntry) {
|
|
32
|
+
const metadata = historyEntry.metadata;
|
|
33
|
+
const targetBranch = readMetadataString(metadata, 'targetBranch');
|
|
34
|
+
if (!targetBranch) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
fullName: readMetadataString(metadata, 'fullName') ?? repository.fullName,
|
|
39
|
+
repoName: readMetadataString(metadata, 'repoName') ?? repository.repoName,
|
|
40
|
+
baseBranch: readMetadataString(metadata, 'baseBranch'),
|
|
41
|
+
targetBranch,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function buildTargetBranchKey(branch) {
|
|
45
|
+
return branch.fullName ?? branch.repoName ?? branch.targetBranch;
|
|
46
|
+
}
|
|
47
|
+
function extractExecutionStageErrorCode(error) {
|
|
48
|
+
const candidate = error;
|
|
49
|
+
const code = candidate.response?.data?.code ?? candidate.response?.data?.error?.code;
|
|
50
|
+
if (typeof code === 'string' && code.length > 0) {
|
|
51
|
+
return code;
|
|
52
|
+
}
|
|
53
|
+
if (typeof candidate.message !== 'string') {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
for (const ignorableCode of IGNORABLE_EXECUTION_STAGE_ERROR_CODES) {
|
|
57
|
+
if (candidate.message.includes(ignorableCode)) {
|
|
58
|
+
return ignorableCode;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
function isIgnorableExecutionStageError(error) {
|
|
64
|
+
const code = extractExecutionStageErrorCode(error);
|
|
65
|
+
return typeof code === 'string' && IGNORABLE_EXECUTION_STAGE_ERROR_CODES.has(code);
|
|
66
|
+
}
|
|
67
|
+
async function moveTask(taskId, targetColumn) {
|
|
4
68
|
const client = createApiClient();
|
|
5
|
-
await client.post(
|
|
6
|
-
targetColumn
|
|
69
|
+
await client.post(taskMoveEndpoint(taskId), {
|
|
70
|
+
targetColumn,
|
|
7
71
|
targetOrder: 0,
|
|
8
72
|
});
|
|
9
73
|
}
|
|
74
|
+
async function updateRepositoryExecutionStage(action, input, error) {
|
|
75
|
+
const client = createApiClient();
|
|
76
|
+
try {
|
|
77
|
+
await client.post(taskExecutionStagesEndpoint(input.taskId), {
|
|
78
|
+
action,
|
|
79
|
+
repositoryId: input.repositoryId,
|
|
80
|
+
stage: input.stage,
|
|
81
|
+
metadata: input.metadata ?? {},
|
|
82
|
+
...(error ? { error } : {}),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (requestError) {
|
|
86
|
+
if (isIgnorableExecutionStageError(requestError)) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
throw requestError;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export async function moveTaskToHumanReview(taskId) {
|
|
93
|
+
await moveTask(taskId, 'HUMAN_REVIEW');
|
|
94
|
+
}
|
|
95
|
+
export async function moveTaskToInProgress(taskId) {
|
|
96
|
+
await moveTask(taskId, 'IN_PROGRESS');
|
|
97
|
+
}
|
|
10
98
|
export async function fetchActiveTasks(workspaceId) {
|
|
11
99
|
const client = createApiClient();
|
|
12
100
|
const query = new URLSearchParams({ workspaceId }).toString();
|
|
13
101
|
const tasks = await client.get(`/tasks?${query}`);
|
|
14
102
|
return tasks
|
|
15
103
|
.filter((task) => ALLOWED_COLUMNS.has(task.column))
|
|
16
|
-
.map(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
104
|
+
.map(mapTask);
|
|
105
|
+
}
|
|
106
|
+
export async function startRepositoryExecutionStage(input) {
|
|
107
|
+
await updateRepositoryExecutionStage('start', input);
|
|
108
|
+
}
|
|
109
|
+
export async function completeRepositoryExecutionStage(input) {
|
|
110
|
+
await updateRepositoryExecutionStage('complete', input);
|
|
111
|
+
}
|
|
112
|
+
export async function failRepositoryExecutionStage(input) {
|
|
113
|
+
await updateRepositoryExecutionStage('fail', input, input.error);
|
|
114
|
+
}
|
|
115
|
+
export async function fetchTaskTargetBranches(taskId) {
|
|
116
|
+
const client = createApiClient();
|
|
117
|
+
const response = await client.get(taskExecutionStagesEndpoint(taskId));
|
|
118
|
+
const branchesByRepository = new Map();
|
|
119
|
+
for (const repository of response.repositories ?? []) {
|
|
120
|
+
for (const stage of repository.stages ?? []) {
|
|
121
|
+
for (const historyEntry of stage.history ?? []) {
|
|
122
|
+
const branch = buildTargetBranchMetadata(repository, historyEntry);
|
|
123
|
+
if (!branch) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
branchesByRepository.set(buildTargetBranchKey(branch), branch);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return [...branchesByRepository.values()];
|
|
25
131
|
}
|
|
26
132
|
//# sourceMappingURL=taskService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taskService.js","sourceRoot":"","sources":["../../src/services/taskService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"taskService.js","sourceRoot":"","sources":["../../src/services/taskService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAA;AA8EhE,MAAM,qCAAqC,GAAG,IAAI,GAAG,CAAC;IACpD,2BAA2B;IAC3B,sBAAsB;CACvB,CAAC,CAAA;AAEF,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,UAAU,MAAM,OAAO,CAAA;AAChC,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAc;IACjD,OAAO,UAAU,MAAM,mBAAmB,CAAA;AAC5C,CAAC;AAED,SAAS,iBAAiB,CAAC,UAA6B;IACtD,OAAO;QACL,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,QAAQ,EAAE,UAAU,CAAC,QAAQ;KAC9B,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAa;IAC5B,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC;KAC/D,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAoD,EACpD,GAAW;IAEX,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAA;IAC7B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1E,CAAC;AAED,SAAS,yBAAyB,CAChC,UAAuC,EACvC,YAA2C;IAE3C,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;IACtC,MAAM,YAAY,GAAG,kBAAkB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;IAEjE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ;QACzE,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ;QACzE,UAAU,EAAE,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC;QACtD,YAAY;KACb,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA4B;IACxD,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,CAAA;AAClE,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACpD,MAAM,SAAS,GAAG,KAA6B,CAAA;IAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAA;IAEpF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,MAAM,aAAa,IAAI,qCAAqC,EAAE,CAAC;QAClE,IAAI,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC9C,OAAO,aAAa,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,8BAA8B,CAAC,KAAc;IACpD,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAA;IAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,qCAAqC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACpF,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,YAAwB;IAC9D,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;QAC1C,YAAY;QACZ,WAAW,EAAE,CAAC;KACf,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,MAAiC,EACjC,KAAoC,EACpC,KAAc;IAEd,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YAC3D,MAAM;YACN,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE;YAC9B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5B,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,IAAI,8BAA8B,CAAC,YAAY,CAAC,EAAE,CAAC;YACjD,OAAM;QACR,CAAC;QAED,MAAM,YAAY,CAAA;IACpB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,MAAc;IACxD,MAAM,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC7D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAY,UAAU,KAAK,EAAE,CAAC,CAAA;IAE5D,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAClD,GAAG,CAAC,OAAO,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,KAAoC;IAEpC,MAAM,8BAA8B,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,KAAoC;IAEpC,MAAM,8BAA8B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAA8B;IAE9B,MAAM,8BAA8B,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAc;IAC1D,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAA6B,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAA;IAClG,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAgC,CAAA;IAEpE,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QACrD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC5C,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,yBAAyB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;gBAClE,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,SAAQ;gBACV,CAAC;gBAED,oBAAoB,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAA;AAC3C,CAAC"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ export interface Config {
|
|
|
3
3
|
host: string;
|
|
4
4
|
workspace?: string;
|
|
5
5
|
workspaceId?: string;
|
|
6
|
+
model?: string;
|
|
6
7
|
}
|
|
8
|
+
export declare const DEFAULT_HOST = "https://www.fiftth.com/api";
|
|
7
9
|
export declare function loadConfig(): Config;
|
|
8
10
|
export declare function saveConfig(config: Config): void;
|
|
9
11
|
export declare function isAuthenticated(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAID,eAAO,MAAM,YAAY,+BAA+B,CAAA;AAwBxD,wBAAgB,UAAU,IAAI,MAAM,CAUnC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAU/C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/utils/config.js
CHANGED
|
@@ -3,26 +3,43 @@ import path from 'path';
|
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
const CONFIG_DIR = path.join(os.homedir(), '.fiftth');
|
|
5
5
|
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
6
|
+
export const DEFAULT_HOST = 'https://www.fiftth.com/api';
|
|
6
7
|
const DEFAULT_CONFIG = {
|
|
7
|
-
host:
|
|
8
|
+
host: DEFAULT_HOST,
|
|
8
9
|
};
|
|
10
|
+
function normalizeOptionalString(value) {
|
|
11
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
|
|
12
|
+
}
|
|
13
|
+
function normalizeConfig(rawValue) {
|
|
14
|
+
const rawConfig = typeof rawValue === 'object' && rawValue !== null
|
|
15
|
+
? rawValue
|
|
16
|
+
: {};
|
|
17
|
+
return {
|
|
18
|
+
host: normalizeOptionalString(rawConfig.host) ?? DEFAULT_CONFIG.host,
|
|
19
|
+
token: normalizeOptionalString(rawConfig.token),
|
|
20
|
+
workspace: normalizeOptionalString(rawConfig.workspace),
|
|
21
|
+
workspaceId: normalizeOptionalString(rawConfig.workspaceId),
|
|
22
|
+
model: normalizeOptionalString(rawConfig.model),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
9
25
|
export function loadConfig() {
|
|
10
26
|
try {
|
|
11
27
|
if (!fs.existsSync(CONFIG_FILE)) {
|
|
12
28
|
return { ...DEFAULT_CONFIG };
|
|
13
29
|
}
|
|
14
30
|
const raw = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
15
|
-
return
|
|
31
|
+
return normalizeConfig(JSON.parse(raw));
|
|
16
32
|
}
|
|
17
33
|
catch {
|
|
18
34
|
return { ...DEFAULT_CONFIG };
|
|
19
35
|
}
|
|
20
36
|
}
|
|
21
37
|
export function saveConfig(config) {
|
|
38
|
+
const normalizedConfig = normalizeConfig(config);
|
|
22
39
|
if (!fs.existsSync(CONFIG_DIR)) {
|
|
23
40
|
fs.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
|
|
24
41
|
}
|
|
25
|
-
fs.writeFileSync(CONFIG_FILE, JSON.stringify(
|
|
42
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(normalizedConfig, null, 2), {
|
|
26
43
|
mode: 0o600,
|
|
27
44
|
encoding: 'utf-8',
|
|
28
45
|
});
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AAUnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;AACrD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AACxD,MAAM,CAAC,MAAM,YAAY,GAAG,4BAA4B,CAAA;AAExD,MAAM,cAAc,GAAW;IAC7B,IAAI,EAAE,YAAY;CACnB,CAAA;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACxF,CAAC;AAED,SAAS,eAAe,CAAC,QAAiB;IACxC,MAAM,SAAS,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;QACjE,CAAC,CAAC,QAA2B;QAC7B,CAAC,CAAC,EAAE,CAAA;IAEN,OAAO;QACL,IAAI,EAAE,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI;QACpE,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC;QAC/C,SAAS,EAAE,uBAAuB,CAAC,SAAS,CAAC,SAAS,CAAC;QACvD,WAAW,EAAE,uBAAuB,CAAC,SAAS,CAAC,WAAW,CAAC;QAC3D,KAAK,EAAE,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC;KAChD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,GAAG,cAAc,EAAE,CAAA;QAC9B,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACjD,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAA;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAEhD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC5D,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QACvE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type UiTone } from "./ui.js";
|
|
2
|
+
export interface DashboardMetric {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
tone?: UiTone;
|
|
6
|
+
}
|
|
7
|
+
export interface DashboardPanel {
|
|
8
|
+
title: string;
|
|
9
|
+
lines: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface RenderDashboardOptions {
|
|
12
|
+
title: string;
|
|
13
|
+
subtitle?: string;
|
|
14
|
+
metrics?: DashboardMetric[];
|
|
15
|
+
panels?: DashboardPanel[];
|
|
16
|
+
events?: string[];
|
|
17
|
+
eventRenderer?: (frameIndex: number) => string[];
|
|
18
|
+
loadingText?: string;
|
|
19
|
+
frameIndex?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface DockerRuntimeStatus {
|
|
22
|
+
available: boolean;
|
|
23
|
+
runningCount: number;
|
|
24
|
+
names: string[];
|
|
25
|
+
}
|
|
26
|
+
export interface GlobalMetricOptions {
|
|
27
|
+
workspace?: string;
|
|
28
|
+
loggedIn: boolean;
|
|
29
|
+
model: string;
|
|
30
|
+
cliVersion: string;
|
|
31
|
+
dockerStatus?: DockerRuntimeStatus;
|
|
32
|
+
}
|
|
33
|
+
export declare function getDockerRuntimeStatus(): DockerRuntimeStatus;
|
|
34
|
+
export declare function ensureDockerRuntime(): DockerRuntimeStatus;
|
|
35
|
+
export declare function buildGlobalMetrics(options: GlobalMetricOptions): DashboardMetric[];
|
|
36
|
+
export declare function renderDashboard(options: RenderDashboardOptions): string;
|
|
37
|
+
export declare class LiveDashboard {
|
|
38
|
+
private readonly title;
|
|
39
|
+
private readonly subtitle?;
|
|
40
|
+
private readonly interactive;
|
|
41
|
+
private readonly eventsLimit;
|
|
42
|
+
private readonly animate;
|
|
43
|
+
private frameIndex;
|
|
44
|
+
private loadingText;
|
|
45
|
+
private metrics;
|
|
46
|
+
private events;
|
|
47
|
+
private eventRenderer?;
|
|
48
|
+
private timer?;
|
|
49
|
+
private started;
|
|
50
|
+
private lastVisualLines;
|
|
51
|
+
constructor(title: string, subtitle?: string | undefined, eventsLimit?: number, options?: {
|
|
52
|
+
animate?: boolean;
|
|
53
|
+
});
|
|
54
|
+
start(): void;
|
|
55
|
+
stop(): void;
|
|
56
|
+
setMetrics(metrics: DashboardMetric[]): void;
|
|
57
|
+
setPanels(_panels: DashboardPanel[]): void;
|
|
58
|
+
setLoading(text: string): void;
|
|
59
|
+
setEvents(lines: string[]): void;
|
|
60
|
+
setEventRenderer(renderer?: (frameIndex: number) => string[]): void;
|
|
61
|
+
addEvent(text: string, tone?: UiTone): void;
|
|
62
|
+
snapshot(): string;
|
|
63
|
+
private render;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/utils/dashboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAK3E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAeD,wBAAgB,sBAAsB,IAAI,mBAAmB,CAY5D;AAED,wBAAgB,mBAAmB,IAAI,mBAAmB,CAYzD;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,GAC3B,eAAe,EAAE,CA4BnB;AA2BD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAEvE;AAED,qBAAa,aAAa;IActB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAd5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAAC,CAAmC;IACzD,OAAO,CAAC,KAAK,CAAC,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAK;gBAGT,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,YAAA,EAClC,WAAW,SAAuB,EAClC,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAO;IAOrC,KAAK,IAAI,IAAI;IAab,IAAI,IAAI,IAAI;IAKZ,UAAU,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI;IAK5C,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAI1C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK9B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAMhC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,EAAE,GAAG,IAAI;IAKnE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,GAAG,IAAI;IAapD,QAAQ,IAAI,MAAM;IAYlB,OAAO,CAAC,MAAM;CAuBf"}
|