@cluesmith/codev 3.3.2 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dashboard-dist/assets/{index-D3XaKpZW.js → index-CUIjS_Vb.js} +41 -41
- package/dashboard-dist/assets/index-CUIjS_Vb.js.map +1 -0
- package/dashboard-dist/assets/index-DnYLy5C_.css +32 -0
- package/dashboard-dist/index.html +2 -2
- package/dist/agent-farm/commands/inbox.d.ts.map +1 -1
- package/dist/agent-farm/commands/inbox.js +67 -10
- package/dist/agent-farm/commands/inbox.js.map +1 -1
- package/dist/agent-farm/commands/interrupt.d.ts +4 -1
- package/dist/agent-farm/commands/interrupt.d.ts.map +1 -1
- package/dist/agent-farm/commands/interrupt.js +6 -3
- package/dist/agent-farm/commands/interrupt.js.map +1 -1
- package/dist/agent-farm/commands/reset.d.ts +4 -1
- package/dist/agent-farm/commands/reset.d.ts.map +1 -1
- package/dist/agent-farm/commands/reset.js +6 -3
- package/dist/agent-farm/commands/reset.js.map +1 -1
- package/dist/agent-farm/commands/send.d.ts +28 -0
- package/dist/agent-farm/commands/send.d.ts.map +1 -1
- package/dist/agent-farm/commands/send.js +64 -6
- package/dist/agent-farm/commands/send.js.map +1 -1
- package/dist/agent-farm/db/index.d.ts +3 -1
- package/dist/agent-farm/db/index.d.ts.map +1 -1
- package/dist/agent-farm/db/index.js +8 -443
- package/dist/agent-farm/db/index.js.map +1 -1
- package/dist/agent-farm/db/mailbox.d.ts +47 -7
- package/dist/agent-farm/db/mailbox.d.ts.map +1 -1
- package/dist/agent-farm/db/mailbox.js +56 -12
- package/dist/agent-farm/db/mailbox.js.map +1 -1
- package/dist/agent-farm/db/migrations.d.ts +57 -0
- package/dist/agent-farm/db/migrations.d.ts.map +1 -0
- package/dist/agent-farm/db/migrations.js +530 -0
- package/dist/agent-farm/db/migrations.js.map +1 -0
- package/dist/agent-farm/db/schema.d.ts +1 -1
- package/dist/agent-farm/db/schema.d.ts.map +1 -1
- package/dist/agent-farm/db/schema.js +1 -0
- package/dist/agent-farm/db/schema.js.map +1 -1
- package/dist/agent-farm/db/types.d.ts +22 -0
- package/dist/agent-farm/db/types.d.ts.map +1 -1
- package/dist/agent-farm/db/types.js.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.d.ts.map +1 -1
- package/dist/agent-farm/lib/tunnel-client.js +43 -14
- package/dist/agent-farm/lib/tunnel-client.js.map +1 -1
- package/dist/agent-farm/servers/cron-delivery.d.ts +7 -1
- package/dist/agent-farm/servers/cron-delivery.d.ts.map +1 -1
- package/dist/agent-farm/servers/cron-delivery.js +2 -1
- package/dist/agent-farm/servers/cron-delivery.js.map +1 -1
- package/dist/agent-farm/servers/gate-profiles.d.ts +21 -0
- package/dist/agent-farm/servers/gate-profiles.d.ts.map +1 -1
- package/dist/agent-farm/servers/gate-profiles.js +36 -4
- package/dist/agent-farm/servers/gate-profiles.js.map +1 -1
- package/dist/agent-farm/servers/mailbox-delivery.d.ts +83 -8
- package/dist/agent-farm/servers/mailbox-delivery.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-delivery.js +102 -26
- package/dist/agent-farm/servers/mailbox-delivery.js.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.d.ts +48 -15
- package/dist/agent-farm/servers/mailbox-wiring.d.ts.map +1 -1
- package/dist/agent-farm/servers/mailbox-wiring.js +116 -22
- package/dist/agent-farm/servers/mailbox-wiring.js.map +1 -1
- package/dist/agent-farm/servers/render-gate.d.ts +24 -1
- package/dist/agent-farm/servers/render-gate.d.ts.map +1 -1
- package/dist/agent-farm/servers/render-gate.js +50 -12
- package/dist/agent-farm/servers/render-gate.js.map +1 -1
- package/dist/agent-farm/servers/tower-cron.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-cron.js +3 -2
- package/dist/agent-farm/servers/tower-cron.js.map +1 -1
- package/dist/agent-farm/servers/tower-instances.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-instances.js +11 -3
- package/dist/agent-farm/servers/tower-instances.js.map +1 -1
- package/dist/agent-farm/servers/tower-routes.d.ts +32 -0
- package/dist/agent-farm/servers/tower-routes.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-routes.js +133 -13
- package/dist/agent-farm/servers/tower-routes.js.map +1 -1
- package/dist/agent-farm/servers/tower-server.js +15 -2
- package/dist/agent-farm/servers/tower-server.js.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.d.ts +21 -0
- package/dist/agent-farm/servers/tower-terminals.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-terminals.js +53 -5
- package/dist/agent-farm/servers/tower-terminals.js.map +1 -1
- package/dist/agent-farm/servers/tower-utils.d.ts +35 -0
- package/dist/agent-farm/servers/tower-utils.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-utils.js +39 -0
- package/dist/agent-farm/servers/tower-utils.js.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.d.ts.map +1 -1
- package/dist/agent-farm/servers/tower-websocket.js +8 -1
- package/dist/agent-farm/servers/tower-websocket.js.map +1 -1
- package/dist/agent-farm/utils/message-format.d.ts +78 -2
- package/dist/agent-farm/utils/message-format.d.ts.map +1 -1
- package/dist/agent-farm/utils/message-format.js +102 -5
- package/dist/agent-farm/utils/message-format.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.js +2 -2
- package/dist/commands/generate-image.d.ts +20 -1
- package/dist/commands/generate-image.d.ts.map +1 -1
- package/dist/commands/generate-image.js +188 -1
- package/dist/commands/generate-image.js.map +1 -1
- package/dist/commands/porch/prompts.d.ts.map +1 -1
- package/dist/commands/porch/prompts.js +18 -2
- package/dist/commands/porch/prompts.js.map +1 -1
- package/dist/lib/forge-contracts.d.ts +66 -5
- package/dist/lib/forge-contracts.d.ts.map +1 -1
- package/dist/lib/forge-contracts.js.map +1 -1
- package/dist/lib/forge.d.ts +1 -1
- package/dist/lib/forge.d.ts.map +1 -1
- package/dist/lib/forge.js +33 -11
- package/dist/lib/forge.js.map +1 -1
- package/dist/terminal/pty-manager.d.ts +10 -1
- package/dist/terminal/pty-manager.d.ts.map +1 -1
- package/dist/terminal/pty-manager.js +38 -9
- package/dist/terminal/pty-manager.js.map +1 -1
- package/dist/terminal/pty-session.d.ts +52 -4
- package/dist/terminal/pty-session.d.ts.map +1 -1
- package/dist/terminal/pty-session.js +157 -18
- package/dist/terminal/pty-session.js.map +1 -1
- package/dist/terminal/shellper-client.d.ts +73 -0
- package/dist/terminal/shellper-client.d.ts.map +1 -1
- package/dist/terminal/shellper-client.js +151 -0
- package/dist/terminal/shellper-client.js.map +1 -1
- package/dist/terminal/shellper-main.js +20 -3
- package/dist/terminal/shellper-main.js.map +1 -1
- package/dist/terminal/shellper-process.d.ts +2 -0
- package/dist/terminal/shellper-process.d.ts.map +1 -1
- package/dist/terminal/shellper-process.js +17 -1
- package/dist/terminal/shellper-process.js.map +1 -1
- package/dist/terminal/shellper-protocol.d.ts +28 -0
- package/dist/terminal/shellper-protocol.d.ts.map +1 -1
- package/dist/terminal/shellper-protocol.js.map +1 -1
- package/package.json +4 -4
- package/scripts/forge/gitea/_lib.sh +214 -0
- package/scripts/forge/gitea/issue-comment.sh +8 -1
- package/scripts/forge/gitea/issue-view.sh +95 -4
- package/scripts/forge/gitea/pr-create.sh +155 -0
- package/scripts/forge/gitea/pr-exists.sh +32 -4
- package/scripts/forge/gitea/pr-list.sh +40 -31
- package/scripts/forge/gitea/pr-view.sh +65 -4
- package/scripts/forge/gitea/recently-merged.sh +91 -21
- package/scripts/forge/gitea/user-identity.sh +30 -1
- package/scripts/forge/github/issue-view.sh +5 -2
- package/scripts/forge/github/pr-create.sh +47 -0
- package/scripts/forge/github/pr-search.sh +3 -1
- package/scripts/forge/gitlab/issue-view.sh +24 -4
- package/scripts/forge/gitlab/pr-create.sh +53 -0
- package/scripts/forge/gitlab/pr-search.sh +3 -1
- package/scripts/forge/linear/issue-view.sh +13 -2
- package/skeleton/.claude/skills/generate-image/SKILL.md +22 -1
- package/skeleton/.codex/skills/generate-image/SKILL.md +22 -1
- package/skeleton/protocols/air/prompts/pr.md +6 -1
- package/skeleton/protocols/aspir/prompts/review.md +6 -1
- package/skeleton/protocols/bugfix/prompts/pr.md +6 -1
- package/skeleton/protocols/bugfix/protocol.md +2 -1
- package/skeleton/protocols/maintain/prompts/review.md +6 -1
- package/skeleton/protocols/pir/prompts/review.md +10 -7
- package/skeleton/protocols/spir/prompts/review.md +6 -1
- package/skeleton/resources/commands/agent-farm.md +1 -1
- package/templates/tower.html +16 -1
- package/dashboard-dist/assets/index-BZRTEMtH.css +0 -32
- package/dashboard-dist/assets/index-D3XaKpZW.js.map +0 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* generate-image - AI-powered image generation using Google's Gemini model (Nano Banana Pro)
|
|
3
3
|
*
|
|
4
|
-
* Uses the @google/genai SDK with GEMINI_API_KEY from environment.
|
|
4
|
+
* Uses the @google/genai SDK with GEMINI_API_KEY from environment. Atlas Cloud
|
|
5
|
+
* serves the same model over a submit-then-poll REST API and is available as an
|
|
6
|
+
* opt-in provider with ATLASCLOUD_API_KEY.
|
|
5
7
|
*/
|
|
6
8
|
import { GoogleGenAI } from '@google/genai';
|
|
7
9
|
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
@@ -13,6 +15,24 @@ const MODEL = 'gemini-3-pro-image-preview';
|
|
|
13
15
|
const RESOLUTIONS = ['1K', '2K', '4K'];
|
|
14
16
|
// Valid aspect ratios
|
|
15
17
|
const ASPECT_RATIOS = ['1:1', '16:9', '9:16', '3:4', '4:3', '3:2', '2:3'];
|
|
18
|
+
// Providers serving the same model
|
|
19
|
+
const PROVIDERS = ['gemini', 'atlas'];
|
|
20
|
+
// Atlas Cloud serves the same Nano Banana Pro model over its own async REST API
|
|
21
|
+
const ATLAS_BASE_URL = 'https://api.atlascloud.ai/api/v1/model';
|
|
22
|
+
const ATLAS_MODEL = 'google/nano-banana-pro/text-to-image';
|
|
23
|
+
const ATLAS_POLL_INTERVAL_MS = 5000;
|
|
24
|
+
const ATLAS_TIMEOUT_MS = 300_000;
|
|
25
|
+
// Per-request bounds. ATLAS_TIMEOUT_MS caps the poll loop as a whole, but it is
|
|
26
|
+
// only checked between requests, so each fetch carries its own deadline.
|
|
27
|
+
const ATLAS_REQUEST_TIMEOUT_MS = 30_000;
|
|
28
|
+
const ATLAS_DOWNLOAD_TIMEOUT_MS = 120_000;
|
|
29
|
+
// The only status Atlas documents for a prediction that is still running
|
|
30
|
+
// (https://www.atlascloud.ai/docs/en/predictions lists exactly processing,
|
|
31
|
+
// completed and failed). Anything else is unrecognized and fails, named.
|
|
32
|
+
const ATLAS_IN_PROGRESS_STATUSES = new Set(['processing']);
|
|
33
|
+
// api.atlascloud.ai rejects some clients' default User-Agent with 403 (error
|
|
34
|
+
// code 1010), so every request sends an explicit one.
|
|
35
|
+
const ATLAS_USER_AGENT = 'codev-generate-image/1';
|
|
16
36
|
/**
|
|
17
37
|
* Get the Google GenAI client using API key from environment
|
|
18
38
|
*/
|
|
@@ -38,6 +58,162 @@ function readPrompt(promptOrPath) {
|
|
|
38
58
|
}
|
|
39
59
|
return promptOrPath;
|
|
40
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Check that the downloaded bytes really are an image, and name the file after
|
|
63
|
+
* the container they turned out to be.
|
|
64
|
+
*
|
|
65
|
+
* Atlas serves whatever container the model produced (JPEG for Nano Banana
|
|
66
|
+
* Pro), so writing those bytes into the default `output.png` would mislabel
|
|
67
|
+
* the file. Bytes that are not a recognised image are not written at all: a
|
|
68
|
+
* 200 response carrying an HTML error body must never land in output.png
|
|
69
|
+
* under a green "Image saved". Exits rather than returning on that path.
|
|
70
|
+
*/
|
|
71
|
+
function targetPathForImageBytes(output, bytes) {
|
|
72
|
+
const detected = bytes.subarray(0, 3).toString('hex') === 'ffd8ff'
|
|
73
|
+
? 'jpg'
|
|
74
|
+
: bytes.subarray(0, 8).toString('hex') === '89504e470d0a1a0a'
|
|
75
|
+
? 'png'
|
|
76
|
+
: bytes.subarray(0, 4).toString('ascii') === 'RIFF' &&
|
|
77
|
+
bytes.subarray(8, 12).toString('ascii') === 'WEBP'
|
|
78
|
+
? 'webp'
|
|
79
|
+
: null;
|
|
80
|
+
if (!detected) {
|
|
81
|
+
console.error(chalk.red('Error:') +
|
|
82
|
+
` Atlas returned ${bytes.length} bytes that are not a JPEG, PNG or WebP image` +
|
|
83
|
+
` (starts with ${bytes.subarray(0, 8).toString('hex') || '<empty>'}).` +
|
|
84
|
+
' Nothing was written.');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const current = output.toLowerCase().split('.').pop();
|
|
88
|
+
if (current === detected || (detected === 'jpg' && current === 'jpeg'))
|
|
89
|
+
return output;
|
|
90
|
+
const renamed = output.replace(/\.[^./\\]+$/, '') + '.' + detected;
|
|
91
|
+
console.log(chalk.yellow('Note:') + ` provider returned ${detected.toUpperCase()}; saving as ${renamed}`);
|
|
92
|
+
return renamed;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* One Atlas exchange - connect, stream and parse - under a single deadline.
|
|
96
|
+
*
|
|
97
|
+
* ATLAS_TIMEOUT_MS bounds the poll loop as a whole, but it is only checked
|
|
98
|
+
* between requests: without a signal, a single stalled connection hangs the
|
|
99
|
+
* command forever. The signal also stays armed while the body streams, so the
|
|
100
|
+
* body read belongs inside the guard too - otherwise a poll that answers 200
|
|
101
|
+
* with an HTML error page, or a download aborted mid-stream, escapes as a raw
|
|
102
|
+
* SyntaxError or TimeoutError stack instead of a clear message.
|
|
103
|
+
*/
|
|
104
|
+
async function atlasRequest(url, what, timeoutMs, read, init = {}) {
|
|
105
|
+
// Resolved inside the try, acted on outside it, so that reporting a failure
|
|
106
|
+
// never lands in our own catch.
|
|
107
|
+
let outcome;
|
|
108
|
+
try {
|
|
109
|
+
const response = await fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) });
|
|
110
|
+
outcome = response.ok
|
|
111
|
+
? { ok: true, body: await read(response) }
|
|
112
|
+
: { ok: false, detail: ` (${response.status}): ${await response.text()}` };
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
outcome = {
|
|
116
|
+
ok: false,
|
|
117
|
+
detail: error instanceof Error && error.name === 'TimeoutError'
|
|
118
|
+
? `: no response within ${timeoutMs}ms`
|
|
119
|
+
: `: ${error instanceof Error ? error.message : String(error)}`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
if (!outcome.ok) {
|
|
123
|
+
console.error(chalk.red('Error:') + ` Atlas ${what} failed${outcome.detail}`.trimEnd());
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
return outcome.body;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Generate through Atlas Cloud: submit a job, poll the prediction, download.
|
|
130
|
+
*
|
|
131
|
+
* The cadence and the overall budget are parameters rather than constants so
|
|
132
|
+
* tests can drive the loop without sleeping for real. Nothing but tests passes
|
|
133
|
+
* them; the CLI uses the defaults.
|
|
134
|
+
*/
|
|
135
|
+
export async function generateViaAtlas(promptText, output, aspect, resolution, refs, options = {}) {
|
|
136
|
+
const pollIntervalMs = options.pollIntervalMs ?? ATLAS_POLL_INTERVAL_MS;
|
|
137
|
+
const timeoutMs = options.timeoutMs ?? ATLAS_TIMEOUT_MS;
|
|
138
|
+
// Argument problems are reported before credential problems, so that
|
|
139
|
+
// `--provider atlas --ref x` names the unsupported flag rather than a
|
|
140
|
+
// missing key the user would not have needed anyway.
|
|
141
|
+
if (refs.length > 0) {
|
|
142
|
+
console.error(chalk.red('Error:') +
|
|
143
|
+
' --ref is not supported with --provider atlas (this path is text-to-image only).\n' +
|
|
144
|
+
'Use --provider gemini for reference images.');
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
const apiKey = process.env.ATLASCLOUD_API_KEY;
|
|
148
|
+
if (!apiKey) {
|
|
149
|
+
console.error(chalk.red('Error:') +
|
|
150
|
+
' ATLASCLOUD_API_KEY environment variable not set.\n' +
|
|
151
|
+
'Get an API key at https://www.atlascloud.ai/console');
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
// Measured against the endpoint: aspect_ratio is honoured (1:1 -> 1024x1024,
|
|
155
|
+
// 16:9 -> 1376x768), while 1K/2K/4K has no equivalent field here.
|
|
156
|
+
if (resolution !== '1K') {
|
|
157
|
+
console.log(chalk.yellow('Note:') +
|
|
158
|
+
` --resolution ${resolution} is not exposed by this provider; the model's default resolution is returned.`);
|
|
159
|
+
}
|
|
160
|
+
const headers = {
|
|
161
|
+
Authorization: `Bearer ${apiKey}`,
|
|
162
|
+
'Content-Type': 'application/json',
|
|
163
|
+
'User-Agent': ATLAS_USER_AGENT,
|
|
164
|
+
};
|
|
165
|
+
const submitted = (await atlasRequest(`${ATLAS_BASE_URL}/generateImage`, 'submit', ATLAS_REQUEST_TIMEOUT_MS, (response) => response.json(), {
|
|
166
|
+
method: 'POST',
|
|
167
|
+
headers,
|
|
168
|
+
body: JSON.stringify({ model: ATLAS_MODEL, prompt: promptText, aspect_ratio: aspect }),
|
|
169
|
+
}));
|
|
170
|
+
const predictionId = submitted?.data?.id;
|
|
171
|
+
if (typeof predictionId !== 'string' || predictionId === '') {
|
|
172
|
+
console.error(chalk.red('Error:') + ' Atlas did not return a prediction id');
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
const deadline = Date.now() + timeoutMs;
|
|
176
|
+
for (;;) {
|
|
177
|
+
await new Promise((done) => setTimeout(done, pollIntervalMs));
|
|
178
|
+
// Checked after the sleep, not before it: a pre-sleep check can pass on a
|
|
179
|
+
// budget that expires during the sleep, and then spend a whole further
|
|
180
|
+
// request on it.
|
|
181
|
+
if (Date.now() >= deadline) {
|
|
182
|
+
console.error(chalk.red('Error:') + ` Atlas prediction ${predictionId} timed out after ${timeoutMs}ms`);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
const polled = (await atlasRequest(`${ATLAS_BASE_URL}/prediction/${encodeURIComponent(predictionId)}`, 'poll', ATLAS_REQUEST_TIMEOUT_MS, (response) => response.json(), { headers }));
|
|
186
|
+
const status = polled?.data?.status;
|
|
187
|
+
if (status === 'completed') {
|
|
188
|
+
const url = polled?.data?.outputs?.[0];
|
|
189
|
+
if (typeof url !== 'string' || url === '') {
|
|
190
|
+
console.error(chalk.red('Error:') + ' Atlas completed without an image URL');
|
|
191
|
+
process.exit(1);
|
|
192
|
+
}
|
|
193
|
+
// No Atlas headers here: the CDN is a different origin and must never
|
|
194
|
+
// see the API key.
|
|
195
|
+
const bytes = Buffer.from(await atlasRequest(url, 'image download', ATLAS_DOWNLOAD_TIMEOUT_MS, (response) => response.arrayBuffer()));
|
|
196
|
+
const target = targetPathForImageBytes(output, bytes);
|
|
197
|
+
writeFileSync(target, bytes);
|
|
198
|
+
console.log(chalk.green('Image saved to') + ` ${target}`);
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (status === 'failed') {
|
|
202
|
+
const detail = polled?.data?.error;
|
|
203
|
+
console.error(chalk.red('Error:') +
|
|
204
|
+
` Atlas generation failed: ${typeof detail === 'string' && detail !== '' ? detail : 'unknown'}`);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
if (typeof status !== 'string' || !ATLAS_IN_PROGRESS_STATUSES.has(status)) {
|
|
208
|
+
// Polling on past a status we don't understand burns the full timeout and
|
|
209
|
+
// then reports it as one, which is a lie about what happened.
|
|
210
|
+
console.error(chalk.red('Error:') +
|
|
211
|
+
` Atlas prediction ${predictionId} reported an unrecognized status: ` +
|
|
212
|
+
(status === undefined ? '(none)' : String(status)));
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
41
217
|
/**
|
|
42
218
|
* Main generate-image function
|
|
43
219
|
*/
|
|
@@ -48,6 +224,12 @@ export async function generateImage(prompt, options) {
|
|
|
48
224
|
const resolution = (options.resolution || '1K');
|
|
49
225
|
const aspect = (options.aspect || '1:1');
|
|
50
226
|
const refs = options.ref || [];
|
|
227
|
+
const provider = (options.provider || 'gemini');
|
|
228
|
+
// Validate provider
|
|
229
|
+
if (!PROVIDERS.includes(provider)) {
|
|
230
|
+
console.error(chalk.red('Error:') + ` Invalid provider '${provider}'. Use: ${PROVIDERS.join(', ')}`);
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
51
233
|
// Validate resolution
|
|
52
234
|
if (!RESOLUTIONS.includes(resolution)) {
|
|
53
235
|
console.error(chalk.red('Error:') +
|
|
@@ -78,6 +260,11 @@ export async function generateImage(prompt, options) {
|
|
|
78
260
|
}
|
|
79
261
|
// Read prompt
|
|
80
262
|
const promptText = readPrompt(prompt);
|
|
263
|
+
if (provider === 'atlas') {
|
|
264
|
+
console.log(chalk.blue('Generating image with') + ` ${ATLAS_MODEL} (Atlas Cloud)...`);
|
|
265
|
+
await generateViaAtlas(promptText, output, aspect, resolution, refs);
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
81
268
|
console.log(chalk.blue('Generating image with') + ` ${MODEL}...`);
|
|
82
269
|
// Create client
|
|
83
270
|
const client = getClient();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../src/commands/generate-image.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../src/commands/generate-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAA6C,MAAM,YAAY,CAAC;AAIpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/commands/porch/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAA6C,MAAM,YAAY,CAAC;AAIpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAMvD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyC/H;AA6ID;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAUjE;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAoFjB"}
|
|
@@ -13,6 +13,7 @@ import { getPhaseConfig, isPhased, isBuildVerify, getBuildConfig } from './proto
|
|
|
13
13
|
import { findPlanFile, getCurrentPlanPhase, getPhaseContent } from './plan.js';
|
|
14
14
|
import { getProjectDir, resolveArtifactBaseName } from './state.js';
|
|
15
15
|
import { fetchIssue } from '../../lib/github.js';
|
|
16
|
+
import { getForgeCommand, loadForgeConfig } from '../../lib/forge.js';
|
|
16
17
|
import { resolveCodevFile, resolveCodevIncludes } from '../../lib/skeleton.js';
|
|
17
18
|
import { readHotTierFiles } from '../../lib/managed-block.js';
|
|
18
19
|
/**
|
|
@@ -81,16 +82,31 @@ function loadPromptFile(workspaceRoot, protocolName, promptFile) {
|
|
|
81
82
|
// committed copy. Mirrors the spawn-side protocol.md inlining. #1011.
|
|
82
83
|
return resolveCodevIncludes(fs.readFileSync(resolved, 'utf-8'), workspaceRoot);
|
|
83
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Resolve the `pr-create` concept command for the PR-opening prompts.
|
|
87
|
+
*
|
|
88
|
+
* Mirrors the `pr-merge` injection in porch/next.ts. Prompts must not hardcode
|
|
89
|
+
* `gh pr create`: a project with `forge.provider` set would otherwise shell out
|
|
90
|
+
* to `gh` at the single most important write in the protocol (#1455).
|
|
91
|
+
*/
|
|
92
|
+
function resolvePrCreateCommand(workspaceRoot) {
|
|
93
|
+
const command = getForgeCommand('pr-create', loadForgeConfig(workspaceRoot));
|
|
94
|
+
// The disabled form must FAIL, not comment: a `# …` line is valid shell that
|
|
95
|
+
// exits 0, so an agent running the block would read "PR opened" from silence.
|
|
96
|
+
return (command ??
|
|
97
|
+
"{ echo 'pr-create is disabled for this forge — open the PR manually' >&2; false; }");
|
|
98
|
+
}
|
|
84
99
|
/**
|
|
85
100
|
* Substitute template variables in a prompt.
|
|
86
101
|
*/
|
|
87
|
-
function substituteVariables(prompt, state, artifactBaseName, planPhase, summary) {
|
|
102
|
+
function substituteVariables(prompt, state, artifactBaseName, workspaceRoot, planPhase, summary) {
|
|
88
103
|
const variables = {
|
|
89
104
|
project_id: state.id,
|
|
90
105
|
title: state.title,
|
|
91
106
|
artifact_name: artifactBaseName,
|
|
92
107
|
current_state: state.phase,
|
|
93
108
|
protocol: state.protocol,
|
|
109
|
+
pr_create_command: resolvePrCreateCommand(workspaceRoot),
|
|
94
110
|
};
|
|
95
111
|
// Add summary/goal if available
|
|
96
112
|
if (summary) {
|
|
@@ -233,7 +249,7 @@ export async function buildPhasePrompt(workspaceRoot, state, protocol, resolver)
|
|
|
233
249
|
const promptFileName = buildConfig?.prompt || `${state.phase}.md`;
|
|
234
250
|
const promptContent = loadPromptFile(workspaceRoot, state.protocol, promptFileName);
|
|
235
251
|
if (promptContent) {
|
|
236
|
-
let result = substituteVariables(promptContent, state, artifactBaseName, currentPlanPhase, summary);
|
|
252
|
+
let result = substituteVariables(promptContent, state, artifactBaseName, workspaceRoot, currentPlanPhase, summary);
|
|
237
253
|
// Add goal/summary header if available
|
|
238
254
|
if (summary) {
|
|
239
255
|
result = `## Goal\n\n${summary}\n\n---\n\n` + result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/porch/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,aAAqB,EAAE,SAAiB,EAAE,YAAqB;IACrG,mFAAmF;IACnF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACvC,iEAAiE;YACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC9B,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACrC,4EAA4E;gBAC5E,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,CAAC,QAAQ;oBAAE,OAAO,KAAK,CAAC;gBAC5B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;gBAC/D,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;gBACzD,OAAO,gBAAgB,KAAK,YAAY,CAAC;YAC3C,CAAC,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;gBACxE,wBAAwB;gBACxB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACxE,IAAI,YAAY,EAAE,CAAC;oBACjB,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,aAAqB,EAAE,YAAoB,EAAE,UAAkB;IACrF,MAAM,YAAY,GAAG,aAAa,YAAY,YAAY,UAAU,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,2EAA2E;IAC3E,wEAAwE;IACxE,sEAAsE;IACtE,sEAAsE;IACtE,OAAO,oBAAoB,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,MAAc,EACd,KAAmB,EACnB,gBAAwB,EACxB,SAA4B,EAC5B,OAAuB;IAEvB,MAAM,SAAS,GAA2B;QACxC,UAAU,EAAE,KAAK,CAAC,EAAE;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,aAAa,EAAE,gBAAgB;QAC/B,aAAa,EAAE,KAAK,CAAC,KAAK;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/commands/porch/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,46 @@ export interface IssueViewResult {
|
|
|
24
24
|
* forge-neutral (a forge script that doesn't emit it degrades gracefully).
|
|
25
25
|
*/
|
|
26
26
|
url?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Login/handle of the user who opened the issue, when the forge concept
|
|
29
|
+
* supplies it: GitHub `author.login`, GitLab `author.username`, Gitea
|
|
30
|
+
* `user.login`, Linear `creator.displayName`. Optional so the contract
|
|
31
|
+
* stays forge-neutral — a forge/script that omits it degrades gracefully
|
|
32
|
+
* (the consumer drops the "opened by" attribution).
|
|
33
|
+
*/
|
|
34
|
+
author?: {
|
|
35
|
+
login: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* ISO 8601 creation timestamp, when the forge concept supplies it. Optional
|
|
39
|
+
* for forge-neutral degradation, same as `url`.
|
|
40
|
+
*/
|
|
41
|
+
createdAt?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Assignee logins/handles, when the forge concept supplies them: absent when
|
|
44
|
+
* the forge doesn't expose them, empty when the issue is unassigned. Optional
|
|
45
|
+
* per the forge-neutral degradation contract.
|
|
46
|
+
*/
|
|
47
|
+
assignees?: Array<{
|
|
48
|
+
login: string;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Issue labels, when the forge concept supplies them: absent when the forge
|
|
52
|
+
* doesn't expose labels, empty when the issue has none. Optional per the
|
|
53
|
+
* forge-neutral degradation contract.
|
|
54
|
+
*/
|
|
55
|
+
labels?: Array<{
|
|
56
|
+
name: string;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* The issue's milestone, when set. GitHub emits a literal `null` when the
|
|
60
|
+
* issue has no milestone (hence `| null`, not merely optional); consumers
|
|
61
|
+
* guard on `milestone?.title`, so both absent and null render nothing.
|
|
62
|
+
* Optional/nullable per the forge-neutral degradation contract.
|
|
63
|
+
*/
|
|
64
|
+
milestone?: {
|
|
65
|
+
title: string;
|
|
66
|
+
} | null;
|
|
27
67
|
comments: Array<{
|
|
28
68
|
body: string;
|
|
29
69
|
createdAt: string;
|
|
@@ -74,13 +114,17 @@ export interface PrListItem {
|
|
|
74
114
|
login: string;
|
|
75
115
|
};
|
|
76
116
|
/**
|
|
77
|
-
* Logins of users requested as reviewers.
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* Consumed by the VSCode PR
|
|
117
|
+
* Logins of users requested as reviewers. Every preset populates it for real:
|
|
118
|
+
* GitHub flattens gh's reviewer objects to logins, GitLab maps glab's
|
|
119
|
+
* `.reviewers[].username`, and Gitea maps the REST `requested_reviewers[]`
|
|
120
|
+
* (team reviewers carry no login and are dropped). Consumed by the VSCode PR
|
|
121
|
+
* sidebar to bucket "review-requested" PRs.
|
|
81
122
|
*/
|
|
82
123
|
reviewRequests: string[];
|
|
83
|
-
/**
|
|
124
|
+
/**
|
|
125
|
+
* Whether the PR is a draft. Every preset reports it for real — GitLab from
|
|
126
|
+
* the merge request's `draft`/WIP flag, Gitea from the REST `draft` flag.
|
|
127
|
+
*/
|
|
84
128
|
isDraft: boolean;
|
|
85
129
|
}
|
|
86
130
|
/** Output of the `pr-list` concept command. */
|
|
@@ -127,6 +171,23 @@ export interface PrViewResult {
|
|
|
127
171
|
additions: number;
|
|
128
172
|
deletions: number;
|
|
129
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* Output of the `pr-create` concept command.
|
|
176
|
+
*
|
|
177
|
+
* Inputs are environment variables, like every other concept:
|
|
178
|
+
* `CODEV_PR_TITLE` (required), `CODEV_PR_BODY` (required — set it to `''` for
|
|
179
|
+
* an empty body; an *absent* one is rejected rather than silently posting a
|
|
180
|
+
* bodyless PR), and the optional `CODEV_PR_BASE`, `CODEV_PR_HEAD`,
|
|
181
|
+
* `CODEV_PR_REPO`, `CODEV_PR_DRAFT`. The gitea script also reads the optional
|
|
182
|
+
* `CODEV_PR_LOGIN` (tea's `--login`, for multi-login hosts). A failed creation
|
|
183
|
+
* exits non-zero rather than emitting JSON.
|
|
184
|
+
*/
|
|
185
|
+
export interface PrCreateResult {
|
|
186
|
+
/** The created PR's number (`iid` on GitLab, `index` on Gitea). */
|
|
187
|
+
number: number;
|
|
188
|
+
/** The created PR's **browser/web** URL — never an API endpoint. */
|
|
189
|
+
url: string;
|
|
190
|
+
}
|
|
130
191
|
/** Output of the `pr-diff` concept command: raw diff text, not JSON. */
|
|
131
192
|
/** Output of the `pr-merge` concept command: exit code only, no JSON. */
|
|
132
193
|
/** Output of the `user-identity` concept command: plain string (username). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-contracts.d.ts","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,kDAAkD;AAClD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KAC3B,CAAC,CAAC;CACJ;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG,aAAa,EAAE,CAAC;AAE9C,uDAAuD;AACvD,MAAM,MAAM,oBAAoB,GAAG,aAAa,EAAE,CAAC;AAEnD,8EAA8E;AAO9E,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3B
|
|
1
|
+
{"version":3,"file":"forge-contracts.d.ts","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge-contracts.js","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;
|
|
1
|
+
{"version":3,"file":"forge-contracts.js","sourceRoot":"","sources":["../../src/lib/forge-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;;AAuLH,wEAAwE;AACxE,uDAAuD;AAEvD,yEAAyE;AACzE,8DAA8D;AAE9D,gFAAgF;AAChF,2BAA2B;AAC3B,gFAAgF;AAEhF,8EAA8E;AAC9E,+CAA+C;AAE/C,2EAA2E;AAC3E,mEAAmE;AACnE,8CAA8C;AAE9C,8EAA8E;AAC9E,0EAA0E;AAC1E,yCAAyC;AAEzC,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,mEAAmE;AACnE,6DAA6D"}
|
package/dist/lib/forge.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export interface ConceptResolution {
|
|
|
39
39
|
executable: string | null;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
|
-
* Resolve
|
|
42
|
+
* Resolve every known concept with its source and executable.
|
|
43
43
|
* Used by `codev doctor` for full concept reporting.
|
|
44
44
|
*/
|
|
45
45
|
export declare function resolveAllConcepts(forgeConfig?: ForgeConfig | null): ConceptResolution[];
|
package/dist/lib/forge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge.d.ts","sourceRoot":"","sources":["../../src/lib/forge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA8BH,oGAAoG;AACpG,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,uEAAuE;IACvE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"forge.d.ts","sourceRoot":"","sources":["../../src/lib/forge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA8BH,oGAAoG;AACpG,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACjC,uEAAuE;IACvE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAiFD,gCAAgC;AAChC,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED,+CAA+C;AAC/C,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,iBAAiB,EAAE,CA4BxF;AAqED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAGzE;AAUD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAC/B,MAAM,GAAG,IAAI,CAgBf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,GAC/B,OAAO,CAGT;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAuBzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,GAAG,IAAI,CAyBhB;AAoDD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,GACvB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,iBAAiB,GAAG,eAAe,GAAG,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CA2BtH"}
|
package/dist/lib/forge.js
CHANGED
|
@@ -36,7 +36,7 @@ const DEFAULT_MAX_BUFFER = 10 * 1024 * 1024;
|
|
|
36
36
|
const KNOWN_CONCEPTS = [
|
|
37
37
|
'issue-view', 'pr-list', 'issue-list', 'issue-search', 'issue-comment', 'pr-exists',
|
|
38
38
|
'recently-closed', 'recently-merged', 'user-identity', 'team-activity',
|
|
39
|
-
'on-it-timestamps', 'pr-merge', 'pr-search', 'pr-view', 'pr-diff',
|
|
39
|
+
'on-it-timestamps', 'pr-create', 'pr-merge', 'pr-search', 'pr-view', 'pr-diff',
|
|
40
40
|
'auth-status', 'repo-archive',
|
|
41
41
|
];
|
|
42
42
|
// =============================================================================
|
|
@@ -94,6 +94,10 @@ function getProviderPresets() {
|
|
|
94
94
|
github: getDefaultCommands(),
|
|
95
95
|
gitlab: buildPresetFromScripts('gitlab', ['team-activity', 'on-it-timestamps']),
|
|
96
96
|
gitea: buildPresetFromScripts('gitea', ['team-activity', 'on-it-timestamps', 'pr-search', 'pr-diff']),
|
|
97
|
+
// Linear is a hybrid forge (spec 719): it owns *issues*, while every PR
|
|
98
|
+
// concept — pr-create included — deliberately falls through to the github
|
|
99
|
+
// default. Disabling pr-create here would leave Linear the one provider
|
|
100
|
+
// that can merge a PR but not open one.
|
|
97
101
|
linear: buildPresetFromScripts('linear', ['team-activity', 'on-it-timestamps']),
|
|
98
102
|
};
|
|
99
103
|
return _providerPresets;
|
|
@@ -103,7 +107,7 @@ export function getKnownProviders() {
|
|
|
103
107
|
return Object.keys(getProviderPresets());
|
|
104
108
|
}
|
|
105
109
|
/**
|
|
106
|
-
* Resolve
|
|
110
|
+
* Resolve every known concept with its source and executable.
|
|
107
111
|
* Used by `codev doctor` for full concept reporting.
|
|
108
112
|
*/
|
|
109
113
|
export function resolveAllConcepts(forgeConfig) {
|
|
@@ -141,12 +145,22 @@ export function resolveAllConcepts(forgeConfig) {
|
|
|
141
145
|
*
|
|
142
146
|
* For inline commands: handles `if [ ... ]; then cmd ...` patterns and pipes.
|
|
143
147
|
*/
|
|
148
|
+
/** Shell builtins and keywords that are never the executable a concept needs on PATH. */
|
|
149
|
+
const SHELL_BUILTINS = ['if', 'then', 'else', 'fi', 'test', '[', '[[', 'set', 'export', 'readonly', 'local', 'shift', ':', '.', 'source'];
|
|
144
150
|
function extractExecutable(command) {
|
|
145
151
|
const trimmed = command.trim();
|
|
146
152
|
// Script path: read and extract the underlying tool
|
|
147
153
|
if (trimmed.endsWith('.sh') && existsSync(trimmed)) {
|
|
148
154
|
try {
|
|
149
155
|
const content = readFileSync(trimmed, 'utf-8');
|
|
156
|
+
// An explicit `# forge-executable: <tool>` declaration wins. The heuristic
|
|
157
|
+
// below reads the first substantive line, which is wrong for any script
|
|
158
|
+
// that opens with `set -e` or an input guard — it would tell `codev
|
|
159
|
+
// doctor` to look for `set` or `echo` instead of `gh`/`tea`/`glab`, and a
|
|
160
|
+
// missing forge CLI would go unreported (#1455).
|
|
161
|
+
const declared = content.match(/^#\s*forge-executable:\s*(\S+)/m);
|
|
162
|
+
if (declared)
|
|
163
|
+
return declared[1];
|
|
150
164
|
// Look for `exec <tool>` or first non-comment, non-shebang, non-blank line
|
|
151
165
|
for (const line of content.split('\n')) {
|
|
152
166
|
const l = line.trim();
|
|
@@ -155,9 +169,12 @@ function extractExecutable(command) {
|
|
|
155
169
|
const execMatch = l.match(/^exec\s+(\S+)/);
|
|
156
170
|
if (execMatch)
|
|
157
171
|
return execMatch[1];
|
|
158
|
-
// First substantive command
|
|
172
|
+
// First substantive command. Shell builtins are skipped, not returned:
|
|
173
|
+
// a script opening with `set -e` would otherwise report `set` as its
|
|
174
|
+
// executable, and `codev doctor` would then warn that `set` is missing
|
|
175
|
+
// instead of checking for the real CLI (#1455).
|
|
159
176
|
const token = l.split(/\s+/)[0];
|
|
160
|
-
if (token && !
|
|
177
|
+
if (token && !SHELL_BUILTINS.includes(token)) {
|
|
161
178
|
return token;
|
|
162
179
|
}
|
|
163
180
|
}
|
|
@@ -172,13 +189,18 @@ function extractExecutable(command) {
|
|
|
172
189
|
const thenMatch = trimmed.match(/then\s+(\S+)/);
|
|
173
190
|
if (thenMatch)
|
|
174
191
|
return thenMatch[1];
|
|
175
|
-
//
|
|
176
|
-
|
|
177
|
-
//
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
192
|
+
// First substantive segment of a pipe/sequence. Builtins are *skipped*, not
|
|
193
|
+
// returned as null: `doctor` treats a null executable as "nothing to check"
|
|
194
|
+
// (doctor.ts, `execInstalled`), so bailing at the first builtin would report
|
|
195
|
+
// `. env.sh; gh issue view "$1"` as healthy without ever checking for `gh` —
|
|
196
|
+
// the silent success #1455 is about, inside the reporter for it. This mirrors
|
|
197
|
+
// the script-file branch above, which also scans past builtins to the real CLI.
|
|
198
|
+
for (const segment of trimmed.split(/[|;]/)) {
|
|
199
|
+
const token = segment.trim().split(/\s+/)[0];
|
|
200
|
+
if (token && !SHELL_BUILTINS.includes(token))
|
|
201
|
+
return token;
|
|
202
|
+
}
|
|
203
|
+
return null;
|
|
182
204
|
}
|
|
183
205
|
// =============================================================================
|
|
184
206
|
// Configuration loading
|