@forge/cli 12.5.2-next.0-experimental-553df98 → 12.5.2-next.2
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/CHANGELOG.md +20 -7
- package/npm-shrinkwrap.json +38 -38
- package/out/autocomplete/autocomplete-config.json +3 -20
- package/out/command-line/command.js +1 -1
- package/out/command-line/command.js.map +1 -1
- package/out/command-line/dependency-injection.d.ts +1 -2
- package/out/command-line/dependency-injection.d.ts.map +1 -1
- package/out/command-line/dependency-injection.js +1 -2
- package/out/command-line/dependency-injection.js.map +1 -1
- package/out/command-line/index.d.ts.map +1 -1
- package/out/command-line/index.js +0 -2
- package/out/command-line/index.js.map +1 -1
- package/out/command-line/register-app-commands.d.ts.map +1 -1
- package/out/command-line/register-app-commands.js +11 -87
- package/out/command-line/register-app-commands.js.map +1 -1
- package/out/command-line/register-installation-commands.d.ts.map +1 -1
- package/out/command-line/register-installation-commands.js +2 -3
- package/out/command-line/register-installation-commands.js.map +1 -1
- package/out/installations/installation-helper.d.ts.map +1 -1
- package/out/installations/installation-helper.js +1 -2
- package/out/installations/installation-helper.js.map +1 -1
- package/package.json +6 -6
- package/out/command-line/register-rovo-new-command.d.ts +0 -3
- package/out/command-line/register-rovo-new-command.d.ts.map +0 -1
- package/out/command-line/register-rovo-new-command.js +0 -117
- package/out/command-line/register-rovo-new-command.js.map +0 -1
- package/out/experimental/minimal-scaffolder.d.ts +0 -7
- package/out/experimental/minimal-scaffolder.d.ts.map +0 -1
- package/out/experimental/minimal-scaffolder.js +0 -91
- package/out/experimental/minimal-scaffolder.js.map +0 -1
- package/out/experimental/rovo-generator.d.ts +0 -22
- package/out/experimental/rovo-generator.d.ts.map +0 -1
- package/out/experimental/rovo-generator.js +0 -337
- package/out/experimental/rovo-generator.js.map +0 -1
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RovoCodegenService = exports.JIRA_MODULES = void 0;
|
|
4
|
-
const child_process_1 = require("child_process");
|
|
5
|
-
exports.JIRA_MODULES = {
|
|
6
|
-
'jira:issuePanel': {
|
|
7
|
-
key: 'jira:issuePanel',
|
|
8
|
-
name: 'Issue Panel',
|
|
9
|
-
description: 'Add detailed panels to the issue view',
|
|
10
|
-
hasCustomUI: true
|
|
11
|
-
},
|
|
12
|
-
'jira:issueGlance': {
|
|
13
|
-
key: 'jira:issueGlance',
|
|
14
|
-
name: 'Issue Glance',
|
|
15
|
-
description: 'Add toggleable issue glances',
|
|
16
|
-
hasCustomUI: true
|
|
17
|
-
},
|
|
18
|
-
'jira:issueAction': {
|
|
19
|
-
key: 'jira:issueAction',
|
|
20
|
-
name: 'Issue Action',
|
|
21
|
-
description: 'Add menu items to the issue view',
|
|
22
|
-
hasCustomUI: false
|
|
23
|
-
},
|
|
24
|
-
'jira:issueContext': {
|
|
25
|
-
key: 'jira:issueContext',
|
|
26
|
-
name: 'Issue Context',
|
|
27
|
-
description: 'Add collapsible panels to the issue view',
|
|
28
|
-
hasCustomUI: true
|
|
29
|
-
},
|
|
30
|
-
'jira:globalPage': {
|
|
31
|
-
key: 'jira:globalPage',
|
|
32
|
-
name: 'Global Page',
|
|
33
|
-
description: 'Add items to main navigation',
|
|
34
|
-
hasCustomUI: true
|
|
35
|
-
},
|
|
36
|
-
'jira:projectPage': {
|
|
37
|
-
key: 'jira:projectPage',
|
|
38
|
-
name: 'Project Page',
|
|
39
|
-
description: 'Add custom project pages',
|
|
40
|
-
hasCustomUI: true
|
|
41
|
-
},
|
|
42
|
-
'jira:adminPage': {
|
|
43
|
-
key: 'jira:adminPage',
|
|
44
|
-
name: 'Admin Page',
|
|
45
|
-
description: 'Add items to Apps section in admin settings',
|
|
46
|
-
hasCustomUI: true
|
|
47
|
-
},
|
|
48
|
-
'jira:dashboardGadget': {
|
|
49
|
-
key: 'jira:dashboardGadget',
|
|
50
|
-
name: 'Dashboard Gadget',
|
|
51
|
-
description: 'Create dashboard gadgets',
|
|
52
|
-
hasCustomUI: true
|
|
53
|
-
},
|
|
54
|
-
'jira:customField': {
|
|
55
|
-
key: 'jira:customField',
|
|
56
|
-
name: 'Custom Field',
|
|
57
|
-
description: 'Create new custom fields for issues',
|
|
58
|
-
hasCustomUI: true
|
|
59
|
-
},
|
|
60
|
-
'jira:jqlFunction': {
|
|
61
|
-
key: 'jira:jqlFunction',
|
|
62
|
-
name: 'JQL Function',
|
|
63
|
-
description: 'Define custom JQL functions',
|
|
64
|
-
hasCustomUI: false
|
|
65
|
-
},
|
|
66
|
-
'jira:issueActivity': {
|
|
67
|
-
key: 'jira:issueActivity',
|
|
68
|
-
name: 'Issue Activity',
|
|
69
|
-
description: 'Adds a item to the Activity panel of Jira issues',
|
|
70
|
-
hasCustomUI: false
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
class RovoCodegenService {
|
|
74
|
-
buildPrompt(moduleType, moduleName, functionName, customPrompt) {
|
|
75
|
-
const moduleDef = exports.JIRA_MODULES[moduleType];
|
|
76
|
-
if (!moduleDef) {
|
|
77
|
-
throw new Error(`Unsupported module type: ${moduleType}`);
|
|
78
|
-
}
|
|
79
|
-
const basePrompt = moduleDef.hasCustomUI
|
|
80
|
-
? this.buildUIPrompt(moduleType, moduleDef.name, moduleDef.description, moduleName, functionName)
|
|
81
|
-
: this.buildActionPrompt(moduleType, moduleDef.name, moduleDef.description, moduleName, functionName);
|
|
82
|
-
let prompt = customPrompt
|
|
83
|
-
? `${basePrompt}\n\nCustom Requirements:\n${this.interpolate(customPrompt, {
|
|
84
|
-
moduleType,
|
|
85
|
-
moduleName,
|
|
86
|
-
functionName,
|
|
87
|
-
moduleDescription: moduleDef.description,
|
|
88
|
-
displayName: moduleDef.name
|
|
89
|
-
})}`
|
|
90
|
-
: basePrompt;
|
|
91
|
-
if (process.env.FORGE_ROVO_DIAG === '1') {
|
|
92
|
-
prompt += `\n\nDiagnostic:\n- At the very top of the output file, add a single-line comment strictly in this format:\n// ROVO_DIAG tools=<list or unknown> using_mcp=<true|false|unknown>\n- Then continue with the rest of the code as normal.`;
|
|
93
|
-
}
|
|
94
|
-
return prompt;
|
|
95
|
-
}
|
|
96
|
-
buildCreatePrompt(appName, userDescription) {
|
|
97
|
-
let prompt = `You are helping create an Atlassian Forge app named "${appName}".
|
|
98
|
-
|
|
99
|
-
User description:
|
|
100
|
-
${userDescription}
|
|
101
|
-
|
|
102
|
-
Goals:
|
|
103
|
-
- Infer the correct Forge module type(s) from the description (e.g., jira:issuePanel, jira:globalPage, etc.).
|
|
104
|
-
- Generate a simple, working app implementation using the latest Forge UI Kit 2 (use Frame component if appropriate).
|
|
105
|
-
- Keep it simple to help the user get started; favor small, readable code.
|
|
106
|
-
|
|
107
|
-
Technical Requirements:
|
|
108
|
-
- Use @forge/resolver and @forge/react components where appropriate. Prefer simple components such as Text, Strong, Fragment, etc.
|
|
109
|
-
- Include any necessary resolver function(s) and minimal, helpful comments.
|
|
110
|
-
- Update manifest.yml with the selected module(s), function(s), and any required permissions/properties.
|
|
111
|
-
- Write code files into the src/ directory.
|
|
112
|
-
- Do not print full code to stdout; write files instead and only print minimal status.`;
|
|
113
|
-
if (process.env.FORGE_ROVO_DIAG === '1') {
|
|
114
|
-
prompt += `\n\nDiagnostic:\n- Add at top of the main file a comment: // ROVO_DIAG using_mcp=<true|false|unknown>`;
|
|
115
|
-
}
|
|
116
|
-
return prompt;
|
|
117
|
-
}
|
|
118
|
-
async generateResolverCode(moduleType, moduleName, functionName, customPrompt, callbacks) {
|
|
119
|
-
const moduleDef = exports.JIRA_MODULES[moduleType];
|
|
120
|
-
if (!moduleDef) {
|
|
121
|
-
throw new Error(`Unsupported module type: ${moduleType}`);
|
|
122
|
-
}
|
|
123
|
-
const basePrompt = moduleDef.hasCustomUI
|
|
124
|
-
? this.buildUIPrompt(moduleType, moduleDef.name, moduleDef.description, moduleName, functionName)
|
|
125
|
-
: this.buildActionPrompt(moduleType, moduleDef.name, moduleDef.description, moduleName, functionName);
|
|
126
|
-
let prompt = customPrompt
|
|
127
|
-
? `${basePrompt}\n\nCustom Requirements:\n${this.interpolate(customPrompt, {
|
|
128
|
-
moduleType,
|
|
129
|
-
moduleName,
|
|
130
|
-
functionName,
|
|
131
|
-
moduleDescription: moduleDef.description,
|
|
132
|
-
displayName: moduleDef.name
|
|
133
|
-
})}`
|
|
134
|
-
: basePrompt;
|
|
135
|
-
if (process.env.FORGE_ROVO_DIAG === '1') {
|
|
136
|
-
prompt += `\n\nDiagnostic:\n- At the very top of the output file, add a single-line comment strictly in this format:\n// ROVO_DIAG tools=<list or unknown> using_mcp=<true|false|unknown>\n- Then continue with the rest of the code as normal.`;
|
|
137
|
-
}
|
|
138
|
-
try {
|
|
139
|
-
return await this.runRovodev(prompt, callbacks);
|
|
140
|
-
}
|
|
141
|
-
catch (e) {
|
|
142
|
-
return moduleDef.hasCustomUI
|
|
143
|
-
? this.fallbackUICode(moduleType, moduleDef.name, moduleName, functionName)
|
|
144
|
-
: this.fallbackActionCode(moduleType, moduleDef.name, moduleName, functionName);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
interpolate(template, vars) {
|
|
148
|
-
return template.replace(/\{(\w+)\}/g, (_, k) => vars[k] ?? `{${k}}`);
|
|
149
|
-
}
|
|
150
|
-
buildUIPrompt(moduleType, displayName, moduleDescription, moduleName, functionName) {
|
|
151
|
-
return `Generate a complete Forge resolver JavaScript file for a ${moduleType} (${displayName}) module named "${moduleName}" and update manifest.yml.
|
|
152
|
-
|
|
153
|
-
Technical Requirements:
|
|
154
|
-
- Use the latest Forge UI Kit 2 with the Frame component (if required) as your default UI approach
|
|
155
|
-
- Use @forge/resolver and @forge/react components where appropriate. Simple components like Text, Strong, Fragment, etc. are preferred over custom components.
|
|
156
|
-
- Function name: ${functionName}
|
|
157
|
-
- Include proper imports for Resolver and React components (Text, Strong, Fragment, etc.)
|
|
158
|
-
- Include context access examples (issueId, projectId, userId) where relevant
|
|
159
|
-
- Use modern React patterns with hooks if appropriate
|
|
160
|
-
- Add helpful comments explaining the code
|
|
161
|
-
- Export the handler properly
|
|
162
|
-
- Keep it simple with the purpose of helping you get started with Forge
|
|
163
|
-
- Include examples of how to access Jira/Confluence API if relevant
|
|
164
|
-
- The code should be complete, runnable, and demonstrate best practices for ${moduleDescription}
|
|
165
|
-
- Update manifest.yml to include the new ${moduleType} module with key "${moduleName}" and function "${functionName} "and any additional properties that are required for the module to work properly including permissions`;
|
|
166
|
-
}
|
|
167
|
-
buildActionPrompt(moduleType, displayName, moduleDescription, moduleName, functionName) {
|
|
168
|
-
return `Generate a complete Forge resolver JavaScript file for a ${moduleType} (${displayName}) action module named "${moduleName}" and update manifest.yml.
|
|
169
|
-
|
|
170
|
-
Technical Requirements:
|
|
171
|
-
- Use @forge/resolver for action handling
|
|
172
|
-
- Function name: ${functionName}
|
|
173
|
-
- Include proper imports for Resolver and any needed Forge APIs
|
|
174
|
-
- Include context access (issueId, projectId, userId, etc.) where relevant
|
|
175
|
-
- Use Forge API calls to interact with Jira/Confluence data if appropriate
|
|
176
|
-
- Return meaningful success/error responses
|
|
177
|
-
- Add helpful comments explaining the action logic
|
|
178
|
-
- Export the handler properly
|
|
179
|
-
- Keep it simple with the purpose of helping you get started with Forge
|
|
180
|
-
- The code should be complete, runnable, and demonstrate best practices for ${moduleDescription}
|
|
181
|
-
- Focus on server-side logic rather than UI components
|
|
182
|
-
- Update manifest.yml to include the new ${moduleType} module with key "${moduleName}" and function "${functionName}" and any additional properties that are required for the module to work properly including permissions`;
|
|
183
|
-
}
|
|
184
|
-
runRovodev(prompt, callbacks) {
|
|
185
|
-
return new Promise((resolve, reject) => {
|
|
186
|
-
try {
|
|
187
|
-
const nodePty = require('node-pty');
|
|
188
|
-
const pty = nodePty.spawn('acli', ['rovodev', prompt], {
|
|
189
|
-
name: 'xterm-256color',
|
|
190
|
-
cols: process.stdout.isTTY ? process.stdout.columns : 80,
|
|
191
|
-
rows: process.stdout.isTTY ? process.stdout.rows : 24,
|
|
192
|
-
cwd: process.cwd(),
|
|
193
|
-
env: { ...process.env, TERM: process.env.TERM || 'xterm-256color' }
|
|
194
|
-
});
|
|
195
|
-
const timeoutMsRaw = Number(process.env.FORGE_ROVO_TIMEOUT_MS ?? 600000);
|
|
196
|
-
const timeoutMs = Number.isFinite(timeoutMsRaw) ? timeoutMsRaw : 600000;
|
|
197
|
-
const killTimer = timeoutMs > 0
|
|
198
|
-
? setTimeout(() => {
|
|
199
|
-
try {
|
|
200
|
-
pty.kill();
|
|
201
|
-
}
|
|
202
|
-
catch { }
|
|
203
|
-
reject(new Error('acli rovodev timed out'));
|
|
204
|
-
}, timeoutMs)
|
|
205
|
-
: null;
|
|
206
|
-
let buffer = '';
|
|
207
|
-
const onPtyData = (data) => {
|
|
208
|
-
buffer += data;
|
|
209
|
-
process.stdout.write(data);
|
|
210
|
-
};
|
|
211
|
-
pty.onData(onPtyData);
|
|
212
|
-
const stdin = process.stdin;
|
|
213
|
-
const hadRaw = stdin.isRaw || false;
|
|
214
|
-
const onStdinData = (d) => {
|
|
215
|
-
try {
|
|
216
|
-
pty.write(d.toString('utf8'));
|
|
217
|
-
}
|
|
218
|
-
catch { }
|
|
219
|
-
};
|
|
220
|
-
if (stdin.isTTY) {
|
|
221
|
-
try {
|
|
222
|
-
stdin.setRawMode(true);
|
|
223
|
-
}
|
|
224
|
-
catch { }
|
|
225
|
-
}
|
|
226
|
-
stdin.resume();
|
|
227
|
-
stdin.on('data', onStdinData);
|
|
228
|
-
const onResize = () => {
|
|
229
|
-
try {
|
|
230
|
-
pty.resize(process.stdout.isTTY ? process.stdout.columns : 80, process.stdout.isTTY ? process.stdout.rows : 24);
|
|
231
|
-
}
|
|
232
|
-
catch { }
|
|
233
|
-
};
|
|
234
|
-
if (process.stdout.isTTY) {
|
|
235
|
-
process.stdout.on('resize', onResize);
|
|
236
|
-
}
|
|
237
|
-
pty.onExit(({ exitCode }) => {
|
|
238
|
-
if (killTimer) {
|
|
239
|
-
clearTimeout(killTimer);
|
|
240
|
-
}
|
|
241
|
-
pty.off?.('data', onPtyData);
|
|
242
|
-
stdin.off('data', onStdinData);
|
|
243
|
-
if (stdin.isTTY) {
|
|
244
|
-
try {
|
|
245
|
-
stdin.setRawMode(hadRaw);
|
|
246
|
-
}
|
|
247
|
-
catch { }
|
|
248
|
-
}
|
|
249
|
-
if (process.stdout.isTTY) {
|
|
250
|
-
process.stdout.off('resize', onResize);
|
|
251
|
-
}
|
|
252
|
-
if (exitCode === 0 && buffer.trim().length > 0) {
|
|
253
|
-
resolve(buffer.trim());
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
reject(new Error(`acli rovodev failed${exitCode !== undefined ? ` with code ${exitCode}` : ''}`));
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
catch {
|
|
262
|
-
}
|
|
263
|
-
const child = (0, child_process_1.spawn)('acli', ['rovodev', prompt], { stdio: ['inherit', 'pipe', 'inherit'] });
|
|
264
|
-
const timeoutMsRaw = Number(process.env.FORGE_ROVO_TIMEOUT_MS ?? 600000);
|
|
265
|
-
const timeoutMs = Number.isFinite(timeoutMsRaw) ? timeoutMsRaw : 600000;
|
|
266
|
-
const killTimer = timeoutMs > 0
|
|
267
|
-
? setTimeout(() => {
|
|
268
|
-
try {
|
|
269
|
-
child.kill('SIGKILL');
|
|
270
|
-
}
|
|
271
|
-
catch { }
|
|
272
|
-
reject(new Error('acli rovodev timed out'));
|
|
273
|
-
}, timeoutMs)
|
|
274
|
-
: null;
|
|
275
|
-
let stdout = '';
|
|
276
|
-
child.stdout.on('data', (d) => {
|
|
277
|
-
const chunk = d.toString();
|
|
278
|
-
stdout += chunk;
|
|
279
|
-
process.stdout.write(chunk);
|
|
280
|
-
});
|
|
281
|
-
child.on('close', (code) => {
|
|
282
|
-
if (killTimer) {
|
|
283
|
-
clearTimeout(killTimer);
|
|
284
|
-
}
|
|
285
|
-
if (code === 0 && stdout.trim().length > 0) {
|
|
286
|
-
resolve(stdout.trim());
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
reject(new Error(`acli rovodev failed${code !== null ? ` with code ${code}` : ''}`));
|
|
290
|
-
}
|
|
291
|
-
});
|
|
292
|
-
child.on('error', (err) => {
|
|
293
|
-
if (killTimer) {
|
|
294
|
-
clearTimeout(killTimer);
|
|
295
|
-
}
|
|
296
|
-
reject(err);
|
|
297
|
-
});
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
fallbackUICode(moduleType, displayName, moduleName, functionName) {
|
|
301
|
-
return `import Resolver from '@forge/resolver';
|
|
302
|
-
import { Text, Strong, Fragment } from '@forge/react';
|
|
303
|
-
|
|
304
|
-
const resolver = new Resolver();
|
|
305
|
-
|
|
306
|
-
resolver.define('${functionName}', () => {
|
|
307
|
-
return (
|
|
308
|
-
<Fragment>
|
|
309
|
-
<Text><Strong>${displayName} generated by experimental CLI</Strong></Text>
|
|
310
|
-
<Text>Module: ${moduleName}</Text>
|
|
311
|
-
<Text>Type: ${moduleType}</Text>
|
|
312
|
-
</Fragment>
|
|
313
|
-
);
|
|
314
|
-
});
|
|
315
|
-
|
|
316
|
-
export const handler = resolver.getDefinitions();
|
|
317
|
-
`;
|
|
318
|
-
}
|
|
319
|
-
fallbackActionCode(moduleType, displayName, moduleName, functionName) {
|
|
320
|
-
return `import Resolver from '@forge/resolver';
|
|
321
|
-
|
|
322
|
-
const resolver = new Resolver();
|
|
323
|
-
|
|
324
|
-
resolver.define('${functionName}', async (req) => {
|
|
325
|
-
try {
|
|
326
|
-
return { success: true, message: '${displayName} "${moduleName}" executed.' };
|
|
327
|
-
} catch (e) {
|
|
328
|
-
return { success: false, error: e instanceof Error ? e.message : String(e) };
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
export const handler = resolver.getDefinitions();
|
|
333
|
-
`;
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
exports.RovoCodegenService = RovoCodegenService;
|
|
337
|
-
//# sourceMappingURL=rovo-generator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rovo-generator.js","sourceRoot":"","sources":["../../src/experimental/rovo-generator.ts"],"names":[],"mappings":"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"}
|