tempo-agent 1.0.0 → 1.0.7
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/README.md +25 -13
- package/dist/cli/index.js +55 -17
- package/dist/cli/index.js.map +1 -1
- package/dist/executor/runStep.d.ts.map +1 -1
- package/dist/executor/runStep.js +10 -2
- package/dist/executor/runStep.js.map +1 -1
- package/package.json +12 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Tempo
|
|
1
|
+
# Tempo [](https://www.npmjs.org/package/tempo-agent)
|
|
2
2
|
|
|
3
3
|
AI-driven code generation CLI. Give Tempo a goal, and it writes, validates, and retries code changes step by step using Claude.
|
|
4
4
|
|
|
@@ -10,12 +10,24 @@ npm install -g tempo-agent
|
|
|
10
10
|
|
|
11
11
|
## Requirements
|
|
12
12
|
|
|
13
|
-
Set your Anthropic API key
|
|
13
|
+
Set your Anthropic API key as an environment variable.
|
|
14
14
|
|
|
15
|
+
**macOS / Linux**
|
|
15
16
|
```bash
|
|
16
17
|
export ANTHROPIC_API_KEY=your-key-here
|
|
17
18
|
```
|
|
18
19
|
|
|
20
|
+
**Windows (PowerShell)**
|
|
21
|
+
```powershell
|
|
22
|
+
# Current session only
|
|
23
|
+
$env:ANTHROPIC_API_KEY = "your-key-here"
|
|
24
|
+
|
|
25
|
+
# Permanently (no need to set it again after restart)
|
|
26
|
+
[System.Environment]::SetEnvironmentVariable("ANTHROPIC_API_KEY", "your-key-here", "User")
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Get your API key at [console.anthropic.com](https://console.anthropic.com) → API Keys.
|
|
30
|
+
|
|
19
31
|
## Usage
|
|
20
32
|
|
|
21
33
|
### 1. Initialize a project
|
|
@@ -26,9 +38,9 @@ Run this inside any existing project:
|
|
|
26
38
|
tempo init
|
|
27
39
|
```
|
|
28
40
|
|
|
29
|
-
Creates a `.tempo/` directory with config and folders for
|
|
41
|
+
Creates a `.tempo/` directory with config and folders for Scores, Sessions, and Ideation files.
|
|
30
42
|
|
|
31
|
-
### 2. Write an
|
|
43
|
+
### 2. Write an Ideation file
|
|
32
44
|
|
|
33
45
|
Create a markdown file in `.tempo/ideation/my-feature.md`:
|
|
34
46
|
|
|
@@ -51,7 +63,7 @@ Build a REST API for a todo list
|
|
|
51
63
|
3. Add in-memory store module
|
|
52
64
|
```
|
|
53
65
|
|
|
54
|
-
### 3. Compile it into a
|
|
66
|
+
### 3. Compile it into a Score
|
|
55
67
|
|
|
56
68
|
```bash
|
|
57
69
|
tempo compile my-feature.md
|
|
@@ -59,9 +71,9 @@ tempo compile my-feature.md
|
|
|
59
71
|
|
|
60
72
|
Generates `.tempo/scores/my-feature.json` — a structured execution plan.
|
|
61
73
|
|
|
62
|
-
### 4. Edit the
|
|
74
|
+
### 4. Edit the Score
|
|
63
75
|
|
|
64
|
-
Open `.tempo/scores/my-feature.json` and fill in `files_allowed` for each
|
|
76
|
+
Open `.tempo/scores/my-feature.json` and fill in `files_allowed` for each Step — the list of files Claude is permitted to create or modify:
|
|
65
77
|
|
|
66
78
|
```json
|
|
67
79
|
{
|
|
@@ -82,11 +94,11 @@ tempo run my-feature
|
|
|
82
94
|
```
|
|
83
95
|
|
|
84
96
|
Tempo will:
|
|
85
|
-
- Send each
|
|
97
|
+
- Send each Step to Claude with the current file contents
|
|
86
98
|
- Write Claude's response back to disk
|
|
87
99
|
- Run lint, build, and tests
|
|
88
100
|
- Retry up to 3 times on failure, feeding errors back to Claude
|
|
89
|
-
- Save a full
|
|
101
|
+
- Save a full Session log to `.tempo/sessions/`
|
|
90
102
|
|
|
91
103
|
## Config
|
|
92
104
|
|
|
@@ -110,7 +122,7 @@ Every run is saved to `.tempo/sessions/session-{timestamp}/`:
|
|
|
110
122
|
|---|---|
|
|
111
123
|
| `step-N.md` | Prompt sent, files used, Claude response, result |
|
|
112
124
|
| `errors-step-N.md` | Validation errors and retry attempts |
|
|
113
|
-
| `diff-N.patch` | Git diff after each
|
|
125
|
+
| `diff-N.patch` | Git diff after each Step |
|
|
114
126
|
|
|
115
127
|
Add to your `.gitignore`:
|
|
116
128
|
|
|
@@ -121,9 +133,9 @@ Add to your `.gitignore`:
|
|
|
121
133
|
|
|
122
134
|
## How it works
|
|
123
135
|
|
|
124
|
-
1. Reads the files listed in `files_allowed` for the current
|
|
125
|
-
2. Sends them to Claude with the
|
|
136
|
+
1. Reads the files listed in `files_allowed` for the current Step
|
|
137
|
+
2. Sends them to Claude with the Step instruction
|
|
126
138
|
3. Claude returns full file replacements
|
|
127
139
|
4. Tempo writes them to disk
|
|
128
140
|
5. Runs validation — if it fails, sends the errors back to Claude and retries
|
|
129
|
-
6. Moves to the next
|
|
141
|
+
6. Moves to the next Step once validation passes
|
package/dist/cli/index.js
CHANGED
|
@@ -34,28 +34,66 @@ function cmdInit() {
|
|
|
34
34
|
lintCommand: 'npm run lint',
|
|
35
35
|
}, null, 2), 'utf-8');
|
|
36
36
|
}
|
|
37
|
-
const
|
|
38
|
-
if (!fs_1.default.existsSync(
|
|
39
|
-
fs_1.default.writeFileSync(
|
|
37
|
+
const globalContextPath = path_1.default.join(tempoDir, 'global-context.md');
|
|
38
|
+
if (!fs_1.default.existsSync(globalContextPath)) {
|
|
39
|
+
fs_1.default.writeFileSync(globalContextPath, `# Global Context
|
|
40
|
+
|
|
41
|
+
This file is injected into every Claude prompt. Use it to define project-wide
|
|
42
|
+
design principles, code style rules, and safety constraints.
|
|
43
|
+
|
|
44
|
+
---
|
|
40
45
|
|
|
41
46
|
## Code Style
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
##
|
|
51
|
-
|
|
52
|
-
.
|
|
53
|
-
|
|
47
|
+
|
|
48
|
+
<!-- Define your preferred language, formatting, and patterns. Examples: -->
|
|
49
|
+
<!-- - Language: TypeScript (strict mode) -->
|
|
50
|
+
<!-- - Use async/await, never raw Promise chains -->
|
|
51
|
+
<!-- - Keep functions small and single-purpose -->
|
|
52
|
+
<!-- - Prefer named exports over default exports -->
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Architecture & Design Principles
|
|
56
|
+
|
|
57
|
+
<!-- Describe how this project is structured and how it should stay that way. Examples: -->
|
|
58
|
+
<!-- - Follow the repository pattern for all data access -->
|
|
59
|
+
<!-- - Business logic lives in /src/services, never in route handlers -->
|
|
60
|
+
<!-- - Avoid circular dependencies between modules -->
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
## Safety & Constraints
|
|
64
|
+
|
|
65
|
+
<!-- Rules Claude must always follow when modifying code. Examples: -->
|
|
66
|
+
<!-- - Never modify files outside of files_allowed -->
|
|
67
|
+
<!-- - Do not introduce new external dependencies without a comment explaining why -->
|
|
68
|
+
<!-- - Never remove error handling or logging -->
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## Naming Conventions
|
|
72
|
+
|
|
73
|
+
<!-- Consistent naming rules across the codebase. Examples: -->
|
|
74
|
+
<!-- - Files: kebab-case -->
|
|
75
|
+
<!-- - Classes: PascalCase -->
|
|
76
|
+
<!-- - Functions and variables: camelCase -->
|
|
77
|
+
<!-- - Constants: SCREAMING_SNAKE_CASE -->
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
## Testing
|
|
81
|
+
|
|
82
|
+
<!-- Expectations around test coverage and style. Examples: -->
|
|
83
|
+
<!-- - Every new function must have at least one unit test -->
|
|
84
|
+
<!-- - Use Vitest, not Jest -->
|
|
85
|
+
<!-- - Mock external services, never the database -->
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
## Additional Notes
|
|
89
|
+
|
|
90
|
+
<!-- Anything else Claude should always keep in mind for this project. -->
|
|
91
|
+
|
|
54
92
|
`, 'utf-8');
|
|
55
93
|
}
|
|
56
94
|
console.log(chalk_1.default.green('✓ Initialized .tempo/ directory'));
|
|
57
|
-
console.log(chalk_1.default.blue(' .tempo/config.json
|
|
58
|
-
console.log(chalk_1.default.blue(' .tempo/
|
|
95
|
+
console.log(chalk_1.default.blue(' .tempo/config.json — validation commands'));
|
|
96
|
+
console.log(chalk_1.default.blue(' .tempo/global-context.md — project rules injected into every prompt'));
|
|
59
97
|
console.log(chalk_1.default.blue(' .tempo/ideation/ — place your .md ideation files here'));
|
|
60
98
|
console.log(chalk_1.default.blue(' .tempo/scores/ — compiled score JSONs'));
|
|
61
99
|
console.log(chalk_1.default.blue(' .tempo/sessions/ — execution history per run'));
|
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;AAEtD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAE1B,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IACzF,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAExD,YAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,YAAE,CAAC,SAAS,CAAC,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,YAAE,CAAC,aAAa,CACd,UAAU,EACV,IAAI,CAAC,SAAS,CACZ;YACE,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,eAAe;YAC7B,WAAW,EAAE,cAAc;SAC5B,EACD,IAAI,EACJ,CAAC,CACF,EACD,OAAO,CACR,CAAC;IACJ,CAAC;IAED,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runStep.d.ts","sourceRoot":"","sources":["../../src/executor/runStep.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"runStep.d.ts","sourceRoot":"","sources":["../../src/executor/runStep.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AA8B5C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AA0CD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,UAAU,CAAC,CAoCrB"}
|
package/dist/executor/runStep.js
CHANGED
|
@@ -8,7 +8,7 @@ const fs_1 = __importDefault(require("fs"));
|
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
9
|
const claudeClient_1 = require("./claudeClient");
|
|
10
10
|
const logger_1 = require("../utils/logger");
|
|
11
|
-
const
|
|
11
|
+
const BASE_SYSTEM_PROMPT = `You are an expert software engineer. You will receive:
|
|
12
12
|
1. A task description
|
|
13
13
|
2. The contents of files you are allowed to modify
|
|
14
14
|
3. Project constraints
|
|
@@ -24,6 +24,14 @@ Rules:
|
|
|
24
24
|
- Only output files listed in "files_allowed"
|
|
25
25
|
- Do not add explanations outside the file blocks
|
|
26
26
|
- Preserve existing code that is not being changed`;
|
|
27
|
+
function buildSystemPrompt(cwd) {
|
|
28
|
+
const globalContextPath = path_1.default.join(cwd, '.tempo', 'global-context.md');
|
|
29
|
+
if (fs_1.default.existsSync(globalContextPath)) {
|
|
30
|
+
const globalContext = fs_1.default.readFileSync(globalContextPath, 'utf-8').trim();
|
|
31
|
+
return `${BASE_SYSTEM_PROMPT}\n\n---\n\n${globalContext}`;
|
|
32
|
+
}
|
|
33
|
+
return BASE_SYSTEM_PROMPT;
|
|
34
|
+
}
|
|
27
35
|
function readAllowedFiles(filesAllowed, cwd) {
|
|
28
36
|
const contents = {};
|
|
29
37
|
for (const filePath of filesAllowed) {
|
|
@@ -83,7 +91,7 @@ ${fileSection}
|
|
|
83
91
|
${extraContext ? `\nAdditional context:\n${extraContext}` : ''}
|
|
84
92
|
`.trim();
|
|
85
93
|
(0, logger_1.logInfo)(`Sending step ${step.id} to Claude...`);
|
|
86
|
-
const claudeResponse = await (0, claudeClient_1.callClaude)(
|
|
94
|
+
const claudeResponse = await (0, claudeClient_1.callClaude)(buildSystemPrompt(cwd), instruction);
|
|
87
95
|
const parsedFiles = parseClaudeResponse(claudeResponse);
|
|
88
96
|
const filesWritten = writeFiles(parsedFiles, cwd, step.files_allowed);
|
|
89
97
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runStep.js","sourceRoot":"","sources":["../../src/executor/runStep.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"runStep.js","sourceRoot":"","sources":["../../src/executor/runStep.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tempo-agent",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "A modular CLI tool for AI-driven code generation and validation",
|
|
5
5
|
"main": "dist/cli/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -18,7 +18,17 @@
|
|
|
18
18
|
"engines": {
|
|
19
19
|
"node": ">=18.0.0"
|
|
20
20
|
},
|
|
21
|
-
"keywords": [
|
|
21
|
+
"keywords": [
|
|
22
|
+
"cli",
|
|
23
|
+
"tempo",
|
|
24
|
+
"orchestrator",
|
|
25
|
+
"claude",
|
|
26
|
+
"ai"
|
|
27
|
+
],
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/Eladz3/tempo-agent"
|
|
31
|
+
},
|
|
22
32
|
"license": "MIT",
|
|
23
33
|
"dependencies": {
|
|
24
34
|
"axios": "^1.7.2",
|