@tocca-systems/twp-cli 0.20.0 → 0.22.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/CHANGELOG.public.md +12 -0
- package/README.md +55 -4
- package/command-model/user-management.json +1137 -2
- package/dist/{ai-dispatch-PNA4UF4I.js → ai-dispatch-VSCKUY6J.js} +33 -33
- package/dist/{api-command-2OPQMSTE.js → api-command-Q2CSB4PV.js} +3 -3
- package/dist/{app-FZT4U3VG.js → app-THTQX3A5.js} +70 -71
- package/dist/{auto-update-CV2MM32C.js → auto-update-FBZGOQFI.js} +1 -1
- package/dist/{auto-update-worker-ML7EBNQW.js → auto-update-worker-Z3XKBFMQ.js} +2 -2
- package/dist/{backlog-NV7Z76R3.js → backlog-X2MQTA6F.js} +2 -2
- package/dist/charter-command-UPKTVL7H.js +36 -0
- package/dist/{chunk-DEVIQH5U.js → chunk-24ZZFFA3.js} +1 -1
- package/dist/chunk-3XG457E3.js +12 -0
- package/dist/{chunk-3SNMDSCW.js → chunk-5ISIXBKD.js} +91 -70
- package/dist/{chunk-ILKQDXI5.js → chunk-DSDVIU6A.js} +1 -1
- package/dist/chunk-E4H22AO5.js +3 -0
- package/dist/chunk-I2QFW7EK.js +30 -0
- package/dist/chunk-JB27KNCX.js +52 -0
- package/dist/{chunk-GTABFTZP.js → chunk-JDMNIUVX.js} +1 -1
- package/dist/chunk-K2ONOH3L.js +9 -0
- package/dist/chunk-ODLJ2LNQ.js +13 -0
- package/dist/chunk-PEGUHUTD.js +3 -0
- package/dist/{chunk-FOFV2MNL.js → chunk-PI5DUWNZ.js} +1 -1
- package/dist/chunk-RKJ6B2KL.js +56 -0
- package/dist/chunk-TYNCXQSN.js +38 -0
- package/dist/{chunk-N56AWWTM.js → chunk-UG2I6VRD.js} +2 -12
- package/dist/chunk-VRBI2NPI.js +15 -0
- package/dist/{chunk-5QCAIKFE.js → chunk-X4RS5VBH.js} +1 -1
- package/dist/{chunk-BYRM4NSC.js → chunk-XLE4HW6B.js} +1 -1
- package/dist/chunk-Y2QAP6SU.js +15 -0
- package/dist/cli.js +22 -10
- package/dist/{commands-EWRHQZYM.js → commands-ET4F34OD.js} +26 -25
- package/dist/{commands-7D5EEQBY.js → commands-NXBQ5OWL.js} +12 -7
- package/dist/format-NMW6Y2E5.js +3 -0
- package/dist/{logout-guard-Q4MQFEGR.js → logout-guard-CMZZBRUL.js} +1 -1
- package/dist/{oneshot-AXS5LWUY.js → oneshot-QVFA2SUM.js} +2 -2
- package/dist/{project-BATJQR3F.js → project-2LJZW747.js} +1 -1
- package/dist/query-NJMVSQR6.js +3 -0
- package/dist/render-XMVI3AKB.js +3 -0
- package/dist/run-IS46BQBB.js +4 -0
- package/dist/{schedule-command-YPKIO3FK.js → schedule-command-GKXKNMLG.js} +1 -1
- package/dist/server-settings-CG3EM7R7.js +3 -0
- package/dist/{setup-ROGEF3UO.js → setup-UI6V2Q3V.js} +1 -1
- package/dist/{task-6QUH5OXF.js → task-GKNM3G4K.js} +2 -2
- package/dist/{update-EXFIHTMW.js → update-3QHRK5BP.js} +1 -1
- package/dist/user-EU7Z3DAO.js +24 -0
- package/package.json +1 -1
- package/dist/chunk-MIMDLO52.js +0 -43
- package/dist/chunk-NWABK3RZ.js +0 -36
- package/dist/chunk-OVYHOZ3C.js +0 -27
- package/dist/chunk-SPZO6C5N.js +0 -69
- package/dist/chunk-ZGG7TRAM.js +0 -3
- package/dist/run-2OQQAOHL.js +0 -4
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.22.0
|
|
15
|
+
|
|
16
|
+
AI が git の差分や履歴を読むときに、リポジトリ側で設定された外部の差分表示コマンドを実行しないようになりました。信用できないリポジトリで「変更点を見て」と頼んだだけで、そのリポジトリが仕込んだコマンドが動いてしまうことを防ぎます。差分そのものは通常どおり表示されます。
|
|
17
|
+
|
|
18
|
+
## 0.21.0
|
|
19
|
+
|
|
20
|
+
確認画面が「はい」「はい、今後聞かない」「いいえ、代わりにこうして」の3択になりました。「今後聞かない」では、このセッション中だけか、このプロジェクトでは今後も聞かないかを選べます。後者は `~/.twp/project-permissions.json` に保存され、次に起動したときも効きます(コマンド実行は `git log` のようにコマンドの先頭で保存します)。「代わりにこうして」に入力した内容は、そのまま AI への指示として伝わります。`rm -rf` や `&&` でつないだコマンドなど、毎回確認するものでは「今後聞かない」は表示されません。
|
|
21
|
+
|
|
22
|
+
エージェントループが、サーバに保存したループ設定(AI の割当・憲章・指示文面)を各サイクルの冒頭で取得して使うようになりました。サーバで設定を変えると、全ての実行機が次のサイクルから同じ設定で動きます。サーバに登録していない項目は、これまでどおり手元の設定ファイルを使います。通信が切れたときは、直前に取得した設定で動き続けます。
|
|
23
|
+
|
|
24
|
+
サーバに保存するエージェントループ設定の憲章欄を、ファイルとの間で受け渡しできるようになりました。`twp task-loop charter push --project <キー> --file CONSTITUTION.md` で登録します。最初の実行では差分だけを表示し、案内されたコマンド(`--yes --revision <番号>`)で確定します。その間に管理画面で編集されていた場合は、上書きせずに止まります。`twp task-loop charter pull --project <キー>` でサーバの憲章をファイルへ書き出します。既存のファイルと内容が違うときは差分を表示し、`--yes` を付けたときだけ上書きします。
|
|
25
|
+
|
|
14
26
|
## 0.20.0
|
|
15
27
|
|
|
16
28
|
TUI のスラッシュコマンドに `/tasks`(タスク一覧)・`/task <キー>`(タスクの詳細)・`/projects`(プロジェクト一覧)を追加しました。AI を動かさずに結果を表示するので、クレジットは消費しません。
|
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
20
20
|
|---|---|
|
|
21
21
|
| **できる** | AI との会話(ストリーミング表示)。手元のファイルの読み書き・検索、コマンド実行、git の読み取り——いずれも**実行前に確認**します |
|
|
22
22
|
| **できる** | `twp project` / `twp task` によるプロジェクト・タスクの読み書き(一覧・取得・作成・更新・削除・コメント) |
|
|
23
|
+
| **できる** | `twp user` によるテナントのユーザーと所属(部署・役職)の参照(一覧・取得・所属の履歴)。取得と他人の所属の参照は組織管理者の権限が要ります |
|
|
23
24
|
| **できる** | `twp task-loop` による、TWP のタスクキューを手元の AI CLI に実行させる常駐ループ |
|
|
24
25
|
| **できる** | スラッシュコマンド: `/help` `/mode` `/model` `/clear` `/context` `/doctor` `/exit` `/demo`(動作デモ) `/tasks` `/task` `/projects`。`/tasks` などの TWP 系は `twp task list` と同じ結果を画面に出すだけで、AI は動かしません(クレジットも消費しません)。スラッシュコマンドは TUI の中だけで使えます(`twp -p` では解釈しません) |
|
|
25
26
|
| **できる** | 自分用のスラッシュコマンドを markdown で追加すること(`.twp/commands/*.md` / `~/.twp/commands/*.md`・[下記](#スラッシュコマンドを自分で足す))。入力中の `@パス` でファイルを、`#ABC-123` でタスクの内容を AI へ添付できます |
|
|
@@ -47,7 +48,9 @@ twp login ログイン(ブラウザ委譲 / --password / --token)
|
|
|
47
48
|
twp login --tenant <code>
|
|
48
49
|
テナントコードを先に指定する(--password のプロンプトを 1 つ省ける)
|
|
49
50
|
twp logout ログアウト(同じ資格情報で twp task-loop が稼働中なら拒否する。--force で続行)
|
|
50
|
-
twp whoami
|
|
51
|
+
twp whoami ログイン中のユーザー・ID・テナントを表示
|
|
52
|
+
twp whoami --output text --query id
|
|
53
|
+
ログイン中ユーザーのIDだけを出す(--output json も可。トークンは出さない)
|
|
51
54
|
twp update npm の最新版・サーバが要求する最小バージョン・自動更新の状態を確認
|
|
52
55
|
twp --mode biz 起動時のモードを指定(dev | biz | plan)
|
|
53
56
|
twp --permission-mode denyAll
|
|
@@ -117,6 +120,27 @@ twp task label list [--project <コード>]
|
|
|
117
120
|
twp task list --project ACME --status 進行中 --output json --query '[].{key:key,subject:subject}'
|
|
118
121
|
```
|
|
119
122
|
|
|
123
|
+
### テナントのユーザーと所属を参照する
|
|
124
|
+
|
|
125
|
+
組織管理者(総務)向けに、ユーザーの一覧・詳細と所属の履歴を引きます。
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
twp user list [--department <部署>] [--position <役職>] [--employment employee|partner]
|
|
129
|
+
[--keyword <語>] [--include-hidden] [--all]
|
|
130
|
+
twp user get <ユーザー> # 組織管理者のみ
|
|
131
|
+
twp user assignment list <ユーザー> [--current] # 本人・上長・組織管理者
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
- **`<ユーザー>` は ID・メールアドレス・社員番号・氏名・`me`(自分)で指定できます。** 氏名は完全一致で1人に絞れたときだけ受け付け、同姓同名なら候補を出して止まります(メールアドレスか社員番号で指定し直してください)
|
|
135
|
+
- **表示フラグを外したユーザーは、ID・メールアドレス・氏名で指定してください**(社員番号では引けません。組織管理者でない場合は ID だけです)。一覧に出すときは `--include-hidden` を付けます(組織管理者のときだけ効きます)
|
|
136
|
+
- **`--department` / `--position` は名前・コード・ID のどれでも指定できます**(主所属で絞り込みます)。候補が絞れないときは候補を出して止まります
|
|
137
|
+
- **失効(ログイン不可)したユーザーも一覧に出ます。** 失効かどうかは `twp user get` の `auth_type`(`disabled` なら失効)で確認できます
|
|
138
|
+
- `twp user get` の要約(table / text / tsv)には個人連絡先を出しません。`--output json` は API が返す全フィールドを出します
|
|
139
|
+
- `twp user assignment list` の `is_primary` は主務、`is_approval_route` はワークフローの上長承認に使われる所属です。部署名・役職名を表示するため、部署一覧と役職一覧も取得します
|
|
140
|
+
- 権限が無いときは HTTP 403 をそのまま出さず、誰の権限が要るかを案内します(終了コードは 3)
|
|
141
|
+
- 組織管理者でなくても `twp user list` は使えます(表示フラグが付いたユーザーだけが出ます)
|
|
142
|
+
- ヘルプは `twp user help` / `twp user assignment help`
|
|
143
|
+
|
|
120
144
|
### Backlog の課題を読む・書く
|
|
121
145
|
|
|
122
146
|
TWP に登録した Backlog スペースを通して、課題とコメントを読み、課題へ書きます。
|
|
@@ -378,20 +402,32 @@ mode: dev
|
|
|
378
402
|
| `Write(src/**)` / `Edit(src/*.ts)` / `Read(~/notes/**)` | パスの glob(素の相対と `/` 始まりは作業ディレクトリ基準・`//` 始まりは絶対パス・`~/` はホーム)。`Edit` は `write_file` も含む |
|
|
379
403
|
| `git(log:*)` | `git` ツールの `<サブコマンド> <引数>` |
|
|
380
404
|
|
|
381
|
-
置き場所と強さ(上ほど強い): `--allowed-tools` / `--disallowed-tools`(カンマ区切り・繰り返し可)→ セッション内の「今後聞かない」→ `.twp/settings.local.json` → `.twp/settings.json` → `~/.twp/settings.json` → モードの方針。
|
|
405
|
+
置き場所と強さ(上ほど強い): `--allowed-tools` / `--disallowed-tools`(カンマ区切り・繰り返し可)→ セッション内の「今後聞かない」→ `.twp/settings.local.json` → `.twp/settings.json` → `~/.twp/project-permissions.json`(承認画面の「このプロジェクトでは今後聞かない」)→ `~/.twp/settings.json` → モードの方針。
|
|
382
406
|
|
|
383
407
|
- **拒否(deny)は常に勝つ。** どこに書いた deny も、どれだけ具体的な allow にも負けない。**モードの拒否も覆らない**(`--allowed-tools Bash` を付けても業務モードの `bash` は拒否のまま)
|
|
384
408
|
- 拒否が無ければ**より具体的なルールが勝つ**(`Bash` の allow より `Bash(npm test)` の ask が強い)。同じ具体性なら上の置き場所が勝つ
|
|
385
409
|
- **`Bash(git status:*)` を許可しても `git status && rm -rf .` は通らない。** 許可ルールは「解釈の余地が無い文字(英数字と `_ - . / = : , @ % +` と空白)だけでできた1本のコマンド」にしか当たらない。引用符・`$`・`#`・`~`・`*`・分岐・リダイレクトを含むものと `rm -rf` には当たらず、確認へ落ちる(`git commit -m "x"` のような引用符付きも確認になる)。拒否ルールは逆に、分岐した後ろの断片にも当たる
|
|
386
410
|
- **Windows の `shell`(PowerShell / cmd)には `Bash(...)` の許可ルールを当てない**(引用と分岐の規則が bash と違うため。拒否ルールは当たる)
|
|
387
|
-
- **信用できないリポジトリでは git の許可ルールも安全ではない。** `git status` は `.git/config` の `core.fsmonitor`
|
|
388
|
-
- **リポジトリ側(`.twp/settings.json` / `.twp/settings.local.json`)は締める向きにしか効かない。** `allow` は無視して警告する(モード定義ファイルと同じ理由)。緩めるときは自分の `~/.twp/settings.json`
|
|
411
|
+
- **信用できないリポジトリでは git の許可ルールも安全ではない。** `git status` は `.git/config` の `core.fsmonitor` を、差分を出すコマンドは `.gitattributes` の clean フィルタを実行しうる(`git` ツールは `diff.external` と textconv を無効化して起動するが、この2つは塞げない)。上の例の `Bash(git status:*)` / `git(log:*)` は、自分で clone した信用できるリポジトリで使う
|
|
412
|
+
- **リポジトリ側(`.twp/settings.json` / `.twp/settings.local.json`)は締める向きにしか効かない。** `allow` は無視して警告する(モード定義ファイルと同じ理由)。緩めるときは自分の `~/.twp/settings.json` に書くか、承認画面で「このプロジェクトでは確認しない」を選ぶ(`~/.twp/project-permissions.json` に保存される)
|
|
389
413
|
- **設定ファイルが読めないと自動許可を止める。** 壊れたファイルに書いていた拒否が消えて緩むのを避けるため、直るまで「許可」は「確認」に変わる。起動時に `⚠ 権限設定:` が出たらその行を直す
|
|
390
414
|
- **拒否ルールは「よくある書き方を止める網」であって、書いたコマンドを確実に止める境界ではない。** `sudo rm` `/bin/rm` `then rm` `$(rm …)` のような書き方には当たるが、`find -exec rm` のように引数の中から起動するものは拾えない。確実に止めたいならツールごと拒否する(`Bash`)か、業務・プランモードを使う
|
|
391
415
|
- `Read(...)` の拒否は `grep` / `glob` にも効くが、**探索の起点がその範囲の中にあるときだけ**(リポジトリ全体を起点にした `grep` は、拒否した範囲の中まで読む)。確実に読ませないなら `Read` ごと拒否するか業務・プランモードを使う
|
|
392
416
|
- 設定ファイルが読めない間は、読み取りも含めて**すべての自動許可が確認に変わる**(`-p` では確認できないので拒否になる)
|
|
393
417
|
- `twp_call`(ツールを名前で呼ぶメタツール)は**中で実行されるツールの名前**で判定するよう権限エンジン側は用意してある。`twp_call` そのものを許可しても何も緩まない。**ただし `twp_call` 自体はまだ無い**(今後のバージョンで追加)
|
|
394
418
|
|
|
419
|
+
### 承認画面
|
|
420
|
+
|
|
421
|
+
確認が必要なツール呼び出しでは、実行の前に次の3択が出る(書き込みは色付きの差分を先に見せる。TWP の操作を AI が呼べるようになったら、操作名・キー・件名の要約を出す)。
|
|
422
|
+
|
|
423
|
+
1. **はい**(今回だけ)
|
|
424
|
+
2. **はい、今後聞かない…** — 範囲を選ぶ
|
|
425
|
+
- このセッション中は、このツールを確認しない(終了すれば忘れる)
|
|
426
|
+
- このプロジェクトでは確認しない — `~/.twp/project-permissions.json` に、リポジトリ直下のパスごとに保存する。次に起動したときも、同じリポジトリでの `twp -p` にも効く。コマンド実行(`bash` / `git`)はツール全体ではなく `git log` / `npm run test` のような**コマンドの先頭2〜3語**で保存する。`python3` `node` `sudo` `npx` など後ろに任意のコードを書けるコマンド、`./script` のようなパス、`-C` のようなフラグが2語目に来るコマンドは保存できない(このセッション中だけの許可は選べる)
|
|
427
|
+
3. **いいえ、代わりにこうして…** — 入力した指示を AI に返す(実行はしない)。空のまま Enter なら拒否だけ
|
|
428
|
+
|
|
429
|
+
Esc は拒否。`rm -rf` や `&&` で分岐したコマンドなど**毎回確認するもの**では「今後聞かない」が出ない(選択肢は2つになり、2 が「代わりにこうして」になる)。`@path` でファイルを添付するときの確認では 3 が「いいえ(拒否)」になる(指示を渡す相手がいないため)。保存した内容はファイルを編集すれば取り消せる。リポジトリ側の `.twp/settings.json` に書いた確認・拒否は、保存した「今後聞かない」より強い。
|
|
430
|
+
|
|
395
431
|
### `--permission-mode`(実行1回ぶんの上書き)
|
|
396
432
|
|
|
397
433
|
モードの方針の上に、その実行ぶんの既定を重ねる。CI・SSH・パイプで「何が自動で通るか」を呼び出し側が明示するためのもの。
|
|
@@ -459,6 +495,21 @@ twp task-loop stop # このマシンで動いている
|
|
|
459
495
|
|
|
460
496
|
止めるときは `twp task-loop stop` です。実行されたツールと権限判断は端末の監査ログ(`~/.twp/logs/`)に残ります。
|
|
461
497
|
|
|
498
|
+
### 憲章をファイルとサーバで受け渡す
|
|
499
|
+
|
|
500
|
+
ループが全アイテムに注入する憲章(ループ設定の憲章欄)を、ファイルとの間で登録・展開できます。常時同期はせず、実行したときだけ動きます。
|
|
501
|
+
|
|
502
|
+
```bash
|
|
503
|
+
twp task-loop charter push --project <キー|UUID> --file CONSTITUTION.md # ファイル → サーバ
|
|
504
|
+
twp task-loop charter pull --project <キー|UUID> [--out CONSTITUTION.md] # サーバ → ファイル
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
- **push は `--yes` なしでは登録しません。** 差分と revision を表示し、確定用のコマンド(`--yes --revision <番号>`)を案内します。その番号を送るので、差分を見た後に管理画面で編集されていれば 409 で止まり、画面の編集を上書きしません。`--revision` を省いた `--yes` はその場で取得した revision で登録します
|
|
508
|
+
- **pull は既存ファイルと内容が違うとき差分を表示し、`--yes` を付けたときだけ上書きします。** 同じなら何もしません。サーバに憲章が無いときはファイルを書きません
|
|
509
|
+
- 比較は改行を含む完全一致です。書き込みには、そのプロジェクトのループ設定を変更する権限が必要です(無ければサーバの 403 をそのまま表示します)
|
|
510
|
+
- 終了コードは他のコマンドと同じ規約です: `0` 反映した/差分なし / `1` pull でサーバに憲章が無い・ファイルを書けない / `2` 引数の誤り・差分があり `--yes` なし / `3` サーバが 4xx を返した(403・409 等)/ `4` 5xx・通信失敗 / `5` 認証失敗
|
|
511
|
+
- 個人タスクのキュー(`--project __private__`)には憲章の設定がありません
|
|
512
|
+
|
|
462
513
|
### 必要なもの
|
|
463
514
|
|
|
464
515
|
- 使う AI CLI が**インストール済みかつログイン済み**であること(`twp task-loop setup` が検出し、使えないものは理由を出して止まります)
|