@forwardimpact/pathway 0.25.22 → 0.25.25
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/bin/fit-pathway.js +117 -325
- package/package.json +2 -2
- package/src/commands/agent-io.js +1 -1
- package/src/commands/agent-list.js +164 -0
- package/src/commands/agent.js +83 -184
- package/src/commands/behaviour.js +22 -10
- package/src/commands/build-packs.js +208 -34
- package/src/commands/build.js +2 -2
- package/src/commands/command-factory.js +39 -14
- package/src/commands/discipline.js +24 -10
- package/src/commands/driver.js +28 -19
- package/src/commands/index.js +0 -1
- package/src/commands/interview.js +15 -10
- package/src/commands/job.js +110 -62
- package/src/commands/level.js +23 -11
- package/src/commands/progress.js +12 -7
- package/src/commands/questions.js +32 -14
- package/src/commands/skill.js +36 -18
- package/src/commands/stage.js +37 -27
- package/src/commands/tool.js +29 -19
- package/src/commands/track.js +23 -10
- package/src/formatters/questions/yaml.js +1 -1
- package/src/index.html +1 -1
- package/src/lib/cli-command.js +33 -33
- package/src/lib/cli-output.js +9 -189
- package/src/pages/agent-builder-install.js +6 -5
- package/src/commands/init.js +0 -64
- package/starter/behaviours/systems_thinking.yaml +0 -32
- package/starter/capabilities/delivery.yaml +0 -105
- package/starter/capabilities/reliability.yaml +0 -72
- package/starter/disciplines/software_engineering.yaml +0 -46
- package/starter/drivers.yaml +0 -10
- package/starter/framework.yaml +0 -49
- package/starter/levels.yaml +0 -39
- package/starter/questions/behaviours/.gitkeep +0 -0
- package/starter/questions/capabilities/.gitkeep +0 -0
- package/starter/questions/skills/.gitkeep +0 -0
- package/starter/stages.yaml +0 -21
- package/starter/tracks/forward_deployed.yaml +0 -33
- package/starter/tracks/platform.yaml +0 -33
package/src/commands/stage.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Handles stage summary, listing, and detail display in the terminal.
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* npx fit-pathway stage # Summary with lifecycle flow
|
|
8
|
+
* npx fit-pathway stage --list # IDs only (for piping)
|
|
9
|
+
* npx fit-pathway stage <id> # Detail view
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { createEntityCommand } from "./command-factory.js";
|
|
@@ -14,12 +14,13 @@ import {
|
|
|
14
14
|
prepareStageDetail,
|
|
15
15
|
getStageEmoji,
|
|
16
16
|
} from "../formatters/stage/shared.js";
|
|
17
|
-
import { formatTable } from "../lib/cli-output.js";
|
|
18
17
|
import {
|
|
18
|
+
formatTable,
|
|
19
19
|
formatHeader,
|
|
20
20
|
formatSubheader,
|
|
21
21
|
formatBullet,
|
|
22
|
-
|
|
22
|
+
formatWarning,
|
|
23
|
+
} from "@forwardimpact/libcli";
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
26
|
* Format stage list item for --list output
|
|
@@ -36,13 +37,13 @@ function formatListItem(stage) {
|
|
|
36
37
|
* @param {Object} _data - Full data context (unused)
|
|
37
38
|
*/
|
|
38
39
|
function formatSummary(stages, _data) {
|
|
39
|
-
|
|
40
|
+
process.stdout.write("\n" + formatHeader("\u{1F504} Stages") + "\n\n");
|
|
40
41
|
|
|
41
42
|
// Show lifecycle flow
|
|
42
43
|
const flow = stages
|
|
43
44
|
.map((s) => `${getStageEmoji(stages, s.id)} ${s.name}`)
|
|
44
45
|
.join(" → ");
|
|
45
|
-
|
|
46
|
+
process.stdout.write(formatSubheader(`Lifecycle: ${flow}`) + "\n\n");
|
|
46
47
|
|
|
47
48
|
const rows = stages.map((s) => {
|
|
48
49
|
const toolCount = s.tools?.length || 0;
|
|
@@ -50,10 +51,18 @@ function formatSummary(stages, _data) {
|
|
|
50
51
|
return [s.id, s.name, s.mode, toolCount, handoffCount];
|
|
51
52
|
});
|
|
52
53
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
process.stdout.write(
|
|
55
|
+
formatTable(["ID", "Name", "Mode", "Tools", "Handoffs"], rows) + "\n",
|
|
56
|
+
);
|
|
57
|
+
process.stdout.write(
|
|
58
|
+
"\n" + formatSubheader(`Total: ${stages.length} stages`) + "\n\n",
|
|
59
|
+
);
|
|
60
|
+
process.stdout.write(
|
|
61
|
+
formatBullet("Run 'npx fit-pathway stage --list' for IDs and names") + "\n",
|
|
62
|
+
);
|
|
63
|
+
process.stdout.write(
|
|
64
|
+
formatBullet("Run 'npx fit-pathway stage <id>' for details") + "\n\n",
|
|
65
|
+
);
|
|
57
66
|
}
|
|
58
67
|
|
|
59
68
|
/**
|
|
@@ -66,51 +75,52 @@ function formatDetail(viewAndContext, _framework) {
|
|
|
66
75
|
const view = prepareStageDetail(stage);
|
|
67
76
|
const emoji = getStageEmoji(stages, stage.id);
|
|
68
77
|
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
process.stdout.write("\n" + formatHeader(`${emoji} ${view.name}`) + "\n\n");
|
|
79
|
+
process.stdout.write(view.description + "\n\n");
|
|
71
80
|
|
|
72
81
|
// Read checklist
|
|
73
82
|
if (view.readChecklist.length > 0) {
|
|
74
|
-
|
|
83
|
+
process.stdout.write(formatSubheader("Read-Then-Do Checklist") + "\n\n");
|
|
75
84
|
for (const item of view.readChecklist) {
|
|
76
|
-
|
|
85
|
+
process.stdout.write(formatBullet(item, 1) + "\n");
|
|
77
86
|
}
|
|
78
|
-
|
|
87
|
+
process.stdout.write("\n");
|
|
79
88
|
}
|
|
80
89
|
|
|
81
90
|
// Confirm checklist
|
|
82
91
|
if (view.confirmChecklist.length > 0) {
|
|
83
|
-
|
|
92
|
+
process.stdout.write(formatSubheader("Do-Then-Confirm Checklist") + "\n\n");
|
|
84
93
|
for (const item of view.confirmChecklist) {
|
|
85
|
-
|
|
94
|
+
process.stdout.write(formatBullet(item, 1) + "\n");
|
|
86
95
|
}
|
|
87
|
-
|
|
96
|
+
process.stdout.write("\n");
|
|
88
97
|
}
|
|
89
98
|
|
|
90
99
|
// Constraints
|
|
91
100
|
if (view.constraints.length > 0) {
|
|
92
|
-
|
|
101
|
+
process.stdout.write(formatSubheader("Constraints") + "\n\n");
|
|
93
102
|
for (const item of view.constraints) {
|
|
94
|
-
|
|
103
|
+
process.stdout.write(" " + formatWarning(item) + "\n");
|
|
95
104
|
}
|
|
96
|
-
|
|
105
|
+
process.stdout.write("\n");
|
|
97
106
|
}
|
|
98
107
|
|
|
99
108
|
// Handoffs
|
|
100
109
|
if (view.handoffs.length > 0) {
|
|
101
|
-
|
|
110
|
+
process.stdout.write(formatSubheader("Handoffs") + "\n\n");
|
|
102
111
|
for (const handoff of view.handoffs) {
|
|
103
112
|
const targetStage = stages.find((s) => s.id === handoff.target);
|
|
104
113
|
const targetEmoji = getStageEmoji(stages, handoff.target);
|
|
105
114
|
const targetName = targetStage?.name || handoff.target;
|
|
106
|
-
|
|
107
|
-
formatBullet(`${targetEmoji} ${handoff.label} → ${targetName}`, 1)
|
|
115
|
+
process.stdout.write(
|
|
116
|
+
formatBullet(`${targetEmoji} ${handoff.label} → ${targetName}`, 1) +
|
|
117
|
+
"\n",
|
|
108
118
|
);
|
|
109
119
|
if (handoff.prompt) {
|
|
110
|
-
|
|
120
|
+
process.stdout.write(` "${handoff.prompt}"\n`);
|
|
111
121
|
}
|
|
112
122
|
}
|
|
113
|
-
|
|
123
|
+
process.stdout.write("\n");
|
|
114
124
|
}
|
|
115
125
|
}
|
|
116
126
|
|
package/src/commands/tool.js
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Handles tool summary, listing, and detail display in the terminal.
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* npx fit-pathway tool # Summary with stats
|
|
8
|
+
* npx fit-pathway tool --list # Tool names only (for piping)
|
|
9
|
+
* npx fit-pathway tool <name> # Detail view for specific tool
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { truncate } from "../formatters/shared.js";
|
|
@@ -15,7 +15,9 @@ import {
|
|
|
15
15
|
formatTable,
|
|
16
16
|
formatHeader,
|
|
17
17
|
formatSubheader,
|
|
18
|
-
|
|
18
|
+
formatBullet,
|
|
19
|
+
formatError,
|
|
20
|
+
} from "@forwardimpact/libcli";
|
|
19
21
|
|
|
20
22
|
/**
|
|
21
23
|
* Run tool command
|
|
@@ -50,8 +52,8 @@ export async function runToolCommand({ data, args, options }) {
|
|
|
50
52
|
const tool = tools.find((t) => t.name.toLowerCase() === name.toLowerCase());
|
|
51
53
|
|
|
52
54
|
if (!tool) {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
process.stderr.write(formatError(`Tool not found: ${name}`) + "\n");
|
|
56
|
+
process.stderr.write(`Available: ${tools.map((t) => t.name).join(", ")}\n`);
|
|
55
57
|
process.exit(1);
|
|
56
58
|
}
|
|
57
59
|
|
|
@@ -69,7 +71,7 @@ export async function runToolCommand({ data, args, options }) {
|
|
|
69
71
|
* @param {number} totalCount - Total tool count
|
|
70
72
|
*/
|
|
71
73
|
function formatSummary(tools, totalCount) {
|
|
72
|
-
|
|
74
|
+
process.stdout.write("\n" + formatHeader("\u{1F527} Tools") + "\n\n");
|
|
73
75
|
|
|
74
76
|
// Show tools sorted by usage count
|
|
75
77
|
const sorted = [...tools].sort((a, b) => b.usages.length - a.usages.length);
|
|
@@ -83,15 +85,24 @@ function formatSummary(tools, totalCount) {
|
|
|
83
85
|
: t.description,
|
|
84
86
|
]);
|
|
85
87
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
process.stdout.write(
|
|
89
|
+
formatTable(["Tool", "Skills", "Description"], rows) + "\n",
|
|
90
|
+
);
|
|
91
|
+
process.stdout.write(
|
|
92
|
+
"\n" + formatSubheader(`Total: ${totalCount} tools`) + "\n",
|
|
93
|
+
);
|
|
88
94
|
if (sorted.length > 15) {
|
|
89
|
-
|
|
95
|
+
process.stdout.write(formatBullet("(showing top 15 by usage)") + "\n");
|
|
90
96
|
}
|
|
91
|
-
|
|
92
|
-
|
|
97
|
+
process.stdout.write("\n");
|
|
98
|
+
process.stdout.write(
|
|
99
|
+
formatBullet(
|
|
100
|
+
"Run 'npx fit-pathway tool --list' for all tool names and descriptions",
|
|
101
|
+
) + "\n",
|
|
102
|
+
);
|
|
103
|
+
process.stdout.write(
|
|
104
|
+
formatBullet("Run 'npx fit-pathway tool <name>' for details") + "\n\n",
|
|
93
105
|
);
|
|
94
|
-
console.log(`Run 'bunx pathway tool <name>' for details\n`);
|
|
95
106
|
}
|
|
96
107
|
|
|
97
108
|
/**
|
|
@@ -99,17 +110,16 @@ function formatSummary(tools, totalCount) {
|
|
|
99
110
|
* @param {Object} tool - Aggregated tool with usages
|
|
100
111
|
*/
|
|
101
112
|
function formatDetail(tool) {
|
|
102
|
-
|
|
103
|
-
|
|
113
|
+
process.stdout.write("\n" + formatHeader(`\u{1F527} ${tool.name}`) + "\n\n");
|
|
114
|
+
process.stdout.write(tool.description + "\n\n");
|
|
104
115
|
|
|
105
116
|
if (tool.url) {
|
|
106
|
-
|
|
117
|
+
process.stdout.write(`Documentation: ${tool.url}\n\n`);
|
|
107
118
|
}
|
|
108
119
|
|
|
109
120
|
if (tool.usages.length > 0) {
|
|
110
|
-
|
|
121
|
+
process.stdout.write(formatSubheader("Used in Skills") + "\n\n");
|
|
111
122
|
const rows = tool.usages.map((u) => [u.skillName, u.useWhen]);
|
|
112
|
-
|
|
113
|
-
console.log();
|
|
123
|
+
process.stdout.write(formatTable(["Skill", "Use When"], rows) + "\n\n");
|
|
114
124
|
}
|
|
115
125
|
}
|
package/src/commands/track.js
CHANGED
|
@@ -4,16 +4,21 @@
|
|
|
4
4
|
* Handles track summary, listing, and detail display in the terminal.
|
|
5
5
|
*
|
|
6
6
|
* Usage:
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* npx fit-pathway track # Summary with stats
|
|
8
|
+
* npx fit-pathway track --list # IDs only (for piping)
|
|
9
|
+
* npx fit-pathway track <id> # Detail view
|
|
10
|
+
* npx fit-pathway track --validate # Validation checks
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { createEntityCommand } from "./command-factory.js";
|
|
14
14
|
import { trackToMarkdown } from "../formatters/track/markdown.js";
|
|
15
15
|
import { sortTracksByName } from "../formatters/track/shared.js";
|
|
16
|
-
import {
|
|
16
|
+
import {
|
|
17
|
+
formatTable,
|
|
18
|
+
formatHeader,
|
|
19
|
+
formatSubheader,
|
|
20
|
+
formatBullet,
|
|
21
|
+
} from "@forwardimpact/libcli";
|
|
17
22
|
import { getConceptEmoji } from "@forwardimpact/map/levels";
|
|
18
23
|
|
|
19
24
|
/**
|
|
@@ -34,7 +39,7 @@ function formatSummary(tracks, data) {
|
|
|
34
39
|
const { framework, disciplines } = data;
|
|
35
40
|
const emoji = framework ? getConceptEmoji(framework, "track") : "🛤️";
|
|
36
41
|
|
|
37
|
-
|
|
42
|
+
process.stdout.write("\n" + formatHeader(`${emoji} Tracks`) + "\n\n");
|
|
38
43
|
|
|
39
44
|
const rows = tracks.map((t) => {
|
|
40
45
|
const modCount = Object.keys(t.skillModifiers || {}).length;
|
|
@@ -47,10 +52,18 @@ function formatSummary(tracks, data) {
|
|
|
47
52
|
return [t.id, t.name, modCount, disciplineNames || "—"];
|
|
48
53
|
});
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
process.stdout.write(
|
|
56
|
+
formatTable(["ID", "Name", "Modifiers", "Disciplines"], rows) + "\n",
|
|
57
|
+
);
|
|
58
|
+
process.stdout.write(
|
|
59
|
+
"\n" + formatSubheader(`Total: ${tracks.length} tracks`) + "\n\n",
|
|
60
|
+
);
|
|
61
|
+
process.stdout.write(
|
|
62
|
+
formatBullet("Run 'npx fit-pathway track --list' for IDs and names") + "\n",
|
|
63
|
+
);
|
|
64
|
+
process.stdout.write(
|
|
65
|
+
formatBullet("Run 'npx fit-pathway track <id>' for details") + "\n\n",
|
|
66
|
+
);
|
|
54
67
|
}
|
|
55
68
|
|
|
56
69
|
/**
|
|
@@ -26,7 +26,7 @@ export function questionsToYaml(view, _options = {}) {
|
|
|
26
26
|
|
|
27
27
|
const filterStr =
|
|
28
28
|
filterParts.length > 0 ? filterParts.join(" ") : "(no filters)";
|
|
29
|
-
const header = `# Generated by:
|
|
29
|
+
const header = `# Generated by: npx fit-pathway questions ${filterStr}\n# Questions: ${questions.length}\n\n`;
|
|
30
30
|
|
|
31
31
|
// Group questions by source
|
|
32
32
|
const bySource = {};
|
package/src/index.html
CHANGED
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
<div class="top-bar__command">
|
|
84
84
|
<span class="top-bar__prompt">$</span>
|
|
85
85
|
<span class="top-bar__command-text" id="cli-command"
|
|
86
|
-
>
|
|
86
|
+
>npx fit-pathway</span
|
|
87
87
|
>
|
|
88
88
|
<button class="top-bar__copy" id="cli-copy" aria-label="Copy command">
|
|
89
89
|
<svg viewBox="0 0 24 24">
|
package/src/lib/cli-command.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI Command Mapping
|
|
3
3
|
*
|
|
4
|
-
* Maps hash routes to their equivalent `
|
|
4
|
+
* Maps hash routes to their equivalent `npx fit-pathway` CLI commands.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -11,122 +11,122 @@
|
|
|
11
11
|
*/
|
|
12
12
|
const ROUTE_COMMANDS = [
|
|
13
13
|
// Landing
|
|
14
|
-
{ pattern: /^\/$/, toCommand: () => "
|
|
14
|
+
{ pattern: /^\/$/, toCommand: () => "npx fit-pathway" },
|
|
15
15
|
|
|
16
16
|
// Entity lists
|
|
17
|
-
{ pattern: /^\/skill$/, toCommand: () => "
|
|
18
|
-
{ pattern: /^\/behaviour$/, toCommand: () => "
|
|
17
|
+
{ pattern: /^\/skill$/, toCommand: () => "npx fit-pathway skill" },
|
|
18
|
+
{ pattern: /^\/behaviour$/, toCommand: () => "npx fit-pathway behaviour" },
|
|
19
19
|
{
|
|
20
20
|
pattern: /^\/discipline$/,
|
|
21
|
-
toCommand: () => "
|
|
21
|
+
toCommand: () => "npx fit-pathway discipline",
|
|
22
22
|
},
|
|
23
|
-
{ pattern: /^\/track$/, toCommand: () => "
|
|
24
|
-
{ pattern: /^\/level$/, toCommand: () => "
|
|
25
|
-
{ pattern: /^\/driver$/, toCommand: () => "
|
|
26
|
-
{ pattern: /^\/stage$/, toCommand: () => "
|
|
27
|
-
{ pattern: /^\/tool$/, toCommand: () => "
|
|
23
|
+
{ pattern: /^\/track$/, toCommand: () => "npx fit-pathway track" },
|
|
24
|
+
{ pattern: /^\/level$/, toCommand: () => "npx fit-pathway level" },
|
|
25
|
+
{ pattern: /^\/driver$/, toCommand: () => "npx fit-pathway driver" },
|
|
26
|
+
{ pattern: /^\/stage$/, toCommand: () => "npx fit-pathway stage" },
|
|
27
|
+
{ pattern: /^\/tool$/, toCommand: () => "npx fit-pathway tool" },
|
|
28
28
|
|
|
29
29
|
// Entity details
|
|
30
30
|
{
|
|
31
31
|
pattern: /^\/skill\/(.+)$/,
|
|
32
|
-
toCommand: (m) => `
|
|
32
|
+
toCommand: (m) => `npx fit-pathway skill ${m[1]}`,
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
pattern: /^\/behaviour\/(.+)$/,
|
|
36
|
-
toCommand: (m) => `
|
|
36
|
+
toCommand: (m) => `npx fit-pathway behaviour ${m[1]}`,
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
pattern: /^\/discipline\/(.+)$/,
|
|
40
|
-
toCommand: (m) => `
|
|
40
|
+
toCommand: (m) => `npx fit-pathway discipline ${m[1]}`,
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
pattern: /^\/track\/(.+)$/,
|
|
44
|
-
toCommand: (m) => `
|
|
44
|
+
toCommand: (m) => `npx fit-pathway track ${m[1]}`,
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
pattern: /^\/level\/(.+)$/,
|
|
48
|
-
toCommand: (m) => `
|
|
48
|
+
toCommand: (m) => `npx fit-pathway level ${m[1]}`,
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
pattern: /^\/driver\/(.+)$/,
|
|
52
|
-
toCommand: (m) => `
|
|
52
|
+
toCommand: (m) => `npx fit-pathway driver ${m[1]}`,
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
pattern: /^\/stage\/(.+)$/,
|
|
56
|
-
toCommand: (m) => `
|
|
56
|
+
toCommand: (m) => `npx fit-pathway stage ${m[1]}`,
|
|
57
57
|
},
|
|
58
58
|
|
|
59
59
|
// Job builder + detail
|
|
60
60
|
{
|
|
61
61
|
pattern: /^\/job-builder$/,
|
|
62
|
-
toCommand: () => "
|
|
62
|
+
toCommand: () => "npx fit-pathway job --list",
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
pattern: /^\/job\/([^/]+)\/([^/]+)\/([^/]+)$/,
|
|
66
|
-
toCommand: (m) => `
|
|
66
|
+
toCommand: (m) => `npx fit-pathway job ${m[1]} ${m[2]} --track=${m[3]}`,
|
|
67
67
|
},
|
|
68
68
|
{
|
|
69
69
|
pattern: /^\/job\/([^/]+)\/([^/]+)$/,
|
|
70
|
-
toCommand: (m) => `
|
|
70
|
+
toCommand: (m) => `npx fit-pathway job ${m[1]} ${m[2]}`,
|
|
71
71
|
},
|
|
72
72
|
|
|
73
73
|
// Interview builder + detail
|
|
74
74
|
{
|
|
75
75
|
pattern: /^\/interview-prep$/,
|
|
76
|
-
toCommand: () => "
|
|
76
|
+
toCommand: () => "npx fit-pathway interview --list",
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
79
|
pattern: /^\/interview\/([^/]+)\/([^/]+)\/([^/]+)$/,
|
|
80
80
|
toCommand: (m) =>
|
|
81
|
-
`
|
|
81
|
+
`npx fit-pathway interview ${m[1]} ${m[2]} --track=${m[3]}`,
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
pattern: /^\/interview\/([^/]+)\/([^/]+)$/,
|
|
85
|
-
toCommand: (m) => `
|
|
85
|
+
toCommand: (m) => `npx fit-pathway interview ${m[1]} ${m[2]}`,
|
|
86
86
|
},
|
|
87
87
|
|
|
88
88
|
// Career progress builder + detail
|
|
89
89
|
{
|
|
90
90
|
pattern: /^\/career-progress$/,
|
|
91
|
-
toCommand: () => "
|
|
91
|
+
toCommand: () => "npx fit-pathway progress --list",
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
94
|
pattern: /^\/progress\/([^/]+)\/([^/]+)\/([^/]+)$/,
|
|
95
95
|
toCommand: (m) =>
|
|
96
|
-
`
|
|
96
|
+
`npx fit-pathway progress ${m[1]} ${m[2]} --track=${m[3]}`,
|
|
97
97
|
},
|
|
98
98
|
{
|
|
99
99
|
pattern: /^\/progress\/([^/]+)\/([^/]+)$/,
|
|
100
|
-
toCommand: (m) => `
|
|
100
|
+
toCommand: (m) => `npx fit-pathway progress ${m[1]} ${m[2]}`,
|
|
101
101
|
},
|
|
102
102
|
|
|
103
103
|
// Self-assessment
|
|
104
104
|
{
|
|
105
105
|
pattern: /^\/self-assessment$/,
|
|
106
|
-
toCommand: () => "
|
|
106
|
+
toCommand: () => "npx fit-pathway self-assessment",
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
pattern: /^\/self-assessment\/results$/,
|
|
110
|
-
toCommand: () => "
|
|
110
|
+
toCommand: () => "npx fit-pathway self-assessment",
|
|
111
111
|
},
|
|
112
112
|
|
|
113
113
|
// Agent builder + detail
|
|
114
114
|
{
|
|
115
115
|
pattern: /^\/agent-builder$/,
|
|
116
|
-
toCommand: () => "
|
|
116
|
+
toCommand: () => "npx fit-pathway agent --list",
|
|
117
117
|
},
|
|
118
118
|
{
|
|
119
119
|
pattern: /^\/agent\/([^/]+)\/([^/]+)\/([^/]+)$/,
|
|
120
120
|
toCommand: (m) =>
|
|
121
|
-
`
|
|
121
|
+
`npx fit-pathway agent ${m[1]} --track=${m[2]} --stage=${m[3]}`,
|
|
122
122
|
},
|
|
123
123
|
{
|
|
124
124
|
pattern: /^\/agent\/([^/]+)\/([^/]+)$/,
|
|
125
|
-
toCommand: (m) => `
|
|
125
|
+
toCommand: (m) => `npx fit-pathway agent ${m[1]} --track=${m[2]}`,
|
|
126
126
|
},
|
|
127
127
|
{
|
|
128
128
|
pattern: /^\/agent\/([^/]+)$/,
|
|
129
|
-
toCommand: (m) => `
|
|
129
|
+
toCommand: (m) => `npx fit-pathway agent ${m[1]}`,
|
|
130
130
|
},
|
|
131
131
|
];
|
|
132
132
|
|
|
@@ -141,5 +141,5 @@ export function getCliCommand(hashPath) {
|
|
|
141
141
|
const match = path.match(pattern);
|
|
142
142
|
if (match) return toCommand(match);
|
|
143
143
|
}
|
|
144
|
-
return "
|
|
144
|
+
return "npx fit-pathway";
|
|
145
145
|
}
|