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.
Files changed (43) hide show
  1. package/README.md +128 -205
  2. package/dist/cli.js +58 -26
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/logParser.js +9 -2
  5. package/dist/core/logParser.js.map +1 -1
  6. package/dist/core/queueParser.d.ts +8 -1
  7. package/dist/core/queueParser.d.ts.map +1 -1
  8. package/dist/core/queueParser.js +67 -6
  9. package/dist/core/queueParser.js.map +1 -1
  10. package/dist/core/stateEngine.js +5 -1
  11. package/dist/core/stateEngine.js.map +1 -1
  12. package/dist/core/todoReader.d.ts +11 -0
  13. package/dist/core/todoReader.d.ts.map +1 -0
  14. package/dist/core/todoReader.js +120 -0
  15. package/dist/core/todoReader.js.map +1 -0
  16. package/dist/core/types.d.ts +18 -1
  17. package/dist/core/types.d.ts.map +1 -1
  18. package/dist/public/404/index.html +1 -1
  19. package/dist/public/404.html +1 -1
  20. package/dist/public/_next/static/EjG9asgaOWf0-7fNJq_Sd/_buildManifest.js +1 -0
  21. package/dist/public/_next/static/chunks/46-3b308c2fb194eb7d.js +1 -0
  22. package/dist/public/_next/static/chunks/app/page-525816f75fc4208f.js +1 -0
  23. package/dist/public/_next/static/chunks/main-bfc57b0f3d63ff2c.js +1 -0
  24. package/dist/public/_next/static/css/9056dd3cc8c03e80.css +5 -0
  25. package/dist/public/index.html +1 -1
  26. package/dist/public/index.txt +2 -2
  27. package/dist/server/server.d.ts +6 -1
  28. package/dist/server/server.d.ts.map +1 -1
  29. package/dist/server/server.js +111 -32
  30. package/dist/server/server.js.map +1 -1
  31. package/dist/server/watcher.d.ts +19 -0
  32. package/dist/server/watcher.d.ts.map +1 -0
  33. package/dist/server/watcher.js +76 -0
  34. package/dist/server/watcher.js.map +1 -0
  35. package/package.json +3 -2
  36. package/dist/public/_next/static/chunks/app/page-72fc8cefe60ad1d7.js +0 -1
  37. package/dist/public/_next/static/chunks/main-7be9b0d6fba5e000.js +0 -1
  38. package/dist/public/_next/static/css/14aedabfb1f06bdb.css +0 -3
  39. package/dist/public/_next/static/uP1Ux3UC4o-JCDXNPB44Y/_buildManifest.js +0 -1
  40. /package/dist/public/_next/static/{uP1Ux3UC4o-JCDXNPB44Y → EjG9asgaOWf0-7fNJq_Sd}/_ssgManifest.js +0 -0
  41. /package/dist/public/_next/static/chunks/{117-373243894bd7fac6.js → 117-c710cb30aa7ed4f8.js} +0 -0
  42. /package/dist/public/_next/static/chunks/app/_not-found/{page-4b9eb8aab41bf6df.js → page-c8219ab21dbb5ed7.js} +0 -0
  43. /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
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.3-blue)](https://www.typescriptlang.org/)
7
- [![Test Coverage](https://img.shields.io/badge/coverage-98.33%25-brightgreen)](https://vitest.dev/)
7
+ [![npm](https://img.shields.io/npm/v/agent-scope)](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
- - 🎯 **Deterministic** - Pure function state computation from files
14
- - 📁 **File-based** - No database, just markdown + JSONL
15
- - 👀 **Observer-only** - Passive monitoring, not an agent wrapper
16
- - 🤖 **Model-agnostic** - Works with any AI agent or framework
17
- - 📊 **Real-time dashboard** - Track progress, blockers, and failures
18
- - 🔒 **Local-first** - All data stays on your machine
19
- - **Type-safe** - Built with TypeScript in strict mode
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
- ## Installation
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
- npm install -g agent-scope
37
+ npx agent-scope start
25
38
  ```
26
39
 
27
- Or use directly with npx:
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
- ## Quick Start
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
- ### 1. Initialize in your project
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
- This creates a `.agent-scope/` directory with:
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
- Edit `.agent-scope/queue.md`:
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
- ### 3. Log task completion
107
+ ### Custom Templates
67
108
 
68
- Your agent writes to `.agent-scope/execution.log`:
109
+ Configure heading patterns in `.agent-scope/config.json`:
69
110
 
70
111
  ```json
71
- {"task_id":"S1-T1","status":"DONE","timestamp":"2026-02-16T14:31:22Z","agent":"claude"}
72
- {"task_id":"S1-T2","status":"FAILED","timestamp":"2026-02-16T14:33:10Z","agent":"claude","meta":{"reason":"timeout"}}
73
- ```
74
-
75
- ### 4. Start the dashboard
76
-
77
- ```bash
78
- npx agent-scope start
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
- Opens `http://localhost:4317` with live progress visualization.
82
-
83
- ## Dashboard Features
123
+ ### Validation
84
124
 
85
- ### Executive Summary
86
- - Total tasks, done, failed, blocked, ready counts
87
- - Overall success rate calculation
88
- - Last updated timestamp
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
- ### Slice Progress
91
- - Visual progress bars per slice
92
- - Percentage completion tracking
93
- - Task distribution breakdown
130
+ ## Execution Log Format (Plan Mode)
94
131
 
95
- ### Task Table
96
- - Filter by status (READY, BLOCKED, DONE, FAILED)
97
- - View dependencies and blockers
98
- - Click any task for full details
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
- ### Task Details
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
- ## Task Queue Format
140
+ ## Architecture
107
141
 
108
- ### Markdown DSL
142
+ ### Status Computation (Plan Mode)
109
143
 
110
- ```markdown
111
- # Slice S1
144
+ ```
145
+ Priority: FAILED > BLOCKED(explicit) > DONE > BLOCKED(computed) > READY
112
146
 
113
- ## S1-T1
114
- Area: <category>
115
- Depends: - # No dependencies, or comma-separated IDs
116
- Description: <what to do>
117
- AC: <acceptance criteria>
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
- ### Validation
155
+ ### Tech Stack
121
156
 
122
- agent-scope validates:
123
- - All required fields present
124
- - No duplicate task IDs
125
- - No unknown dependencies
126
- - No circular dependencies (DFS detection)
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
- ## Execution Log Format
164
+ ## API Reference
129
165
 
130
- ### JSONL Schema
166
+ ### `GET /health`
131
167
 
132
- ```typescript
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
- ### Behavior
172
+ ### `GET /sessions`
143
173
 
144
- - Latest event per task wins (by timestamp)
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
- ## Architecture
176
+ ### `GET /sessions/:id`
149
177
 
150
- ### Core Principles
178
+ Get tasks for a specific session.
151
179
 
152
- 1. **Deterministic** - Same inputs always produce same output
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
- ### Status Computation
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
- Priority: `FAILED > DONE > BLOCKED > READY`
184
+ ### `GET /snapshot`
168
185
 
169
- ### Tech Stack
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/yourusername/agent-scope.git
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
- ### Build
189
-
190
- ```bash
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
- │ │ └─ stateEngine.ts # Snapshot computation
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
- │ │ └─ server.ts # Fastify API
213
+ │ │ ├─ server.ts # Fastify API + SSE
214
+ │ │ └─ watcher.ts # chokidar file watching
215
215
  │ └─ cli.ts # Commander CLI
216
- ├─ tests/core/ # Unit tests (62 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 (`git checkout -b feature/amazing`)
228
+ 2. Create a feature branch
291
229
  3. Write tests for new functionality
292
- 4. Ensure `npm test` passes with 95%+ coverage
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.1.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
- Or for failures:
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\`: Either "DONE" or "FAILED"
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
- .action(async () => {
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
- // Verify .agent-scope/ exists
91
- if (!existsSync(agentScopeDir)) {
92
- console.error('❌ .agent-scope/ not found. Run "agent-scope init" first.');
93
- process.exit(1);
94
- }
95
- // Read config
96
- const configPath = join(agentScopeDir, 'config.json');
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
- let config;
102
- try {
103
- const configContent = await import('fs').then(fs => fs.promises.readFile(configPath, 'utf-8'));
104
- config = JSON.parse(configContent);
105
- }
106
- catch (error) {
107
- console.error('❌ Failed to read config.json:', error);
108
- process.exit(1);
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
- // Start server
114
- await startServer(agentScopeDir, port);
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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -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 FAILED)`);
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":"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"}
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,CAmH5D"}
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"}