@gh-symphony/cli 0.0.14 → 0.0.15

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 (100) hide show
  1. package/dist/chunk-5NV3LSAJ.js +11 -0
  2. package/dist/chunk-6HBZC3BE.js +468 -0
  3. package/dist/chunk-76QPITKI.js +109 -0
  4. package/dist/chunk-IWR4UQEJ.js +2250 -0
  5. package/dist/chunk-JO3AXHQI.js +130 -0
  6. package/dist/chunk-M7OSMUTN.js +874 -0
  7. package/dist/chunk-MVRF7BES.js +68 -0
  8. package/dist/chunk-RNWX7DQU.js +4617 -0
  9. package/dist/chunk-ROGRTUFI.js +108 -0
  10. package/dist/chunk-TH5QPO3Y.js +67 -0
  11. package/dist/config-cmd-AZ7POMAA.js +110 -0
  12. package/dist/index.d.ts +5 -4
  13. package/dist/index.js +568 -356
  14. package/dist/init-EZXQAXZM.js +17 -0
  15. package/dist/logs-6LNGT2GF.js +188 -0
  16. package/dist/project-3ELXQ35D.js +678 -0
  17. package/dist/recover-T6ME6C56.js +130 -0
  18. package/dist/repo-R3XBIVAX.js +121 -0
  19. package/dist/run-DYINRZHK.js +107 -0
  20. package/dist/start-PIFQMIC2.js +15 -0
  21. package/dist/status-3WK5BWRZ.js +11 -0
  22. package/dist/stop-AA3AP5M6.js +9 -0
  23. package/dist/version-VBB62JWI.js +30 -0
  24. package/package.json +9 -4
  25. package/dist/ansi.d.ts +0 -15
  26. package/dist/ansi.js +0 -53
  27. package/dist/commands/config-cmd.d.ts +0 -3
  28. package/dist/commands/config-cmd.js +0 -90
  29. package/dist/commands/help.d.ts +0 -3
  30. package/dist/commands/help.js +0 -55
  31. package/dist/commands/init.d.ts +0 -34
  32. package/dist/commands/init.js +0 -477
  33. package/dist/commands/logs.d.ts +0 -3
  34. package/dist/commands/logs.js +0 -184
  35. package/dist/commands/project.d.ts +0 -3
  36. package/dist/commands/project.js +0 -649
  37. package/dist/commands/recover.d.ts +0 -3
  38. package/dist/commands/recover.js +0 -119
  39. package/dist/commands/repo.d.ts +0 -3
  40. package/dist/commands/repo.js +0 -103
  41. package/dist/commands/run.d.ts +0 -3
  42. package/dist/commands/run.js +0 -95
  43. package/dist/commands/start.d.ts +0 -20
  44. package/dist/commands/start.js +0 -344
  45. package/dist/commands/status-refresh.d.ts +0 -9
  46. package/dist/commands/status-refresh.js +0 -27
  47. package/dist/commands/status.d.ts +0 -3
  48. package/dist/commands/status.js +0 -237
  49. package/dist/commands/stop.d.ts +0 -3
  50. package/dist/commands/stop.js +0 -92
  51. package/dist/commands/version.d.ts +0 -3
  52. package/dist/commands/version.js +0 -21
  53. package/dist/completion.d.ts +0 -1
  54. package/dist/completion.js +0 -204
  55. package/dist/config.d.ts +0 -38
  56. package/dist/config.js +0 -82
  57. package/dist/context/context-types.d.ts +0 -36
  58. package/dist/context/context-types.js +0 -1
  59. package/dist/context/generate-context-yaml.d.ts +0 -15
  60. package/dist/context/generate-context-yaml.js +0 -129
  61. package/dist/dashboard/renderer.d.ts +0 -9
  62. package/dist/dashboard/renderer.js +0 -220
  63. package/dist/detection/environment-detector.d.ts +0 -11
  64. package/dist/detection/environment-detector.js +0 -140
  65. package/dist/github/client.d.ts +0 -71
  66. package/dist/github/client.js +0 -348
  67. package/dist/github/gh-auth.d.ts +0 -34
  68. package/dist/github/gh-auth.js +0 -110
  69. package/dist/mapping/smart-defaults.d.ts +0 -17
  70. package/dist/mapping/smart-defaults.js +0 -86
  71. package/dist/orchestrator-runtime.d.ts +0 -1
  72. package/dist/orchestrator-runtime.js +0 -4
  73. package/dist/orchestrator-status-endpoint.d.ts +0 -5
  74. package/dist/orchestrator-status-endpoint.js +0 -27
  75. package/dist/project-selection.d.ts +0 -8
  76. package/dist/project-selection.js +0 -56
  77. package/dist/skills/skill-writer.d.ts +0 -14
  78. package/dist/skills/skill-writer.js +0 -62
  79. package/dist/skills/templates/commit.d.ts +0 -2
  80. package/dist/skills/templates/commit.js +0 -45
  81. package/dist/skills/templates/document.d.ts +0 -7
  82. package/dist/skills/templates/document.js +0 -16
  83. package/dist/skills/templates/gh-project.d.ts +0 -2
  84. package/dist/skills/templates/gh-project.js +0 -88
  85. package/dist/skills/templates/gh-symphony.d.ts +0 -2
  86. package/dist/skills/templates/gh-symphony.js +0 -125
  87. package/dist/skills/templates/index.d.ts +0 -8
  88. package/dist/skills/templates/index.js +0 -28
  89. package/dist/skills/templates/land.d.ts +0 -2
  90. package/dist/skills/templates/land.js +0 -59
  91. package/dist/skills/templates/pull.d.ts +0 -2
  92. package/dist/skills/templates/pull.js +0 -41
  93. package/dist/skills/templates/push.d.ts +0 -2
  94. package/dist/skills/templates/push.js +0 -36
  95. package/dist/skills/types.d.ts +0 -23
  96. package/dist/skills/types.js +0 -1
  97. package/dist/workflow/generate-reference-workflow.d.ts +0 -9
  98. package/dist/workflow/generate-reference-workflow.js +0 -261
  99. package/dist/workflow/generate-workflow-md.d.ts +0 -12
  100. package/dist/workflow/generate-workflow-md.js +0 -134
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/config.ts
4
+ import { readFile, writeFile, mkdir } from "fs/promises";
5
+ import { dirname, join } from "path";
6
+ import { homedir } from "os";
7
+ var DEFAULT_CONFIG_DIR = join(homedir(), ".gh-symphony");
8
+ var CONFIG_FILE = "config.json";
9
+ var DAEMON_PID_FILE = "daemon.pid";
10
+ var ORCHESTRATOR_LOG_FILE = "orchestrator.log";
11
+ var HTTP_STATUS_FILE = "http.json";
12
+ function resolveConfigDir(override) {
13
+ return override ?? process.env.GH_SYMPHONY_CONFIG_DIR ?? DEFAULT_CONFIG_DIR;
14
+ }
15
+ function configFilePath(configDir) {
16
+ return join(configDir, CONFIG_FILE);
17
+ }
18
+ function projectConfigDir(configDir, projectId) {
19
+ return join(configDir, "projects", projectId);
20
+ }
21
+ function projectConfigPath(configDir, projectId) {
22
+ return join(projectConfigDir(configDir, projectId), "project.json");
23
+ }
24
+ function daemonPidPath(configDir, projectId) {
25
+ return join(projectConfigDir(configDir, projectId), DAEMON_PID_FILE);
26
+ }
27
+ function orchestratorLogPath(configDir, projectId) {
28
+ return join(projectConfigDir(configDir, projectId), ORCHESTRATOR_LOG_FILE);
29
+ }
30
+ function orchestratorWorkspaceRuntimeDir(configDir, projectId) {
31
+ return join(configDir, "orchestrator", "workspaces", projectId);
32
+ }
33
+ function httpStatusPath(configDir, projectId) {
34
+ return join(
35
+ orchestratorWorkspaceRuntimeDir(configDir, projectId),
36
+ HTTP_STATUS_FILE
37
+ );
38
+ }
39
+ async function loadGlobalConfig(configDir) {
40
+ const raw = await readJsonFile(
41
+ configFilePath(configDir)
42
+ );
43
+ if (!raw) {
44
+ return null;
45
+ }
46
+ return {
47
+ activeProject: typeof raw.activeProject === "string" ? raw.activeProject : null,
48
+ projects: Array.isArray(raw.projects) ? raw.projects.filter(
49
+ (projectId) => typeof projectId === "string"
50
+ ) : []
51
+ };
52
+ }
53
+ async function saveGlobalConfig(configDir, config) {
54
+ await writeJsonFile(configFilePath(configDir), config);
55
+ }
56
+ async function loadProjectConfig(configDir, projectId) {
57
+ return readJsonFile(
58
+ projectConfigPath(configDir, projectId)
59
+ );
60
+ }
61
+ async function saveProjectConfig(configDir, projectId, config) {
62
+ await writeJsonFile(projectConfigPath(configDir, projectId), config);
63
+ }
64
+ async function loadActiveProjectConfig(configDir) {
65
+ const global = await loadGlobalConfig(configDir);
66
+ if (!global?.activeProject) {
67
+ return null;
68
+ }
69
+ return loadProjectConfig(configDir, global.activeProject);
70
+ }
71
+ async function readJsonFile(path) {
72
+ try {
73
+ const raw = await readFile(path, "utf8");
74
+ return JSON.parse(raw);
75
+ } catch (error) {
76
+ if (isFileMissing(error)) {
77
+ return null;
78
+ }
79
+ throw error;
80
+ }
81
+ }
82
+ async function writeJsonFile(path, value) {
83
+ await mkdir(dirname(path), { recursive: true });
84
+ const temporaryPath = `${path}.tmp`;
85
+ await writeFile(temporaryPath, JSON.stringify(value, null, 2) + "\n", "utf8");
86
+ const { rename } = await import("fs/promises");
87
+ await rename(temporaryPath, path);
88
+ }
89
+ function isFileMissing(error) {
90
+ return Boolean(
91
+ error && typeof error === "object" && "code" in error && (error.code === "ENOENT" || error.code === "ENOTDIR")
92
+ );
93
+ }
94
+
95
+ export {
96
+ resolveConfigDir,
97
+ configFilePath,
98
+ projectConfigDir,
99
+ daemonPidPath,
100
+ orchestratorLogPath,
101
+ httpStatusPath,
102
+ loadGlobalConfig,
103
+ saveGlobalConfig,
104
+ loadProjectConfig,
105
+ saveProjectConfig,
106
+ loadActiveProjectConfig,
107
+ writeJsonFile
108
+ };
@@ -0,0 +1,67 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ loadGlobalConfig,
4
+ loadProjectConfig
5
+ } from "./chunk-ROGRTUFI.js";
6
+
7
+ // src/project-selection.ts
8
+ import * as p from "@clack/prompts";
9
+ function isInteractiveTerminal() {
10
+ return process.stdin.isTTY === true && process.stdout.isTTY === true;
11
+ }
12
+ function explicitProjectRequiredMessage() {
13
+ return "Multiple projects are configured. Re-run with --project-id in non-interactive environments.\n";
14
+ }
15
+ async function resolveManagedProjectConfig(input) {
16
+ if (input.requestedProjectId) {
17
+ return loadProjectConfig(input.configDir, input.requestedProjectId);
18
+ }
19
+ const global = await loadGlobalConfig(input.configDir);
20
+ const projectIds = global?.projects ?? [];
21
+ if (projectIds.length === 0) {
22
+ return null;
23
+ }
24
+ if (projectIds.length === 1) {
25
+ return loadProjectConfig(input.configDir, projectIds[0]);
26
+ }
27
+ if (!isInteractiveTerminal()) {
28
+ process.stderr.write(explicitProjectRequiredMessage());
29
+ process.exitCode = 1;
30
+ return null;
31
+ }
32
+ const projects = await Promise.all(
33
+ projectIds.map(async (projectId) => ({
34
+ projectId,
35
+ config: await loadProjectConfig(input.configDir, projectId)
36
+ }))
37
+ );
38
+ const selected = await p.select({
39
+ message: "Select a project:",
40
+ options: projects.map(({ projectId, config }) => ({
41
+ value: projectId,
42
+ label: config?.displayName ?? config?.slug ?? projectId,
43
+ hint: projectId === global?.activeProject ? "current" : config && config.displayName && config.displayName !== projectId ? projectId : void 0
44
+ })),
45
+ maxItems: 10
46
+ });
47
+ if (p.isCancel(selected)) {
48
+ p.cancel("Cancelled.");
49
+ process.exitCode = 130;
50
+ return null;
51
+ }
52
+ return loadProjectConfig(input.configDir, selected);
53
+ }
54
+ function handleMissingManagedProjectConfig() {
55
+ if (process.exitCode) {
56
+ return;
57
+ }
58
+ process.stderr.write(
59
+ "No project configured. Run 'gh-symphony project add' first.\n"
60
+ );
61
+ process.exitCode = 1;
62
+ }
63
+
64
+ export {
65
+ resolveManagedProjectConfig,
66
+ handleMissingManagedProjectConfig
67
+ };
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ configFilePath,
4
+ loadGlobalConfig,
5
+ saveGlobalConfig
6
+ } from "./chunk-ROGRTUFI.js";
7
+
8
+ // src/commands/config-cmd.ts
9
+ import { spawn } from "child_process";
10
+ var handler = async (args, options) => {
11
+ const [subcommand, ...rest] = args;
12
+ switch (subcommand) {
13
+ case "show":
14
+ await configShow(options);
15
+ break;
16
+ case "set":
17
+ await configSet(rest, options);
18
+ break;
19
+ case "edit":
20
+ await configEdit(options);
21
+ break;
22
+ default:
23
+ process.stderr.write("Usage: gh-symphony config <show|set|edit>\n");
24
+ process.exitCode = 2;
25
+ }
26
+ };
27
+ var config_cmd_default = handler;
28
+ async function configShow(options) {
29
+ const config = await loadGlobalConfig(options.configDir);
30
+ if (!config) {
31
+ process.stderr.write("No configuration found. Run 'gh-symphony init'.\n");
32
+ process.exitCode = 1;
33
+ return;
34
+ }
35
+ if (options.json) {
36
+ process.stdout.write(JSON.stringify(config, null, 2) + "\n");
37
+ return;
38
+ }
39
+ process.stdout.write(`Config: ${configFilePath(options.configDir)}
40
+
41
+ `);
42
+ process.stdout.write(`Active project: ${config.activeProject ?? "none"}
43
+ `);
44
+ process.stdout.write(
45
+ `Projects: ${config.projects.join(", ") || "none"}
46
+ `
47
+ );
48
+ }
49
+ var VALID_KEYS = {
50
+ "active-project": { type: "string" }
51
+ };
52
+ async function configSet(args, options) {
53
+ const [key, value] = args;
54
+ if (!key || value === void 0) {
55
+ process.stderr.write("Usage: gh-symphony config set <key> <value>\n");
56
+ process.stderr.write(`Valid keys: ${Object.keys(VALID_KEYS).join(", ")}
57
+ `);
58
+ process.exitCode = 2;
59
+ return;
60
+ }
61
+ const keyDef = VALID_KEYS[key];
62
+ if (!keyDef) {
63
+ process.stderr.write(
64
+ `Unknown config key: ${key}
65
+ Valid keys: ${Object.keys(VALID_KEYS).join(", ")}
66
+ `
67
+ );
68
+ process.exitCode = 2;
69
+ return;
70
+ }
71
+ const config = await loadGlobalConfig(options.configDir) ?? {
72
+ activeProject: null,
73
+ projects: []
74
+ };
75
+ switch (key) {
76
+ case "active-project":
77
+ if (!config.projects.includes(value)) {
78
+ process.stderr.write(
79
+ `Project "${value}" not found. Available: ${config.projects.join(", ")}
80
+ `
81
+ );
82
+ process.exitCode = 1;
83
+ return;
84
+ }
85
+ config.activeProject = value;
86
+ break;
87
+ }
88
+ await saveGlobalConfig(options.configDir, config);
89
+ process.stdout.write(`Set ${key} = ${value}
90
+ `);
91
+ }
92
+ async function configEdit(options) {
93
+ const editor = process.env.EDITOR || process.env.VISUAL || "vi";
94
+ const path = configFilePath(options.configDir);
95
+ const child = spawn(editor, [path], {
96
+ stdio: "inherit"
97
+ });
98
+ await new Promise((resolve, reject) => {
99
+ child.on("close", (code) => {
100
+ if (code === 0) {
101
+ resolve();
102
+ } else {
103
+ reject(new Error(`Editor exited with code ${code}`));
104
+ }
105
+ });
106
+ });
107
+ }
108
+ export {
109
+ config_cmd_default as default
110
+ };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
- #!/usr/bin/env node
2
- export type GlobalOptions = {
1
+ type GlobalOptions = {
3
2
  configDir: string;
4
3
  verbose: boolean;
5
4
  json: boolean;
6
5
  noColor: boolean;
7
6
  };
8
- export type CommandHandler = (args: string[], options: GlobalOptions) => Promise<void>;
9
- export declare function runCli(argv: string[]): Promise<void>;
7
+ type CommandHandler = (args: string[], options: GlobalOptions) => Promise<void>;
8
+ declare function runCli(argv: string[]): Promise<void>;
9
+
10
+ export { type CommandHandler, type GlobalOptions, runCli };