takt 0.1.7 → 0.2.1
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 +179 -43
- package/dist/agents/runner.d.ts +3 -1
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +15 -0
- package/dist/agents/runner.js.map +1 -1
- package/dist/claude/client.d.ts +3 -1
- package/dist/claude/client.d.ts.map +1 -1
- package/dist/claude/client.js +17 -0
- package/dist/claude/client.js.map +1 -1
- package/dist/cli.d.ts +9 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +73 -18
- package/dist/cli.js.map +1 -1
- package/dist/commands/addTask.d.ts +15 -0
- package/dist/commands/addTask.d.ts.map +1 -0
- package/dist/commands/addTask.js +119 -0
- package/dist/commands/addTask.js.map +1 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +18 -5
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +4 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +4 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/refreshBuiltin.d.ts +11 -0
- package/dist/commands/refreshBuiltin.d.ts.map +1 -0
- package/dist/commands/refreshBuiltin.js +37 -0
- package/dist/commands/refreshBuiltin.js.map +1 -0
- package/dist/commands/reviewTasks.d.ts +32 -0
- package/dist/commands/reviewTasks.d.ts.map +1 -0
- package/dist/commands/reviewTasks.js +198 -0
- package/dist/commands/reviewTasks.js.map +1 -0
- package/dist/commands/taskExecution.d.ts +24 -1
- package/dist/commands/taskExecution.d.ts.map +1 -1
- package/dist/commands/taskExecution.js +100 -36
- package/dist/commands/taskExecution.js.map +1 -1
- package/dist/commands/watchTasks.d.ts +12 -0
- package/dist/commands/watchTasks.d.ts.map +1 -0
- package/dist/commands/watchTasks.js +68 -0
- package/dist/commands/watchTasks.js.map +1 -0
- package/dist/commands/workflowExecution.d.ts +5 -1
- package/dist/commands/workflowExecution.d.ts.map +1 -1
- package/dist/commands/workflowExecution.js +35 -12
- package/dist/commands/workflowExecution.js.map +1 -1
- package/dist/config/initialization.d.ts +2 -0
- package/dist/config/initialization.d.ts.map +1 -1
- package/dist/config/initialization.js +12 -2
- package/dist/config/initialization.js.map +1 -1
- package/dist/config/paths.d.ts +1 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +1 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/sessionStore.d.ts +5 -0
- package/dist/config/sessionStore.d.ts.map +1 -1
- package/dist/config/sessionStore.js +1 -1
- package/dist/config/sessionStore.js.map +1 -1
- package/dist/config/workflowLoader.d.ts.map +1 -1
- package/dist/config/workflowLoader.js +1 -0
- package/dist/config/workflowLoader.js.map +1 -1
- package/dist/models/schemas.d.ts +22 -0
- package/dist/models/schemas.d.ts.map +1 -1
- package/dist/models/schemas.js +8 -0
- package/dist/models/schemas.js.map +1 -1
- package/dist/models/types.d.ts +8 -2
- package/dist/models/types.d.ts.map +1 -1
- package/dist/prompt/index.d.ts +60 -11
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +246 -72
- package/dist/prompt/index.js.map +1 -1
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +2 -0
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +33 -9
- package/dist/resources/index.js.map +1 -1
- package/dist/task/autoCommit.d.ts +28 -0
- package/dist/task/autoCommit.d.ts.map +1 -0
- package/dist/task/autoCommit.js +68 -0
- package/dist/task/autoCommit.js.map +1 -0
- package/dist/task/display.d.ts.map +1 -1
- package/dist/task/display.js +19 -1
- package/dist/task/display.js.map +1 -1
- package/dist/task/index.d.ts +5 -0
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +5 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/parser.d.ts +33 -0
- package/dist/task/parser.d.ts.map +1 -0
- package/dist/task/parser.js +86 -0
- package/dist/task/parser.js.map +1 -0
- package/dist/task/runner.d.ts +6 -0
- package/dist/task/runner.d.ts.map +1 -1
- package/dist/task/runner.js +33 -42
- package/dist/task/runner.js.map +1 -1
- package/dist/task/schema.d.ts +32 -0
- package/dist/task/schema.d.ts.map +1 -0
- package/dist/task/schema.js +31 -0
- package/dist/task/schema.js.map +1 -0
- package/dist/task/watcher.d.ts +33 -0
- package/dist/task/watcher.d.ts.map +1 -0
- package/dist/task/watcher.js +69 -0
- package/dist/task/watcher.js.map +1 -0
- package/dist/task/worktree.d.ts +70 -0
- package/dist/task/worktree.d.ts.map +1 -0
- package/dist/task/worktree.js +221 -0
- package/dist/task/worktree.js.map +1 -0
- package/dist/utils/debug.d.ts +6 -1
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +30 -24
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/session.d.ts +20 -0
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +32 -3
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/slug.d.ts +12 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +18 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/text.d.ts +22 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +54 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/workflow/engine.d.ts +5 -6
- package/dist/workflow/engine.d.ts.map +1 -1
- package/dist/workflow/engine.js +32 -12
- package/dist/workflow/engine.js.map +1 -1
- package/dist/workflow/index.d.ts +2 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/instruction-builder.d.ts +31 -2
- package/dist/workflow/instruction-builder.d.ts.map +1 -1
- package/dist/workflow/instruction-builder.js +69 -1
- package/dist/workflow/instruction-builder.js.map +1 -1
- package/dist/workflow/transitions.d.ts.map +1 -1
- package/dist/workflow/transitions.js +1 -0
- package/dist/workflow/transitions.js.map +1 -1
- package/dist/workflow/types.d.ts +5 -1
- package/dist/workflow/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/resources/global/en/workflows/default.yaml +22 -1
- package/resources/global/en/workflows/simple.yaml +18 -1
- package/resources/global/ja/agents/default/ai-reviewer.md +24 -1
- package/resources/global/ja/agents/default/architect.md +157 -4
- package/resources/global/ja/agents/default/coder.md +1 -0
- package/resources/global/ja/workflows/default.yaml +38 -1
- package/resources/global/ja/workflows/expert-review.yaml +169 -10
- package/resources/global/ja/workflows/simple.yaml +18 -1
package/README.md
CHANGED
|
@@ -23,26 +23,40 @@ npm install -g takt
|
|
|
23
23
|
## Quick Start
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
# Run a task (will prompt for workflow selection)
|
|
26
|
+
# Run a task (will prompt for workflow selection and optional worktree creation)
|
|
27
27
|
takt "Add a login feature"
|
|
28
28
|
|
|
29
|
-
#
|
|
30
|
-
takt /
|
|
29
|
+
# Add a task to the queue
|
|
30
|
+
takt /add-task "Fix the login bug"
|
|
31
31
|
|
|
32
32
|
# Run all pending tasks
|
|
33
33
|
takt /run-tasks
|
|
34
|
+
|
|
35
|
+
# Watch for tasks and auto-execute
|
|
36
|
+
takt /watch
|
|
37
|
+
|
|
38
|
+
# Review worktree results (merge or delete)
|
|
39
|
+
takt /review-tasks
|
|
40
|
+
|
|
41
|
+
# Switch workflow
|
|
42
|
+
takt /switch
|
|
34
43
|
```
|
|
35
44
|
|
|
36
45
|
## Commands
|
|
37
46
|
|
|
38
|
-
| Command | Description |
|
|
39
|
-
|
|
40
|
-
| `takt "task"` | Execute task with workflow
|
|
41
|
-
| `takt -r "task"` | Execute task, resuming previous session |
|
|
42
|
-
| `takt /run-tasks` | Run all pending tasks |
|
|
43
|
-
| `takt /
|
|
44
|
-
| `takt /
|
|
45
|
-
| `takt /
|
|
47
|
+
| Command | Alias | Description |
|
|
48
|
+
|---------|-------|-------------|
|
|
49
|
+
| `takt "task"` | | Execute task with current workflow (continues session) |
|
|
50
|
+
| `takt -r "task"` | | Execute task, resuming previous session |
|
|
51
|
+
| `takt /run-tasks` | `/run` | Run all pending tasks from `.takt/tasks/` |
|
|
52
|
+
| `takt /watch` | | Watch `.takt/tasks/` and auto-execute tasks (stays resident) |
|
|
53
|
+
| `takt /add-task` | `/add` | Add a new task interactively (YAML format, multiline supported) |
|
|
54
|
+
| `takt /review-tasks` | `/review` | Review worktree task results (try merge, merge & cleanup, or delete) |
|
|
55
|
+
| `takt /switch` | | Switch workflow interactively |
|
|
56
|
+
| `takt /clear` | | Clear agent conversation sessions |
|
|
57
|
+
| `takt /refresh-builtin` | | Update builtin agents/workflows to latest version |
|
|
58
|
+
| `takt /config` | | Display current configuration |
|
|
59
|
+
| `takt /help` | | Show help |
|
|
46
60
|
|
|
47
61
|
## Workflows
|
|
48
62
|
|
|
@@ -88,11 +102,28 @@ steps:
|
|
|
88
102
|
next_step: implement
|
|
89
103
|
```
|
|
90
104
|
|
|
105
|
+
## Built-in Workflows
|
|
106
|
+
|
|
107
|
+
TAKT ships with several built-in workflows:
|
|
108
|
+
|
|
109
|
+
| Workflow | Description |
|
|
110
|
+
|----------|-------------|
|
|
111
|
+
| `default` | Full development workflow: plan → implement → architect review → AI review → security review → supervisor approval. Includes fix loops for each review stage. |
|
|
112
|
+
| `simple` | Simplified version of default: plan → implement → architect review → AI review → supervisor. No intermediate fix steps. |
|
|
113
|
+
| `research` | Research workflow: planner → digger → supervisor. Autonomously researches topics without asking questions. |
|
|
114
|
+
| `expert-review` | Comprehensive review with domain experts: CQRS+ES, Frontend, AI, Security, QA reviews with fix loops. |
|
|
115
|
+
| `magi` | Deliberation system inspired by Evangelion. Three AI personas (MELCHIOR, BALTHASAR, CASPER) analyze and vote. |
|
|
116
|
+
|
|
117
|
+
Switch between workflows with `takt /switch`.
|
|
118
|
+
|
|
91
119
|
## Built-in Agents
|
|
92
120
|
|
|
93
121
|
- **coder** - Implements features and fixes bugs
|
|
94
122
|
- **architect** - Reviews code and provides feedback
|
|
95
123
|
- **supervisor** - Final verification and approval
|
|
124
|
+
- **planner** - Task analysis and implementation planning
|
|
125
|
+
- **ai-reviewer** - AI-generated code quality review
|
|
126
|
+
- **security** - Security vulnerability assessment
|
|
96
127
|
|
|
97
128
|
## Custom Agents
|
|
98
129
|
|
|
@@ -149,6 +180,17 @@ Available Codex models:
|
|
|
149
180
|
├── config.yaml # Global config (provider, model, workflows, etc.)
|
|
150
181
|
├── workflows/ # Workflow definitions
|
|
151
182
|
└── agents/ # Agent prompt files
|
|
183
|
+
|
|
184
|
+
.takt/ # Project-level config
|
|
185
|
+
├── agents.yaml # Custom agent definitions
|
|
186
|
+
├── tasks/ # Pending task files (.yaml, .md)
|
|
187
|
+
├── completed/ # Completed tasks with reports
|
|
188
|
+
├── worktrees/ # Git worktrees for isolated task execution
|
|
189
|
+
├── reports/ # Execution reports (auto-generated)
|
|
190
|
+
└── logs/ # Session logs (incremental)
|
|
191
|
+
├── latest.json # Pointer to current/latest session
|
|
192
|
+
├── previous.json # Pointer to previous session
|
|
193
|
+
└── {sessionId}.json # Full session log per workflow run
|
|
152
194
|
```
|
|
153
195
|
|
|
154
196
|
### Global Configuration
|
|
@@ -189,21 +231,14 @@ takt -r "The bug occurs when the password contains special characters"
|
|
|
189
231
|
|
|
190
232
|
The `-r` flag preserves the agent's conversation history, allowing for natural back-and-forth interaction.
|
|
191
233
|
|
|
192
|
-
###
|
|
234
|
+
### Interactive Workflow
|
|
193
235
|
|
|
194
|
-
|
|
236
|
+
When running `takt "task"`, you are prompted to:
|
|
195
237
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
takt "Should we migrate from REST to GraphQL?"
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
The three MAGI personas:
|
|
202
|
-
- **MELCHIOR-1** (Scientist): Logical, data-driven analysis
|
|
203
|
-
- **BALTHASAR-2** (Nurturer): Team and human-centered perspective
|
|
204
|
-
- **CASPER-3** (Pragmatist): Practical, real-world considerations
|
|
238
|
+
1. **Select a workflow** - Choose from available workflows (arrow keys, ESC to cancel)
|
|
239
|
+
2. **Create a worktree** (optional) - Optionally run the task in an isolated git worktree
|
|
205
240
|
|
|
206
|
-
|
|
241
|
+
This interactive flow ensures each task runs with the right workflow and isolation level.
|
|
207
242
|
|
|
208
243
|
### Adding Custom Workflows
|
|
209
244
|
|
|
@@ -268,27 +303,33 @@ You are a code reviewer focused on security.
|
|
|
268
303
|
- [REVIEWER:REJECT] if issues found (list them)
|
|
269
304
|
```
|
|
270
305
|
|
|
271
|
-
###
|
|
306
|
+
### Task Management
|
|
272
307
|
|
|
273
|
-
|
|
308
|
+
TAKT supports batch task processing through task files in `.takt/tasks/`. Both `.yaml`/`.yml` and `.md` file formats are supported.
|
|
309
|
+
|
|
310
|
+
#### Adding Tasks with `/add-task`
|
|
274
311
|
|
|
275
312
|
```bash
|
|
276
|
-
#
|
|
277
|
-
|
|
278
|
-
echo "Refactor the database layer" > .takt/tasks/002-refactor-db.md
|
|
279
|
-
echo "Update API documentation" > .takt/tasks/003-update-docs.md
|
|
313
|
+
# Quick add (no worktree)
|
|
314
|
+
takt /add-task "Add authentication feature"
|
|
280
315
|
|
|
281
|
-
#
|
|
282
|
-
takt /
|
|
316
|
+
# Interactive mode (prompts for worktree, branch, workflow options)
|
|
317
|
+
takt /add-task
|
|
283
318
|
```
|
|
284
319
|
|
|
285
|
-
|
|
286
|
-
- Tasks are executed in alphabetical order (use prefixes like `001-`, `002-` for ordering)
|
|
287
|
-
- Each task file should contain a description of what needs to be done
|
|
288
|
-
- Completed tasks are moved to `.takt/completed/` with execution reports
|
|
289
|
-
- New tasks added during execution will be picked up dynamically
|
|
320
|
+
#### Task File Formats
|
|
290
321
|
|
|
291
|
-
**
|
|
322
|
+
**YAML format** (recommended, supports worktree/branch/workflow options):
|
|
323
|
+
|
|
324
|
+
```yaml
|
|
325
|
+
# .takt/tasks/add-auth.yaml
|
|
326
|
+
task: "Add authentication feature"
|
|
327
|
+
worktree: true # Run in isolated git worktree
|
|
328
|
+
branch: "feat/add-auth" # Branch name (auto-generated if omitted)
|
|
329
|
+
workflow: "default" # Workflow override (uses current if omitted)
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
**Markdown format** (simple, backward compatible):
|
|
292
333
|
|
|
293
334
|
```markdown
|
|
294
335
|
# .takt/tasks/add-login-feature.md
|
|
@@ -301,10 +342,58 @@ Requirements:
|
|
|
301
342
|
- Error handling for failed attempts
|
|
302
343
|
```
|
|
303
344
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
345
|
+
#### Git Worktree Isolation
|
|
346
|
+
|
|
347
|
+
YAML task files can specify `worktree` to run each task in an isolated git worktree, keeping the main working directory clean:
|
|
348
|
+
|
|
349
|
+
- `worktree: true` - Auto-create at `.takt/worktrees/{timestamp}-{task-slug}/`
|
|
350
|
+
- `worktree: "/path/to/dir"` - Create at specified path
|
|
351
|
+
- `branch: "feat/xxx"` - Use specified branch (auto-generated as `takt/{timestamp}-{slug}` if omitted)
|
|
352
|
+
- Omit `worktree` - Run in current working directory (default)
|
|
353
|
+
|
|
354
|
+
When a worktree task completes successfully, TAKT automatically commits all changes (`auto-commit`). Use `takt /review-tasks` to review, try-merge, or delete completed worktree branches.
|
|
355
|
+
|
|
356
|
+
#### Running Tasks with `/run-tasks`
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
takt /run-tasks
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
- Tasks are executed in alphabetical order (use prefixes like `001-`, `002-` for ordering)
|
|
363
|
+
- Completed tasks are moved to `.takt/completed/` with execution reports
|
|
364
|
+
- New tasks added during execution will be picked up dynamically
|
|
365
|
+
|
|
366
|
+
#### Watching Tasks with `/watch`
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
takt /watch
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
Watch mode polls `.takt/tasks/` for new task files and auto-executes them as they appear. The process stays resident until `Ctrl+C`. This is useful for:
|
|
373
|
+
- CI/CD pipelines that generate task files
|
|
374
|
+
- Automated workflows where tasks are added by external processes
|
|
375
|
+
- Long-running development sessions where tasks are queued over time
|
|
376
|
+
|
|
377
|
+
#### Reviewing Worktree Results with `/review-tasks`
|
|
378
|
+
|
|
379
|
+
```bash
|
|
380
|
+
takt /review-tasks
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Lists all `takt/`-prefixed worktree branches with file change counts. For each branch you can:
|
|
384
|
+
- **Try merge** - Attempt merge into main (dry-run check, then actual merge)
|
|
385
|
+
- **Merge & cleanup** - Merge and remove the worktree
|
|
386
|
+
- **Delete** - Remove the worktree and branch without merging
|
|
387
|
+
|
|
388
|
+
### Session Logs
|
|
389
|
+
|
|
390
|
+
TAKT writes session logs incrementally to `.takt/logs/`. Logs are saved at workflow start, after each step, and at workflow end — so even if the process crashes mid-execution, partial logs are preserved.
|
|
391
|
+
|
|
392
|
+
- `.takt/logs/latest.json` - Pointer to the current (or most recent) session
|
|
393
|
+
- `.takt/logs/previous.json` - Pointer to the previous session
|
|
394
|
+
- `.takt/logs/{sessionId}.json` - Full session log with step history
|
|
395
|
+
|
|
396
|
+
Agents can read `previous.json` to pick up context from a prior run (e.g., when resuming with `takt "続けて"`).
|
|
308
397
|
|
|
309
398
|
### Workflow Variables
|
|
310
399
|
|
|
@@ -313,11 +402,57 @@ Available variables in `instruction_template`:
|
|
|
313
402
|
| Variable | Description |
|
|
314
403
|
|----------|-------------|
|
|
315
404
|
| `{task}` | Original user request |
|
|
316
|
-
| `{iteration}` |
|
|
317
|
-
| `{max_iterations}` | Maximum iterations |
|
|
405
|
+
| `{iteration}` | Workflow-wide turn count (total steps executed) |
|
|
406
|
+
| `{max_iterations}` | Maximum iterations allowed |
|
|
407
|
+
| `{step_iteration}` | Per-step iteration count (how many times THIS step has run) |
|
|
318
408
|
| `{previous_response}` | Previous step's output (requires `pass_previous_response: true`) |
|
|
319
409
|
| `{user_inputs}` | Additional user inputs during workflow |
|
|
320
410
|
| `{git_diff}` | Current git diff (uncommitted changes) |
|
|
411
|
+
| `{report_dir}` | Report directory name (e.g., `20250126-143052-task-summary`) |
|
|
412
|
+
|
|
413
|
+
### Designing Workflows
|
|
414
|
+
|
|
415
|
+
Each workflow step requires three key elements:
|
|
416
|
+
|
|
417
|
+
**1. Agent** - A Markdown file containing the system prompt:
|
|
418
|
+
|
|
419
|
+
```yaml
|
|
420
|
+
agent: ~/.takt/agents/default/coder.md # Path to agent prompt file
|
|
421
|
+
agent_name: coder # Display name (optional)
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
**2. Status Rules** - Define how the agent signals completion. Agents output status markers like `[CODER:DONE]` or `[ARCHITECT:REJECT]` that TAKT detects to drive transitions:
|
|
425
|
+
|
|
426
|
+
```yaml
|
|
427
|
+
status_rules_prompt: |
|
|
428
|
+
Your final output MUST include a status tag:
|
|
429
|
+
- `[CODER:DONE]` if implementation is complete
|
|
430
|
+
- `[CODER:BLOCKED]` if you cannot proceed
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
**3. Transitions** - Route to the next step based on status:
|
|
434
|
+
|
|
435
|
+
```yaml
|
|
436
|
+
transitions:
|
|
437
|
+
- condition: done # Maps to status tag DONE
|
|
438
|
+
next_step: review # Go to review step
|
|
439
|
+
- condition: blocked # Maps to status tag BLOCKED
|
|
440
|
+
next_step: ABORT # End workflow with failure
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
Available transition conditions: `done`, `blocked`, `approved`, `rejected`, `improve`, `answer`, `always`.
|
|
444
|
+
Special next_step values: `COMPLETE` (success), `ABORT` (failure).
|
|
445
|
+
|
|
446
|
+
**Step options:**
|
|
447
|
+
|
|
448
|
+
| Option | Default | Description |
|
|
449
|
+
|--------|---------|-------------|
|
|
450
|
+
| `pass_previous_response` | `true` | Pass previous step's output to `{previous_response}` |
|
|
451
|
+
| `on_no_status` | - | Behavior when no status is detected: `complete`, `continue`, `stay` |
|
|
452
|
+
| `allowed_tools` | - | List of tools the agent can use (Read, Glob, Grep, Edit, Write, Bash, etc.) |
|
|
453
|
+
| `provider` | - | Override provider for this step (`claude` or `codex`) |
|
|
454
|
+
| `model` | - | Override model for this step |
|
|
455
|
+
| `permission_mode` | `default` | Permission mode: `default`, `acceptEdits`, or `bypassPermissions` |
|
|
321
456
|
|
|
322
457
|
## API Usage
|
|
323
458
|
|
|
@@ -375,6 +510,7 @@ This ensures the project works correctly in a clean Node.js 20 environment.
|
|
|
375
510
|
- [Agent Guide](./docs/agents.md) - Configure custom agents
|
|
376
511
|
- [Changelog](./CHANGELOG.md) - Version history
|
|
377
512
|
- [Security Policy](./SECURITY.md) - Vulnerability reporting
|
|
513
|
+
- [Blog: TAKT - AI Agent Orchestration](https://zenn.dev/nrs/articles/c6842288a526d7) - Design philosophy and practical usage guide (Japanese)
|
|
378
514
|
|
|
379
515
|
## License
|
|
380
516
|
|
package/dist/agents/runner.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Agent execution runners
|
|
3
3
|
*/
|
|
4
4
|
import { type StreamCallback, type PermissionHandler, type AskUserQuestionHandler } from '../claude/process.js';
|
|
5
|
-
import type { AgentResponse, CustomAgentConfig } from '../models/types.js';
|
|
5
|
+
import type { AgentResponse, CustomAgentConfig, PermissionMode } from '../models/types.js';
|
|
6
6
|
export type { StreamCallback };
|
|
7
7
|
/** Common options for running agents */
|
|
8
8
|
export interface RunAgentOptions {
|
|
@@ -16,6 +16,8 @@ export interface RunAgentOptions {
|
|
|
16
16
|
allowedTools?: string[];
|
|
17
17
|
/** Status output rules to inject into system prompt */
|
|
18
18
|
statusRulesPrompt?: string;
|
|
19
|
+
/** Permission mode for tool execution (from workflow step) */
|
|
20
|
+
permissionMode?: PermissionMode;
|
|
19
21
|
onStream?: StreamCallback;
|
|
20
22
|
onPermissionRequest?: PermissionHandler;
|
|
21
23
|
onAskUserQuestion?: AskUserQuestionHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAKhH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAKhH,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAK3F,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;IACxC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AA6BD,sCAAsC;AACtC,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAoB9C;AAED,yBAAyB;AACzB,wBAAsB,cAAc,CAClC,WAAW,EAAE,iBAAiB,EAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CA4DxB;AAqCD,mCAAmC;AACnC,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,aAAa,CAAC,CAoDxB"}
|
package/dist/agents/runner.js
CHANGED
|
@@ -9,6 +9,8 @@ import { loadCustomAgents, loadAgentPrompt } from '../config/loader.js';
|
|
|
9
9
|
import { loadGlobalConfig } from '../config/globalConfig.js';
|
|
10
10
|
import { loadProjectConfig } from '../config/projectConfig.js';
|
|
11
11
|
import { getProvider } from '../providers/index.js';
|
|
12
|
+
import { createLogger } from '../utils/debug.js';
|
|
13
|
+
const log = createLogger('runner');
|
|
12
14
|
function resolveProvider(cwd, options, agentConfig) {
|
|
13
15
|
// Mock provider must be explicitly specified (no fallback)
|
|
14
16
|
if (options?.provider)
|
|
@@ -76,6 +78,7 @@ export async function runCustomAgent(agentConfig, task, options) {
|
|
|
76
78
|
sessionId: options.sessionId,
|
|
77
79
|
allowedTools,
|
|
78
80
|
model: resolveModel(options.cwd, options, agentConfig),
|
|
81
|
+
permissionMode: options.permissionMode,
|
|
79
82
|
onStream: options.onStream,
|
|
80
83
|
onPermissionRequest: options.onPermissionRequest,
|
|
81
84
|
onAskUserQuestion: options.onAskUserQuestion,
|
|
@@ -90,6 +93,7 @@ export async function runCustomAgent(agentConfig, task, options) {
|
|
|
90
93
|
sessionId: options.sessionId,
|
|
91
94
|
allowedTools,
|
|
92
95
|
model: resolveModel(options.cwd, options, agentConfig),
|
|
96
|
+
permissionMode: options.permissionMode,
|
|
93
97
|
onStream: options.onStream,
|
|
94
98
|
onPermissionRequest: options.onPermissionRequest,
|
|
95
99
|
onAskUserQuestion: options.onAskUserQuestion,
|
|
@@ -111,6 +115,7 @@ export async function runCustomAgent(agentConfig, task, options) {
|
|
|
111
115
|
allowedTools,
|
|
112
116
|
model: resolveModel(options.cwd, options, agentConfig),
|
|
113
117
|
statusPatterns: agentConfig.statusPatterns,
|
|
118
|
+
permissionMode: options.permissionMode,
|
|
114
119
|
onStream: options.onStream,
|
|
115
120
|
onPermissionRequest: options.onPermissionRequest,
|
|
116
121
|
onAskUserQuestion: options.onAskUserQuestion,
|
|
@@ -151,6 +156,15 @@ function extractAgentName(agentSpec) {
|
|
|
151
156
|
/** Run an agent by name or path */
|
|
152
157
|
export async function runAgent(agentSpec, task, options) {
|
|
153
158
|
const agentName = extractAgentName(agentSpec);
|
|
159
|
+
log.debug('Running agent', {
|
|
160
|
+
agentSpec,
|
|
161
|
+
agentName,
|
|
162
|
+
provider: options.provider,
|
|
163
|
+
model: options.model,
|
|
164
|
+
hasAgentPath: !!options.agentPath,
|
|
165
|
+
hasSession: !!options.sessionId,
|
|
166
|
+
permissionMode: options.permissionMode,
|
|
167
|
+
});
|
|
154
168
|
// If agentPath is provided (from workflow), use it to load prompt
|
|
155
169
|
if (options.agentPath) {
|
|
156
170
|
if (!existsSync(options.agentPath)) {
|
|
@@ -169,6 +183,7 @@ export async function runAgent(agentSpec, task, options) {
|
|
|
169
183
|
allowedTools: options.allowedTools,
|
|
170
184
|
model: resolveModel(options.cwd, options),
|
|
171
185
|
systemPrompt,
|
|
186
|
+
permissionMode: options.permissionMode,
|
|
172
187
|
onStream: options.onStream,
|
|
173
188
|
onPermissionRequest: options.onPermissionRequest,
|
|
174
189
|
onAskUserQuestion: options.onAskUserQuestion,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,eAAe,GAEhB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAA+C,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agents/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/claude/client.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type StreamCallback, type PermissionHandler, type AskUserQuestionHandler } from './process.js';
|
|
7
7
|
import type { AgentDefinition } from '@anthropic-ai/claude-agent-sdk';
|
|
8
|
-
import type { AgentResponse, Status } from '../models/types.js';
|
|
8
|
+
import type { AgentResponse, Status, PermissionMode } from '../models/types.js';
|
|
9
9
|
/** Options for calling Claude */
|
|
10
10
|
export interface ClaudeCallOptions {
|
|
11
11
|
cwd: string;
|
|
@@ -17,6 +17,8 @@ export interface ClaudeCallOptions {
|
|
|
17
17
|
statusPatterns?: Record<string, string>;
|
|
18
18
|
/** SDK agents to register for sub-agent execution */
|
|
19
19
|
agents?: Record<string, AgentDefinition>;
|
|
20
|
+
/** Permission mode for tool execution (from workflow step) */
|
|
21
|
+
permissionMode?: PermissionMode;
|
|
20
22
|
/** Enable streaming mode with callback for real-time output */
|
|
21
23
|
onStream?: StreamCallback;
|
|
22
24
|
/** Custom permission handler for interactive permission prompts */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/claude/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA6C,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACnJ,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/claude/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA6C,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACnJ,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAMhF,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzC,8DAA8D;IAC9D,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;IACxC,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,0DAA0D;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAYR;AAED,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAuBpD;AAED,oDAAoD;AACpD,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGnF;AAoBD,uCAAuC;AACvC,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAgCxB;AAED,oDAAoD;AACpD,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAgCxB;AAED,iFAAiF;AACjF,wBAAsB,eAAe,CACnC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CAMxB;AAED,sDAAsD;AACtD,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,CA+BxB"}
|
package/dist/claude/client.js
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { executeClaudeCli } from './process.js';
|
|
7
7
|
import { GENERIC_STATUS_PATTERNS } from '../models/schemas.js';
|
|
8
|
+
import { createLogger } from '../utils/debug.js';
|
|
9
|
+
const log = createLogger('client');
|
|
8
10
|
/** Detect status from agent output content */
|
|
9
11
|
export function detectStatus(content, patterns) {
|
|
10
12
|
for (const [status, pattern] of Object.entries(patterns)) {
|
|
@@ -71,6 +73,7 @@ export async function callClaude(agentType, prompt, options) {
|
|
|
71
73
|
maxTurns: options.maxTurns,
|
|
72
74
|
systemPrompt: options.systemPrompt,
|
|
73
75
|
agents: options.agents,
|
|
76
|
+
permissionMode: options.permissionMode,
|
|
74
77
|
onStream: options.onStream,
|
|
75
78
|
onPermissionRequest: options.onPermissionRequest,
|
|
76
79
|
onAskUserQuestion: options.onAskUserQuestion,
|
|
@@ -79,12 +82,16 @@ export async function callClaude(agentType, prompt, options) {
|
|
|
79
82
|
const result = await executeClaudeCli(prompt, spawnOptions);
|
|
80
83
|
const patterns = options.statusPatterns || getBuiltinStatusPatterns(agentType);
|
|
81
84
|
const status = determineStatus(result, patterns);
|
|
85
|
+
if (!result.success && result.error) {
|
|
86
|
+
log.error('Agent query failed', { agent: agentType, error: result.error });
|
|
87
|
+
}
|
|
82
88
|
return {
|
|
83
89
|
agent: agentType,
|
|
84
90
|
status,
|
|
85
91
|
content: result.content,
|
|
86
92
|
timestamp: new Date(),
|
|
87
93
|
sessionId: result.sessionId,
|
|
94
|
+
error: result.error,
|
|
88
95
|
};
|
|
89
96
|
}
|
|
90
97
|
/** Call Claude with a custom agent configuration */
|
|
@@ -96,6 +103,7 @@ export async function callClaudeCustom(agentName, prompt, systemPrompt, options)
|
|
|
96
103
|
model: options.model,
|
|
97
104
|
maxTurns: options.maxTurns,
|
|
98
105
|
systemPrompt,
|
|
106
|
+
permissionMode: options.permissionMode,
|
|
99
107
|
onStream: options.onStream,
|
|
100
108
|
onPermissionRequest: options.onPermissionRequest,
|
|
101
109
|
onAskUserQuestion: options.onAskUserQuestion,
|
|
@@ -105,12 +113,16 @@ export async function callClaudeCustom(agentName, prompt, systemPrompt, options)
|
|
|
105
113
|
// Use provided patterns, or fall back to built-in patterns for known agents
|
|
106
114
|
const patterns = options.statusPatterns || getBuiltinStatusPatterns(agentName);
|
|
107
115
|
const status = determineStatus(result, patterns);
|
|
116
|
+
if (!result.success && result.error) {
|
|
117
|
+
log.error('Agent query failed', { agent: agentName, error: result.error });
|
|
118
|
+
}
|
|
108
119
|
return {
|
|
109
120
|
agent: agentName,
|
|
110
121
|
status,
|
|
111
122
|
content: result.content,
|
|
112
123
|
timestamp: new Date(),
|
|
113
124
|
sessionId: result.sessionId,
|
|
125
|
+
error: result.error,
|
|
114
126
|
};
|
|
115
127
|
}
|
|
116
128
|
/** Call a Claude Code built-in agent (using claude --agent flag if available) */
|
|
@@ -130,18 +142,23 @@ export async function callClaudeSkill(skillName, prompt, options) {
|
|
|
130
142
|
allowedTools: options.allowedTools,
|
|
131
143
|
model: options.model,
|
|
132
144
|
maxTurns: options.maxTurns,
|
|
145
|
+
permissionMode: options.permissionMode,
|
|
133
146
|
onStream: options.onStream,
|
|
134
147
|
onPermissionRequest: options.onPermissionRequest,
|
|
135
148
|
onAskUserQuestion: options.onAskUserQuestion,
|
|
136
149
|
bypassPermissions: options.bypassPermissions,
|
|
137
150
|
};
|
|
138
151
|
const result = await executeClaudeCli(fullPrompt, spawnOptions);
|
|
152
|
+
if (!result.success && result.error) {
|
|
153
|
+
log.error('Skill query failed', { skill: skillName, error: result.error });
|
|
154
|
+
}
|
|
139
155
|
return {
|
|
140
156
|
agent: `skill:${skillName}`,
|
|
141
157
|
status: result.success ? 'done' : 'blocked',
|
|
142
158
|
content: result.content,
|
|
143
159
|
timestamp: new Date(),
|
|
144
160
|
sessionId: result.sessionId,
|
|
161
|
+
error: result.error,
|
|
145
162
|
};
|
|
146
163
|
}
|
|
147
164
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/claude/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAqG,MAAM,cAAc,CAAC;AAGnJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/claude/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAqG,MAAM,cAAc,CAAC;AAGnJ,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAyBnC,8CAA8C;AAC9C,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,QAAgC;IAEhC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,OAAO,MAAgB,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,uBAAuB;IACvB,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG;QACxB,YAAY,EAAO,QAAQ;QAC3B,YAAY,EAAO,QAAQ;QAC3B,YAAY,EAAO,QAAQ;QAC3B,YAAY,EAAO,QAAQ;QAC3B,oBAAoB,EAAE,SAAS;QAC/B,oBAAoB,EAAE,SAAS;KAChC,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;QAC1C,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,wBAAwB,CAAC,UAAkB;IACzD,gDAAgD;IAChD,OAAO,uBAAuB,CAAC;AACjC,CAAC;AAED,mCAAmC;AACnC,SAAS,eAAe,CACtB,MAA0F,EAC1F,QAAgC;IAEhC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,iEAAiE;QACjE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,OAAO,aAAa,CAAC;QACvB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,yEAAyE;IACzE,uDAAuD;IACvD,MAAM,sBAAsB,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC;IACpE,OAAO,YAAY,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAiB,EACjB,MAAc,EACd,OAA0B;IAE1B,MAAM,YAAY,GAAuB;QACvC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,MAAc,EACd,YAAoB,EACpB,OAA0B;IAE1B,MAAM,YAAY,GAAuB;QACvC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY;QACZ,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5D,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,MAAM;QACN,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,eAAuB,EACvB,MAAc,EACd,OAA0B;IAE1B,sCAAsC;IACtC,8DAA8D;IAC9D,MAAM,YAAY,GAAG,eAAe,eAAe,+BAA+B,eAAe,YAAY,CAAC;IAE9G,OAAO,gBAAgB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,MAAc,EACd,OAA0B;IAE1B,qCAAqC;IACrC,MAAM,UAAU,GAAG,IAAI,SAAS,OAAO,MAAM,EAAE,CAAC;IAEhD,MAAM,YAAY,GAAuB;QACvC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;QAC5C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEhE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO;QACL,KAAK,EAAE,SAAS,SAAS,EAAE;QAC3B,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QAC3C,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;AACJ,CAAC"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -10,5 +10,13 @@
|
|
|
10
10
|
* takt /help - Show help
|
|
11
11
|
* takt /config - Select permission mode interactively
|
|
12
12
|
*/
|
|
13
|
-
export {
|
|
13
|
+
export interface WorktreeConfirmationResult {
|
|
14
|
+
execCwd: string;
|
|
15
|
+
isWorktree: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Ask user whether to create a worktree, and create one if confirmed.
|
|
19
|
+
* Returns the execution directory and whether a worktree was created.
|
|
20
|
+
*/
|
|
21
|
+
export declare function confirmAndCreateWorktree(cwd: string, task: string): Promise<WorktreeConfirmationResult>;
|
|
14
22
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAgCH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,0BAA0B,CAAC,CAcrC"}
|