tempo-agent 1.4.2 → 1.6.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.
package/dist/cli/index.js
CHANGED
|
@@ -11,14 +11,16 @@ const schema_1 = require("../spec/schema");
|
|
|
11
11
|
const runPipeline_1 = require("../controller/runPipeline");
|
|
12
12
|
const compile_1 = require("../ideation/compile");
|
|
13
13
|
const tune_1 = require("../ideation/tune");
|
|
14
|
+
const selectFromList_1 = require("../utils/selectFromList");
|
|
14
15
|
const cwd = process.cwd();
|
|
15
16
|
function printHelp() {
|
|
16
17
|
console.log(chalk_1.default.bold('\nTempo — AI-driven code generation CLI\n'));
|
|
17
18
|
console.log('Usage:');
|
|
18
19
|
console.log(' tempo init Initialize .tempo/ in current directory');
|
|
19
|
-
console.log(' tempo
|
|
20
|
+
console.log(' tempo draft <name> Create a new blank ideation file in .tempo/ideation/');
|
|
21
|
+
console.log(' tempo compile [file] Compile a markdown ideation file to a score (interactive if omitted)');
|
|
20
22
|
console.log(' tempo tune Convert rough blurbs ([r] or [rough] prefixed) into clean design specs');
|
|
21
|
-
console.log(' tempo run
|
|
23
|
+
console.log(' tempo run [score-name] Run a score from .tempo/scores/<name>.json (interactive if omitted)');
|
|
22
24
|
console.log('');
|
|
23
25
|
}
|
|
24
26
|
function cmdInit() {
|
|
@@ -122,11 +124,47 @@ design principles, code style rules, and safety constraints.
|
|
|
122
124
|
console.log('');
|
|
123
125
|
console.log(chalk_1.default.yellow('Next: add your GEMINI_API_KEY to .tempo/.env'));
|
|
124
126
|
}
|
|
127
|
+
function cmdDraft(args) {
|
|
128
|
+
const rawName = args[0];
|
|
129
|
+
if (!rawName) {
|
|
130
|
+
console.error(chalk_1.default.red('Usage: tempo draft <name>'));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
const kebabName = rawName
|
|
134
|
+
.trim()
|
|
135
|
+
.toLowerCase()
|
|
136
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
137
|
+
.replace(/^-+|-+$/g, '');
|
|
138
|
+
const fileName = `[rough] ${kebabName}.md`;
|
|
139
|
+
const ideationDir = path_1.default.join(cwd, '.tempo', 'ideation');
|
|
140
|
+
if (!fs_1.default.existsSync(ideationDir)) {
|
|
141
|
+
console.error(chalk_1.default.red('No .tempo/ideation/ directory found. Run `tempo init` first.'));
|
|
142
|
+
process.exit(1);
|
|
143
|
+
}
|
|
144
|
+
const outPath = path_1.default.join(ideationDir, fileName);
|
|
145
|
+
if (fs_1.default.existsSync(outPath)) {
|
|
146
|
+
console.error(chalk_1.default.red(`File already exists: ${outPath}`));
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
fs_1.default.writeFileSync(outPath, '', 'utf-8');
|
|
150
|
+
console.log(chalk_1.default.green(`✓ Created ${outPath}`));
|
|
151
|
+
}
|
|
125
152
|
async function cmdCompile(args) {
|
|
126
|
-
|
|
153
|
+
let fileName = args[0];
|
|
127
154
|
if (!fileName) {
|
|
128
|
-
|
|
129
|
-
|
|
155
|
+
const ideationDir = path_1.default.join(cwd, '.tempo', 'ideation');
|
|
156
|
+
const files = fs_1.default.existsSync(ideationDir)
|
|
157
|
+
? fs_1.default.readdirSync(ideationDir).filter((f) => f.endsWith('.md'))
|
|
158
|
+
: [];
|
|
159
|
+
if (files.length === 0) {
|
|
160
|
+
console.error(chalk_1.default.red('No ideation files found in .tempo/ideation/'));
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
const chosen = await (0, selectFromList_1.selectFromList)(files, 'Select an ideation file to compile:');
|
|
164
|
+
if (!chosen) {
|
|
165
|
+
process.exit(0);
|
|
166
|
+
}
|
|
167
|
+
fileName = chosen;
|
|
130
168
|
}
|
|
131
169
|
const filePath = path_1.default.isAbsolute(fileName)
|
|
132
170
|
? fileName
|
|
@@ -141,10 +179,21 @@ async function cmdCompile(args) {
|
|
|
141
179
|
}
|
|
142
180
|
}
|
|
143
181
|
async function cmdRun(args) {
|
|
144
|
-
|
|
182
|
+
let scoreName = args[0];
|
|
145
183
|
if (!scoreName) {
|
|
146
|
-
|
|
147
|
-
|
|
184
|
+
const scoresDir = path_1.default.join(cwd, '.tempo', 'scores');
|
|
185
|
+
const files = fs_1.default.existsSync(scoresDir)
|
|
186
|
+
? fs_1.default.readdirSync(scoresDir).filter((f) => f.endsWith('.json'))
|
|
187
|
+
: [];
|
|
188
|
+
if (files.length === 0) {
|
|
189
|
+
console.error(chalk_1.default.red('No score files found in .tempo/scores/'));
|
|
190
|
+
process.exit(1);
|
|
191
|
+
}
|
|
192
|
+
const chosen = await (0, selectFromList_1.selectFromList)(files.map((f) => f.replace(/\.json$/, '')), 'Select a score to run:');
|
|
193
|
+
if (!chosen) {
|
|
194
|
+
process.exit(0);
|
|
195
|
+
}
|
|
196
|
+
scoreName = chosen;
|
|
148
197
|
}
|
|
149
198
|
const scorePath = path_1.default.join(cwd, '.tempo', 'scores', `${scoreName}.json`);
|
|
150
199
|
if (!fs_1.default.existsSync(scorePath)) {
|
|
@@ -177,6 +226,9 @@ async function main() {
|
|
|
177
226
|
case 'init':
|
|
178
227
|
cmdInit();
|
|
179
228
|
break;
|
|
229
|
+
case 'draft':
|
|
230
|
+
cmdDraft(args);
|
|
231
|
+
break;
|
|
180
232
|
case 'compile':
|
|
181
233
|
await cmdCompile(args);
|
|
182
234
|
break;
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAEA,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;AAC1B,2CAA4C;AAC5C,2DAAwD;AACxD,iDAAsD;AACtD,2CAAgD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shows an interactive arrow-key selection menu in the terminal.
|
|
3
|
+
* Returns the selected item, or null if the user cancelled (Ctrl+C / Escape).
|
|
4
|
+
*/
|
|
5
|
+
export declare function selectFromList(items: string[], prompt: string): Promise<string | null>;
|
|
6
|
+
//# sourceMappingURL=selectFromList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectFromList.d.ts","sourceRoot":"","sources":["../../src/utils/selectFromList.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwEtF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.selectFromList = selectFromList;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
/**
|
|
9
|
+
* Shows an interactive arrow-key selection menu in the terminal.
|
|
10
|
+
* Returns the selected item, or null if the user cancelled (Ctrl+C / Escape).
|
|
11
|
+
*/
|
|
12
|
+
function selectFromList(items, prompt) {
|
|
13
|
+
return new Promise((resolve) => {
|
|
14
|
+
if (items.length === 0) {
|
|
15
|
+
resolve(null);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let selected = 0;
|
|
19
|
+
const render = () => {
|
|
20
|
+
// Move cursor up by the number of lines we drew last time, then redraw
|
|
21
|
+
process.stdout.write(`\n${chalk_1.default.bold(prompt)}\n`);
|
|
22
|
+
for (let i = 0; i < items.length; i++) {
|
|
23
|
+
if (i === selected) {
|
|
24
|
+
process.stdout.write(` ${chalk_1.default.cyan('›')} ${chalk_1.default.cyan(items[i])}\n`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
process.stdout.write(` ${items[i]}\n`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const clearMenu = () => {
|
|
32
|
+
// +2 for the prompt line and the leading blank line
|
|
33
|
+
const lines = items.length + 2;
|
|
34
|
+
for (let i = 0; i < lines; i++) {
|
|
35
|
+
process.stdout.write('\x1B[1A\x1B[2K');
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
render();
|
|
39
|
+
const { stdin } = process;
|
|
40
|
+
const previousRawMode = stdin.isRaw;
|
|
41
|
+
stdin.setRawMode(true);
|
|
42
|
+
stdin.resume();
|
|
43
|
+
stdin.setEncoding('utf-8');
|
|
44
|
+
const onData = (key) => {
|
|
45
|
+
if (key === '\x1B[A' || key === '\x1B[D') {
|
|
46
|
+
// Up arrow or left arrow
|
|
47
|
+
selected = (selected - 1 + items.length) % items.length;
|
|
48
|
+
clearMenu();
|
|
49
|
+
render();
|
|
50
|
+
}
|
|
51
|
+
else if (key === '\x1B[B' || key === '\x1B[C') {
|
|
52
|
+
// Down arrow or right arrow
|
|
53
|
+
selected = (selected + 1) % items.length;
|
|
54
|
+
clearMenu();
|
|
55
|
+
render();
|
|
56
|
+
}
|
|
57
|
+
else if (key === '\r' || key === '\n') {
|
|
58
|
+
// Enter
|
|
59
|
+
cleanup();
|
|
60
|
+
clearMenu();
|
|
61
|
+
process.stdout.write(` ${chalk_1.default.cyan('›')} ${chalk_1.default.cyan(items[selected])}\n\n`);
|
|
62
|
+
resolve(items[selected]);
|
|
63
|
+
}
|
|
64
|
+
else if (key === '\x03' || key === '\x1B') {
|
|
65
|
+
// Ctrl+C or Escape
|
|
66
|
+
cleanup();
|
|
67
|
+
clearMenu();
|
|
68
|
+
process.stdout.write('\n');
|
|
69
|
+
resolve(null);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const cleanup = () => {
|
|
73
|
+
stdin.removeListener('data', onData);
|
|
74
|
+
stdin.setRawMode(previousRawMode ?? false);
|
|
75
|
+
stdin.pause();
|
|
76
|
+
};
|
|
77
|
+
stdin.on('data', onData);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=selectFromList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectFromList.js","sourceRoot":"","sources":["../../src/utils/selectFromList.ts"],"names":[],"mappings":"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"}
|