@copado/agentia-cli 0.28.0-alpha.0 → 0.31.0-alpha.0

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 (185) hide show
  1. package/README.md +1000 -87
  2. package/dist/commands/auth/get.d.ts +2 -0
  3. package/dist/commands/auth/get.js +13 -2
  4. package/dist/commands/auth/get.js.map +1 -1
  5. package/dist/commands/auth/set.d.ts +6 -0
  6. package/dist/commands/auth/set.js +43 -4
  7. package/dist/commands/auth/set.js.map +1 -1
  8. package/dist/commands/environment/list.d.ts +5 -1
  9. package/dist/commands/environment/list.js +10 -8
  10. package/dist/commands/environment/list.js.map +1 -1
  11. package/dist/commands/job/list.d.ts +4 -2
  12. package/dist/commands/job/list.js +10 -12
  13. package/dist/commands/job/list.js.map +1 -1
  14. package/dist/commands/pipeline/list.d.ts +6 -1
  15. package/dist/commands/pipeline/list.js +10 -7
  16. package/dist/commands/pipeline/list.js.map +1 -1
  17. package/dist/commands/project/list.d.ts +4 -1
  18. package/dist/commands/project/list.js +7 -5
  19. package/dist/commands/project/list.js.map +1 -1
  20. package/dist/commands/promotion/list.d.ts +4 -2
  21. package/dist/commands/promotion/list.js +8 -6
  22. package/dist/commands/promotion/list.js.map +1 -1
  23. package/dist/commands/setup.d.ts +12 -0
  24. package/dist/commands/setup.js +52 -0
  25. package/dist/commands/setup.js.map +1 -0
  26. package/dist/commands/testing/build/list.d.ts +16 -0
  27. package/dist/commands/testing/build/list.js +47 -0
  28. package/dist/commands/testing/build/list.js.map +1 -0
  29. package/dist/commands/testing/build/logs.d.ts +21 -0
  30. package/dist/commands/testing/build/logs.js +42 -0
  31. package/dist/commands/testing/build/logs.js.map +1 -0
  32. package/dist/commands/testing/build/run.d.ts +19 -0
  33. package/dist/commands/testing/build/run.js +39 -0
  34. package/dist/commands/testing/build/run.js.map +1 -0
  35. package/dist/commands/testing/create.d.ts +18 -0
  36. package/dist/commands/testing/create.js +46 -0
  37. package/dist/commands/testing/create.js.map +1 -0
  38. package/dist/commands/testing/job/create.d.ts +18 -0
  39. package/dist/commands/testing/job/create.js +46 -0
  40. package/dist/commands/testing/job/create.js.map +1 -0
  41. package/dist/commands/testing/job/download.d.ts +22 -0
  42. package/dist/commands/testing/job/download.js +56 -0
  43. package/dist/commands/testing/job/download.js.map +1 -0
  44. package/dist/commands/testing/job/files.d.ts +19 -0
  45. package/dist/commands/testing/job/files.js +35 -0
  46. package/dist/commands/testing/job/files.js.map +1 -0
  47. package/dist/commands/testing/job/list.d.ts +14 -0
  48. package/dist/commands/testing/job/list.js +32 -0
  49. package/dist/commands/testing/job/list.js.map +1 -0
  50. package/dist/commands/testing/job/upload.d.ts +29 -0
  51. package/dist/commands/testing/job/upload.js +57 -0
  52. package/dist/commands/testing/job/upload.js.map +1 -0
  53. package/dist/commands/testing/logs.d.ts +21 -0
  54. package/dist/commands/testing/logs.js +42 -0
  55. package/dist/commands/testing/logs.js.map +1 -0
  56. package/dist/commands/testing/project/create.d.ts +14 -0
  57. package/dist/commands/testing/project/create.js +36 -0
  58. package/dist/commands/testing/project/create.js.map +1 -0
  59. package/dist/commands/testing/project/list.d.ts +13 -0
  60. package/dist/commands/testing/project/list.js +31 -0
  61. package/dist/commands/testing/project/list.js.map +1 -0
  62. package/dist/commands/testing/robot/create.d.ts +19 -0
  63. package/dist/commands/testing/robot/create.js +60 -0
  64. package/dist/commands/testing/robot/create.js.map +1 -0
  65. package/dist/commands/testing/robot/list.d.ts +13 -0
  66. package/dist/commands/testing/robot/list.js +28 -0
  67. package/dist/commands/testing/robot/list.js.map +1 -0
  68. package/dist/commands/testing/run.d.ts +19 -0
  69. package/dist/commands/testing/run.js +32 -0
  70. package/dist/commands/testing/run.js.map +1 -0
  71. package/dist/commands/testing/status.d.ts +16 -0
  72. package/dist/commands/testing/status.js +47 -0
  73. package/dist/commands/testing/status.js.map +1 -0
  74. package/dist/commands/testing/test/create.d.ts +1 -0
  75. package/dist/commands/testing/test/create.js +2 -0
  76. package/dist/commands/testing/test/create.js.map +1 -0
  77. package/dist/commands/testing/test/logs.d.ts +1 -0
  78. package/dist/commands/testing/test/logs.js +2 -0
  79. package/dist/commands/testing/test/logs.js.map +1 -0
  80. package/dist/commands/testing/test/run.d.ts +1 -0
  81. package/dist/commands/testing/test/run.js +2 -0
  82. package/dist/commands/testing/test/run.js.map +1 -0
  83. package/dist/commands/testing/test/status.d.ts +1 -0
  84. package/dist/commands/testing/test/status.js +2 -0
  85. package/dist/commands/testing/test/status.js.map +1 -0
  86. package/dist/commands/testing/test/update.d.ts +1 -0
  87. package/dist/commands/testing/test/update.js +2 -0
  88. package/dist/commands/testing/test/update.js.map +1 -0
  89. package/dist/commands/testing/update.d.ts +29 -0
  90. package/dist/commands/testing/update.js +57 -0
  91. package/dist/commands/testing/update.js.map +1 -0
  92. package/dist/commands/testing/variable/create.d.ts +20 -0
  93. package/dist/commands/testing/variable/create.js +65 -0
  94. package/dist/commands/testing/variable/create.js.map +1 -0
  95. package/dist/commands/testing/variable/delete.d.ts +19 -0
  96. package/dist/commands/testing/variable/delete.js +30 -0
  97. package/dist/commands/testing/variable/delete.js.map +1 -0
  98. package/dist/commands/testing/variable/list.d.ts +15 -0
  99. package/dist/commands/testing/variable/list.js +40 -0
  100. package/dist/commands/testing/variable/list.js.map +1 -0
  101. package/dist/commands/work/list.d.ts +4 -1
  102. package/dist/commands/work/list.js +7 -5
  103. package/dist/commands/work/list.js.map +1 -1
  104. package/dist/commands/work/set.js +8 -1
  105. package/dist/commands/work/set.js.map +1 -1
  106. package/dist/commands/work/submit.d.ts +2 -0
  107. package/dist/commands/work/submit.js +40 -2
  108. package/dist/commands/work/submit.js.map +1 -1
  109. package/dist/lib/credential-store.d.ts +4 -0
  110. package/dist/lib/credential-store.js +14 -0
  111. package/dist/lib/credential-store.js.map +1 -1
  112. package/dist/lib/defaults-store.d.ts +3 -0
  113. package/dist/lib/defaults-store.js +24 -0
  114. package/dist/lib/defaults-store.js.map +1 -1
  115. package/dist/lib/environment-flags.d.ts +3 -1
  116. package/dist/lib/environment-flags.js +3 -1
  117. package/dist/lib/environment-flags.js.map +1 -1
  118. package/dist/lib/environment-types.d.ts +4 -1
  119. package/dist/lib/environment-types.js +2 -0
  120. package/dist/lib/environment-types.js.map +1 -1
  121. package/dist/lib/git-worktree.d.ts +4 -0
  122. package/dist/lib/git-worktree.js +46 -2
  123. package/dist/lib/git-worktree.js.map +1 -1
  124. package/dist/lib/job-types.d.ts +7 -4
  125. package/dist/lib/job-types.js +8 -15
  126. package/dist/lib/job-types.js.map +1 -1
  127. package/dist/lib/list-pagination.d.ts +46 -0
  128. package/dist/lib/list-pagination.js +106 -0
  129. package/dist/lib/list-pagination.js.map +1 -0
  130. package/dist/lib/mcp/testing-tools.d.ts +144 -0
  131. package/dist/lib/mcp/testing-tools.js +366 -0
  132. package/dist/lib/mcp/testing-tools.js.map +1 -0
  133. package/dist/lib/mcp/tools.d.ts +288 -31
  134. package/dist/lib/mcp/tools.js +26 -54
  135. package/dist/lib/mcp/tools.js.map +1 -1
  136. package/dist/lib/mcp/work-tools.d.ts +1 -3
  137. package/dist/lib/mcp/work-tools.js +13 -2
  138. package/dist/lib/mcp/work-tools.js.map +1 -1
  139. package/dist/lib/open-browser.d.ts +3 -0
  140. package/dist/lib/open-browser.js +13 -1
  141. package/dist/lib/open-browser.js.map +1 -1
  142. package/dist/lib/pipeline-types.d.ts +6 -1
  143. package/dist/lib/pipeline-types.js +10 -6
  144. package/dist/lib/pipeline-types.js.map +1 -1
  145. package/dist/lib/project-flags.d.ts +3 -2
  146. package/dist/lib/project-flags.js +3 -1
  147. package/dist/lib/project-flags.js.map +1 -1
  148. package/dist/lib/project-setup.d.ts +80 -0
  149. package/dist/lib/project-setup.js +383 -0
  150. package/dist/lib/project-setup.js.map +1 -0
  151. package/dist/lib/project-types.d.ts +5 -1
  152. package/dist/lib/project-types.js +6 -10
  153. package/dist/lib/project-types.js.map +1 -1
  154. package/dist/lib/promotion-flags.d.ts +4 -3
  155. package/dist/lib/promotion-flags.js +3 -8
  156. package/dist/lib/promotion-flags.js.map +1 -1
  157. package/dist/lib/promotion-types.d.ts +8 -5
  158. package/dist/lib/promotion-types.js +10 -14
  159. package/dist/lib/promotion-types.js.map +1 -1
  160. package/dist/lib/setup-templates.d.ts +11 -0
  161. package/dist/lib/setup-templates.js +181 -0
  162. package/dist/lib/setup-templates.js.map +1 -0
  163. package/dist/lib/testing-config.d.ts +17 -0
  164. package/dist/lib/testing-config.js +68 -0
  165. package/dist/lib/testing-config.js.map +1 -0
  166. package/dist/lib/testing-flags.d.ts +33 -0
  167. package/dist/lib/testing-flags.js +70 -0
  168. package/dist/lib/testing-flags.js.map +1 -0
  169. package/dist/lib/testing-gateway.d.ts +33 -0
  170. package/dist/lib/testing-gateway.js +161 -0
  171. package/dist/lib/testing-gateway.js.map +1 -0
  172. package/dist/lib/testing-operations.d.ts +99 -0
  173. package/dist/lib/testing-operations.js +268 -0
  174. package/dist/lib/testing-operations.js.map +1 -0
  175. package/dist/lib/testing-types.d.ts +138 -0
  176. package/dist/lib/testing-types.js +190 -0
  177. package/dist/lib/testing-types.js.map +1 -0
  178. package/dist/lib/work-flags.d.ts +3 -1
  179. package/dist/lib/work-flags.js +3 -1
  180. package/dist/lib/work-flags.js.map +1 -1
  181. package/dist/lib/work-types.d.ts +8 -1
  182. package/dist/lib/work-types.js +16 -3
  183. package/dist/lib/work-types.js.map +1 -1
  184. package/oclif.manifest.json +3447 -1079
  185. package/package.json +4 -1
@@ -0,0 +1,383 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { chmod, readFile, writeFile } from 'node:fs/promises';
3
+ import * as http from 'node:http';
4
+ import * as https from 'node:https';
5
+ import path from 'node:path';
6
+ import { stdin as input, stdout as output } from 'node:process';
7
+ import readline from 'node:readline';
8
+ import { URL } from 'node:url';
9
+ import { getCurrentBranch, getGitRepoRoot, getRemoteUrl, isInsideGitWorkTree, stageAndCommit, } from './git-worktree.js';
10
+ import { QUALITY_GATES_SCRIPT_UNIX, QUALITY_GATES_SCRIPT_WINDOWS, } from './local-quality-gates.js';
11
+ import { AGENTIA_GITIGNORE_ENTRY, BUNDLED_AGENTS_MD, DEFAULT_AGENTS_MD_URL, qualityGatesExplanation, SAMPLE_QUALITY_GATES_UNIX, SAMPLE_QUALITY_GATES_WINDOWS, } from './setup-templates.js';
12
+ let testDeps;
13
+ // Test-only hook
14
+ export function setProjectSetupDepsForTests(deps) {
15
+ testDeps = deps;
16
+ }
17
+ // Test-only hook
18
+ export function resetProjectSetupDepsForTests() {
19
+ testDeps = undefined;
20
+ }
21
+ function resolveDeps(overrides = {}) {
22
+ const merged = { ...testDeps, ...overrides };
23
+ return {
24
+ chmod: merged.chmod ?? ((filePath, mode) => chmod(filePath, mode)),
25
+ existsSync: merged.existsSync ?? existsSync,
26
+ fetchText: merged.fetchText ?? defaultFetchText,
27
+ getCurrentBranch: merged.getCurrentBranch ?? getCurrentBranch,
28
+ getGitRepoRoot: merged.getGitRepoRoot ?? getGitRepoRoot,
29
+ getRemoteUrl: merged.getRemoteUrl ?? getRemoteUrl,
30
+ isInsideGitWorkTree: merged.isInsideGitWorkTree ?? isInsideGitWorkTree,
31
+ promptYesNo: merged.promptYesNo ?? defaultPromptYesNo,
32
+ readFile: merged.readFile ?? ((filePath, encoding) => readFile(filePath, encoding)),
33
+ stageAndCommit: merged.stageAndCommit ?? stageAndCommit,
34
+ writeFile: merged.writeFile ?? ((filePath, contents, encoding) => writeFile(filePath, contents, encoding)),
35
+ };
36
+ }
37
+ async function defaultFetchText(urlString) {
38
+ const url = new URL(urlString);
39
+ const transport = url.protocol === 'http:' ? http : https;
40
+ return new Promise((resolve, reject) => {
41
+ const req = transport.get(url, (response) => {
42
+ const statusCode = response.statusCode ?? 0;
43
+ if (statusCode >= 300 && statusCode < 400 && response.headers.location) {
44
+ resolve(defaultFetchText(new URL(response.headers.location, url).toString()));
45
+ return;
46
+ }
47
+ if (statusCode < 200 || statusCode >= 300) {
48
+ reject(new Error(`Failed to download AGENTS.md from ${urlString} (HTTP ${statusCode})`));
49
+ response.resume();
50
+ return;
51
+ }
52
+ const chunks = [];
53
+ response.on('data', (chunk) => {
54
+ chunks.push(chunk);
55
+ });
56
+ response.on('end', () => {
57
+ resolve(Buffer.concat(chunks).toString('utf8'));
58
+ });
59
+ });
60
+ req.on('error', reject);
61
+ });
62
+ }
63
+ async function defaultPromptYesNo(question) {
64
+ const rl = readline.createInterface({ input, output });
65
+ return new Promise((resolve) => {
66
+ rl.question(`${question} [y/N] `, (answer) => {
67
+ rl.close();
68
+ const normalized = answer.trim().toLowerCase();
69
+ resolve(normalized === 'y' || normalized === 'yes');
70
+ });
71
+ });
72
+ }
73
+ export function gitignoreHasAgentiaEntry(contents) {
74
+ return contents.split(/\r?\n/).some((line) => {
75
+ const trimmed = line.trim();
76
+ return trimmed === '.agentia' || trimmed === '.agentia/' || trimmed === '/.agentia' || trimmed === '/.agentia/';
77
+ });
78
+ }
79
+ export async function ensureAgentiaGitignore(repoRoot, deps = {}) {
80
+ const resolved = resolveDeps(deps);
81
+ const gitignorePath = path.join(repoRoot, '.gitignore');
82
+ const exists = resolved.existsSync(gitignorePath);
83
+ if (!exists) {
84
+ await resolved.writeFile(gitignorePath, `${AGENTIA_GITIGNORE_ENTRY}\n`, 'utf8');
85
+ return { path: gitignorePath, status: 'created' };
86
+ }
87
+ const current = await resolved.readFile(gitignorePath, 'utf8');
88
+ if (gitignoreHasAgentiaEntry(current)) {
89
+ return { path: gitignorePath, status: 'unchanged' };
90
+ }
91
+ const separator = current.length === 0 || current.endsWith('\n') ? '' : '\n';
92
+ await resolved.writeFile(gitignorePath, `${current}${separator}${AGENTIA_GITIGNORE_ENTRY}\n`, 'utf8');
93
+ return { path: gitignorePath, status: 'updated' };
94
+ }
95
+ /** Locate `.agentia_quality_gates.sh` / `.agentia_quality_gates.cmd` at the project (git) root. */
96
+ export function findLocalQualityGateScripts(repoRoot, deps = {}) {
97
+ const resolved = resolveDeps(deps);
98
+ const candidates = [
99
+ path.join(repoRoot, QUALITY_GATES_SCRIPT_UNIX),
100
+ path.join(repoRoot, QUALITY_GATES_SCRIPT_WINDOWS),
101
+ ];
102
+ const existingPaths = candidates.filter((filePath) => resolved.existsSync(filePath));
103
+ return {
104
+ existingPaths,
105
+ present: existingPaths.length > 0,
106
+ };
107
+ }
108
+ export async function createLocalQualityGateScripts(repoRoot, deps = {}) {
109
+ const resolved = resolveDeps(deps);
110
+ const unixPath = path.join(repoRoot, QUALITY_GATES_SCRIPT_UNIX);
111
+ const windowsPath = path.join(repoRoot, QUALITY_GATES_SCRIPT_WINDOWS);
112
+ const unixExists = resolved.existsSync(unixPath);
113
+ const windowsExists = resolved.existsSync(windowsPath);
114
+ if (unixExists && windowsExists) {
115
+ return { paths: [unixPath, windowsPath], status: 'unchanged' };
116
+ }
117
+ if (!unixExists) {
118
+ await resolved.writeFile(unixPath, SAMPLE_QUALITY_GATES_UNIX, 'utf8');
119
+ try {
120
+ await resolved.chmod(unixPath, 0o755);
121
+ }
122
+ catch {
123
+ // Best-effort executable bit; Windows and some FS may reject chmod.
124
+ }
125
+ }
126
+ if (!windowsExists) {
127
+ await resolved.writeFile(windowsPath, SAMPLE_QUALITY_GATES_WINDOWS, 'utf8');
128
+ }
129
+ return {
130
+ paths: [unixPath, windowsPath],
131
+ status: unixExists || windowsExists ? 'updated' : 'created',
132
+ };
133
+ }
134
+ export async function resolveAgentsMdContent(deps = {}, url = DEFAULT_AGENTS_MD_URL) {
135
+ const resolved = resolveDeps(deps);
136
+ const trimmedUrl = url.trim();
137
+ if (trimmedUrl.length === 0) {
138
+ return { content: BUNDLED_AGENTS_MD, source: 'bundled' };
139
+ }
140
+ try {
141
+ const content = await resolved.fetchText(trimmedUrl);
142
+ if (content.trim().length === 0) {
143
+ throw new Error('Downloaded AGENTS.md was empty');
144
+ }
145
+ return { content, source: 'download' };
146
+ }
147
+ catch {
148
+ return { content: BUNDLED_AGENTS_MD, source: 'bundled' };
149
+ }
150
+ }
151
+ /** Locate `AGENTS.md` at the project (git) root. */
152
+ export function findAgentsMd(repoRoot, deps = {}) {
153
+ const resolved = resolveDeps(deps);
154
+ const agentsPath = path.join(repoRoot, 'AGENTS.md');
155
+ return {
156
+ path: agentsPath,
157
+ present: resolved.existsSync(agentsPath),
158
+ };
159
+ }
160
+ export async function writeAgentsMd(repoRoot, deps = {}, url = DEFAULT_AGENTS_MD_URL) {
161
+ const resolved = resolveDeps(deps);
162
+ const agentsPath = path.join(repoRoot, 'AGENTS.md');
163
+ const existed = resolved.existsSync(agentsPath);
164
+ const { content, source } = await resolveAgentsMdContent(deps, url);
165
+ await resolved.writeFile(agentsPath, content.endsWith('\n') ? content : `${content}\n`, 'utf8');
166
+ return {
167
+ path: agentsPath,
168
+ source,
169
+ status: existed ? 'updated' : 'created',
170
+ };
171
+ }
172
+ function buildNextSteps(bin) {
173
+ return [
174
+ `Run \`${bin} auth set --cicd <copado-api-key> --region <na|eu|au>\` (or \`--custom-url <url>\`) to store credentials.`,
175
+ `If you use an AI agent or IDE, configure it to run \`${bin} mcp start\` as an MCP server.`,
176
+ ];
177
+ }
178
+ function logGitignoreResult(log, cwd, gitignore) {
179
+ const relative = path.relative(cwd, gitignore.path) || '.gitignore';
180
+ if (gitignore.status === 'created') {
181
+ log(`Created ${relative} with ${AGENTIA_GITIGNORE_ENTRY}`);
182
+ return;
183
+ }
184
+ if (gitignore.status === 'updated') {
185
+ log(`Added ${AGENTIA_GITIGNORE_ENTRY} to ${relative}`);
186
+ return;
187
+ }
188
+ log(`.gitignore already ignores ${AGENTIA_GITIGNORE_ENTRY}`);
189
+ }
190
+ function toRelativePaths(cwd, absolutePaths) {
191
+ return absolutePaths.map((filePath) => path.relative(cwd, filePath) || path.basename(filePath));
192
+ }
193
+ async function maybeCreateQualityGates(params) {
194
+ const { bin, cwd, deps, gitignorePath, includeGitignore, log, noPrompt, requested, resolved, root, } = params;
195
+ const existing = findLocalQualityGateScripts(root, deps);
196
+ const existingRelative = toRelativePaths(cwd, existing.existingPaths);
197
+ if (existing.present && !requested) {
198
+ log(`Local quality gates already set at project root (${existingRelative.join(', ')}).`);
199
+ return {
200
+ gitignoreConsumed: false,
201
+ qualityGates: {
202
+ committed: false,
203
+ existingPaths: existingRelative,
204
+ paths: existingRelative,
205
+ status: 'unchanged',
206
+ },
207
+ };
208
+ }
209
+ if (existing.present && requested) {
210
+ log(`Local quality gates already set at project root (${existingRelative.join(', ')}).`);
211
+ }
212
+ const shouldCreate = requested ||
213
+ (!noPrompt &&
214
+ (await resolved.promptYesNo('Create and commit sample local quality gates (.agentia_quality_gates.sh / .cmd)?')));
215
+ if (!shouldCreate) {
216
+ log(noPrompt
217
+ ? 'Skipped local quality gates (pass --create-local-quality-gates to add them).'
218
+ : 'Skipped local quality gates.');
219
+ return {
220
+ gitignoreConsumed: false,
221
+ qualityGates: {
222
+ committed: false,
223
+ existingPaths: existingRelative,
224
+ status: 'skipped',
225
+ },
226
+ };
227
+ }
228
+ const created = await createLocalQualityGateScripts(root, deps);
229
+ const relativePaths = toRelativePaths(cwd, created.paths);
230
+ if (created.status === 'unchanged' && !includeGitignore) {
231
+ log(`Local quality gates already present (${relativePaths.join(', ')}).`);
232
+ log(qualityGatesExplanation(bin));
233
+ return {
234
+ gitignoreConsumed: false,
235
+ qualityGates: {
236
+ committed: false,
237
+ existingPaths: existingRelative,
238
+ paths: relativePaths,
239
+ status: 'unchanged',
240
+ },
241
+ };
242
+ }
243
+ const commitPaths = [...created.paths];
244
+ if (includeGitignore) {
245
+ commitPaths.push(gitignorePath);
246
+ }
247
+ await resolved.stageAndCommit('Add Agentia local quality gates', commitPaths);
248
+ log(`Local quality gates ${created.status} and committed (${relativePaths.join(', ')}).`);
249
+ log(qualityGatesExplanation(bin));
250
+ return {
251
+ gitignoreConsumed: includeGitignore,
252
+ qualityGates: {
253
+ committed: true,
254
+ existingPaths: existingRelative,
255
+ paths: relativePaths,
256
+ status: created.status,
257
+ },
258
+ };
259
+ }
260
+ async function maybeCreateAgentsMd(params) {
261
+ const { cwd, deps, gitignorePath, includeGitignore, log, noPrompt, requested, resolved, root } = params;
262
+ const existing = findAgentsMd(root, deps);
263
+ const relativePath = path.relative(cwd, existing.path) || 'AGENTS.md';
264
+ if (existing.present && !requested) {
265
+ log(`AGENTS.md already set at project root (${relativePath}).`);
266
+ return {
267
+ agentsMd: {
268
+ committed: false,
269
+ path: relativePath,
270
+ present: true,
271
+ status: 'unchanged',
272
+ },
273
+ gitignoreConsumed: false,
274
+ };
275
+ }
276
+ if (existing.present && requested) {
277
+ log(`AGENTS.md already set at project root (${relativePath}).`);
278
+ }
279
+ const shouldCreate = requested ||
280
+ (!noPrompt &&
281
+ (await resolved.promptYesNo('Add or update AGENTS.md with instructions for AI agents and IDEs?')));
282
+ if (!shouldCreate) {
283
+ log(noPrompt ? 'Skipped AGENTS.md (pass --create-agents-md to add it).' : 'Skipped AGENTS.md.');
284
+ return {
285
+ agentsMd: {
286
+ committed: false,
287
+ path: existing.present ? relativePath : undefined,
288
+ present: existing.present,
289
+ status: 'skipped',
290
+ },
291
+ gitignoreConsumed: false,
292
+ };
293
+ }
294
+ const written = await writeAgentsMd(root, deps);
295
+ const writtenRelative = path.relative(cwd, written.path) || 'AGENTS.md';
296
+ const commitPaths = [written.path];
297
+ if (includeGitignore) {
298
+ commitPaths.push(gitignorePath);
299
+ }
300
+ await resolved.stageAndCommit('Add Agentia AGENTS.md', commitPaths);
301
+ const sourceLabel = written.source === 'download' ? 'downloaded' : 'bundled template';
302
+ log(`AGENTS.md ${written.status} from ${sourceLabel} and committed.`);
303
+ return {
304
+ agentsMd: {
305
+ committed: true,
306
+ path: writtenRelative,
307
+ present: existing.present,
308
+ source: written.source,
309
+ status: written.status,
310
+ },
311
+ gitignoreConsumed: includeGitignore,
312
+ };
313
+ }
314
+ export async function runProjectSetup(options = {}, deps = {}) {
315
+ const resolved = resolveDeps(deps);
316
+ const bin = options.bin ?? 'agentia';
317
+ const log = options.log ?? (() => {
318
+ /* no human output */
319
+ });
320
+ const noPrompt = options.noPrompt ?? false;
321
+ const cwd = options.cwd ?? process.cwd();
322
+ if (!(await resolved.isInsideGitWorkTree())) {
323
+ throw new Error(`Not a git repository: ${cwd}. Run this command from a git project.`);
324
+ }
325
+ const root = await resolved.getGitRepoRoot();
326
+ const branch = await resolved.getCurrentBranch();
327
+ const remoteUrl = await resolved.getRemoteUrl('origin');
328
+ log(`Directory: ${cwd}`);
329
+ log(`Git root: ${root}`);
330
+ log(`Branch: ${branch}`);
331
+ log(`Remote: ${remoteUrl ?? '(no origin remote)'}`);
332
+ const gitignore = await ensureAgentiaGitignore(root, deps);
333
+ logGitignoreResult(log, cwd, gitignore);
334
+ let includeGitignore = gitignore.status === 'created' || gitignore.status === 'updated';
335
+ const qualityGatesOutcome = await maybeCreateQualityGates({
336
+ bin,
337
+ cwd,
338
+ deps,
339
+ gitignorePath: gitignore.path,
340
+ includeGitignore,
341
+ log,
342
+ noPrompt,
343
+ requested: options.createLocalQualityGates === true,
344
+ resolved,
345
+ root,
346
+ });
347
+ if (qualityGatesOutcome.gitignoreConsumed) {
348
+ includeGitignore = false;
349
+ }
350
+ const agentsOutcome = await maybeCreateAgentsMd({
351
+ cwd,
352
+ deps,
353
+ gitignorePath: gitignore.path,
354
+ includeGitignore,
355
+ log,
356
+ noPrompt,
357
+ requested: options.createAgentsMd === true,
358
+ resolved,
359
+ root,
360
+ });
361
+ const nextSteps = buildNextSteps(bin);
362
+ log('');
363
+ log('Next steps:');
364
+ for (const step of nextSteps) {
365
+ log(` • ${step}`);
366
+ }
367
+ return {
368
+ agentsMd: agentsOutcome.agentsMd,
369
+ cwd,
370
+ git: {
371
+ branch,
372
+ remoteUrl,
373
+ root,
374
+ },
375
+ gitignore: {
376
+ path: path.relative(cwd, gitignore.path) || '.gitignore',
377
+ status: gitignore.status,
378
+ },
379
+ nextSteps,
380
+ qualityGates: qualityGatesOutcome.qualityGates,
381
+ };
382
+ }
383
+ //# sourceMappingURL=project-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-setup.js","sourceRoot":"","sources":["../../src/lib/project-setup.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ListPaginationQuery, type PaginatedListResult } from './list-pagination.js';
1
2
  export type Project = {
2
3
  activityDate?: null | string;
3
4
  createdDate?: null | string;
@@ -9,6 +10,8 @@ export type Project = {
9
10
  export type ProjectListPage = {
10
11
  currentPage?: number;
11
12
  data?: Project[];
13
+ hasMore?: boolean;
14
+ nextCursor?: string;
12
15
  pageSize?: number;
13
16
  totalPages?: number;
14
17
  totalRecords?: number;
@@ -23,12 +26,13 @@ export type ProjectResponse = {
23
26
  message?: string;
24
27
  status?: string;
25
28
  };
26
- export type ProjectListFilters = {
29
+ export type ProjectListFilters = ListPaginationQuery & {
27
30
  mine?: boolean;
28
31
  name?: string;
29
32
  };
30
33
  export declare function projectsListEndpoint(filters?: ProjectListFilters): string;
31
34
  export declare function projectEndpoint(id: string): string;
35
+ export declare function normalizeProjectsListPage(response: Project[] | ProjectListPage | ProjectsListResponse): PaginatedListResult<Project>;
32
36
  export declare function normalizeProjects(response: Project[] | ProjectListPage | ProjectsListResponse): Project[];
33
37
  export declare function normalizeProject(response: Project | ProjectResponse): Project;
34
38
  export declare function formatProjectTable(projects: Project[]): string;
@@ -1,4 +1,5 @@
1
1
  import { cellValue, table } from './format.js';
2
+ import { appendListPaginationQueryParams, paginatedResultFromNestedData, } from './list-pagination.js';
2
3
  import { normalizeSalesforceId } from './salesforce-id.js';
3
4
  export function projectsListEndpoint(filters = {}) {
4
5
  const params = new URLSearchParams();
@@ -8,23 +9,18 @@ export function projectsListEndpoint(filters = {}) {
8
9
  if (filters.name !== undefined) {
9
10
  params.set('name', filters.name);
10
11
  }
12
+ appendListPaginationQueryParams(params, filters);
11
13
  const query = params.toString();
12
14
  return query.length > 0 ? `/plan/projects?${query}` : '/plan/projects';
13
15
  }
14
16
  export function projectEndpoint(id) {
15
17
  return `/plan/projects/${normalizeSalesforceId(id)}`;
16
18
  }
19
+ export function normalizeProjectsListPage(response) {
20
+ return paginatedResultFromNestedData(response);
21
+ }
17
22
  export function normalizeProjects(response) {
18
- if (Array.isArray(response)) {
19
- return response;
20
- }
21
- if (Array.isArray(response.data)) {
22
- return response.data;
23
- }
24
- if (response.data && typeof response.data === 'object' && Array.isArray(response.data.data)) {
25
- return response.data.data;
26
- }
27
- return [];
23
+ return normalizeProjectsListPage(response).data;
28
24
  }
29
25
  export function normalizeProject(response) {
30
26
  if ('data' in response && response.data !== undefined && typeof response.data === 'object' && !Array.isArray(response.data)) {
@@ -1 +1 @@
1
- {"version":3,"file":"project-types.js","sourceRoot":"","sources":["../../src/lib/project-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-types.js","sourceRoot":"","sources":["../../src/lib/project-types.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- import { type PromotionListFilters } from './promotion-types.js';
1
+ import type { PromotionListFilters } from './promotion-types.js';
2
2
  export declare const promotionListFilterFlags: {
3
3
  readonly 'created-by-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
4
4
  readonly 'created-by-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
5
5
  readonly 'destination-environment-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
6
  readonly 'destination-environment-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
7
  readonly 'is-back-promotion': import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- readonly limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
8
  readonly name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
9
  readonly 'pipeline-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
10
  readonly 'pipeline-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
@@ -15,8 +14,10 @@ export declare const promotionListFilterFlags: {
15
14
  readonly 'source-environment-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
15
  readonly status: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
16
  readonly 'work-id': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
+ readonly cursor: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ readonly 'page-size': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
19
  };
19
20
  export type PromotionListFilterFlagValues = {
20
- [K in keyof typeof promotionListFilterFlags]?: K extends 'limit' ? number : K extends 'is-back-promotion' ? boolean : string;
21
+ [K in keyof typeof promotionListFilterFlags]?: K extends 'page-size' ? number : K extends 'is-back-promotion' ? boolean : string;
21
22
  };
22
23
  export declare function buildPromotionListFilters(flags: PromotionListFilterFlagValues): PromotionListFilters;
@@ -1,6 +1,7 @@
1
1
  import { Flags } from '@oclif/core';
2
- import { PROMOTION_LIST_LIMIT_MAX, PROMOTION_LIST_LIMIT_MIN, } from './promotion-types.js';
2
+ import { buildListPaginationQuery, listPaginationFlags } from './list-pagination.js';
3
3
  export const promotionListFilterFlags = {
4
+ ...listPaginationFlags,
4
5
  'created-by-id': Flags.string({
5
6
  description: 'Filter by creator ID',
6
7
  }),
@@ -17,11 +18,6 @@ export const promotionListFilterFlags = {
17
18
  allowNo: true,
18
19
  description: 'Filter by back promotion',
19
20
  }),
20
- limit: Flags.integer({
21
- description: `Maximum number of promotions to return (${PROMOTION_LIST_LIMIT_MIN}-${PROMOTION_LIST_LIMIT_MAX})`,
22
- max: PROMOTION_LIST_LIMIT_MAX,
23
- min: PROMOTION_LIST_LIMIT_MIN,
24
- }),
25
21
  name: Flags.string({
26
22
  description: 'Filter by name',
27
23
  }),
@@ -56,7 +52,6 @@ const PROMOTION_LIST_FILTER_FLAG_TO_KEY = {
56
52
  'destination-environment-id': 'destinationEnvironmentId',
57
53
  'destination-environment-name': 'destinationEnvironmentName',
58
54
  'is-back-promotion': 'isBackPromotion',
59
- limit: 'limit',
60
55
  name: 'name',
61
56
  'pipeline-id': 'pipelineId',
62
57
  'pipeline-name': 'pipelineName',
@@ -76,6 +71,6 @@ export function buildPromotionListFilters(flags) {
76
71
  Object.assign(filters, { [filterKey]: value });
77
72
  }
78
73
  }
79
- return filters;
74
+ return { ...filters, ...buildListPaginationQuery(flags) };
80
75
  }
81
76
  //# sourceMappingURL=promotion-flags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"promotion-flags.js","sourceRoot":"","sources":["../../src/lib/promotion-flags.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promotion-flags.js","sourceRoot":"","sources":["../../src/lib/promotion-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AAIjC,OAAO,EAAC,wBAAwB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAElF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,GAAG,mBAAmB;IACtB,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;QAC5B,WAAW,EAAE,sBAAsB;KACpC,CAAC;IACF,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,wBAAwB;KACtC,CAAC;IACF,4BAA4B,EAAE,KAAK,CAAC,MAAM,CAAC;QACzC,WAAW,EAAE,sCAAsC;KACpD,CAAC;IACF,8BAA8B,EAAE,KAAK,CAAC,MAAM,CAAC;QAC3C,WAAW,EAAE,wCAAwC;KACtD,CAAC;IACF,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC;QACjC,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,0BAA0B;KACxC,CAAC;IACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,gBAAgB;KAC9B,CAAC;IACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;QAC1B,WAAW,EAAE,uBAAuB;KACrC,CAAC;IACF,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC;QAC5B,WAAW,EAAE,yBAAyB;KACvC,CAAC;IACF,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;QACzB,WAAW,EAAE,sBAAsB;KACpC,CAAC;IACF,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC;QAC3B,WAAW,EAAE,wBAAwB;KACtC,CAAC;IACF,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC;QACpC,WAAW,EAAE,iCAAiC;KAC/C,CAAC;IACF,yBAAyB,EAAE,KAAK,CAAC,MAAM,CAAC;QACtC,WAAW,EAAE,mCAAmC;KACjD,CAAC;IACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,kBAAkB;KAChC,CAAC;IACF,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;QACtB,WAAW,EAAE,yBAAyB;KACvC,CAAC;CACM,CAAA;AAUV,MAAM,iCAAiC,GAAG;IACxC,eAAe,EAAE,aAAa;IAC9B,iBAAiB,EAAE,eAAe;IAClC,4BAA4B,EAAE,0BAA0B;IACxD,8BAA8B,EAAE,4BAA4B;IAC5D,mBAAmB,EAAE,iBAAiB;IACtC,IAAI,EAAE,MAAM;IACZ,aAAa,EAAE,YAAY;IAC3B,eAAe,EAAE,cAAc;IAC/B,YAAY,EAAE,WAAW;IACzB,cAAc,EAAE,aAAa;IAC7B,uBAAuB,EAAE,qBAAqB;IAC9C,yBAAyB,EAAE,uBAAuB;IAClD,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,aAAa;CAIzB,CAAA;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAoC;IAC5E,MAAM,OAAO,GAAyB,EAAE,CAAA;IAExC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAuD,EAAE,CAAC;QAC3H,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAA;QAE5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,iCAAiC,CAAC,OAAO,CAAC,CAAA;YAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAC,CAAC,SAAS,CAAC,EAAE,KAAK,EAAC,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IAED,OAAO,EAAC,GAAG,OAAO,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,EAAC,CAAA;AACzD,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type ListPaginationQuery, type PaginatedListResult } from './list-pagination.js';
1
2
  export type Promotion = {
2
3
  apexTestLevel?: string;
3
4
  backPromotedOn?: string;
@@ -42,6 +43,8 @@ export type Promotion = {
42
43
  export type PromotionListPage = {
43
44
  currentPage?: number;
44
45
  data?: Promotion[];
46
+ hasMore?: boolean;
47
+ nextCursor?: string;
45
48
  pageSize?: number;
46
49
  totalPages?: number;
47
50
  totalRecords?: number;
@@ -161,13 +164,12 @@ export type PromotionDetailResponse = {
161
164
  message?: string;
162
165
  status?: string;
163
166
  };
164
- export type PromotionListFilters = {
167
+ export type PromotionListFilters = ListPaginationQuery & {
165
168
  createdById?: string;
166
169
  createdByName?: string;
167
170
  destinationEnvironmentId?: string;
168
171
  destinationEnvironmentName?: string;
169
172
  isBackPromotion?: boolean;
170
- limit?: number;
171
173
  name?: string;
172
174
  pipelineId?: string;
173
175
  pipelineName?: string;
@@ -178,11 +180,12 @@ export type PromotionListFilters = {
178
180
  status?: string;
179
181
  userStoryId?: string;
180
182
  };
181
- export declare const PROMOTION_LIST_FILTER_KEYS: readonly ["name", "status", "projectId", "projectName", "pipelineId", "pipelineName", "sourceEnvironmentId", "sourceEnvironmentName", "destinationEnvironmentId", "destinationEnvironmentName", "isBackPromotion", "createdById", "createdByName", "limit", "userStoryId"];
182
- export declare const PROMOTION_LIST_LIMIT_MAX = 200;
183
- export declare const PROMOTION_LIST_LIMIT_MIN = 1;
183
+ export declare const PROMOTION_LIST_FILTER_KEYS: readonly ["name", "status", "projectId", "projectName", "pipelineId", "pipelineName", "sourceEnvironmentId", "sourceEnvironmentName", "destinationEnvironmentId", "destinationEnvironmentName", "isBackPromotion", "createdById", "createdByName", "userStoryId"];
184
+ export declare const PROMOTION_LIST_PAGE_SIZE_MAX = 200;
185
+ export declare const PROMOTION_LIST_PAGE_SIZE_MIN = 1;
184
186
  export declare function promotionListEndpoint(filters?: PromotionListFilters): string;
185
187
  export declare function promotionEndpoint(id: string): string;
188
+ export declare function normalizePromotionsListPage(response: PromotionListResponse): PaginatedListResult<Promotion>;
186
189
  export declare function normalizePromotions(response: PromotionListResponse): Promotion[];
187
190
  export declare function normalizePromotionDetail(response: PromotionDetail | PromotionDetailResponse): PromotionDetail;
188
191
  export declare function formatPromotionTable(promotions: Promotion[]): string;