@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
package/dist/commands/login.js
CHANGED
|
@@ -1,34 +1,58 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
import {
|
|
2
|
+
import { password, confirm } from '@inquirer/prompts';
|
|
3
3
|
import ora from 'ora';
|
|
4
|
+
import { buildGlobalMetrics, getDockerRuntimeStatus, renderDashboard } from '../utils/dashboard.js';
|
|
5
|
+
import { ensureModelConfigured, findModelOption, resolveConfiguredModel } from '../utils/models.js';
|
|
4
6
|
import { loadConfig, saveConfig } from '../utils/config.js';
|
|
7
|
+
import { getCliVersionLabel, getUserAgent } from '../utils/version.js';
|
|
5
8
|
import { cmd, fail, info, kv, muted, ok, section, title } from '../utils/ui.js';
|
|
9
|
+
const CLI_VERSION = getCliVersionLabel();
|
|
10
|
+
function renderLoginScreen(titleText, lines, config = loadConfig()) {
|
|
11
|
+
console.log(renderDashboard({
|
|
12
|
+
title: titleText,
|
|
13
|
+
subtitle: 'authenticate and prepare the CLI workspace',
|
|
14
|
+
metrics: buildGlobalMetrics({
|
|
15
|
+
workspace: config.workspace,
|
|
16
|
+
loggedIn: Boolean(config.token),
|
|
17
|
+
model: resolveConfiguredModel(config),
|
|
18
|
+
cliVersion: CLI_VERSION,
|
|
19
|
+
dockerStatus: getDockerRuntimeStatus(),
|
|
20
|
+
}),
|
|
21
|
+
panels: [
|
|
22
|
+
{
|
|
23
|
+
title: 'session',
|
|
24
|
+
lines,
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
}));
|
|
28
|
+
}
|
|
6
29
|
function normalizeToken(rawToken) {
|
|
7
30
|
return rawToken.trim().replace(/^Bearer\s+/i, '');
|
|
8
31
|
}
|
|
9
32
|
async function validateToken(host, token) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (!response.ok) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
const body = (await response.json().catch(() => null));
|
|
21
|
-
return body?.valid === true;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
33
|
+
const response = await fetch(`${host}/cli-tokens`, {
|
|
34
|
+
headers: {
|
|
35
|
+
Authorization: `Bearer ${token}`,
|
|
36
|
+
'User-Agent': getUserAgent(),
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
if (response.status === 401 || response.status === 403) {
|
|
24
40
|
return false;
|
|
25
41
|
}
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
throw new Error(`Token validation failed with ${response.status} ${response.statusText}.`);
|
|
44
|
+
}
|
|
45
|
+
const body = (await response.json().catch(() => null));
|
|
46
|
+
return body?.valid === true;
|
|
26
47
|
}
|
|
27
48
|
export async function loginCommand(options) {
|
|
28
49
|
const config = loadConfig();
|
|
29
50
|
const host = options.host ?? config.host;
|
|
30
|
-
|
|
31
|
-
|
|
51
|
+
renderLoginScreen('fiftth login', [
|
|
52
|
+
title('Welcome to Fiftth'),
|
|
53
|
+
muted('Orchestrate tasks, repos and agent workflows from your terminal.'),
|
|
54
|
+
muted(`Host ${cmd(host)}`),
|
|
55
|
+
], config);
|
|
32
56
|
if (config.token && !options.token) {
|
|
33
57
|
const alreadyLoggedIn = await confirm({
|
|
34
58
|
message: chalk.yellow('You are already logged in. Validate login again?'),
|
|
@@ -56,18 +80,31 @@ export async function loginCommand(options) {
|
|
|
56
80
|
token = normalizeToken(token);
|
|
57
81
|
}
|
|
58
82
|
const spinner = ora('Validating credentials...').start();
|
|
59
|
-
|
|
83
|
+
let valid = false;
|
|
84
|
+
try {
|
|
85
|
+
valid = await validateToken(host, token);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
spinner.fail(fail('Could not validate credentials.'));
|
|
89
|
+
console.error(`\n${muted(error instanceof Error ? error.message : String(error))}\n`);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
60
92
|
if (!valid) {
|
|
61
93
|
spinner.fail(fail('Authentication failed.'));
|
|
62
94
|
console.error(`\n${muted('Make sure your token is correct and has not expired.')}\n`);
|
|
63
95
|
process.exit(1);
|
|
64
96
|
}
|
|
65
97
|
spinner.succeed(ok('Authentication validated.'));
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
98
|
+
const updatedConfig = { ...config, token, host };
|
|
99
|
+
saveConfig(updatedConfig);
|
|
100
|
+
const selectedModel = await ensureModelConfigured(updatedConfig);
|
|
101
|
+
const modelLabel = findModelOption(selectedModel)?.label ?? selectedModel;
|
|
102
|
+
renderLoginScreen('session ready', [
|
|
103
|
+
section('Session ready'),
|
|
104
|
+
kv('Host', cmd(host)),
|
|
105
|
+
kv('Model', modelLabel),
|
|
106
|
+
kv('Next', `run ${cmd('fiftth use <workspace>')}`),
|
|
107
|
+
], loadConfig());
|
|
71
108
|
}
|
|
72
109
|
export async function logoutCommand() {
|
|
73
110
|
const config = loadConfig();
|
|
@@ -85,7 +122,7 @@ export async function logoutCommand() {
|
|
|
85
122
|
}
|
|
86
123
|
const { token: _token, ...rest } = config;
|
|
87
124
|
saveConfig(rest);
|
|
88
|
-
|
|
125
|
+
renderLoginScreen('fiftth logout', [ok('Logged out successfully.')], loadConfig());
|
|
89
126
|
}
|
|
90
127
|
export async function loginStatusCommand() {
|
|
91
128
|
const config = loadConfig();
|
|
@@ -95,20 +132,34 @@ export async function loginStatusCommand() {
|
|
|
95
132
|
return;
|
|
96
133
|
}
|
|
97
134
|
const spinner = ora('Checking authentication status...').start();
|
|
98
|
-
|
|
135
|
+
let valid = false;
|
|
136
|
+
try {
|
|
137
|
+
valid = await validateToken(config.host, config.token);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
spinner.fail(fail('Could not verify authentication status.'));
|
|
141
|
+
renderLoginScreen('login status', [
|
|
142
|
+
fail(error instanceof Error ? error.message : String(error)),
|
|
143
|
+
muted(`Run ${cmd('fiftth login')} after the API is reachable.`),
|
|
144
|
+
], config);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
99
147
|
if (valid) {
|
|
100
148
|
spinner.succeed(ok('Authenticated'));
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
149
|
+
renderLoginScreen('login status', [
|
|
150
|
+
kv('Host', cmd(config.host)),
|
|
151
|
+
config.workspace ? kv('Workspace', cmd(config.workspace)) : muted('Workspace not selected'),
|
|
152
|
+
kv('Token', 'valid'),
|
|
153
|
+
kv('Model', findModelOption(resolveConfiguredModel(config))?.label ?? resolveConfiguredModel(config)),
|
|
154
|
+
], config);
|
|
106
155
|
}
|
|
107
156
|
else {
|
|
108
157
|
spinner.fail(fail('Token is invalid or expired.'));
|
|
109
|
-
|
|
158
|
+
renderLoginScreen('login status', [
|
|
159
|
+
fail('Token is invalid or expired.'),
|
|
160
|
+
muted(`Run ${cmd('fiftth login')} to authenticate again.`),
|
|
161
|
+
], config);
|
|
110
162
|
}
|
|
111
163
|
}
|
|
112
|
-
export { input };
|
|
113
164
|
export { normalizeToken };
|
|
114
165
|
//# sourceMappingURL=login.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAQA,wBAAsB,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { buildGlobalMetrics, getDockerRuntimeStatus, renderDashboard } from '../utils/dashboard.js';
|
|
2
|
+
import { loadConfig } from '../utils/config.js';
|
|
3
|
+
import { findModelOption, setPreferredModel, resolveConfiguredModel } from '../utils/models.js';
|
|
4
|
+
import { getCliVersionLabel } from '../utils/version.js';
|
|
5
|
+
import { ok } from '../utils/ui.js';
|
|
6
|
+
const CLI_VERSION = getCliVersionLabel();
|
|
7
|
+
export async function modelCommand(model) {
|
|
8
|
+
const selectedModel = await setPreferredModel(model);
|
|
9
|
+
const config = loadConfig();
|
|
10
|
+
const matched = findModelOption(selectedModel);
|
|
11
|
+
console.log(renderDashboard({
|
|
12
|
+
title: 'fiftth model',
|
|
13
|
+
subtitle: 'default model persisted for checkout and nexus',
|
|
14
|
+
metrics: buildGlobalMetrics({
|
|
15
|
+
workspace: config.workspace,
|
|
16
|
+
loggedIn: Boolean(config.token),
|
|
17
|
+
model: resolveConfiguredModel({ model: selectedModel }),
|
|
18
|
+
cliVersion: CLI_VERSION,
|
|
19
|
+
dockerStatus: getDockerRuntimeStatus(),
|
|
20
|
+
}),
|
|
21
|
+
panels: [
|
|
22
|
+
{
|
|
23
|
+
title: 'selection saved',
|
|
24
|
+
lines: [
|
|
25
|
+
ok(`Default model set to ${matched?.label ?? selectedModel}`),
|
|
26
|
+
matched?.hint ?? 'The selected model will be used by checkout and nexus.',
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/commands/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAA;AAExC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAc;IAC/C,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,CAAA;IACpD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC,CAAA;IAE9C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC1B,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,gDAAgD;QAC1D,OAAO,EAAE,kBAAkB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAC/B,KAAK,EAAE,sBAAsB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;YACvD,UAAU,EAAE,WAAW;YACvB,YAAY,EAAE,sBAAsB,EAAE;SACvC,CAAC;QACF,MAAM,EAAE;YACN;gBACE,KAAK,EAAE,iBAAiB;gBACxB,KAAK,EAAE;oBACL,EAAE,CAAC,wBAAwB,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,CAAC;oBAC7D,OAAO,EAAE,IAAI,IAAI,wDAAwD;iBAC1E;aACF;SACF;KACF,CAAC,CAAC,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planningContext.d.ts","sourceRoot":"","sources":["../../src/commands/planningContext.ts"],"names":[],"mappings":"AA0BA,UAAU,sBAAsB;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AA4BD,wBAAsB,sBAAsB,CAC1C,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAkDf"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { resolveSelectedTask } from '../services/taskSelection.js';
|
|
3
|
+
import { buildGlobalMetrics, getDockerRuntimeStatus, renderDashboard } from '../utils/dashboard.js';
|
|
4
|
+
import { loadConfig } from '../utils/config.js';
|
|
5
|
+
import { resolveConfiguredModel } from '../utils/models.js';
|
|
6
|
+
import { getCliVersionLabel } from '../utils/version.js';
|
|
7
|
+
import { fail, info, kv, muted, ok, section } from '../utils/ui.js';
|
|
8
|
+
const CLI_VERSION = getCliVersionLabel();
|
|
9
|
+
function renderPlanningScreen(lines) {
|
|
10
|
+
const config = loadConfig();
|
|
11
|
+
console.log(renderDashboard({
|
|
12
|
+
title: 'planning context',
|
|
13
|
+
subtitle: 'validate repository ownership before creating PRDs',
|
|
14
|
+
metrics: buildGlobalMetrics({
|
|
15
|
+
workspace: config.workspace,
|
|
16
|
+
loggedIn: Boolean(config.token),
|
|
17
|
+
model: resolveConfiguredModel(config),
|
|
18
|
+
cliVersion: CLI_VERSION,
|
|
19
|
+
dockerStatus: getDockerRuntimeStatus(),
|
|
20
|
+
}),
|
|
21
|
+
panels: [{ title: 'task validation', lines }],
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
function parseGitHubRepoFullName(remoteUrl) {
|
|
25
|
+
const normalized = remoteUrl.trim();
|
|
26
|
+
const match = normalized.match(/github\.com[:/]([^/]+\/[^/.]+?)(?:\.git)?$/i);
|
|
27
|
+
return match?.[1] ?? null;
|
|
28
|
+
}
|
|
29
|
+
function resolveCurrentRepositoryFullName() {
|
|
30
|
+
let remoteUrl = '';
|
|
31
|
+
try {
|
|
32
|
+
remoteUrl = execSync('git remote get-url origin', {
|
|
33
|
+
encoding: 'utf-8',
|
|
34
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
35
|
+
}).trim();
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
throw new Error('Current directory does not have a readable git origin remote.');
|
|
39
|
+
}
|
|
40
|
+
const repositoryFullName = parseGitHubRepoFullName(remoteUrl);
|
|
41
|
+
if (!repositoryFullName) {
|
|
42
|
+
throw new Error(`Could not infer a GitHub repository from origin remote: ${remoteUrl}`);
|
|
43
|
+
}
|
|
44
|
+
return repositoryFullName;
|
|
45
|
+
}
|
|
46
|
+
export async function planningContextCommand(taskId, options = {}) {
|
|
47
|
+
const selectedTask = await resolveSelectedTask(taskId);
|
|
48
|
+
const currentRepository = resolveCurrentRepositoryFullName();
|
|
49
|
+
const taskRepositories = selectedTask.repositories.map((repository) => ({
|
|
50
|
+
id: repository.id,
|
|
51
|
+
fullName: repository.fullName,
|
|
52
|
+
isCurrent: repository.fullName === currentRepository,
|
|
53
|
+
}));
|
|
54
|
+
const repositoryMatch = taskRepositories.some((repository) => repository.isCurrent);
|
|
55
|
+
if (options.json) {
|
|
56
|
+
console.log(JSON.stringify({
|
|
57
|
+
task: {
|
|
58
|
+
id: selectedTask.id,
|
|
59
|
+
title: selectedTask.title,
|
|
60
|
+
column: selectedTask.column,
|
|
61
|
+
},
|
|
62
|
+
currentRepository,
|
|
63
|
+
repositoryMatch,
|
|
64
|
+
repositories: taskRepositories,
|
|
65
|
+
}, null, 2));
|
|
66
|
+
if (!repositoryMatch) {
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const lines = [
|
|
72
|
+
section('Planning context'),
|
|
73
|
+
kv('Task', `${selectedTask.title} (${selectedTask.id})`),
|
|
74
|
+
kv('Current repository', currentRepository),
|
|
75
|
+
kv('Task repositories', String(taskRepositories.length)),
|
|
76
|
+
...taskRepositories.map((repository) => ` ${repository.isCurrent ? ok(repository.fullName) : muted(repository.fullName)}`),
|
|
77
|
+
];
|
|
78
|
+
if (!repositoryMatch) {
|
|
79
|
+
renderPlanningScreen([
|
|
80
|
+
...lines,
|
|
81
|
+
fail('The current repository is not linked to the selected task.'),
|
|
82
|
+
info('Do not create a PRD in this repository for that task.'),
|
|
83
|
+
]);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
renderPlanningScreen([
|
|
87
|
+
...lines,
|
|
88
|
+
ok('The current repository is linked to the selected task.'),
|
|
89
|
+
]);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=planningContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"planningContext.js","sourceRoot":"","sources":["../../src/commands/planningContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAoHnC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB3D"}
|
package/dist/commands/repo.js
CHANGED
|
@@ -2,8 +2,28 @@ import fs from 'fs';
|
|
|
2
2
|
import os from 'os';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import chalk from 'chalk';
|
|
5
|
+
import { buildGlobalMetrics, getDockerRuntimeStatus, renderDashboard } from '../utils/dashboard.js';
|
|
5
6
|
import { addRepository, getRepositories, removeRepository, } from '../config/configService.js';
|
|
7
|
+
import { loadConfig } from '../utils/config.js';
|
|
8
|
+
import { resolveConfiguredModel } from '../utils/models.js';
|
|
9
|
+
import { getCliVersionLabel } from '../utils/version.js';
|
|
6
10
|
import { cmd, fail, info, kv, muted, ok, section } from '../utils/ui.js';
|
|
11
|
+
const CLI_VERSION = getCliVersionLabel();
|
|
12
|
+
function renderRepoScreen(title, lines) {
|
|
13
|
+
const config = loadConfig();
|
|
14
|
+
console.log(renderDashboard({
|
|
15
|
+
title,
|
|
16
|
+
subtitle: 'repository registry for multi-repo task checkout',
|
|
17
|
+
metrics: buildGlobalMetrics({
|
|
18
|
+
workspace: config.workspace,
|
|
19
|
+
loggedIn: Boolean(config.token),
|
|
20
|
+
model: resolveConfiguredModel(config),
|
|
21
|
+
cliVersion: CLI_VERSION,
|
|
22
|
+
dockerStatus: getDockerRuntimeStatus(),
|
|
23
|
+
}),
|
|
24
|
+
panels: [{ title: 'repositories', lines }],
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
7
27
|
function expandHomeDirectory(inputPath) {
|
|
8
28
|
if (inputPath === '~') {
|
|
9
29
|
return os.homedir();
|
|
@@ -36,27 +56,29 @@ function addRepoCommand(repoName, repoPathInput) {
|
|
|
36
56
|
validateRepositoryPath(absolutePath);
|
|
37
57
|
const { overwritten } = addRepository(repoName, absolutePath);
|
|
38
58
|
if (overwritten) {
|
|
39
|
-
|
|
59
|
+
renderRepoScreen('fiftth repo add', [chalk.yellow(info('Repository already exists. Overwriting mapping.'))]);
|
|
40
60
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
61
|
+
renderRepoScreen('fiftth repo add', [
|
|
62
|
+
ok('Repository registered'),
|
|
63
|
+
kv('Repo', repoName),
|
|
64
|
+
kv('Path', cmd(absolutePath)),
|
|
65
|
+
]);
|
|
45
66
|
}
|
|
46
67
|
function listRepoCommand() {
|
|
47
68
|
const repositories = getRepositories();
|
|
48
69
|
const entries = Object.entries(repositories);
|
|
49
70
|
if (entries.length === 0) {
|
|
50
|
-
|
|
51
|
-
|
|
71
|
+
renderRepoScreen('fiftth repo list', [
|
|
72
|
+
info('No repositories configured yet.'),
|
|
73
|
+
muted(`Use ${cmd('fiftth repo add <repoName> <path>')}`),
|
|
74
|
+
]);
|
|
52
75
|
return;
|
|
53
76
|
}
|
|
54
77
|
const longestNameLength = Math.max(...entries.map(([name]) => name.length));
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
console.log();
|
|
78
|
+
renderRepoScreen('fiftth repo list', [
|
|
79
|
+
section(`Configured repositories (${entries.length})`),
|
|
80
|
+
...entries.map(([repoName, repoPath]) => `${repoName.padEnd(longestNameLength, ' ')} ${muted('->')} ${cmd(repoPath)}`),
|
|
81
|
+
]);
|
|
60
82
|
}
|
|
61
83
|
function removeRepoCommand(repoName) {
|
|
62
84
|
const removed = removeRepository(repoName);
|
|
@@ -64,9 +86,10 @@ function removeRepoCommand(repoName) {
|
|
|
64
86
|
console.error(`\n${fail(`Repository '${repoName}' is not configured.`)}\n`);
|
|
65
87
|
process.exit(1);
|
|
66
88
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
89
|
+
renderRepoScreen('fiftth repo remove', [
|
|
90
|
+
ok('Repository removed'),
|
|
91
|
+
kv('Repo', repoName),
|
|
92
|
+
]);
|
|
70
93
|
}
|
|
71
94
|
export function registerRepoCommands(program) {
|
|
72
95
|
const repoCmd = program.command('repo').description('Manage local repository mappings');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExE,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAA;IACrB,CAAC;IAED,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,YAAY,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAA;IACnD,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrE,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAE3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,4CAA4C,CAAC,IAAI,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAgB,EAAE,aAAgC;IACxE,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QACtD,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;QACzB,CAAC,CAAC,aAAa,CAAA;IAEjB,MAAM,YAAY,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAA;IACzD,sBAAsB,CAAC,YAAY,CAAC,CAAA;IAEpC,MAAM,EAAE,WAAW,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAE7D,IAAI,WAAW,EAAE,CAAC;QAChB,
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAqHA,wBAAsB,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CjE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { confirm, select } from '@inquirer/prompts';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { buildGlobalMetrics, getDockerRuntimeStatus, renderDashboard } from '../utils/dashboard.js';
|
|
6
|
+
import { loadConfig } from '../utils/config.js';
|
|
7
|
+
import { resolveConfiguredModel } from '../utils/models.js';
|
|
8
|
+
import { getCliVersionLabel } from '../utils/version.js';
|
|
9
|
+
import { cmd, info, kv, muted, ok, section } from '../utils/ui.js';
|
|
10
|
+
const CLI_VERSION = getCliVersionLabel();
|
|
11
|
+
const PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
12
|
+
const BUNDLED_SKILLS_DIR = path.join(PACKAGE_ROOT, '.fiftthnexus', 'skills');
|
|
13
|
+
const BUNDLED_SKILLS = ['grill-me.md', 'prd-to-issues.md', 'write-prd.md'];
|
|
14
|
+
function getSkillsTargets() {
|
|
15
|
+
const workingDirectory = process.cwd();
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
id: 'copilot',
|
|
19
|
+
label: 'GitHub Copilot',
|
|
20
|
+
hint: 'Install into ./.github/agents',
|
|
21
|
+
destinationPath: path.join(workingDirectory, '.github', 'agents'),
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: 'claude-code',
|
|
25
|
+
label: 'Claude Code',
|
|
26
|
+
hint: 'Install into ./claude/skills',
|
|
27
|
+
destinationPath: path.join(workingDirectory, 'claude', 'skills'),
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
function normalizeTarget(input) {
|
|
32
|
+
const normalized = input.trim().toLowerCase();
|
|
33
|
+
if (normalized === 'copilot' || normalized === 'github-copilot') {
|
|
34
|
+
return 'copilot';
|
|
35
|
+
}
|
|
36
|
+
if (normalized === 'claude' || normalized === 'claude-code') {
|
|
37
|
+
return 'claude-code';
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
function renderSkillsScreen(title, lines) {
|
|
42
|
+
const config = loadConfig();
|
|
43
|
+
console.log(renderDashboard({
|
|
44
|
+
title,
|
|
45
|
+
subtitle: 'install bundled planning skills for your preferred agent runtime',
|
|
46
|
+
metrics: buildGlobalMetrics({
|
|
47
|
+
workspace: config.workspace,
|
|
48
|
+
loggedIn: Boolean(config.token),
|
|
49
|
+
model: resolveConfiguredModel(config),
|
|
50
|
+
cliVersion: CLI_VERSION,
|
|
51
|
+
dockerStatus: getDockerRuntimeStatus(),
|
|
52
|
+
}),
|
|
53
|
+
events: lines,
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
function getTargetById(targetId) {
|
|
57
|
+
const matchedTarget = getSkillsTargets().find((target) => target.id === targetId);
|
|
58
|
+
if (!matchedTarget) {
|
|
59
|
+
throw new Error(`Unsupported agent '${targetId}'. Choose 'copilot' or 'claude-code'.`);
|
|
60
|
+
}
|
|
61
|
+
return matchedTarget;
|
|
62
|
+
}
|
|
63
|
+
async function promptForTargetSelection() {
|
|
64
|
+
const selectedTarget = await select({
|
|
65
|
+
message: 'Choose where to install the bundled skills',
|
|
66
|
+
choices: getSkillsTargets().map((target) => ({
|
|
67
|
+
value: target.id,
|
|
68
|
+
name: `${target.label} ${target.hint}`,
|
|
69
|
+
})),
|
|
70
|
+
});
|
|
71
|
+
return getTargetById(selectedTarget);
|
|
72
|
+
}
|
|
73
|
+
function getMissingBundledSkills() {
|
|
74
|
+
return BUNDLED_SKILLS.filter((fileName) => !fs.existsSync(path.join(BUNDLED_SKILLS_DIR, fileName)));
|
|
75
|
+
}
|
|
76
|
+
function getExistingDestinationSkills(destinationPath) {
|
|
77
|
+
return BUNDLED_SKILLS.filter((fileName) => fs.existsSync(path.join(destinationPath, fileName)));
|
|
78
|
+
}
|
|
79
|
+
function installSkills(target) {
|
|
80
|
+
fs.mkdirSync(target.destinationPath, { recursive: true });
|
|
81
|
+
for (const fileName of BUNDLED_SKILLS) {
|
|
82
|
+
fs.copyFileSync(path.join(BUNDLED_SKILLS_DIR, fileName), path.join(target.destinationPath, fileName));
|
|
83
|
+
}
|
|
84
|
+
return BUNDLED_SKILLS.map((fileName) => path.join(target.destinationPath, fileName));
|
|
85
|
+
}
|
|
86
|
+
export async function skillsCommand(agent) {
|
|
87
|
+
const missingBundledSkills = getMissingBundledSkills();
|
|
88
|
+
if (missingBundledSkills.length > 0) {
|
|
89
|
+
throw new Error(`Bundled skills not found: ${missingBundledSkills.join(', ')}`);
|
|
90
|
+
}
|
|
91
|
+
let target;
|
|
92
|
+
if (agent) {
|
|
93
|
+
const normalizedTarget = normalizeTarget(agent);
|
|
94
|
+
if (!normalizedTarget) {
|
|
95
|
+
throw new Error(`Unsupported agent '${agent}'. Choose 'copilot' or 'claude-code'.`);
|
|
96
|
+
}
|
|
97
|
+
target = getTargetById(normalizedTarget);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
target = await promptForTargetSelection();
|
|
101
|
+
}
|
|
102
|
+
const existingSkills = getExistingDestinationSkills(target.destinationPath);
|
|
103
|
+
if (existingSkills.length > 0) {
|
|
104
|
+
const confirmed = await confirm({
|
|
105
|
+
message: `Overwrite ${existingSkills.length} existing skill file(s) in ${target.destinationPath}?`,
|
|
106
|
+
default: true,
|
|
107
|
+
});
|
|
108
|
+
if (!confirmed) {
|
|
109
|
+
renderSkillsScreen('fiftth skills', [info('Installation cancelled.')]);
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const installedFiles = installSkills(target);
|
|
114
|
+
renderSkillsScreen('fiftth skills', [
|
|
115
|
+
section('Skills installed'),
|
|
116
|
+
kv('Agent', target.label),
|
|
117
|
+
kv('Destination', cmd(target.destinationPath)),
|
|
118
|
+
kv('Files', BUNDLED_SKILLS.join(', ')),
|
|
119
|
+
...installedFiles.map((filePath) => ok(filePath)),
|
|
120
|
+
muted('These skills are bundled with the CLI and were copied from .fiftthnexus/skills.'),
|
|
121
|
+
]);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/use.d.ts
CHANGED
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
list?: boolean;
|
|
3
|
-
}
|
|
4
|
-
export declare function useCommand(workspace: string | undefined, options: UseOptions): Promise<void>;
|
|
5
|
-
export {};
|
|
1
|
+
export declare function useCommand(workspace: string | undefined): Promise<void>;
|
|
6
2
|
//# sourceMappingURL=use.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use.d.ts","sourceRoot":"","sources":["../../src/commands/use.ts"],"names":[],"mappings":"AA6BA,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiBf"}
|