@made-by-moonlight/athene-core 0.9.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.
Files changed (285) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +241 -0
  3. package/dist/activity-events.d.ts +42 -0
  4. package/dist/activity-events.d.ts.map +1 -0
  5. package/dist/activity-events.js +192 -0
  6. package/dist/activity-events.js.map +1 -0
  7. package/dist/activity-log.d.ts +71 -0
  8. package/dist/activity-log.d.ts.map +1 -0
  9. package/dist/activity-log.js +203 -0
  10. package/dist/activity-log.js.map +1 -0
  11. package/dist/activity-signal.d.ts +20 -0
  12. package/dist/activity-signal.d.ts.map +1 -0
  13. package/dist/activity-signal.js +91 -0
  14. package/dist/activity-signal.js.map +1 -0
  15. package/dist/agent-report.d.ts +148 -0
  16. package/dist/agent-report.d.ts.map +1 -0
  17. package/dist/agent-report.js +516 -0
  18. package/dist/agent-report.js.map +1 -0
  19. package/dist/agent-selection.d.ts +31 -0
  20. package/dist/agent-selection.d.ts.map +1 -0
  21. package/dist/agent-selection.js +69 -0
  22. package/dist/agent-selection.js.map +1 -0
  23. package/dist/agent-workspace-hooks.d.ts +74 -0
  24. package/dist/agent-workspace-hooks.d.ts.map +1 -0
  25. package/dist/agent-workspace-hooks.js +988 -0
  26. package/dist/agent-workspace-hooks.js.map +1 -0
  27. package/dist/atomic-write.d.ts +6 -0
  28. package/dist/atomic-write.d.ts.map +1 -0
  29. package/dist/atomic-write.js +49 -0
  30. package/dist/atomic-write.js.map +1 -0
  31. package/dist/cleanup-stack.d.ts +37 -0
  32. package/dist/cleanup-stack.d.ts.map +1 -0
  33. package/dist/cleanup-stack.js +45 -0
  34. package/dist/cleanup-stack.js.map +1 -0
  35. package/dist/code-review-manager.d.ts +118 -0
  36. package/dist/code-review-manager.d.ts.map +1 -0
  37. package/dist/code-review-manager.js +719 -0
  38. package/dist/code-review-manager.js.map +1 -0
  39. package/dist/code-review-store.d.ts +114 -0
  40. package/dist/code-review-store.d.ts.map +1 -0
  41. package/dist/code-review-store.js +346 -0
  42. package/dist/code-review-store.js.map +1 -0
  43. package/dist/config-generator.d.ts +84 -0
  44. package/dist/config-generator.d.ts.map +1 -0
  45. package/dist/config-generator.js +295 -0
  46. package/dist/config-generator.js.map +1 -0
  47. package/dist/config.d.ts +55 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +852 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/daemon-children.d.ts +55 -0
  52. package/dist/daemon-children.d.ts.map +1 -0
  53. package/dist/daemon-children.js +435 -0
  54. package/dist/daemon-children.js.map +1 -0
  55. package/dist/dashboard-notifications.d.ts +42 -0
  56. package/dist/dashboard-notifications.d.ts.map +1 -0
  57. package/dist/dashboard-notifications.js +123 -0
  58. package/dist/dashboard-notifications.js.map +1 -0
  59. package/dist/events-db.d.ts +39 -0
  60. package/dist/events-db.d.ts.map +1 -0
  61. package/dist/events-db.js +185 -0
  62. package/dist/events-db.js.map +1 -0
  63. package/dist/feature-flags.d.ts +2 -0
  64. package/dist/feature-flags.d.ts.map +1 -0
  65. package/dist/feature-flags.js +9 -0
  66. package/dist/feature-flags.js.map +1 -0
  67. package/dist/feedback-tools.d.ts +97 -0
  68. package/dist/feedback-tools.d.ts.map +1 -0
  69. package/dist/feedback-tools.js +161 -0
  70. package/dist/feedback-tools.js.map +1 -0
  71. package/dist/file-lock.d.ts +5 -0
  72. package/dist/file-lock.d.ts.map +1 -0
  73. package/dist/file-lock.js +59 -0
  74. package/dist/file-lock.js.map +1 -0
  75. package/dist/format-automated-comments.d.ts +18 -0
  76. package/dist/format-automated-comments.d.ts.map +1 -0
  77. package/dist/gh-trace.d.ts +57 -0
  78. package/dist/gh-trace.d.ts.map +1 -0
  79. package/dist/gh-trace.js +320 -0
  80. package/dist/gh-trace.js.map +1 -0
  81. package/dist/git-activity.d.ts +10 -0
  82. package/dist/git-activity.d.ts.map +1 -0
  83. package/dist/git-activity.js +30 -0
  84. package/dist/git-activity.js.map +1 -0
  85. package/dist/global-config.d.ts +1085 -0
  86. package/dist/global-config.d.ts.map +1 -0
  87. package/dist/global-config.js +1067 -0
  88. package/dist/global-config.js.map +1 -0
  89. package/dist/index.d.ts +91 -0
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +59 -0
  92. package/dist/index.js.map +1 -0
  93. package/dist/key-value.d.ts +7 -0
  94. package/dist/key-value.d.ts.map +1 -0
  95. package/dist/key-value.js +24 -0
  96. package/dist/key-value.js.map +1 -0
  97. package/dist/lifecycle-manager.d.ts +22 -0
  98. package/dist/lifecycle-manager.d.ts.map +1 -0
  99. package/dist/lifecycle-manager.js +2813 -0
  100. package/dist/lifecycle-manager.js.map +1 -0
  101. package/dist/lifecycle-state.d.ts +28 -0
  102. package/dist/lifecycle-state.d.ts.map +1 -0
  103. package/dist/lifecycle-state.js +446 -0
  104. package/dist/lifecycle-state.js.map +1 -0
  105. package/dist/lifecycle-status-decisions.d.ts +85 -0
  106. package/dist/lifecycle-status-decisions.d.ts.map +1 -0
  107. package/dist/lifecycle-status-decisions.js +262 -0
  108. package/dist/lifecycle-status-decisions.js.map +1 -0
  109. package/dist/lifecycle-transition.d.ts +81 -0
  110. package/dist/lifecycle-transition.d.ts.map +1 -0
  111. package/dist/lifecycle-transition.js +207 -0
  112. package/dist/lifecycle-transition.js.map +1 -0
  113. package/dist/metadata.d.ts +54 -0
  114. package/dist/metadata.d.ts.map +1 -0
  115. package/dist/metadata.js +484 -0
  116. package/dist/metadata.js.map +1 -0
  117. package/dist/migration/storage-v2.d.ts +76 -0
  118. package/dist/migration/storage-v2.d.ts.map +1 -0
  119. package/dist/migration/storage-v2.js +1614 -0
  120. package/dist/migration/storage-v2.js.map +1 -0
  121. package/dist/notification-data.d.ts +135 -0
  122. package/dist/notification-data.d.ts.map +1 -0
  123. package/dist/notification-data.js +204 -0
  124. package/dist/notification-data.js.map +1 -0
  125. package/dist/notification-observability.d.ts +21 -0
  126. package/dist/notification-observability.d.ts.map +1 -0
  127. package/dist/notification-observability.js +154 -0
  128. package/dist/notification-observability.js.map +1 -0
  129. package/dist/notifier-resolution.d.ts +14 -0
  130. package/dist/notifier-resolution.d.ts.map +1 -0
  131. package/dist/notifier-resolution.js +23 -0
  132. package/dist/notifier-resolution.js.map +1 -0
  133. package/dist/observability.d.ts +100 -0
  134. package/dist/observability.d.ts.map +1 -0
  135. package/dist/observability.js +535 -0
  136. package/dist/observability.js.map +1 -0
  137. package/dist/opencode-agents-md.d.ts +3 -0
  138. package/dist/opencode-agents-md.d.ts.map +1 -0
  139. package/dist/opencode-agents-md.js +40 -0
  140. package/dist/opencode-agents-md.js.map +1 -0
  141. package/dist/opencode-config.d.ts +2 -0
  142. package/dist/opencode-config.d.ts.map +1 -0
  143. package/dist/opencode-config.js +17 -0
  144. package/dist/opencode-config.js.map +1 -0
  145. package/dist/opencode-session-id.d.ts +2 -0
  146. package/dist/opencode-session-id.d.ts.map +1 -0
  147. package/dist/opencode-session-id.js +12 -0
  148. package/dist/opencode-session-id.js.map +1 -0
  149. package/dist/opencode-shared.d.ts +80 -0
  150. package/dist/opencode-shared.d.ts.map +1 -0
  151. package/dist/opencode-shared.js +202 -0
  152. package/dist/opencode-shared.js.map +1 -0
  153. package/dist/orchestrator-prompt.d.ts +19 -0
  154. package/dist/orchestrator-prompt.d.ts.map +1 -0
  155. package/dist/orchestrator-prompt.js +130 -0
  156. package/dist/orchestrator-prompt.js.map +1 -0
  157. package/dist/orchestrator-session-strategy.d.ts +5 -0
  158. package/dist/orchestrator-session-strategy.d.ts.map +1 -0
  159. package/dist/orchestrator-session-strategy.js +13 -0
  160. package/dist/orchestrator-session-strategy.js.map +1 -0
  161. package/dist/paths.d.ts +145 -0
  162. package/dist/paths.d.ts.map +1 -0
  163. package/dist/paths.js +288 -0
  164. package/dist/paths.js.map +1 -0
  165. package/dist/platform.d.ts +32 -0
  166. package/dist/platform.d.ts.map +1 -0
  167. package/dist/platform.js +211 -0
  168. package/dist/platform.js.map +1 -0
  169. package/dist/plugin-registry.d.ts +15 -0
  170. package/dist/plugin-registry.d.ts.map +1 -0
  171. package/dist/plugin-registry.js +499 -0
  172. package/dist/plugin-registry.js.map +1 -0
  173. package/dist/portfolio-projects.d.ts +7 -0
  174. package/dist/portfolio-projects.d.ts.map +1 -0
  175. package/dist/portfolio-projects.js +65 -0
  176. package/dist/portfolio-projects.js.map +1 -0
  177. package/dist/portfolio-registry.d.ts +42 -0
  178. package/dist/portfolio-registry.d.ts.map +1 -0
  179. package/dist/portfolio-registry.js +311 -0
  180. package/dist/portfolio-registry.js.map +1 -0
  181. package/dist/portfolio-routing.d.ts +5 -0
  182. package/dist/portfolio-routing.d.ts.map +1 -0
  183. package/dist/portfolio-routing.js +24 -0
  184. package/dist/portfolio-routing.js.map +1 -0
  185. package/dist/portfolio-session-service.d.ts +15 -0
  186. package/dist/portfolio-session-service.d.ts.map +1 -0
  187. package/dist/portfolio-session-service.js +206 -0
  188. package/dist/portfolio-session-service.js.map +1 -0
  189. package/dist/process-cache.d.ts +32 -0
  190. package/dist/process-cache.d.ts.map +1 -0
  191. package/dist/process-cache.js +44 -0
  192. package/dist/process-cache.js.map +1 -0
  193. package/dist/project-resolver.d.ts +5 -0
  194. package/dist/project-resolver.d.ts.map +1 -0
  195. package/dist/project-resolver.js +20 -0
  196. package/dist/project-resolver.js.map +1 -0
  197. package/dist/prompt-builder.d.ts +42 -0
  198. package/dist/prompt-builder.d.ts.map +1 -0
  199. package/dist/prompt-builder.js +182 -0
  200. package/dist/prompt-builder.js.map +1 -0
  201. package/dist/prompts/orchestrator.md.js +4 -0
  202. package/dist/prompts/orchestrator.md.js.map +1 -0
  203. package/dist/query-activity-events.d.ts +42 -0
  204. package/dist/query-activity-events.d.ts.map +1 -0
  205. package/dist/query-activity-events.js +170 -0
  206. package/dist/query-activity-events.js.map +1 -0
  207. package/dist/recovery/actions.d.ts +7 -0
  208. package/dist/recovery/actions.d.ts.map +1 -0
  209. package/dist/recovery/index.d.ts +8 -0
  210. package/dist/recovery/index.d.ts.map +1 -0
  211. package/dist/recovery/logger.d.ts +12 -0
  212. package/dist/recovery/logger.d.ts.map +1 -0
  213. package/dist/recovery/manager.d.ts +24 -0
  214. package/dist/recovery/manager.d.ts.map +1 -0
  215. package/dist/recovery/scanner.d.ts +11 -0
  216. package/dist/recovery/scanner.d.ts.map +1 -0
  217. package/dist/recovery/types.d.ts +170 -0
  218. package/dist/recovery/types.d.ts.map +1 -0
  219. package/dist/recovery/validator.d.ts +8 -0
  220. package/dist/recovery/validator.d.ts.map +1 -0
  221. package/dist/report-watcher.d.ts +93 -0
  222. package/dist/report-watcher.d.ts.map +1 -0
  223. package/dist/report-watcher.js +182 -0
  224. package/dist/report-watcher.js.map +1 -0
  225. package/dist/scm-webhook-utils.d.ts +6 -0
  226. package/dist/scm-webhook-utils.d.ts.map +1 -0
  227. package/dist/scm-webhook-utils.js +36 -0
  228. package/dist/scm-webhook-utils.js.map +1 -0
  229. package/dist/session-manager.d.ts +22 -0
  230. package/dist/session-manager.d.ts.map +1 -0
  231. package/dist/session-manager.js +3077 -0
  232. package/dist/session-manager.js.map +1 -0
  233. package/dist/spawn-target.d.ts +23 -0
  234. package/dist/spawn-target.d.ts.map +1 -0
  235. package/dist/spawn-target.js +39 -0
  236. package/dist/spawn-target.js.map +1 -0
  237. package/dist/storage-key.d.ts +9 -0
  238. package/dist/storage-key.d.ts.map +1 -0
  239. package/dist/storage-key.js +59 -0
  240. package/dist/storage-key.js.map +1 -0
  241. package/dist/tmux.d.ts +39 -0
  242. package/dist/tmux.d.ts.map +1 -0
  243. package/dist/tmux.js +141 -0
  244. package/dist/tmux.js.map +1 -0
  245. package/dist/types.d.ts +1496 -0
  246. package/dist/types.d.ts.map +1 -0
  247. package/dist/types.js +215 -0
  248. package/dist/types.js.map +1 -0
  249. package/dist/update-cache.d.ts +59 -0
  250. package/dist/update-cache.d.ts.map +1 -0
  251. package/dist/update-cache.js +77 -0
  252. package/dist/update-cache.js.map +1 -0
  253. package/dist/utils/metadata-flatten.d.ts +3 -0
  254. package/dist/utils/metadata-flatten.d.ts.map +1 -0
  255. package/dist/utils/metadata-flatten.js +18 -0
  256. package/dist/utils/metadata-flatten.js.map +1 -0
  257. package/dist/utils/pr.d.ts +7 -0
  258. package/dist/utils/pr.d.ts.map +1 -0
  259. package/dist/utils/pr.js +97 -0
  260. package/dist/utils/pr.js.map +1 -0
  261. package/dist/utils/session-from-metadata.d.ts +16 -0
  262. package/dist/utils/session-from-metadata.d.ts.map +1 -0
  263. package/dist/utils/session-from-metadata.js +87 -0
  264. package/dist/utils/session-from-metadata.js.map +1 -0
  265. package/dist/utils/session-id.d.ts +4 -0
  266. package/dist/utils/session-id.d.ts.map +1 -0
  267. package/dist/utils/session-id.js +9 -0
  268. package/dist/utils/session-id.js.map +1 -0
  269. package/dist/utils/validation.d.ts +9 -0
  270. package/dist/utils/validation.d.ts.map +1 -0
  271. package/dist/utils/validation.js +45 -0
  272. package/dist/utils/validation.js.map +1 -0
  273. package/dist/utils.d.ts +65 -0
  274. package/dist/utils.d.ts.map +1 -0
  275. package/dist/utils.js +189 -0
  276. package/dist/utils.js.map +1 -0
  277. package/dist/version-compare.d.ts +27 -0
  278. package/dist/version-compare.d.ts.map +1 -0
  279. package/dist/version-compare.js +121 -0
  280. package/dist/version-compare.js.map +1 -0
  281. package/dist/windows-pty-registry.d.ts +27 -0
  282. package/dist/windows-pty-registry.d.ts.map +1 -0
  283. package/dist/windows-pty-registry.js +109 -0
  284. package/dist/windows-pty-registry.js.map +1 -0
  285. package/package.json +110 -0
@@ -0,0 +1,295 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
+ import { stringify } from 'yaml';
4
+ import { generateSessionPrefix } from './paths.js';
5
+ import { getDefaultRuntime } from './platform.js';
6
+
7
+ /**
8
+ * Config generator for `athene start <url>` — auto-detects project settings
9
+ * from a repo URL and generates a valid agent-orchestrator.yaml.
10
+ *
11
+ * SCM-agnostic: parses GitHub, GitLab, Bitbucket URLs and infers plugins.
12
+ */
13
+ // Main is the canonical config-schema contract; schema evolution must remain
14
+ // forward-compatible and additive for older CLIs that stamp this URL.
15
+ const CONFIG_SCHEMA_URL = "https://raw.githubusercontent.com/slievr/Athene/main/schema/config.schema.json";
16
+ function withConfigSchema(config) {
17
+ const { $schema: providedSchema, ...rest } = config;
18
+ const schema = typeof providedSchema === "string" && providedSchema.trim().length > 0
19
+ ? providedSchema
20
+ : CONFIG_SCHEMA_URL;
21
+ return {
22
+ $schema: schema,
23
+ ...rest,
24
+ };
25
+ }
26
+ /**
27
+ * Check if a string looks like a repo URL (HTTP(S) or SSH git URL).
28
+ */
29
+ function isRepoUrl(arg) {
30
+ return /^https?:\/\//.test(arg) || /^git@[^:]+:.+\/.+/.test(arg);
31
+ }
32
+ /**
33
+ * Parse a repo URL into components.
34
+ * Supports:
35
+ * - https://github.com/owner/repo
36
+ * - https://github.com/owner/repo.git
37
+ * - git@github.com:owner/repo.git
38
+ * - Same patterns for GitLab, Bitbucket, etc.
39
+ */
40
+ function parseRepoUrl(url) {
41
+ // SSH format: git@host:owner/repo.git
42
+ const sshMatch = url.match(/^git@([^:]+):([^/]+)\/([^/]+?)(?:\.git)?$/);
43
+ if (sshMatch) {
44
+ const host = sshMatch[1];
45
+ const owner = sshMatch[2];
46
+ const repo = sshMatch[3];
47
+ return {
48
+ ownerRepo: `${owner}/${repo}`,
49
+ owner,
50
+ repo,
51
+ host,
52
+ cloneUrl: `https://${host}/${owner}/${repo}.git`,
53
+ };
54
+ }
55
+ // HTTPS format: https://host/owner/repo[.git]
56
+ const httpsMatch = url.match(/^https?:\/\/([^/]+)\/([^/]+)\/([^/]+?)(?:\.git)?\/?$/);
57
+ if (httpsMatch) {
58
+ const host = httpsMatch[1];
59
+ const owner = httpsMatch[2];
60
+ const repo = httpsMatch[3];
61
+ return {
62
+ ownerRepo: `${owner}/${repo}`,
63
+ owner,
64
+ repo,
65
+ host,
66
+ cloneUrl: `https://${host}/${owner}/${repo}.git`,
67
+ };
68
+ }
69
+ throw new Error(`Could not parse repo URL: ${url}\n` +
70
+ `Expected format: https://github.com/owner/repo or git@github.com:owner/repo.git`);
71
+ }
72
+ /**
73
+ * Detect SCM platform from hostname.
74
+ */
75
+ function detectScmPlatform(host) {
76
+ const lower = host.toLowerCase();
77
+ if (lower === "github.com" || lower.endsWith(".github.com"))
78
+ return "github";
79
+ if (lower === "gitlab.com" || lower.endsWith(".gitlab.com"))
80
+ return "gitlab";
81
+ if (lower === "bitbucket.org" ||
82
+ lower.endsWith(".bitbucket.org") ||
83
+ lower.endsWith(".bitbucket.com"))
84
+ return "bitbucket";
85
+ return "unknown";
86
+ }
87
+ // =============================================================================
88
+ // PROJECT DETECTION (minimal — reuses cli/project-detection for full detection)
89
+ // =============================================================================
90
+ /** Detect the default branch from a local repo directory. */
91
+ function detectDefaultBranchFromDir(repoDir) {
92
+ // Check HEAD file for symref
93
+ const headPath = join(repoDir, ".git", "HEAD");
94
+ if (existsSync(headPath)) {
95
+ const head = readFileSync(headPath, "utf-8").trim();
96
+ const match = head.match(/^ref: refs\/heads\/(.+)$/);
97
+ if (match) {
98
+ // This is the current branch, not necessarily the default.
99
+ // Check for common default branch names in refs.
100
+ const commonDefaults = ["main", "master", "next", "develop"];
101
+ for (const branch of commonDefaults) {
102
+ const refPath = join(repoDir, ".git", "refs", "remotes", "origin", branch);
103
+ const packedRefs = join(repoDir, ".git", "packed-refs");
104
+ if (existsSync(refPath))
105
+ return branch;
106
+ // Check packed-refs for the branch
107
+ if (existsSync(packedRefs)) {
108
+ const packed = readFileSync(packedRefs, "utf-8");
109
+ if (packed.includes(`refs/remotes/origin/${branch}`))
110
+ return branch;
111
+ }
112
+ }
113
+ // Fallback to current branch if no common default found
114
+ return match[1];
115
+ }
116
+ }
117
+ return "main";
118
+ }
119
+ function detectProjectInfo(repoDir) {
120
+ const hasFile = (name) => existsSync(join(repoDir, name));
121
+ if (hasFile("package.json")) {
122
+ const pm = hasFile("pnpm-lock.yaml")
123
+ ? "pnpm"
124
+ : hasFile("yarn.lock")
125
+ ? "yarn"
126
+ : hasFile("bun.lockb") || hasFile("bun.lock")
127
+ ? "bun"
128
+ : "npm";
129
+ const lang = hasFile("tsconfig.json") || hasFile("tsconfig.base.json") ? "typescript" : "javascript";
130
+ return { language: lang, packageManager: pm };
131
+ }
132
+ if (hasFile("Cargo.toml"))
133
+ return { language: "rust", packageManager: "cargo" };
134
+ if (hasFile("go.mod"))
135
+ return { language: "go", packageManager: "go" };
136
+ if (hasFile("pyproject.toml") || hasFile("requirements.txt") || hasFile("setup.py")) {
137
+ return { language: "python", packageManager: "pip" };
138
+ }
139
+ return { language: null, packageManager: null };
140
+ }
141
+ function readOriginRemoteUrl(projectPath) {
142
+ const gitConfigPath = join(resolve(projectPath), ".git", "config");
143
+ if (!existsSync(gitConfigPath))
144
+ return null;
145
+ const lines = readFileSync(gitConfigPath, "utf-8").split(/\r?\n/);
146
+ let inOrigin = false;
147
+ for (const line of lines) {
148
+ const trimmed = line.trim();
149
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
150
+ inOrigin = trimmed === '[remote "origin"]';
151
+ continue;
152
+ }
153
+ if (!inOrigin)
154
+ continue;
155
+ const match = line.match(/^\s*url\s*=\s*(.+)\s*$/);
156
+ if (match?.[1])
157
+ return match[1].trim();
158
+ }
159
+ return null;
160
+ }
161
+ // =============================================================================
162
+ // CONFIG GENERATION
163
+ // =============================================================================
164
+ /**
165
+ * Sanitize a repo name for use as a YAML project key.
166
+ * Lowercases, replaces dots/special chars with hyphens, strips leading/trailing hyphens.
167
+ */
168
+ function sanitizeProjectId(repoName) {
169
+ return repoName
170
+ .toLowerCase()
171
+ .replace(/[^a-z0-9_-]/g, "-")
172
+ .replace(/^-+|-+$/g, "")
173
+ .replace(/-{2,}/g, "-");
174
+ }
175
+ /**
176
+ * Generate a complete agent-orchestrator.yaml config object from a repo URL.
177
+ * Returns the raw object ready for YAML serialization.
178
+ */
179
+ function generateConfigFromUrl(options) {
180
+ const { parsed, repoPath, port = 3000 } = options;
181
+ const platform = detectScmPlatform(parsed.host);
182
+ const defaultBranch = detectDefaultBranchFromDir(repoPath);
183
+ const projectInfo = detectProjectInfo(repoPath);
184
+ // Use original case for prefix generation (preserves CamelCase detection),
185
+ // lowercase for the YAML project key.
186
+ const projectId = sanitizeProjectId(parsed.repo);
187
+ // Strip characters invalid in sessionPrefix (Zod: [a-zA-Z0-9_-]+) before
188
+ // passing to generateSessionPrefix, so "my.app" → "my-app" → "ma" (kebab path).
189
+ const prefixInput = parsed.repo.replace(/[^a-zA-Z0-9_-]/g, "-").replace(/^-+|-+$/g, "");
190
+ const prefix = generateSessionPrefix(prefixInput || parsed.repo);
191
+ // Build project config
192
+ const projectConfig = {
193
+ name: parsed.repo,
194
+ repo: parsed.ownerRepo,
195
+ path: repoPath,
196
+ defaultBranch,
197
+ sessionPrefix: prefix,
198
+ };
199
+ // SCM plugin — always set explicitly so applyProjectDefaults doesn't override.
200
+ // For known platforms, use the matching plugin. For unknown hosts, default to github
201
+ // (best available option since it's the only fully implemented SCM plugin).
202
+ projectConfig.scm = { plugin: platform !== "unknown" ? platform : "github" };
203
+ // Tracker — same platform as SCM for known hosts, github as fallback
204
+ projectConfig.tracker = {
205
+ plugin: platform === "github" || platform === "gitlab" ? platform : "github",
206
+ };
207
+ // Post-create commands based on detected package manager (JS ecosystem only)
208
+ const JS_PACKAGE_MANAGERS = {
209
+ pnpm: "pnpm install",
210
+ yarn: "yarn install",
211
+ bun: "bun install",
212
+ npm: "npm install",
213
+ };
214
+ const installCmd = projectInfo.packageManager
215
+ ? JS_PACKAGE_MANAGERS[projectInfo.packageManager]
216
+ : undefined;
217
+ if (installCmd) {
218
+ projectConfig.postCreate = [installCmd];
219
+ }
220
+ return withConfigSchema({
221
+ port,
222
+ defaults: {
223
+ runtime: getDefaultRuntime(),
224
+ agent: "claude-code",
225
+ workspace: "worktree",
226
+ notifiers: [],
227
+ },
228
+ projects: {
229
+ [projectId]: projectConfig,
230
+ },
231
+ });
232
+ }
233
+ /**
234
+ * Serialize a config object to YAML string.
235
+ */
236
+ function configToYaml(config) {
237
+ return stringify(withConfigSchema(config), { indent: 2 });
238
+ }
239
+ /**
240
+ * Check if a directory already has the repo cloned by comparing remote URLs.
241
+ * Returns true if the directory is a git repo with a matching origin remote.
242
+ */
243
+ function isRepoAlreadyCloned(dir, expectedCloneUrl) {
244
+ if (!existsSync(join(dir, ".git")))
245
+ return false;
246
+ const configPath = join(dir, ".git", "config");
247
+ if (!existsSync(configPath))
248
+ return false;
249
+ const gitConfig = readFileSync(configPath, "utf-8");
250
+ // Normalize URLs for comparison:
251
+ // - Convert SSH to HTTPS (git@host:owner/repo → https://host/owner/repo)
252
+ // - Strip .git suffix and trailing slashes
253
+ // - Lowercase for case-insensitive match
254
+ const normalize = (url) => {
255
+ let normalized = url.trim();
256
+ // Convert SSH format to HTTPS
257
+ const sshMatch = normalized.match(/^git@([^:]+):(.+)$/);
258
+ if (sshMatch) {
259
+ normalized = `https://${sshMatch[1]}/${sshMatch[2]}`;
260
+ }
261
+ return normalized
262
+ .replace(/\.git$/, "")
263
+ .replace(/\/$/, "")
264
+ .toLowerCase();
265
+ };
266
+ const expectedNorm = normalize(expectedCloneUrl);
267
+ // Look for url = ... lines in git config
268
+ const urlMatches = gitConfig.match(/url\s*=\s*(.+)/g);
269
+ if (!urlMatches)
270
+ return false;
271
+ return urlMatches.some((line) => {
272
+ const url = line.replace(/url\s*=\s*/, "").trim();
273
+ return normalize(url) === expectedNorm;
274
+ });
275
+ }
276
+ /**
277
+ * Determine the target directory for cloning a repo.
278
+ * If CWD matches the repo, return CWD. Otherwise return CWD/repo-name.
279
+ */
280
+ function resolveCloneTarget(parsed, cwd) {
281
+ // If CWD is already the repo, reuse it
282
+ if (isRepoAlreadyCloned(cwd, parsed.cloneUrl)) {
283
+ return cwd;
284
+ }
285
+ // If CWD/repo-name exists and matches, reuse it
286
+ const subDir = resolve(cwd, parsed.repo);
287
+ if (isRepoAlreadyCloned(subDir, parsed.cloneUrl)) {
288
+ return subDir;
289
+ }
290
+ // Clone into CWD/repo-name
291
+ return subDir;
292
+ }
293
+
294
+ export { CONFIG_SCHEMA_URL, configToYaml, detectDefaultBranchFromDir, detectProjectInfo, detectScmPlatform, generateConfigFromUrl, isRepoAlreadyCloned, isRepoUrl, parseRepoUrl, readOriginRemoteUrl, resolveCloneTarget, sanitizeProjectId, withConfigSchema };
295
+ //# sourceMappingURL=config-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-generator.js","sources":["../src/config-generator.ts"],"sourcesContent":[null],"names":["yamlStringify"],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Configuration loader — reads agent-orchestrator.yaml and validates with Zod.
3
+ *
4
+ * Minimal config that just works:
5
+ * projects:
6
+ * my-app:
7
+ * repo: org/repo
8
+ * path: ~/my-app
9
+ *
10
+ * Everything else has sensible defaults.
11
+ */
12
+ import { type ExternalPluginEntryRef, type LoadedConfig, type OrchestratorConfig } from "./types.js";
13
+ /**
14
+ * Collect external plugin configs from tracker, scm, and notifier inline configs.
15
+ * These will be auto-added to config.plugins for loading.
16
+ *
17
+ * Also sets a temporary plugin name on configs that only have package/path,
18
+ * so that resolvePlugins() can look up the plugin by name.
19
+ *
20
+ * IMPORTANT: Only sets expectedPluginName when user explicitly specified `plugin`.
21
+ * When plugin is auto-generated, expectedPluginName is left undefined so that
22
+ * any manifest.name is accepted and the config is updated with it.
23
+ */
24
+ export declare function collectExternalPluginConfigs(config: OrchestratorConfig): ExternalPluginEntryRef[];
25
+ /**
26
+ * Sentinel string for the default `bugbot-comments` reaction message.
27
+ * The lifecycle dispatcher replaces this exact value with a formatted listing
28
+ * of the actual automated comments + correct-API guidance (see #895). If a
29
+ * project customizes the message in their YAML, the dispatcher leaves it alone.
30
+ */
31
+ export declare const DEFAULT_BUGBOT_COMMENTS_MESSAGE = "Automated review comments found on your PR. Fix the issues flagged by the bot.";
32
+ /**
33
+ * Search for config file in standard locations.
34
+ *
35
+ * Search order:
36
+ * 1. AO_CONFIG_PATH environment variable (if set)
37
+ * 2. Search up directory tree from CWD (like git)
38
+ * 3. Explicit startDir (if provided)
39
+ * 4. Home directory locations
40
+ */
41
+ export declare function findConfigFile(startDir?: string): string | null;
42
+ /** Find config file path (exported for use in hash generation) */
43
+ export declare function findConfig(startDir?: string): string | null;
44
+ /** Load and validate config from a YAML file */
45
+ export declare function loadConfig(configPath?: string): LoadedConfig;
46
+ /** Load config and return both config and resolved path */
47
+ export declare function loadConfigWithPath(configPath?: string): {
48
+ config: LoadedConfig;
49
+ path: string;
50
+ };
51
+ /** Validate a raw config object */
52
+ export declare function validateConfig(raw: unknown): OrchestratorConfig;
53
+ /** Get the default config (useful for first-run setup) */
54
+ export declare function getDefaultConfig(): OrchestratorConfig;
55
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAC;AA6cpB;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,kBAAkB,GAAG,sBAAsB,EAAE,CAwCjG;AA2HD;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,mFACsC,CAAC;AAiFnF;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkE/D;AAoGD,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE3D;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CA+B5D;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG;IACvD,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CA6BA;AAED,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAqB/D;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,IAAI,kBAAkB,CAIrD"}