agkan 3.13.0 → 3.15.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.ja.md +47 -0
- package/README.md +47 -0
- package/dist/board/BulkRunService.d.ts.map +1 -1
- package/dist/board/BulkRunService.js +21 -5
- package/dist/board/BulkRunService.js.map +1 -1
- package/dist/board/boardRoutes.d.ts +4 -4
- package/dist/board/boardRoutes.d.ts.map +1 -1
- package/dist/board/boardRoutes.js +71 -122
- package/dist/board/boardRoutes.js.map +1 -1
- package/dist/board/boardStyles.d.ts +1 -1
- package/dist/board/boardStyles.d.ts.map +1 -1
- package/dist/board/boardStyles.js +5 -1
- package/dist/board/boardStyles.js.map +1 -1
- package/dist/board/client/main.js +228 -154
- package/dist/board/server.d.ts.map +1 -1
- package/dist/board/server.js +5 -2
- package/dist/board/server.js.map +1 -1
- package/dist/cli/commands/agent-guide.d.ts.map +1 -1
- package/dist/cli/commands/agent-guide.js +8 -1
- package/dist/cli/commands/agent-guide.js.map +1 -1
- package/dist/cli/commands/block/add.d.ts.map +1 -1
- package/dist/cli/commands/block/add.js +2 -0
- package/dist/cli/commands/block/add.js.map +1 -1
- package/dist/cli/commands/block/remove.d.ts.map +1 -1
- package/dist/cli/commands/block/remove.js +2 -0
- package/dist/cli/commands/block/remove.js.map +1 -1
- package/dist/cli/commands/config/get.d.ts +5 -0
- package/dist/cli/commands/config/get.d.ts.map +1 -0
- package/dist/cli/commands/config/get.js +97 -0
- package/dist/cli/commands/config/get.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +9 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/meta/delete.d.ts.map +1 -1
- package/dist/cli/commands/meta/delete.js +6 -0
- package/dist/cli/commands/meta/delete.js.map +1 -1
- package/dist/cli/commands/meta/set.d.ts.map +1 -1
- package/dist/cli/commands/meta/set.js +7 -0
- package/dist/cli/commands/meta/set.js.map +1 -1
- package/dist/cli/commands/tag/attach.d.ts.map +1 -1
- package/dist/cli/commands/tag/attach.js +10 -19
- package/dist/cli/commands/tag/attach.js.map +1 -1
- package/dist/cli/commands/tag/delete.d.ts.map +1 -1
- package/dist/cli/commands/tag/delete.js +8 -20
- package/dist/cli/commands/tag/delete.js.map +1 -1
- package/dist/cli/commands/tag/detach.d.ts.map +1 -1
- package/dist/cli/commands/tag/detach.js +10 -19
- package/dist/cli/commands/tag/detach.js.map +1 -1
- package/dist/cli/commands/tag/rename.d.ts.map +1 -1
- package/dist/cli/commands/tag/rename.js +8 -20
- package/dist/cli/commands/tag/rename.js.map +1 -1
- package/dist/cli/commands/task/list.d.ts.map +1 -1
- package/dist/cli/commands/task/list.js +9 -13
- package/dist/cli/commands/task/list.js.map +1 -1
- package/dist/cli/commands/task/update.d.ts.map +1 -1
- package/dist/cli/commands/task/update.js +2 -0
- package/dist/cli/commands/task/update.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/boardNotify.d.ts +2 -0
- package/dist/cli/utils/boardNotify.d.ts.map +1 -0
- package/dist/cli/utils/boardNotify.js +16 -0
- package/dist/cli/utils/boardNotify.js.map +1 -0
- package/dist/cli/utils/constants.d.ts +2 -0
- package/dist/cli/utils/constants.d.ts.map +1 -0
- package/dist/cli/utils/constants.js +5 -0
- package/dist/cli/utils/constants.js.map +1 -0
- package/dist/cli/utils/service-container.d.ts.map +1 -1
- package/dist/cli/utils/service-container.js +8 -1
- package/dist/cli/utils/service-container.js.map +1 -1
- package/dist/cli/utils/tag-resolver.d.ts +21 -0
- package/dist/cli/utils/tag-resolver.d.ts.map +1 -0
- package/dist/cli/utils/tag-resolver.js +22 -0
- package/dist/cli/utils/tag-resolver.js.map +1 -0
- package/dist/db/config.d.ts +8 -0
- package/dist/db/config.d.ts.map +1 -1
- package/dist/db/config.js +14 -0
- package/dist/db/config.js.map +1 -1
- package/dist/hooks/hook-stop.mjs +77 -32
- package/dist/services/BoardEventService.d.ts +9 -0
- package/dist/services/BoardEventService.d.ts.map +1 -0
- package/dist/services/BoardEventService.js +22 -0
- package/dist/services/BoardEventService.js.map +1 -0
- package/dist/services/ClaudeProcessService.d.ts.map +1 -1
- package/dist/services/ClaudeProcessService.js +3 -1
- package/dist/services/ClaudeProcessService.js.map +1 -1
- package/dist/services/TaskService.d.ts +3 -1
- package/dist/services/TaskService.d.ts.map +1 -1
- package/dist/services/TaskService.js +27 -15
- package/dist/services/TaskService.js.map +1 -1
- package/dist/terminal/PtySessionService.d.ts.map +1 -1
- package/dist/terminal/PtySessionService.js +13 -3
- package/dist/terminal/PtySessionService.js.map +1 -1
- package/package.json +1 -1
package/README.ja.md
CHANGED
|
@@ -351,6 +351,24 @@ agkan ps --json
|
|
|
351
351
|
}
|
|
352
352
|
```
|
|
353
353
|
|
|
354
|
+
### 設定確認
|
|
355
|
+
|
|
356
|
+
`.agkan.yml` の設定値(デフォルト適用後の解決済み値)を取得します:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
agkan config get # 全設定を表示
|
|
360
|
+
agkan config get board.port # 特定キーを取得(ドット記法)
|
|
361
|
+
agkan config get --json # JSON出力
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
出力例:
|
|
365
|
+
```
|
|
366
|
+
✓ Resolved config
|
|
367
|
+
|
|
368
|
+
path: /workspace/.agkan/data.db
|
|
369
|
+
board.port: 8080
|
|
370
|
+
```
|
|
371
|
+
|
|
354
372
|
### ヘルプの表示
|
|
355
373
|
|
|
356
374
|
コマンド一覧:
|
|
@@ -1035,6 +1053,35 @@ models:
|
|
|
1035
1053
|
effort: low
|
|
1036
1054
|
```
|
|
1037
1055
|
|
|
1056
|
+
### パーミッションモード設定
|
|
1057
|
+
|
|
1058
|
+
`.agkan.yml` の `permissionMode` フィールドで、ボードからタスクを実行する際のClaude CLIのパーミッションチェック方法を制御できます。
|
|
1059
|
+
|
|
1060
|
+
#### 利用可能な値
|
|
1061
|
+
|
|
1062
|
+
| 値 | Claude CLI フラグ | 説明 |
|
|
1063
|
+
|-------|----------------|-------------|
|
|
1064
|
+
| (未設定) | `--permission-mode auto` | デフォルト。Claudeがautoパーミッションモードを使用 |
|
|
1065
|
+
| `auto` | `--permission-mode auto` | Claudeがautoパーミッションモードを使用 |
|
|
1066
|
+
| `bypassPermissions` | `--permission-mode bypassPermissions` | すべてのパーミッションチェックをバイパス |
|
|
1067
|
+
| `acceptEdits` | `--permission-mode acceptEdits` | ファイル編集を自動的に承認 |
|
|
1068
|
+
| `dontAsk` | `--permission-mode dontAsk` | パーミッションを確認しない |
|
|
1069
|
+
| `plan` | `--permission-mode plan` | プランのみモード |
|
|
1070
|
+
| `default` | `--permission-mode default` | Claudeのデフォルトパーミッションモード |
|
|
1071
|
+
| `skipPermissions` | `--dangerously-skip-permissions` | レガシーフラグ(すべてのチェックをバイパスする旧来の動作) |
|
|
1072
|
+
|
|
1073
|
+
#### 設定例
|
|
1074
|
+
|
|
1075
|
+
```yaml
|
|
1076
|
+
# autoパーミッションモードを使用(デフォルト)
|
|
1077
|
+
permissionMode: auto
|
|
1078
|
+
|
|
1079
|
+
# レガシーの --dangerously-skip-permissions フラグを使用
|
|
1080
|
+
permissionMode: skipPermissions
|
|
1081
|
+
```
|
|
1082
|
+
|
|
1083
|
+
> **破壊的変更**: この機能導入以前は常に `--dangerously-skip-permissions` が渡されていました。新しいデフォルトは `--permission-mode auto` です。従来の動作を維持するには `.agkan.yml` に `permissionMode: skipPermissions` を設定してください。
|
|
1084
|
+
|
|
1038
1085
|
## 実装予定機能
|
|
1039
1086
|
|
|
1040
1087
|
### タスクの添付ファイル
|
package/README.md
CHANGED
|
@@ -592,6 +592,24 @@ agkan ps --json
|
|
|
592
592
|
}
|
|
593
593
|
```
|
|
594
594
|
|
|
595
|
+
### Config
|
|
596
|
+
|
|
597
|
+
Get resolved configuration values from `.agkan.yml` (defaults applied):
|
|
598
|
+
|
|
599
|
+
```bash
|
|
600
|
+
agkan config get # Show full resolved config
|
|
601
|
+
agkan config get board.port # Show specific key (dot notation)
|
|
602
|
+
agkan config get --json # JSON output
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
Example output:
|
|
606
|
+
```
|
|
607
|
+
✓ Resolved config
|
|
608
|
+
|
|
609
|
+
path: /workspace/.agkan/data.db
|
|
610
|
+
board.port: 8080
|
|
611
|
+
```
|
|
612
|
+
|
|
595
613
|
### Display Help
|
|
596
614
|
|
|
597
615
|
Show command list:
|
|
@@ -1049,6 +1067,35 @@ Supported aliases: `opus`, `sonnet`, `haiku` (resolved by the Claude CLI)
|
|
|
1049
1067
|
effort: low
|
|
1050
1068
|
```
|
|
1051
1069
|
|
|
1070
|
+
### Permission Mode Settings
|
|
1071
|
+
|
|
1072
|
+
The `permissionMode` field in `.agkan.yml` controls how Claude CLI permission checks are handled when executing tasks from the board.
|
|
1073
|
+
|
|
1074
|
+
#### Available Values
|
|
1075
|
+
|
|
1076
|
+
| Value | Claude CLI flag | Description |
|
|
1077
|
+
|-------|----------------|-------------|
|
|
1078
|
+
| (not set) | `--permission-mode auto` | Default. Claude uses auto permission mode |
|
|
1079
|
+
| `auto` | `--permission-mode auto` | Claude uses auto permission mode |
|
|
1080
|
+
| `bypassPermissions` | `--permission-mode bypassPermissions` | Bypass all permission checks |
|
|
1081
|
+
| `acceptEdits` | `--permission-mode acceptEdits` | Automatically accept file edits |
|
|
1082
|
+
| `dontAsk` | `--permission-mode dontAsk` | Do not ask for permissions |
|
|
1083
|
+
| `plan` | `--permission-mode plan` | Plan-only mode |
|
|
1084
|
+
| `default` | `--permission-mode default` | Claude default permission mode |
|
|
1085
|
+
| `skipPermissions` | `--dangerously-skip-permissions` | Legacy flag (same as bypassing all checks) |
|
|
1086
|
+
|
|
1087
|
+
#### Configuration Example
|
|
1088
|
+
|
|
1089
|
+
```yaml
|
|
1090
|
+
# Use auto permission mode (default)
|
|
1091
|
+
permissionMode: auto
|
|
1092
|
+
|
|
1093
|
+
# Use legacy --dangerously-skip-permissions flag
|
|
1094
|
+
permissionMode: skipPermissions
|
|
1095
|
+
```
|
|
1096
|
+
|
|
1097
|
+
> **Breaking Change**: Prior to this feature, `--dangerously-skip-permissions` was always passed. The new default is `--permission-mode auto`. To restore the previous behavior, set `permissionMode: skipPermissions` in your `.agkan.yml`.
|
|
1098
|
+
|
|
1052
1099
|
## Planned Features
|
|
1053
1100
|
|
|
1054
1101
|
### Task Attachments
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulkRunService.d.ts","sourceRoot":"","sources":["../../src/board/BulkRunService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIlE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC;AAC7C,KAAK,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAChC;AAED,KAAK,mBAAmB,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;AAI3D,qBAAa,cAAc;IASvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,aAAa;IAVvB,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,SAAS,CAA8C;gBAGrD,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,iBAAiB;IAG1C,SAAS,IAAI,aAAa;IAI1B,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAK/D,OAAO,CAAC,iBAAiB;IAKnB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAYjE,IAAI,IAAI,IAAI;IAeZ,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"BulkRunService.d.ts","sourceRoot":"","sources":["../../src/board/BulkRunService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIlE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,IAAI,CAAC;AAC7C,KAAK,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;CAChC;AAED,KAAK,mBAAmB,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;AAI3D,qBAAa,cAAc;IASvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,aAAa;IAVvB,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,sBAAsB,CAAuC;IACrE,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,SAAS,CAA8C;gBAGrD,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,gBAAgB,EACrB,aAAa,EAAE,iBAAiB;IAG1C,SAAS,IAAI,aAAa;IAI1B,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAK/D,OAAO,CAAC,iBAAiB;IAKnB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAYjE,IAAI,IAAI,IAAI;IAeZ,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,iBAAiB;YAuBX,UAAU;YAmCV,OAAO;CAgBtB"}
|
|
@@ -114,7 +114,7 @@ class BulkRunService {
|
|
|
114
114
|
buildLaunchParams(taskId) {
|
|
115
115
|
const command = this.command;
|
|
116
116
|
const ptyCommand = command === 'pr' ? 'pr' : 'run';
|
|
117
|
-
const exitInstruction =
|
|
117
|
+
const exitInstruction = "\n\nWhen you have completed this task, send 'exit' as a prompt (not as a bash command) to end this session.";
|
|
118
118
|
const prompt = command === 'pr'
|
|
119
119
|
? `Task ID: ${taskId}\n/agkan-subtask${exitInstruction}`
|
|
120
120
|
: `Task ID: ${taskId}\n/agkan-subtask-direct${exitInstruction}`;
|
|
@@ -128,17 +128,33 @@ class BulkRunService {
|
|
|
128
128
|
}
|
|
129
129
|
async launchTask(taskId) {
|
|
130
130
|
const { prompt, ptyCommand, model, effort } = this.buildLaunchParams(taskId);
|
|
131
|
+
// Track whether runNext has already been called to prevent duplicate invocations.
|
|
132
|
+
let advanced = false;
|
|
133
|
+
const advance = () => {
|
|
134
|
+
if (!advanced) {
|
|
135
|
+
advanced = true;
|
|
136
|
+
void this.runNext();
|
|
137
|
+
}
|
|
138
|
+
};
|
|
131
139
|
try {
|
|
132
140
|
await this.claudeProcess.startProcess(taskId, prompt, ptyCommand, model, effort);
|
|
133
141
|
}
|
|
134
142
|
catch {
|
|
135
|
-
|
|
143
|
+
advance();
|
|
136
144
|
return;
|
|
137
145
|
}
|
|
138
|
-
|
|
146
|
+
// subscribeOutput always fires the callback (done or error) even when the session
|
|
147
|
+
// has already exited (fixed in PtySessionService), so the loop is guaranteed to proceed.
|
|
148
|
+
// Use let so the callback can safely reference unsubscribe even when the callback fires
|
|
149
|
+
// synchronously before the assignment completes (fast-exit / no-session path).
|
|
150
|
+
let unsubscribe;
|
|
151
|
+
unsubscribe = this.claudeProcess.subscribeOutput(taskId, (evt) => {
|
|
139
152
|
if (evt.kind === 'done' || evt.kind === 'error') {
|
|
140
|
-
|
|
141
|
-
|
|
153
|
+
if (evt.kind === 'done' && evt.exitCode === 0) {
|
|
154
|
+
this.ts.updateTask(taskId, { status: 'done' });
|
|
155
|
+
}
|
|
156
|
+
unsubscribe?.();
|
|
157
|
+
advance();
|
|
142
158
|
}
|
|
143
159
|
});
|
|
144
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BulkRunService.js","sourceRoot":"","sources":["../../src/board/BulkRunService.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BulkRunService.js","sourceRoot":"","sources":["../../src/board/BulkRunService.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { TaskBlockService } from '../services/TaskBlockService';
|
|
|
8
8
|
import { PtySessionService } from '../terminal/PtySessionService';
|
|
9
9
|
import { StorageBackend } from '../db/types/repository';
|
|
10
10
|
import { AttentionStateService } from '../services/AttentionStateService';
|
|
11
|
+
import { BoardEventService } from '../services/BoardEventService';
|
|
11
12
|
export type BoardServices = {
|
|
12
13
|
ts: TaskService;
|
|
13
14
|
tts: TaskTagService;
|
|
@@ -19,6 +20,8 @@ export type BoardServices = {
|
|
|
19
20
|
boardTitle?: string;
|
|
20
21
|
configDir: string;
|
|
21
22
|
ptySessionService?: PtySessionService;
|
|
23
|
+
boardEventService?: BoardEventService;
|
|
24
|
+
attentionStateService?: AttentionStateService;
|
|
22
25
|
};
|
|
23
26
|
export declare function registerTaskApiRoutes(app: Hono, services: BoardServices): void;
|
|
24
27
|
export declare function registerConfigApiRoutes(app: Hono, configDir: string): void;
|
|
@@ -28,11 +31,8 @@ export interface HookRouteDeps {
|
|
|
28
31
|
stopProcess: (taskId: number) => boolean;
|
|
29
32
|
};
|
|
30
33
|
}
|
|
31
|
-
export interface AttentionStreamDeps {
|
|
32
|
-
attentionStateService: AttentionStateService;
|
|
33
|
-
}
|
|
34
34
|
export declare function registerHookRoutes(app: Hono, deps: HookRouteDeps): void;
|
|
35
|
+
export declare function registerBoardNotifyRoute(app: Hono, boardEventService?: BoardEventService): void;
|
|
35
36
|
export declare function registerTestHookTokenRoute(app: Hono): void;
|
|
36
|
-
export declare function registerAttentionStreamRoute(app: Hono, deps: AttentionStreamDeps): void;
|
|
37
37
|
export declare function registerBoardRoutes(app: Hono, services: BoardServices): void;
|
|
38
38
|
//# sourceMappingURL=boardRoutes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boardRoutes.d.ts","sourceRoot":"","sources":["../../src/board/boardRoutes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIlE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAcxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"boardRoutes.d.ts","sourceRoot":"","sources":["../../src/board/boardRoutes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIlE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAcxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,WAAW,CAAC;IAChB,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,eAAe,CAAC;IACpB,EAAE,EAAE,cAAc,CAAC;IACnB,GAAG,EAAE,gBAAgB,CAAC;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;CAC/C,CAAC;AAwYF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAO9E;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CA+B1E;AAmOD,MAAM,WAAW,aAAa;IAC5B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,iBAAiB,EAAE;QAAE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;KAAE,CAAC;CACjE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CA8BvE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAK/F;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAK1D;AAqED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CA+J5E"}
|
|
@@ -36,8 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.registerTaskApiRoutes = registerTaskApiRoutes;
|
|
37
37
|
exports.registerConfigApiRoutes = registerConfigApiRoutes;
|
|
38
38
|
exports.registerHookRoutes = registerHookRoutes;
|
|
39
|
+
exports.registerBoardNotifyRoute = registerBoardNotifyRoute;
|
|
39
40
|
exports.registerTestHookTokenRoute = registerTestHookTokenRoute;
|
|
40
|
-
exports.registerAttentionStreamRoute = registerAttentionStreamRoute;
|
|
41
41
|
exports.registerBoardRoutes = registerBoardRoutes;
|
|
42
42
|
const fs = __importStar(require("fs"));
|
|
43
43
|
const path = __importStar(require("path"));
|
|
@@ -258,7 +258,7 @@ function registerCommentRoutes(app, cs, ts) {
|
|
|
258
258
|
registerTaskCommentRoutes(app, cs, ts);
|
|
259
259
|
registerCommentIdRoutes(app, cs);
|
|
260
260
|
}
|
|
261
|
-
function registerTagRoutes(app, tts, tags, ts) {
|
|
261
|
+
function registerTagRoutes(app, tts, tags, ts, boardEventService) {
|
|
262
262
|
app.post('/api/tasks/:id/tags', async (c) => {
|
|
263
263
|
const id = Number(c.req.param('id'));
|
|
264
264
|
if (isNaN(id))
|
|
@@ -272,6 +272,7 @@ function registerTagRoutes(app, tts, tags, ts) {
|
|
|
272
272
|
if (!tags.getTag(tagId))
|
|
273
273
|
return c.json({ error: 'Tag not found' }, 404);
|
|
274
274
|
tts.addTagToTask({ task_id: id, tag_id: tagId });
|
|
275
|
+
boardEventService?.notify();
|
|
275
276
|
return c.json({ success: true }, 201);
|
|
276
277
|
});
|
|
277
278
|
app.delete('/api/tasks/:id/tags/:tagId', (c) => {
|
|
@@ -284,6 +285,7 @@ function registerTagRoutes(app, tts, tags, ts) {
|
|
|
284
285
|
const removed = tts.removeTagFromTask(id, tagId);
|
|
285
286
|
if (!removed)
|
|
286
287
|
return c.json({ error: 'Tag not attached to task' }, 404);
|
|
288
|
+
boardEventService?.notify();
|
|
287
289
|
return c.json({ success: true });
|
|
288
290
|
});
|
|
289
291
|
app.get('/api/tags', (c) => {
|
|
@@ -415,10 +417,10 @@ function registerExportImportRoutes(app, services) {
|
|
|
415
417
|
});
|
|
416
418
|
}
|
|
417
419
|
function registerTaskApiRoutes(app, services) {
|
|
418
|
-
const { ts, tts, tags, ms, cs, tbs } = services;
|
|
420
|
+
const { ts, tts, tags, ms, cs, tbs, boardEventService } = services;
|
|
419
421
|
registerTaskCrudRoutes(app, ts, tts, tbs, ms, tags);
|
|
420
422
|
registerCommentRoutes(app, cs, ts);
|
|
421
|
-
registerTagRoutes(app, tts, tags, ts);
|
|
423
|
+
registerTagRoutes(app, tts, tags, ts, boardEventService);
|
|
422
424
|
registerUtilityRoutes(app, ts);
|
|
423
425
|
registerExportImportRoutes(app, services);
|
|
424
426
|
}
|
|
@@ -508,7 +510,7 @@ function registerClaudeRoutes(app, claudeProcess, ts) {
|
|
|
508
510
|
: !task.branch || task.branch === Task_1.BRANCH_AUTO_GENERATE
|
|
509
511
|
? `\n\nNo branch specified: Read this task's title and body, and generate an appropriate git branch name for the work. Format: task/${taskId}-<kebab-case> (alphanumeric characters and hyphens only, maximum 60 characters). Run git checkout -b with the generated branch name before starting work, then save the branch field via PATCH /api/tasks/${taskId} (body: { "branch": "<generated-branch-name>" }) after starting work.`
|
|
510
512
|
: '';
|
|
511
|
-
const exitInstruction =
|
|
513
|
+
const exitInstruction = "\n\nWhen you have completed this task, send 'exit' as a prompt (not as a bash command) to end this session.";
|
|
512
514
|
const prompt = command === 'planning'
|
|
513
515
|
? `Task ID: ${taskId}\n/agkan-planning-subtask${branchInstruction}${exitInstruction}`
|
|
514
516
|
: command === 'pr'
|
|
@@ -571,59 +573,6 @@ function registerClaudeRoutes(app, claudeProcess, ts) {
|
|
|
571
573
|
const tasks = claudeProcess.listRunningTasks();
|
|
572
574
|
return c.json({ tasks });
|
|
573
575
|
});
|
|
574
|
-
app.get('/api/running-tasks/stream', (c) => {
|
|
575
|
-
const stream = new ReadableStream({
|
|
576
|
-
start(controller) {
|
|
577
|
-
let finalized = false;
|
|
578
|
-
let unsubscribeConfirm;
|
|
579
|
-
const encode = (event, data) => {
|
|
580
|
-
const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
581
|
-
return new TextEncoder().encode(payload);
|
|
582
|
-
};
|
|
583
|
-
const safeClose = () => {
|
|
584
|
-
if (finalized)
|
|
585
|
-
return;
|
|
586
|
-
finalized = true;
|
|
587
|
-
unsubscribe();
|
|
588
|
-
unsubscribeConfirm?.();
|
|
589
|
-
controller.close();
|
|
590
|
-
};
|
|
591
|
-
const sendUpdate = () => {
|
|
592
|
-
if (finalized)
|
|
593
|
-
return;
|
|
594
|
-
try {
|
|
595
|
-
controller.enqueue(encode('update', { tasks: claudeProcess.listRunningTasks() }));
|
|
596
|
-
}
|
|
597
|
-
catch {
|
|
598
|
-
safeClose();
|
|
599
|
-
}
|
|
600
|
-
};
|
|
601
|
-
const sendConfirmComplete = (taskId, targetStatus) => {
|
|
602
|
-
if (finalized)
|
|
603
|
-
return;
|
|
604
|
-
try {
|
|
605
|
-
controller.enqueue(encode('confirm-complete', { taskId, targetStatus }));
|
|
606
|
-
}
|
|
607
|
-
catch {
|
|
608
|
-
safeClose();
|
|
609
|
-
}
|
|
610
|
-
};
|
|
611
|
-
const unsubscribe = claudeProcess.subscribeRunningTasksChange(sendUpdate);
|
|
612
|
-
unsubscribeConfirm = claudeProcess.subscribeCompletionConfirm(sendConfirmComplete);
|
|
613
|
-
sendUpdate();
|
|
614
|
-
c.req.raw.signal?.addEventListener('abort', () => {
|
|
615
|
-
safeClose();
|
|
616
|
-
});
|
|
617
|
-
},
|
|
618
|
-
});
|
|
619
|
-
return new Response(stream, {
|
|
620
|
-
headers: {
|
|
621
|
-
'Content-Type': 'text/event-stream',
|
|
622
|
-
'Cache-Control': 'no-cache',
|
|
623
|
-
Connection: 'keep-alive',
|
|
624
|
-
},
|
|
625
|
-
});
|
|
626
|
-
});
|
|
627
576
|
app.get('/api/claude/tasks/:taskId/run-logs/stream', (c) => {
|
|
628
577
|
const taskId = Number(c.req.param('taskId'));
|
|
629
578
|
if (isNaN(taskId))
|
|
@@ -731,6 +680,12 @@ function registerHookRoutes(app, deps) {
|
|
|
731
680
|
return c.json({ ok: true });
|
|
732
681
|
});
|
|
733
682
|
}
|
|
683
|
+
function registerBoardNotifyRoute(app, boardEventService) {
|
|
684
|
+
app.post('/api/board/notify', (c) => {
|
|
685
|
+
boardEventService?.notify();
|
|
686
|
+
return c.json({ ok: true });
|
|
687
|
+
});
|
|
688
|
+
}
|
|
734
689
|
function registerTestHookTokenRoute(app) {
|
|
735
690
|
if (!(0, config_2.isTestMode)())
|
|
736
691
|
return;
|
|
@@ -738,54 +693,6 @@ function registerTestHookTokenRoute(app) {
|
|
|
738
693
|
return c.json({ token: (0, hookToken_1.getHookToken)() });
|
|
739
694
|
});
|
|
740
695
|
}
|
|
741
|
-
function registerAttentionStreamRoute(app, deps) {
|
|
742
|
-
app.get('/api/attention/stream', (c) => {
|
|
743
|
-
const stream = new ReadableStream({
|
|
744
|
-
start(controller) {
|
|
745
|
-
let finalized = false;
|
|
746
|
-
const encode = (data) => {
|
|
747
|
-
const payload = `data: ${JSON.stringify(data)}\n\n`;
|
|
748
|
-
return new TextEncoder().encode(payload);
|
|
749
|
-
};
|
|
750
|
-
const safeClose = () => {
|
|
751
|
-
if (finalized)
|
|
752
|
-
return;
|
|
753
|
-
finalized = true;
|
|
754
|
-
unsub();
|
|
755
|
-
controller.close();
|
|
756
|
-
};
|
|
757
|
-
const initial = deps.attentionStateService.listAttentionTasks();
|
|
758
|
-
try {
|
|
759
|
-
controller.enqueue(encode({ type: 'snapshot', taskIds: initial }));
|
|
760
|
-
}
|
|
761
|
-
catch {
|
|
762
|
-
safeClose();
|
|
763
|
-
return;
|
|
764
|
-
}
|
|
765
|
-
const unsub = deps.attentionStateService.subscribe((update) => {
|
|
766
|
-
if (finalized)
|
|
767
|
-
return;
|
|
768
|
-
try {
|
|
769
|
-
controller.enqueue(encode({ type: 'update', ...update }));
|
|
770
|
-
}
|
|
771
|
-
catch {
|
|
772
|
-
safeClose();
|
|
773
|
-
}
|
|
774
|
-
});
|
|
775
|
-
c.req.raw.signal?.addEventListener('abort', () => {
|
|
776
|
-
safeClose();
|
|
777
|
-
});
|
|
778
|
-
},
|
|
779
|
-
});
|
|
780
|
-
return new Response(stream, {
|
|
781
|
-
headers: {
|
|
782
|
-
'Content-Type': 'text/event-stream',
|
|
783
|
-
'Cache-Control': 'no-cache',
|
|
784
|
-
Connection: 'keep-alive',
|
|
785
|
-
},
|
|
786
|
-
});
|
|
787
|
-
});
|
|
788
|
-
}
|
|
789
696
|
function registerBulkRunRoutes(app, bulkRunService) {
|
|
790
697
|
app.post('/api/claude/bulk-run', async (c) => {
|
|
791
698
|
const body = (await c.req.json().catch(() => ({})));
|
|
@@ -848,7 +755,7 @@ function registerBulkRunRoutes(app, bulkRunService) {
|
|
|
848
755
|
});
|
|
849
756
|
}
|
|
850
757
|
function registerBoardRoutes(app, services) {
|
|
851
|
-
const { ts, tts, tbs, database, boardTitle, configDir } = services;
|
|
758
|
+
const { ts, tts, tbs, database, boardTitle, configDir, boardEventService, attentionStateService } = services;
|
|
852
759
|
app.use('*', async (c, next) => {
|
|
853
760
|
(0, logger_1.verboseLog)(`[boardRoutes] ${c.req.method} ${c.req.path}`);
|
|
854
761
|
await next();
|
|
@@ -895,11 +802,11 @@ function registerBoardRoutes(app, services) {
|
|
|
895
802
|
return c.html((0, boardRenderer_1.renderBoard)(tasksByStatus, tts.getAllTaskTags(), boardTitle, boardConfig.theme, blockMap));
|
|
896
803
|
});
|
|
897
804
|
app.get('/api/board/stream', (c) => {
|
|
805
|
+
const ptyService = services.ptySessionService;
|
|
898
806
|
const stream = new ReadableStream({
|
|
899
807
|
start(controller) {
|
|
900
808
|
let finalized = false;
|
|
901
|
-
|
|
902
|
-
let intervalId;
|
|
809
|
+
const unsubscribers = [];
|
|
903
810
|
const encode = (event, data) => {
|
|
904
811
|
const payload = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
|
|
905
812
|
return new TextEncoder().encode(payload);
|
|
@@ -908,25 +815,66 @@ function registerBoardRoutes(app, services) {
|
|
|
908
815
|
if (finalized)
|
|
909
816
|
return;
|
|
910
817
|
finalized = true;
|
|
911
|
-
|
|
818
|
+
unsubscribers.forEach((fn) => fn());
|
|
912
819
|
controller.close();
|
|
913
820
|
};
|
|
914
|
-
const
|
|
821
|
+
const send = (event, data) => {
|
|
915
822
|
if (finalized)
|
|
916
823
|
return;
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
}
|
|
923
|
-
catch {
|
|
924
|
-
safeClose();
|
|
925
|
-
}
|
|
824
|
+
try {
|
|
825
|
+
controller.enqueue(encode(event, data));
|
|
826
|
+
}
|
|
827
|
+
catch {
|
|
828
|
+
safeClose();
|
|
926
829
|
}
|
|
927
830
|
};
|
|
928
|
-
|
|
929
|
-
|
|
831
|
+
// board-update: triggered by BoardEventService or fallback polling
|
|
832
|
+
if (boardEventService) {
|
|
833
|
+
// Send initial snapshot so client can sync on connect
|
|
834
|
+
send('board-update', { updatedAt: (0, boardRenderer_1.getBoardUpdatedAt)(database) });
|
|
835
|
+
const unsub = boardEventService.subscribe(() => {
|
|
836
|
+
send('board-update', { updatedAt: (0, boardRenderer_1.getBoardUpdatedAt)(database) });
|
|
837
|
+
});
|
|
838
|
+
unsubscribers.push(unsub);
|
|
839
|
+
}
|
|
840
|
+
else {
|
|
841
|
+
let lastKnownTs = undefined;
|
|
842
|
+
const intervalId = setInterval(() => {
|
|
843
|
+
if (finalized)
|
|
844
|
+
return;
|
|
845
|
+
const ts = (0, boardRenderer_1.getBoardUpdatedAt)(database);
|
|
846
|
+
if (ts !== lastKnownTs) {
|
|
847
|
+
lastKnownTs = ts;
|
|
848
|
+
send('board-update', { updatedAt: ts });
|
|
849
|
+
}
|
|
850
|
+
}, 2000);
|
|
851
|
+
unsubscribers.push(() => clearInterval(intervalId));
|
|
852
|
+
// initial send
|
|
853
|
+
const ts = (0, boardRenderer_1.getBoardUpdatedAt)(database);
|
|
854
|
+
lastKnownTs = ts;
|
|
855
|
+
send('board-update', { updatedAt: ts });
|
|
856
|
+
}
|
|
857
|
+
// attention: snapshot + updates
|
|
858
|
+
if (attentionStateService) {
|
|
859
|
+
const initial = attentionStateService.listAttentionTasks();
|
|
860
|
+
send('attention', { type: 'snapshot', taskIds: initial });
|
|
861
|
+
const unsub = attentionStateService.subscribe((update) => {
|
|
862
|
+
send('attention', { type: 'update', ...update });
|
|
863
|
+
});
|
|
864
|
+
unsubscribers.push(unsub);
|
|
865
|
+
}
|
|
866
|
+
// running-tasks + confirm-complete
|
|
867
|
+
if (ptyService) {
|
|
868
|
+
send('running-tasks', { tasks: ptyService.listRunningTasks() });
|
|
869
|
+
const unsubRunning = ptyService.subscribeRunningTasksChange(() => {
|
|
870
|
+
send('running-tasks', { tasks: ptyService.listRunningTasks() });
|
|
871
|
+
});
|
|
872
|
+
unsubscribers.push(unsubRunning);
|
|
873
|
+
const unsubConfirm = ptyService.subscribeCompletionConfirm((taskId, targetStatus) => {
|
|
874
|
+
send('confirm-complete', { taskId, targetStatus });
|
|
875
|
+
});
|
|
876
|
+
unsubscribers.push(unsubConfirm);
|
|
877
|
+
}
|
|
930
878
|
c.req.raw.signal?.addEventListener('abort', () => {
|
|
931
879
|
safeClose();
|
|
932
880
|
});
|
|
@@ -954,6 +902,7 @@ function registerBoardRoutes(app, services) {
|
|
|
954
902
|
});
|
|
955
903
|
registerTaskApiRoutes(app, services);
|
|
956
904
|
registerConfigApiRoutes(app, configDir);
|
|
905
|
+
registerBoardNotifyRoute(app, boardEventService);
|
|
957
906
|
if (services.ptySessionService) {
|
|
958
907
|
registerClaudeRoutes(app, services.ptySessionService, ts);
|
|
959
908
|
const bulkRunService = new BulkRunService_1.BulkRunService(ts, tbs, services.ptySessionService);
|