@hstm-labs/forge-cli 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +56 -0
  2. package/dist/cli.d.ts +9 -0
  3. package/dist/cli.d.ts.map +1 -0
  4. package/dist/cli.js +14 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/deliver.d.ts +14 -0
  7. package/dist/commands/deliver.d.ts.map +1 -0
  8. package/dist/commands/deliver.js +92 -0
  9. package/dist/commands/deliver.js.map +1 -0
  10. package/dist/commands/generate.d.ts +14 -0
  11. package/dist/commands/generate.d.ts.map +1 -0
  12. package/dist/commands/generate.js +168 -0
  13. package/dist/commands/generate.js.map +1 -0
  14. package/dist/commands/init.d.ts +15 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +83 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/profile.d.ts +11 -0
  19. package/dist/commands/profile.d.ts.map +1 -0
  20. package/dist/commands/profile.js +35 -0
  21. package/dist/commands/profile.js.map +1 -0
  22. package/dist/commands/status.d.ts +14 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +104 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/commands/template.d.ts +11 -0
  27. package/dist/commands/template.d.ts.map +1 -0
  28. package/dist/commands/template.js +25 -0
  29. package/dist/commands/template.js.map +1 -0
  30. package/dist/commands/verify.d.ts +15 -0
  31. package/dist/commands/verify.d.ts.map +1 -0
  32. package/dist/commands/verify.js +167 -0
  33. package/dist/commands/verify.js.map +1 -0
  34. package/dist/error-handler.d.ts +16 -0
  35. package/dist/error-handler.d.ts.map +1 -0
  36. package/dist/error-handler.js +43 -0
  37. package/dist/error-handler.js.map +1 -0
  38. package/dist/formatters/agent-mode-formatter.d.ts +167 -0
  39. package/dist/formatters/agent-mode-formatter.d.ts.map +1 -0
  40. package/dist/formatters/agent-mode-formatter.js +271 -0
  41. package/dist/formatters/agent-mode-formatter.js.map +1 -0
  42. package/dist/formatters/run-status-formatter.d.ts +53 -0
  43. package/dist/formatters/run-status-formatter.d.ts.map +1 -0
  44. package/dist/formatters/run-status-formatter.js +267 -0
  45. package/dist/formatters/run-status-formatter.js.map +1 -0
  46. package/dist/index.d.ts +5 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +5 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/output.d.ts +60 -0
  51. package/dist/output.d.ts.map +1 -0
  52. package/dist/output.js +78 -0
  53. package/dist/output.js.map +1 -0
  54. package/dist/program.d.ts +14 -0
  55. package/dist/program.d.ts.map +1 -0
  56. package/dist/program.js +64 -0
  57. package/dist/program.js.map +1 -0
  58. package/dist/progress-bar.d.ts +18 -0
  59. package/dist/progress-bar.d.ts.map +1 -0
  60. package/dist/progress-bar.js +28 -0
  61. package/dist/progress-bar.js.map +1 -0
  62. package/dist/progress-reporter.d.ts +35 -0
  63. package/dist/progress-reporter.d.ts.map +1 -0
  64. package/dist/progress-reporter.js +236 -0
  65. package/dist/progress-reporter.js.map +1 -0
  66. package/dist/prompts/init-prompts.d.ts +22 -0
  67. package/dist/prompts/init-prompts.d.ts.map +1 -0
  68. package/dist/prompts/init-prompts.js +78 -0
  69. package/dist/prompts/init-prompts.js.map +1 -0
  70. package/dist/prompts/layout-prompts.d.ts +15 -0
  71. package/dist/prompts/layout-prompts.d.ts.map +1 -0
  72. package/dist/prompts/layout-prompts.js +26 -0
  73. package/dist/prompts/layout-prompts.js.map +1 -0
  74. package/package.json +46 -0
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Interactive prompts for the `forge init` command.
3
+ *
4
+ * Uses `@inquirer/prompts` for lightweight, modern ESM prompts.
5
+ * Each prompt shows a clear label, default value, and validates input.
6
+ * Ctrl+C aborts natively via inquirer.
7
+ */
8
+ import { input, select } from '@inquirer/prompts';
9
+ import { basename } from 'node:path';
10
+ // ---------------------------------------------------------------------------
11
+ // Validation
12
+ // ---------------------------------------------------------------------------
13
+ /**
14
+ * Validate a project name: must be non-empty and contain only
15
+ * alphanumeric, dash, underscore, and dot characters.
16
+ *
17
+ * @param value - User-provided project name
18
+ * @returns `true` if valid, error message string otherwise
19
+ */
20
+ function validateProjectName(value) {
21
+ const trimmed = value.trim();
22
+ if (trimmed.length === 0) {
23
+ return 'Project name cannot be empty';
24
+ }
25
+ if (!/^[a-zA-Z0-9._-]+$/.test(trimmed)) {
26
+ return 'Project name may only contain letters, numbers, dashes, underscores, and dots';
27
+ }
28
+ return true;
29
+ }
30
+ /**
31
+ * Validate an output path: must be non-empty and contain only
32
+ * valid path characters.
33
+ *
34
+ * @param value - User-provided output path
35
+ * @returns `true` if valid, error message string otherwise
36
+ */
37
+ function validateOutputPath(value) {
38
+ const trimmed = value.trim();
39
+ if (trimmed.length === 0) {
40
+ return 'Output path cannot be empty';
41
+ }
42
+ return true;
43
+ }
44
+ // ---------------------------------------------------------------------------
45
+ // Prompt Function
46
+ // ---------------------------------------------------------------------------
47
+ /**
48
+ * Prompt the user interactively for init parameters.
49
+ *
50
+ * @param availableProfiles - List of available profile names to select from
51
+ * @param defaults - Optional default values for each prompt
52
+ * @returns Collected answers
53
+ */
54
+ export async function promptForInit(availableProfiles, defaults) {
55
+ const defaultProjectName = defaults?.projectName ?? (basename(process.cwd()) || 'my-forge-project');
56
+ const projectName = await input({
57
+ message: 'Project name:',
58
+ default: defaultProjectName,
59
+ validate: validateProjectName,
60
+ });
61
+ const outputPath = await input({
62
+ message: 'Output path:',
63
+ default: defaults?.outputPath ?? '.',
64
+ validate: validateOutputPath,
65
+ });
66
+ const defaultProfile = defaults?.profile ?? 'node-react-postgres';
67
+ const choices = availableProfiles.map((name) => ({
68
+ name,
69
+ value: name,
70
+ }));
71
+ const profile = await select({
72
+ message: 'Select a technology profile:',
73
+ choices,
74
+ default: defaultProfile,
75
+ });
76
+ return { projectName, outputPath, profile };
77
+ }
78
+ //# sourceMappingURL=init-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-prompts.js","sourceRoot":"","sources":["../../src/prompts/init-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAarC,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO,+EAA+E,CAAC;IACzF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,iBAA2B,EAC3B,QAAqC;IAErC,MAAM,kBAAkB,GACtB,QAAQ,EAAE,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC;IAE3E,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;QAC9B,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE,kBAAkB;QAC3B,QAAQ,EAAE,mBAAmB;KAC9B,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC;QAC7B,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,QAAQ,EAAE,UAAU,IAAI,GAAG;QACpC,QAAQ,EAAE,kBAAkB;KAC7B,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,QAAQ,EAAE,OAAO,IAAI,qBAAqB,CAAC;IAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI;QACJ,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC;QAC3B,OAAO,EAAE,8BAA8B;QACvC,OAAO;QACP,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Interactive prompt for project layout selection during forge generate.
3
+ *
4
+ * Displays built-in layout options with description and tree; returns
5
+ * the selected ProjectLayoutName.
6
+ */
7
+ import type { ProjectLayout, ProjectLayoutName } from '@hstm-labs/forge-common';
8
+ /**
9
+ * Prompt the user to select a project layout.
10
+ *
11
+ * @param layouts - Available layout definitions (e.g. from getLayouts())
12
+ * @returns The selected layout name
13
+ */
14
+ export declare function promptForLayout(layouts: ProjectLayout[]): Promise<ProjectLayoutName>;
15
+ //# sourceMappingURL=layout-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-prompts.d.ts","sourceRoot":"","sources":["../../src/prompts/layout-prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEhF;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,iBAAiB,CAAC,CAa5B"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Interactive prompt for project layout selection during forge generate.
3
+ *
4
+ * Displays built-in layout options with description and tree; returns
5
+ * the selected ProjectLayoutName.
6
+ */
7
+ import { select } from '@inquirer/prompts';
8
+ /**
9
+ * Prompt the user to select a project layout.
10
+ *
11
+ * @param layouts - Available layout definitions (e.g. from getLayouts())
12
+ * @returns The selected layout name
13
+ */
14
+ export async function promptForLayout(layouts) {
15
+ const choices = layouts.map((layout) => ({
16
+ name: `${layout.name}: ${layout.description}`,
17
+ value: layout.name,
18
+ }));
19
+ const chosen = await select({
20
+ message: 'Select project layout:',
21
+ choices,
22
+ default: 'standard',
23
+ });
24
+ return chosen;
25
+ }
26
+ //# sourceMappingURL=layout-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-prompts.js","sourceRoot":"","sources":["../../src/prompts/layout-prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAwB;IAExB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE;QAC7C,KAAK,EAAE,MAAM,CAAC,IAAI;KACnB,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAoB;QAC7C,OAAO,EAAE,wBAAwB;QACjC,OAAO;QACP,OAAO,EAAE,UAAU;KACpB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@hstm-labs/forge-cli",
3
+ "version": "0.1.11",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "forge": "dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "package.json",
13
+ "README.md"
14
+ ],
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "test": "vitest run",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "dependencies": {
24
+ "@hstm-labs/forge-apps-generator": "0.1.11",
25
+ "@hstm-labs/forge-architect": "0.1.11",
26
+ "@hstm-labs/forge-common": "0.1.11",
27
+ "@hstm-labs/forge-core": "0.1.11",
28
+ "@hstm-labs/forge-deliverer": "0.1.11",
29
+ "@hstm-labs/forge-infra-generator": "0.1.11",
30
+ "@hstm-labs/forge-profiles": "0.1.11",
31
+ "@hstm-labs/forge-reviewer": "0.1.11",
32
+ "@hstm-labs/forge-run": "^0.1.11",
33
+ "@hstm-labs/forge-scaffold": "0.1.11",
34
+ "@hstm-labs/forge-security-generator": "0.1.11",
35
+ "@hstm-labs/forge-seed-data": "0.1.11",
36
+ "@hstm-labs/forge-services-generator": "0.1.11",
37
+ "@hstm-labs/forge-spec-parser": "0.1.11",
38
+ "@hstm-labs/forge-verifier": "0.1.11",
39
+ "@inquirer/prompts": "^8.2.1",
40
+ "chalk": "^5.4.1",
41
+ "commander": "^13.1.0"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^25.2.3"
45
+ }
46
+ }