agent-scope 0.1.0 → 0.2.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/README.md +128 -205
- package/dist/cli.js +58 -26
- package/dist/cli.js.map +1 -1
- package/dist/core/logParser.js +9 -2
- package/dist/core/logParser.js.map +1 -1
- package/dist/core/queueParser.d.ts +8 -1
- package/dist/core/queueParser.d.ts.map +1 -1
- package/dist/core/queueParser.js +67 -6
- package/dist/core/queueParser.js.map +1 -1
- package/dist/core/stateEngine.js +5 -1
- package/dist/core/stateEngine.js.map +1 -1
- package/dist/core/todoReader.d.ts +11 -0
- package/dist/core/todoReader.d.ts.map +1 -0
- package/dist/core/todoReader.js +120 -0
- package/dist/core/todoReader.js.map +1 -0
- package/dist/core/types.d.ts +18 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/public/404/index.html +1 -1
- package/dist/public/404.html +1 -1
- package/dist/public/_next/static/EjG9asgaOWf0-7fNJq_Sd/_buildManifest.js +1 -0
- package/dist/public/_next/static/chunks/46-3b308c2fb194eb7d.js +1 -0
- package/dist/public/_next/static/chunks/app/page-525816f75fc4208f.js +1 -0
- package/dist/public/_next/static/chunks/main-bfc57b0f3d63ff2c.js +1 -0
- package/dist/public/_next/static/css/9056dd3cc8c03e80.css +5 -0
- package/dist/public/index.html +1 -1
- package/dist/public/index.txt +2 -2
- package/dist/server/server.d.ts +6 -1
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +111 -32
- package/dist/server/server.js.map +1 -1
- package/dist/server/watcher.d.ts +19 -0
- package/dist/server/watcher.d.ts.map +1 -0
- package/dist/server/watcher.js +76 -0
- package/dist/server/watcher.js.map +1 -0
- package/package.json +3 -2
- package/dist/public/_next/static/chunks/app/page-72fc8cefe60ad1d7.js +0 -1
- package/dist/public/_next/static/chunks/main-7be9b0d6fba5e000.js +0 -1
- package/dist/public/_next/static/css/14aedabfb1f06bdb.css +0 -3
- package/dist/public/_next/static/uP1Ux3UC4o-JCDXNPB44Y/_buildManifest.js +0 -1
- /package/dist/public/_next/static/{uP1Ux3UC4o-JCDXNPB44Y → EjG9asgaOWf0-7fNJq_Sd}/_ssgManifest.js +0 -0
- /package/dist/public/_next/static/chunks/{117-373243894bd7fac6.js → 117-c710cb30aa7ed4f8.js} +0 -0
- /package/dist/public/_next/static/chunks/app/_not-found/{page-4b9eb8aab41bf6df.js → page-c8219ab21dbb5ed7.js} +0 -0
- /package/dist/public/_next/static/chunks/{fd9d1056-9f91b5e418130764.js → fd9d1056-9e191f0896c1d560.js} +0 -0
package/README.md
CHANGED
|
@@ -4,48 +4,89 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://opensource.org/licenses/MIT)
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
|
-
[](https://www.npmjs.com/package/agent-scope)
|
|
8
8
|
|
|
9
9
|
agent-scope is a lightweight, file-based execution observer for AI agent workflows. It provides real-time visibility into task progress, dependencies, and completion status without requiring databases, authentication, or cloud infrastructure.
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
13
|
+
- **Live Mode** - Zero-config observation of Claude Code's TodoWrite tasks in real-time
|
|
14
|
+
- **Plan Mode** - Structured task planning with markdown DSL, dependencies, and acceptance criteria
|
|
15
|
+
- **Kanban Dashboard** - Visual board with Pending / In Progress / Completed columns
|
|
16
|
+
- **Real-time Updates** - SSE-powered file watching, no manual refresh needed
|
|
17
|
+
- **Deterministic** - Pure function state computation from files
|
|
18
|
+
- **Local-first** - All data stays on your machine
|
|
19
|
+
- **Type-safe** - Built with TypeScript in strict mode
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## How It Works
|
|
22
|
+
|
|
23
|
+
agent-scope supports two complementary modes:
|
|
24
|
+
|
|
25
|
+
| Mode | Data Source | Setup | Use Case |
|
|
26
|
+
|------|-----------|-------|----------|
|
|
27
|
+
| **Live** | `~/.claude/tasks/` (TodoWrite) | Zero config | Watch Claude Code work in real-time |
|
|
28
|
+
| **Plan** | `.agent-scope/queue.md` + `execution.log` | `agent-scope init` | Structured project planning with dependencies |
|
|
29
|
+
|
|
30
|
+
## Quick Start
|
|
31
|
+
|
|
32
|
+
### Live Mode (Zero Config)
|
|
33
|
+
|
|
34
|
+
Just start the dashboard — it reads Claude Code's existing task files:
|
|
22
35
|
|
|
23
36
|
```bash
|
|
24
|
-
|
|
37
|
+
npx agent-scope start
|
|
25
38
|
```
|
|
26
39
|
|
|
27
|
-
|
|
40
|
+
Opens `http://localhost:4317` with a Kanban board showing all your Claude Code sessions and their tasks in real-time.
|
|
41
|
+
|
|
42
|
+
### Plan Mode
|
|
43
|
+
|
|
44
|
+
For structured project planning with dependencies and acceptance criteria:
|
|
28
45
|
|
|
29
46
|
```bash
|
|
47
|
+
# 1. Initialize
|
|
30
48
|
npx agent-scope init
|
|
49
|
+
|
|
50
|
+
# 2. Edit .agent-scope/queue.md with your task plan
|
|
51
|
+
|
|
52
|
+
# 3. Start dashboard
|
|
53
|
+
npx agent-scope start
|
|
31
54
|
```
|
|
32
55
|
|
|
33
|
-
##
|
|
56
|
+
## Dashboard
|
|
57
|
+
|
|
58
|
+
### Live Mode
|
|
59
|
+
- **Session sidebar** with progress bars and active session indicators
|
|
60
|
+
- **Kanban board** with three columns: Pending, In Progress, Completed
|
|
61
|
+
- **Task detail panel** with description, dependencies (blockedBy/blocks)
|
|
62
|
+
- **Real-time updates** via Server-Sent Events (no polling)
|
|
34
63
|
|
|
35
|
-
###
|
|
64
|
+
### Plan Mode
|
|
65
|
+
- **Slice-based task tree** with collapsible groups
|
|
66
|
+
- **Dependency graph** navigation (click through dependencies)
|
|
67
|
+
- **Status overview** with summary cards, slice progress bars
|
|
68
|
+
- **Agent activity** tracking with execution traces
|
|
69
|
+
- **BLOCKED status** support (both computed from dependencies and explicit agent declarations)
|
|
70
|
+
|
|
71
|
+
## CLI
|
|
36
72
|
|
|
37
73
|
```bash
|
|
74
|
+
# Start dashboard (auto-detects available modes)
|
|
75
|
+
npx agent-scope start
|
|
76
|
+
|
|
77
|
+
# Start with custom Claude directory
|
|
78
|
+
npx agent-scope start --claude-dir /path/to/.claude
|
|
79
|
+
|
|
80
|
+
# Start on custom port
|
|
81
|
+
npx agent-scope start -p 3000
|
|
82
|
+
|
|
83
|
+
# Initialize Plan mode in current directory
|
|
38
84
|
npx agent-scope init
|
|
39
85
|
```
|
|
40
86
|
|
|
41
|
-
|
|
42
|
-
- `queue.md` - Task definitions in markdown
|
|
43
|
-
- `execution.log` - JSONL event log
|
|
44
|
-
- `config.json` - Configuration
|
|
45
|
-
|
|
46
|
-
### 2. Define your task queue
|
|
87
|
+
## Task Queue Format (Plan Mode)
|
|
47
88
|
|
|
48
|
-
|
|
89
|
+
### Markdown DSL
|
|
49
90
|
|
|
50
91
|
```markdown
|
|
51
92
|
# Slice S1
|
|
@@ -63,141 +104,98 @@ Description: Implement user authentication
|
|
|
63
104
|
AC: Login and registration endpoints working
|
|
64
105
|
```
|
|
65
106
|
|
|
66
|
-
###
|
|
107
|
+
### Custom Templates
|
|
67
108
|
|
|
68
|
-
|
|
109
|
+
Configure heading patterns in `.agent-scope/config.json`:
|
|
69
110
|
|
|
70
111
|
```json
|
|
71
|
-
{
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
112
|
+
{
|
|
113
|
+
"taskModel": {
|
|
114
|
+
"id": "{slice}-T{n}",
|
|
115
|
+
"headings": {
|
|
116
|
+
"slice": "# Slice {name}",
|
|
117
|
+
"task": "## {id}"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
79
121
|
```
|
|
80
122
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
## Dashboard Features
|
|
123
|
+
### Validation
|
|
84
124
|
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
125
|
+
- All required fields present (Area, Depends, Description, AC)
|
|
126
|
+
- No duplicate task IDs
|
|
127
|
+
- No unknown dependencies
|
|
128
|
+
- No circular dependencies (DFS detection)
|
|
89
129
|
|
|
90
|
-
|
|
91
|
-
- Visual progress bars per slice
|
|
92
|
-
- Percentage completion tracking
|
|
93
|
-
- Task distribution breakdown
|
|
130
|
+
## Execution Log Format (Plan Mode)
|
|
94
131
|
|
|
95
|
-
|
|
96
|
-
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
132
|
+
```json
|
|
133
|
+
{"task_id":"S1-T1","status":"DONE","timestamp":"2026-02-16T14:31:22Z","agent":"claude"}
|
|
134
|
+
{"task_id":"S1-T2","status":"FAILED","timestamp":"2026-02-16T14:33:10Z","agent":"claude","meta":{"reason":"timeout"}}
|
|
135
|
+
{"task_id":"S1-T3","status":"BLOCKED","reason":"API key missing","timestamp":"2026-02-16T14:35:00Z","agent":"claude"}
|
|
136
|
+
```
|
|
99
137
|
|
|
100
|
-
|
|
101
|
-
- Acceptance criteria
|
|
102
|
-
- Dependency graph
|
|
103
|
-
- Reverse dependencies (who depends on this)
|
|
104
|
-
- Last event information
|
|
138
|
+
Status values: `DONE`, `FAILED`, `BLOCKED` (requires `reason` field)
|
|
105
139
|
|
|
106
|
-
##
|
|
140
|
+
## Architecture
|
|
107
141
|
|
|
108
|
-
###
|
|
142
|
+
### Status Computation (Plan Mode)
|
|
109
143
|
|
|
110
|
-
```
|
|
111
|
-
|
|
144
|
+
```
|
|
145
|
+
Priority: FAILED > BLOCKED(explicit) > DONE > BLOCKED(computed) > READY
|
|
112
146
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
147
|
+
For each task:
|
|
148
|
+
if lastEvent.status === FAILED → FAILED
|
|
149
|
+
else if lastEvent.status === BLOCKED → BLOCKED (with reason)
|
|
150
|
+
else if lastEvent.status === DONE → DONE
|
|
151
|
+
else if any dependency.status !== DONE → BLOCKED (computed)
|
|
152
|
+
else → READY
|
|
118
153
|
```
|
|
119
154
|
|
|
120
|
-
###
|
|
155
|
+
### Tech Stack
|
|
121
156
|
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
157
|
+
- **Language**: TypeScript (strict mode)
|
|
158
|
+
- **CLI**: Commander
|
|
159
|
+
- **Server**: Fastify + chokidar (file watching)
|
|
160
|
+
- **Real-time**: Server-Sent Events (SSE)
|
|
161
|
+
- **UI**: Next.js + Tailwind CSS
|
|
162
|
+
- **Testing**: Vitest (85 tests)
|
|
127
163
|
|
|
128
|
-
##
|
|
164
|
+
## API Reference
|
|
129
165
|
|
|
130
|
-
###
|
|
166
|
+
### `GET /health`
|
|
131
167
|
|
|
132
|
-
```
|
|
133
|
-
{
|
|
134
|
-
"task_id": "S1-T1", // Required: matches task in queue
|
|
135
|
-
"status": "DONE" | "FAILED", // Required: outcome
|
|
136
|
-
"timestamp": "ISO-8601", // Required: when it happened
|
|
137
|
-
"agent": "string", // Required: agent name
|
|
138
|
-
"meta": {...} // Optional: additional context
|
|
139
|
-
}
|
|
168
|
+
```json
|
|
169
|
+
{"status": "ok", "modes": {"live": true, "plan": true}}
|
|
140
170
|
```
|
|
141
171
|
|
|
142
|
-
###
|
|
172
|
+
### `GET /sessions`
|
|
143
173
|
|
|
144
|
-
|
|
145
|
-
- Invalid lines collected as warnings
|
|
146
|
-
- Malformed JSON doesn't crash the system
|
|
174
|
+
Lists all Claude Code sessions with their tasks.
|
|
147
175
|
|
|
148
|
-
|
|
176
|
+
### `GET /sessions/:id`
|
|
149
177
|
|
|
150
|
-
|
|
178
|
+
Get tasks for a specific session.
|
|
151
179
|
|
|
152
|
-
|
|
153
|
-
2. **Stateless** - Server recomputes on every request (no cache in v0.1)
|
|
154
|
-
3. **Error-tolerant** - Collects errors instead of crashing
|
|
155
|
-
4. **Type-safe** - Strict TypeScript throughout
|
|
180
|
+
### `GET /events`
|
|
156
181
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
For each task:
|
|
161
|
-
if lastEvent.status === FAILED → FAILED
|
|
162
|
-
else if lastEvent.status === DONE → DONE
|
|
163
|
-
else if any dependency.status !== DONE → BLOCKED
|
|
164
|
-
else → READY
|
|
165
|
-
```
|
|
182
|
+
SSE stream for real-time file change notifications.
|
|
166
183
|
|
|
167
|
-
|
|
184
|
+
### `GET /snapshot`
|
|
168
185
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
- **Language**: TypeScript (strict mode)
|
|
172
|
-
- **CLI**: Commander
|
|
173
|
-
- **Server**: Fastify
|
|
174
|
-
- **UI**: Next.js App Router + Tailwind CSS
|
|
175
|
-
- **Testing**: Vitest (98.33% coverage)
|
|
186
|
+
Returns Plan mode state (queue.md + execution.log).
|
|
176
187
|
|
|
177
188
|
## Development
|
|
178
189
|
|
|
179
|
-
### Setup
|
|
180
|
-
|
|
181
190
|
```bash
|
|
182
|
-
git clone https://github.com/
|
|
191
|
+
git clone https://github.com/yunusemrgrl/agent-scope.git
|
|
183
192
|
cd agent-scope
|
|
184
193
|
npm install
|
|
185
194
|
cd dashboard && npm install && cd ..
|
|
186
|
-
```
|
|
187
195
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
npm run build # Builds core + dashboard
|
|
192
|
-
npm run build:core # Only TypeScript
|
|
193
|
-
npm run build:dashboard # Only Next.js UI
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Test
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
npm test # Run tests in watch mode
|
|
200
|
-
npm run test:coverage # Generate coverage report
|
|
196
|
+
npm run build # Build core + dashboard
|
|
197
|
+
npm test # Run all tests
|
|
198
|
+
npm run dev # Dev server with watch
|
|
201
199
|
```
|
|
202
200
|
|
|
203
201
|
### Project Structure
|
|
@@ -206,107 +204,32 @@ npm run test:coverage # Generate coverage report
|
|
|
206
204
|
agent-scope/
|
|
207
205
|
├─ src/
|
|
208
206
|
│ ├─ core/
|
|
209
|
-
│ │ ├─ types.ts # Domain model
|
|
210
|
-
│ │ ├─ queueParser.ts # Markdown parser
|
|
211
|
-
│ │ ├─ logParser.ts # JSONL parser
|
|
212
|
-
│ │
|
|
207
|
+
│ │ ├─ types.ts # Domain model (Plan + Live types)
|
|
208
|
+
│ │ ├─ queueParser.ts # Markdown parser with template support
|
|
209
|
+
│ │ ├─ logParser.ts # JSONL parser with BLOCKED validation
|
|
210
|
+
│ │ ├─ stateEngine.ts # Snapshot computation
|
|
211
|
+
│ │ └─ todoReader.ts # Claude Code TodoWrite reader
|
|
213
212
|
│ ├─ server/
|
|
214
|
-
│ │
|
|
213
|
+
│ │ ├─ server.ts # Fastify API + SSE
|
|
214
|
+
│ │ └─ watcher.ts # chokidar file watching
|
|
215
215
|
│ └─ cli.ts # Commander CLI
|
|
216
|
-
├─ tests/core/ # Unit tests (
|
|
216
|
+
├─ tests/core/ # Unit tests (85 tests)
|
|
217
217
|
├─ dashboard/ # Next.js UI
|
|
218
|
-
│ └─ src/
|
|
219
|
-
│ ├─ app/ # App Router pages
|
|
220
|
-
│ └─ components/ # React components
|
|
218
|
+
│ └─ src/app/page.tsx # Dual-mode dashboard (Live + Plan)
|
|
221
219
|
├─ dist/ # Build output
|
|
222
220
|
└─ .agent-scope/ # Created by init (gitignored)
|
|
223
221
|
```
|
|
224
222
|
|
|
225
|
-
## API Reference
|
|
226
|
-
|
|
227
|
-
### `GET /snapshot`
|
|
228
|
-
|
|
229
|
-
Returns current system state:
|
|
230
|
-
|
|
231
|
-
```typescript
|
|
232
|
-
{
|
|
233
|
-
snapshot: Snapshot | null,
|
|
234
|
-
queueErrors: string[], // Fatal queue parse errors
|
|
235
|
-
logErrors: string[], // Non-fatal log warnings
|
|
236
|
-
meta: {
|
|
237
|
-
generatedAt: string, // ISO-8601
|
|
238
|
-
totalTasks: number
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
### `GET /health`
|
|
244
|
-
|
|
245
|
-
Health check endpoint:
|
|
246
|
-
|
|
247
|
-
```json
|
|
248
|
-
{"status": "ok"}
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## Use Cases
|
|
252
|
-
|
|
253
|
-
- **AI Agent Development** - Monitor multi-step agent workflows
|
|
254
|
-
- **Task Automation** - Track long-running automation pipelines
|
|
255
|
-
- **Project Management** - Visualize task dependencies and progress
|
|
256
|
-
- **Testing** - Observe test execution flows
|
|
257
|
-
- **CI/CD Monitoring** - Track deployment task completion
|
|
258
|
-
|
|
259
|
-
## Non-Goals (v0.1)
|
|
260
|
-
|
|
261
|
-
- ❌ Real-time streaming (manual refresh only)
|
|
262
|
-
- ❌ Agent execution wrapper
|
|
263
|
-
- ❌ Git integration
|
|
264
|
-
- ❌ SaaS/cloud mode
|
|
265
|
-
- ❌ Authentication
|
|
266
|
-
- ❌ Task editing UI
|
|
267
|
-
- ❌ WebSocket updates
|
|
268
|
-
|
|
269
|
-
agent-scope is an **observer**, not an orchestrator. It watches your workflow, it doesn't run it.
|
|
270
|
-
|
|
271
|
-
## Roadmap
|
|
272
|
-
|
|
273
|
-
### v0.2 (Planned)
|
|
274
|
-
- Incremental state updates
|
|
275
|
-
- File watching for auto-refresh
|
|
276
|
-
- Export reports (JSON, CSV)
|
|
277
|
-
- Performance optimizations
|
|
278
|
-
|
|
279
|
-
### v0.3 (Planned)
|
|
280
|
-
- Historical snapshots
|
|
281
|
-
- Time-series progress tracking
|
|
282
|
-
- Multiple project support
|
|
283
|
-
- Search and filters
|
|
284
|
-
|
|
285
223
|
## Contributing
|
|
286
224
|
|
|
287
225
|
Contributions welcome! Please:
|
|
288
226
|
|
|
289
227
|
1. Fork the repository
|
|
290
|
-
2. Create a feature branch
|
|
228
|
+
2. Create a feature branch
|
|
291
229
|
3. Write tests for new functionality
|
|
292
|
-
4. Ensure `npm test` passes
|
|
230
|
+
4. Ensure `npm test` passes
|
|
293
231
|
5. Submit a pull request
|
|
294
232
|
|
|
295
233
|
## License
|
|
296
234
|
|
|
297
235
|
MIT License - see [LICENSE](LICENSE) file for details
|
|
298
|
-
|
|
299
|
-
## Credits
|
|
300
|
-
|
|
301
|
-
Built with ❤️ by the agent-scope team
|
|
302
|
-
|
|
303
|
-
Powered by:
|
|
304
|
-
- [TypeScript](https://www.typescriptlang.org/)
|
|
305
|
-
- [Fastify](https://www.fastify.io/)
|
|
306
|
-
- [Next.js](https://nextjs.org/)
|
|
307
|
-
- [Commander](https://github.com/tj/commander.js)
|
|
308
|
-
- [Vitest](https://vitest.dev/)
|
|
309
|
-
|
|
310
|
-
---
|
|
311
|
-
|
|
312
|
-
**Note**: This is v0.1 - a minimal viable product focused on core functionality. Features are intentionally limited to ensure stability and simplicity.
|
package/dist/cli.js
CHANGED
|
@@ -8,7 +8,7 @@ const program = new Command();
|
|
|
8
8
|
program
|
|
9
9
|
.name('agent-scope')
|
|
10
10
|
.description('Deterministic, local, passive execution observer for AI agent workflows')
|
|
11
|
-
.version('0.
|
|
11
|
+
.version('0.2.0');
|
|
12
12
|
program
|
|
13
13
|
.command('init')
|
|
14
14
|
.description('Initialize agent-scope in current directory')
|
|
@@ -40,7 +40,20 @@ AC: Task completed successfully
|
|
|
40
40
|
const config = {
|
|
41
41
|
queueFile: 'queue.md',
|
|
42
42
|
logFile: 'execution.log',
|
|
43
|
-
port: 4317
|
|
43
|
+
port: 4317,
|
|
44
|
+
taskModel: {
|
|
45
|
+
fields: [
|
|
46
|
+
{ name: 'Area', type: 'enum', required: true, values: ['Core'] },
|
|
47
|
+
{ name: 'Depends', type: 'refs', required: false },
|
|
48
|
+
{ name: 'Description', type: 'text', required: true },
|
|
49
|
+
{ name: 'AC', type: 'text', required: true }
|
|
50
|
+
],
|
|
51
|
+
id: '{slice}-T{n}',
|
|
52
|
+
headings: {
|
|
53
|
+
slice: '# Slice {name}',
|
|
54
|
+
task: '## {id}'
|
|
55
|
+
}
|
|
56
|
+
}
|
|
44
57
|
};
|
|
45
58
|
writeFileSync(join(agentScopeDir, 'config.json'), JSON.stringify(config, null, 2));
|
|
46
59
|
console.log('✓ Created config.json');
|
|
@@ -58,18 +71,25 @@ Each completed task should be logged as a single line:
|
|
|
58
71
|
{"task_id":"S1-T1","status":"DONE","timestamp":"2026-02-16T14:31:22Z","agent":"claude"}
|
|
59
72
|
\`\`\`
|
|
60
73
|
|
|
61
|
-
|
|
74
|
+
For failures:
|
|
62
75
|
|
|
63
76
|
\`\`\`json
|
|
64
77
|
{"task_id":"S1-T2","status":"FAILED","timestamp":"2026-02-16T14:33:10Z","agent":"claude","meta":{"reason":"timeout"}}
|
|
65
78
|
\`\`\`
|
|
66
79
|
|
|
80
|
+
For blockers (when a task cannot proceed):
|
|
81
|
+
|
|
82
|
+
\`\`\`json
|
|
83
|
+
{"task_id":"S1-T3","status":"BLOCKED","reason":"API key missing","timestamp":"2026-02-16T14:35:00Z","agent":"claude"}
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
67
86
|
## Required Fields
|
|
68
87
|
|
|
69
88
|
- \`task_id\`: Task identifier from queue.md (e.g., "S1-T1")
|
|
70
|
-
- \`status\`:
|
|
89
|
+
- \`status\`: "DONE", "FAILED", or "BLOCKED"
|
|
71
90
|
- \`timestamp\`: ISO-8601 timestamp (use \`new Date().toISOString()\`)
|
|
72
91
|
- \`agent\`: Your agent name (e.g., "claude")
|
|
92
|
+
- \`reason\`: (Required for BLOCKED) Why the task is blocked
|
|
73
93
|
- \`meta\`: (Optional) Additional context
|
|
74
94
|
|
|
75
95
|
Run \`npx agent-scope start\` to view the dashboard.
|
|
@@ -85,36 +105,48 @@ Run \`npx agent-scope start\` to view the dashboard.
|
|
|
85
105
|
program
|
|
86
106
|
.command('start')
|
|
87
107
|
.description('Start the agent-scope server and dashboard')
|
|
88
|
-
.
|
|
108
|
+
.option('--claude-dir <path>', 'Path to Claude directory', join(process.env.HOME || '~', '.claude'))
|
|
109
|
+
.option('-p, --port <number>', 'Port number', '4317')
|
|
110
|
+
.action(async (opts) => {
|
|
111
|
+
const claudeDir = opts.claudeDir;
|
|
89
112
|
const agentScopeDir = join(process.cwd(), '.agent-scope');
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (!existsSync(configPath)) {
|
|
98
|
-
console.error('❌ config.json not found in .agent-scope/');
|
|
113
|
+
// Detect available modes
|
|
114
|
+
const hasLive = existsSync(join(claudeDir, 'tasks'));
|
|
115
|
+
const hasPlan = existsSync(agentScopeDir);
|
|
116
|
+
if (!hasLive && !hasPlan) {
|
|
117
|
+
console.error('❌ No data sources found.');
|
|
118
|
+
console.error(` Live mode: ${claudeDir}/tasks/ not found`);
|
|
119
|
+
console.error(' Plan mode: .agent-scope/ not found (run "agent-scope init")');
|
|
99
120
|
process.exit(1);
|
|
100
121
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
122
|
+
// Read port from config if plan mode available, otherwise use CLI option
|
|
123
|
+
let port = parseInt(opts.port, 10);
|
|
124
|
+
if (hasPlan) {
|
|
125
|
+
const configPath = join(agentScopeDir, 'config.json');
|
|
126
|
+
if (existsSync(configPath)) {
|
|
127
|
+
try {
|
|
128
|
+
const configContent = await import('fs').then(fs => fs.promises.readFile(configPath, 'utf-8'));
|
|
129
|
+
const config = JSON.parse(configContent);
|
|
130
|
+
if (config.port && opts.port === '4317') {
|
|
131
|
+
port = config.port;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch { /* use default port */ }
|
|
135
|
+
}
|
|
109
136
|
}
|
|
110
|
-
const port = config.port || 4317;
|
|
111
137
|
const url = `http://localhost:${port}`;
|
|
112
138
|
try {
|
|
113
|
-
|
|
114
|
-
|
|
139
|
+
await startServer({
|
|
140
|
+
claudeDir,
|
|
141
|
+
port,
|
|
142
|
+
agentScopeDir: hasPlan ? agentScopeDir : undefined
|
|
143
|
+
});
|
|
115
144
|
console.log(`✓ Server running on ${url}`);
|
|
145
|
+
if (hasLive)
|
|
146
|
+
console.log(` Live mode: watching ${claudeDir}/tasks/`);
|
|
147
|
+
if (hasPlan)
|
|
148
|
+
console.log(' Plan mode: reading .agent-scope/');
|
|
116
149
|
console.log('✓ Opening browser...');
|
|
117
|
-
// Auto-open browser
|
|
118
150
|
const platform = process.platform;
|
|
119
151
|
const openCommand = platform === 'darwin' ? 'open' :
|
|
120
152
|
platform === 'win32' ? 'start' :
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,yEAAyE,CAAC;KACtF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,6CAA6C,CAAC;KAC1D,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAE1D,iCAAiC;IACjC,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,SAAS,CAAC,aAAa,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAE9C,2BAA2B;QAC3B,MAAM,aAAa,GAAG;;;;;;;CAO3B,CAAC;QACI,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,aAAa,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAE3C,6BAA6B;QAC7B,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QAEvC,qBAAqB;QACrB,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,UAAU;YACrB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,IAAI;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/core/logParser.js
CHANGED
|
@@ -55,8 +55,14 @@ function validateLogEvent(obj, lineNumber) {
|
|
|
55
55
|
errors.push(`Line ${lineNumber}: Missing or invalid task_id`);
|
|
56
56
|
}
|
|
57
57
|
// Validate status
|
|
58
|
-
if (event.status !== 'DONE' && event.status !== 'FAILED') {
|
|
59
|
-
errors.push(`Line ${lineNumber}: Invalid status (must be DONE or
|
|
58
|
+
if (event.status !== 'DONE' && event.status !== 'FAILED' && event.status !== 'BLOCKED') {
|
|
59
|
+
errors.push(`Line ${lineNumber}: Invalid status (must be DONE, FAILED, or BLOCKED)`);
|
|
60
|
+
}
|
|
61
|
+
// Validate reason (required for BLOCKED)
|
|
62
|
+
if (event.status === 'BLOCKED') {
|
|
63
|
+
if (typeof event.reason !== 'string' || !event.reason) {
|
|
64
|
+
errors.push(`Line ${lineNumber}: reason is required when status is BLOCKED`);
|
|
65
|
+
}
|
|
60
66
|
}
|
|
61
67
|
// Validate timestamp
|
|
62
68
|
if (typeof event.timestamp !== 'string' || !isValidISO8601(event.timestamp)) {
|
|
@@ -81,6 +87,7 @@ function validateLogEvent(obj, lineNumber) {
|
|
|
81
87
|
status: event.status,
|
|
82
88
|
timestamp: event.timestamp,
|
|
83
89
|
agent: event.agent,
|
|
90
|
+
...(event.reason !== undefined && { reason: event.reason }),
|
|
84
91
|
...(event.meta !== undefined && { meta: event.meta })
|
|
85
92
|
};
|
|
86
93
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logParser.js","sourceRoot":"","sources":["../../src/core/logParser.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,YAAY,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QAEzB,mBAAmB;QACnB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,oBAAoB;QACpB,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,QAAQ,UAAU,gBAAgB,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QAED,kBAAkB;QAClB,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAM,CAAC;QAEhC,kCAAkC;QAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YACtD,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACzC,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAY,EAAE,UAAkB;IACxD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,QAAQ,UAAU,2BAA2B,CAAC,CAAC;QAC3D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,GAAG,GAA8B,CAAC;IAE7C,mBAAmB;IACnB,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,QAAQ,UAAU,8BAA8B,CAAC,CAAC;IAChE,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"logParser.js","sourceRoot":"","sources":["../../src/core/logParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { Task } from './types.js';
|
|
2
|
+
export interface QueueParseConfig {
|
|
3
|
+
id?: string;
|
|
4
|
+
headings?: {
|
|
5
|
+
slice?: string;
|
|
6
|
+
task?: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
2
9
|
export interface QueueParseResult {
|
|
3
10
|
tasks: Task[];
|
|
4
11
|
errors: string[];
|
|
@@ -7,5 +14,5 @@ export interface QueueParseResult {
|
|
|
7
14
|
* Parses a markdown queue file into structured tasks.
|
|
8
15
|
* Returns both tasks and any validation errors encountered.
|
|
9
16
|
*/
|
|
10
|
-
export declare function parseQueue(content: string): QueueParseResult;
|
|
17
|
+
export declare function parseQueue(content: string, config?: QueueParseConfig): QueueParseResult;
|
|
11
18
|
//# sourceMappingURL=queueParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queueParser.d.ts","sourceRoot":"","sources":["../../src/core/queueParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"queueParser.d.ts","sourceRoot":"","sources":["../../src/core/queueParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAgED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CA4HvF"}
|