@tocca-systems/twp-cli 0.49.0 → 0.51.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 +26 -0
- package/README.md +223 -7
- package/dist/agent-LHNDQMT5.js +100 -0
- package/dist/{agent-loop-XKH5YE6A.js → agent-loop-QP6UHX4R.js} +2 -2
- package/dist/{ai-dispatch-FGVNSM6L.js → ai-dispatch-VDNMECKK.js} +2 -2
- package/dist/analysis-RFO4E4ZS.js +4 -0
- package/dist/announcement-HQ7CQYFI.js +52 -0
- package/dist/{api-command-IBK6R4XU.js → api-command-ZZFN3T2G.js} +5 -16
- package/dist/{app-7I767FND.js → app-WX4B5MQ3.js} +5 -5
- package/dist/{attendance-correct-M6KD6PSN.js → attendance-correct-CRRR4EKL.js} +3 -3
- package/dist/{attendance-lists-3T7S7QF5.js → attendance-lists-XPCU25OJ.js} +2 -1
- package/dist/{auto-update-PS5HUWVH.js → auto-update-YMI3F44R.js} +1 -1
- package/dist/{auto-update-worker-ZKODJ45K.js → auto-update-worker-VG77U4UA.js} +2 -2
- package/dist/{backlog-IXUASOE3.js → backlog-NU5HHXN2.js} +2 -2
- package/dist/{budget-EJIZFFB7.js → budget-AM7JJ5YP.js} +2 -2
- package/dist/{charter-command-2RIS2VTQ.js → charter-command-LIX2JXRJ.js} +1 -1
- package/dist/{chunk-SPGS7DHD.js → chunk-22OIKHMN.js} +1 -1
- package/dist/{chunk-4QKACT6A.js → chunk-2NP3BLPI.js} +2 -2
- package/dist/chunk-3744RCNM.js +58 -0
- package/dist/{chunk-VTQAI52S.js → chunk-3ZRMMBP5.js} +1 -1
- package/dist/{chunk-6QOT7CHX.js → chunk-5WTFZJT7.js} +1 -1
- package/dist/chunk-6A2JSS76.js +4 -0
- package/dist/{chunk-5YXEGJU7.js → chunk-6JB4MSDX.js} +2 -2
- package/dist/{chunk-ORUDW52G.js → chunk-6LSQCOCJ.js} +1 -1
- package/dist/{chunk-BSEPVMVA.js → chunk-74WGU5BM.js} +2 -2
- package/dist/{chunk-LKS7GANP.js → chunk-7GJFKKOJ.js} +3 -2
- package/dist/{chunk-AJO4O5ZF.js → chunk-A4LFG7MW.js} +1 -1
- package/dist/{chunk-QHNZUMRK.js → chunk-AKLQMTMW.js} +61 -27
- package/dist/{chunk-QYWYZG73.js → chunk-B6WIFZF2.js} +2 -2
- package/dist/chunk-DBCF4H3V.js +141 -0
- package/dist/{chunk-4B3T4UE7.js → chunk-EXT4AIDF.js} +1 -1
- package/dist/{chunk-74SXPFUT.js → chunk-F53TSCRD.js} +1 -1
- package/dist/{chunk-AC6G5UPA.js → chunk-FACNRXN7.js} +2 -2
- package/dist/{chunk-BS2ACFJA.js → chunk-FEJDU42E.js} +43 -34
- package/dist/{chunk-ATYA6DG5.js → chunk-GFLGXGWE.js} +1 -1
- package/dist/{chunk-IF2K4PM5.js → chunk-JA5A6UJ2.js} +6 -4
- package/dist/{chunk-36TEJJ5S.js → chunk-LXGYOKDY.js} +3 -3
- package/dist/{chunk-IOGMOXYF.js → chunk-MI6HVYR2.js} +1 -1
- package/dist/{chunk-HJPIGVGD.js → chunk-MKQDUQQ2.js} +1 -1
- package/dist/{chunk-VWNFYFLA.js → chunk-NGY4K5VW.js} +1 -1
- package/dist/{chunk-YM7TKMNO.js → chunk-NWI2TBO6.js} +1 -1
- package/dist/{chunk-XDHLO54T.js → chunk-OTIR4GES.js} +1 -1
- package/dist/chunk-PFY5QJKO.js +10 -0
- package/dist/{chunk-LXIAOCUW.js → chunk-PS5QFKHB.js} +1 -1
- package/dist/{chunk-3HH5IYNO.js → chunk-QBGEYQ2I.js} +1 -1
- package/dist/{chunk-OHXZO5WK.js → chunk-QLENN5DD.js} +1 -1
- package/dist/chunk-QSXS5SB2.js +33 -0
- package/dist/{chunk-LNZTJI64.js → chunk-RQEX2WC5.js} +1 -1
- package/dist/{chunk-F7K37QG6.js → chunk-RX5HWI4L.js} +1 -1
- package/dist/{chunk-6KB2R3S2.js → chunk-S36LGDG2.js} +2 -2
- package/dist/{chunk-3AD2T6L2.js → chunk-SDNASQZL.js} +1 -1
- package/dist/{chunk-TKGVAWGU.js → chunk-TVODNAPX.js} +1 -1
- package/dist/{chunk-2YNZ4MRT.js → chunk-V64CGX7V.js} +1 -1
- package/dist/{chunk-UFND7FBC.js → chunk-VFPY2A23.js} +2 -2
- package/dist/{chunk-HNUBM24L.js → chunk-VOMCTG6N.js} +1 -1
- package/dist/chunk-WVCEKC7V.js +14 -0
- package/dist/{chunk-QICH2OOI.js → chunk-XWJVDNYE.js} +1 -1
- package/dist/{chunk-6WNPHORR.js → chunk-XZU53BUV.js} +2 -2
- package/dist/{chunk-H3WYVFTS.js → chunk-YJZT3UD3.js} +1 -1
- package/dist/{chunk-FC2SFCKD.js → chunk-Z4UT367H.js} +19 -18
- package/dist/{chunk-5ALOH2TR.js → chunk-ZVEMJWRR.js} +1 -1
- package/dist/cli.js +163 -10
- package/dist/{commands-DJIQE34F.js → commands-BXU44JWS.js} +8 -8
- package/dist/{commands-UMKI65IW.js → commands-TYUK7MV4.js} +3 -3
- package/dist/{company-VCPUUYVV.js → company-BKULUHIU.js} +3 -3
- package/dist/{completion-XFXG7RPT.js → completion-RWWCIR6G.js} +1 -1
- package/dist/{configure-XH33RB27.js → configure-QU6JK65I.js} +1 -1
- package/dist/{contract-SMIPLH7R.js → contract-376FE7VC.js} +3 -3
- package/dist/{department-4RCU4E27.js → department-YKBPBPU6.js} +2 -2
- package/dist/deposit-CY5K3ZTM.js +4 -0
- package/dist/{estimate-HE5H6XXY.js → estimate-GPNG6YOJ.js} +4 -4
- package/dist/evaluation-VRLMQV32.js +61 -0
- package/dist/expense-3MT6WHTG.js +75 -0
- package/dist/{inquiry-SCPVERFM.js → inquiry-YV433Q7V.js} +2 -2
- package/dist/{invoice-CF2TPYSA.js → invoice-OSAO4PIO.js} +3 -3
- package/dist/{job-title-W2EKNKTY.js → job-title-FITZHBR4.js} +1 -1
- package/dist/{knowledge-ZZEHU744.js → knowledge-YEEAKLQJ.js} +2 -32
- package/dist/{leave-5VY2IK7K.js → leave-MWYAL66X.js} +3 -2
- package/dist/{media-4MASY32I.js → media-VQ74YPWV.js} +110 -30
- package/dist/{notification-AOSKQX3Z.js → notification-EAEKDN54.js} +2 -2
- package/dist/{onedrive-3OBI4B5Z.js → onedrive-UBSHXVYS.js} +1 -1
- package/dist/{oneshot-Y4A2ZC3E.js → oneshot-62DOJWOH.js} +2 -2
- package/dist/{outlook-LY6WBXIJ.js → outlook-ODZD27J5.js} +2 -2
- package/dist/{position-TPKLP2SP.js → position-ZKYGVAAK.js} +1 -1
- package/dist/project-5MHCPDVC.js +4 -0
- package/dist/{prospect-3ALNTGPY.js → prospect-ASQA5QVD.js} +3 -3
- package/dist/{purchase-SEHUEXE5.js → purchase-WLJJSMM6.js} +4 -4
- package/dist/query-XEOVFI4D.js +3 -0
- package/dist/receivable-FBPROHOV.js +4 -0
- package/dist/{registry-BA7RGQ2R.js → registry-HEGYZVX6.js} +1 -1
- package/dist/{report-RV7DOZFB.js → report-HK2NZXHC.js} +2 -2
- package/dist/run-HYQQIOVW.js +4 -0
- package/dist/sales-ai-review-IEISLBIH.js +4 -0
- package/dist/{sales-master-RC77V74V.js → sales-master-S3YTUE7J.js} +3 -3
- package/dist/sales-numbering-M4KUZAM7.js +4 -0
- package/dist/{server-skills-Z5DGCJQ7.js → server-skills-IXIOOOC2.js} +1 -1
- package/dist/skill-45FBIGC5.js +4 -0
- package/dist/{skill-command-74MCUHFJ.js → skill-command-NXHTJXYY.js} +1 -1
- package/dist/{storage-KLLBENBY.js → storage-AQDCEBDJ.js} +1 -1
- package/dist/{supplier-payment-OCAK6N3S.js → supplier-payment-MS6YMIT4.js} +3 -3
- package/dist/support-VSDMFUTY.js +53 -0
- package/dist/{task-7QESG57Q.js → task-BTYFJRSC.js} +4 -4
- package/dist/{teams-DRHXPLWN.js → teams-GPXJPXNC.js} +2 -2
- package/dist/update-NCAVUXSX.js +3 -0
- package/dist/{user-67X5FJTN.js → user-VFJGLZDR.js} +23 -6
- package/dist/worker-agent-YX2KPVQG.js +150 -0
- package/dist/workflow-OPZYCSDL.js +4 -0
- package/package.json +1 -1
- package/dist/analysis-NCD6YTJM.js +0 -4
- package/dist/chunk-67JAB5QG.js +0 -4
- package/dist/chunk-IXFMXUNT.js +0 -5
- package/dist/chunk-QOUDJ7XO.js +0 -47
- package/dist/chunk-ZVJXYKRY.js +0 -9
- package/dist/deposit-UF7OKRG2.js +0 -4
- package/dist/project-JFZCKGYY.js +0 -4
- package/dist/query-3ZQP4DCN.js +0 -3
- package/dist/receivable-QYSSI7TB.js +0 -4
- package/dist/run-ZXMGPUUK.js +0 -4
- package/dist/sales-ai-review-AXZKRXKB.js +0 -4
- package/dist/sales-numbering-WU5FAPCO.js +0 -4
- package/dist/update-EYFT7STE.js +0 -3
- package/dist/worker-agent-MKXRTVBM.js +0 -81
- package/dist/workflow-KHNGCPQB.js +0 -4
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,32 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.51.0
|
|
15
|
+
|
|
16
|
+
メディアライブラリのファイルの中身を CLI から書き換え・差し替えできるようになりました。テキストファイルの本文の読み取りと書き換え(`twp media content get` / `update`)、ファイルIDを変えずに新しいファイルへ差し替える操作(`twp media version create`)、版の一覧・詳細・比較(`twp media version list` / `get` / `compare`)、過去の版の取り出し(`twp media version download`)と、過去の版の内容に戻す操作(`twp media version restore`)に対応しています。
|
|
17
|
+
|
|
18
|
+
`twp media image create` / `twp media document create` で、AI による画像・文書の生成と画像のリミックスができるようになりました。生成物はメディアライブラリに保存され、`--out` を付けるとそのままローカルへ書き出せます。
|
|
19
|
+
|
|
20
|
+
`twp attendance report` で勤怠連絡(遅刻・早退・欠勤などの連絡)の一覧・詳細・登録(1日・期間)・変更・削除ができるようになりました。区分・理由は名前で指定でき、使える組み合わせは `twp attendance report reasons` で確認できます。締め済みの月への登録・変更・削除は送る前に止めます。あわせて `twp attendance team`(チームのいまの打刻状態と今日の連絡)と `twp attendance flex-settlement`(フレックス精算)を追加しました。
|
|
21
|
+
|
|
22
|
+
人事評価と目標シートを CLI から読めるようになりました(`twp evaluation` / `twp goal-sheet`)。評価期間・部下の評価の状況・評価の詳細(プロジェクト別評価を含む)・自分の目標シート・受け取ったフィードバックを一覧・表示できます。
|
|
23
|
+
|
|
24
|
+
スキル・資格・研修履歴を CLI から参照できるようになりました。`twp skill map` でスキルマップを、`twp skill who --skill <スキル>` でそのスキルを持つ人を所属付きで表示でき、`twp user skills` / `qualifications` / `trainings` / `contracts` で1人ぶんのスキル評価・保有資格・研修受講履歴・雇用契約を確認できます。`twp skill self-evaluate` で自分のスキル自己評価を提出することもできます。
|
|
25
|
+
|
|
26
|
+
承認待ちの申請の AIチェック(AI要約・妥当性チェック)の結果を CLI で確認し、指摘に承認者のコメントを書けるようになりました(`twp workflow ai-review get` / `twp workflow ai-review-comment`)。`twp workflow approval pending` には申請ごとの指摘の件数も表示されます。
|
|
27
|
+
|
|
28
|
+
`twp expense commuting` で通勤交通費の一覧・月ごとの内容と勤怠情報の参照、日ごとの区分(往復・片道)の保存、申請・申請の取消・削除ができるようになりました。経費の管理者は `--all-users` でテナント全員の一覧を見られ、`twp expense commuting export` で月の CSV を書き出せます(表計算ソフトが式として読まないよう加工して保存します)。
|
|
29
|
+
|
|
30
|
+
コンテナエージェント(リポジトリで作業する AI セッション)を CLI から起動し、追加の指示・再開・停止・削除と、状態・会話・実行ログ・変更ファイルの確認ができるようになりました(`twp agent session` / `twp agent repository`)。`--wait` で作業が終わるまで待ち、最後の返答と作業ブランチ・PR を表示します。
|
|
31
|
+
|
|
32
|
+
## 0.50.0
|
|
33
|
+
|
|
34
|
+
`twp announcement` で、自分に届いているお知らせの一覧(未読・確認待ち・語で絞り込み)・本文と返信の表示・未読件数の確認ができるようになりました。`read` / `read-all` で既読に、`confirm` で「確認しました」を記録でき、`reply list` / `reply create` で返信を読み書きできます。まとめての既読化と確認は取り消せないため `--yes` が必要です。
|
|
35
|
+
|
|
36
|
+
システムサポートへの依頼を CLI から出し(スクリーンショット等の添付つき)、返答の確認・コメント・完了・再問い合わせ・取り下げができるようになりました(`twp support`)。
|
|
37
|
+
|
|
38
|
+
ワーカーエージェント(AIエージェント)を CLI から作成・更新・削除し、スケジュール(〇分ごと・毎日・毎週・毎月)を設定して有効化できるようになりました。`twp worker-agent run start --wait` で今すぐ実行して結果(最終要約)を受け取れます。
|
|
39
|
+
|
|
14
40
|
## 0.49.0
|
|
15
41
|
|
|
16
42
|
メディアライブラリのファイルを1件ずつ CLI で管理できるようになりました。詳細の確認(`twp media get`)、名前・説明・タグの変更(`twp media update`)、移動(`twp media move`)、公開・非公開・アーカイブ(`twp media publish` / `unpublish` / `archive`)、日時を決めた予約公開(`twp media schedule`)、ゴミ箱からの復元(`twp media restore`)と完全削除(`twp media delete --permanent`)に対応しています。あわせて、ゴミ箱の一覧と空にする操作(`twp media trash`)、タグの一覧・登録・統合・削除(`twp media tag`)、最近閲覧したファイル(`twp media recent list`)も使えます。
|
package/README.md
CHANGED
|
@@ -21,17 +21,23 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
21
21
|
| **できる** | AI との会話(ストリーミング表示)。手元のファイルの読み書き・検索、コマンド実行、git の読み取り——いずれも**実行前に確認**します |
|
|
22
22
|
| **できる** | `twp project` / `twp task` によるプロジェクト・タスクの読み書き(一覧・取得・作成・更新・削除・コメント) |
|
|
23
23
|
| **できる** | `twp user` によるテナントのユーザーの作成・更新・失効(退社)と招待(1件・CSV 一括・再送・取消)、ユーザーと所属(部署・役職)の参照(一覧・取得・所属の履歴)、所属の付け替え(異動)・作成・更新・終了・削除、在籍者の棚卸と人事台帳 CSV との突き合わせ。作成・更新・招待と取得、所属の書き込み、他人の所属の参照、棚卸は組織管理者の権限が要ります |
|
|
24
|
+
| **できる** | `twp skill` / `twp qualification` によるスキルマスタ・資格マスタの一覧、スキルマップの表示(部署で絞り込める)とスキル保有者の横断検索(所属付き)、自分のスキルプロファイルへの自己評価の提出(`--yes` が要ります)、`twp user skills` / `qualifications` / `trainings` / `contracts` によるユーザーのスキル評価・保有資格・研修受講履歴・雇用契約の参照。スキルマップと横断検索は HR管理者、雇用契約は原価管理者か管理者、研修履歴は人事管理の権限が要ります |
|
|
24
25
|
| **できる** | `twp department` / `twp position` / `twp job-title` による組織マスタ(部署・役職・職位)の一覧・取得・作成・更新・削除と、部署ツリー・部署の所属者の表示。作成・更新・削除は管理者の権限が要ります |
|
|
25
26
|
| **できる** | `twp inquiry category` による問い合わせカテゴリの一覧・取得・作成・更新(通知先の設定・末尾への並べ替えを含む)。取得・作成・更新は問い合わせ機能の管理者の権限が要ります |
|
|
27
|
+
| **できる** | `twp evaluation` / `twp goal-sheet` による人事評価と目標シートの読み取り(評価期間・見てよい範囲の評価と目標シートの一覧・部下の評価の状況・評価の詳細とプロジェクト別評価・自分の目標シート・受け取ったフィードバック)。書き込みはまだありません |
|
|
28
|
+
| **できる** | `twp support` によるシステムサポートへの依頼(依頼者側)の一覧・詳細(コメントの経過を含む)・起票(添付3件まで)・コメント・完了・再問い合わせ・取り下げと、カテゴリの一覧。運営側(回答・ステータス変更)は扱いません |
|
|
26
29
|
| **できる** | `twp notification` による自分宛ての通知の一覧(未読・カテゴリ・語で絞り込み)・詳細・未読件数・カテゴリ一覧と、1件ずつ・まとめての既読化 |
|
|
27
|
-
| **できる** | `twp worker-agent` によるワーカーエージェント(AI
|
|
30
|
+
| **できる** | `twp worker-agent` によるワーカーエージェント(AIエージェント)の参照(一覧・詳細・スケジュールと次回実行予定・許可できるツールのカタログ・実行回数の上限と今日の使用数)と、実行履歴・実行結果(最終要約を先頭に)・ステップログ・ステップの集計の読み取りと、作成・更新(スケジュール指定込み)・削除・有効化/無効化・今すぐ実行(`--wait` で終わるまで待つ)・実行の取消 |
|
|
31
|
+
| **できる** | `twp announcement` による自分に届いているお知らせ(運営・組織)の一覧(未読・確認待ち・語で絞り込み)・本文と返信の表示・未読件数、既読化(1件ずつ・まとめて)・「確認しました」の記録・返信の一覧と投稿 |
|
|
32
|
+
| **できる** | `twp agent session` によるコンテナエージェント(リポジトリで作業する AI セッション)の起動・追加の指示・再開・停止・削除と、状態・作業ブランチ・PR・会話・実行ログ・変更ファイル(差分)の参照、`twp agent repository` による起動できるリポジトリとブランチの一覧。`--wait` で作業が止まるまで待ち、最後のアシスタント発言・作業ブランチ・PR URL を出します。起動・指示・再開は AI クレジットを消費します |
|
|
28
33
|
| **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細、`twp estimate` による見積の作成・更新・削除・社内共有メモ・既存の請求の紐づけ・関連入金・部署按分・案件書類(注文書・個別契約書など)の登録・版の差替え・ダウンロードと、注文書からの注文書番号の読み取り・見積書/注文書/注文請書の PDF の書き出し、`twp invoice` による請求の作成・更新・削除・取消と取消解除・統合請求書の作成・社内共有メモ・CSV/MF 会計仕訳の書き出し・請求書メールの送信・支払いリンクの作成・請求書/納品書/検収書の PDF の書き出し、`twp contract` による取引契約(見積から作る販売管理の契約)の一覧・詳細・作成・更新・削除、`twp invoice auto-template` による自動請求テンプレートの一覧・詳細・作成・更新・削除と発行履歴の参照(販売管理の管理者)、`twp deposit` による入金の一覧・詳細・登録・更新・削除・CSV 書き出し、請求への引当(CSV での一括を含む)・解除・手数料分の引き上げ、入金予定からの入金と引当のまとめ登録、`twp receivable` による売掛金残高の表示と CSV 書き出し・月次の締めと締めの解除(どちらも販売管理の管理者)、`twp purchase` による仕入(注文書)の一覧・詳細・作成・更新・削除・複製・一覧のメモ・注文書/注文請書の PDF の書き出しと、添付書類(見積書・注文書・注文請書)の登録・版の差替え・ダウンロード、添付した見積書からの AI 読み取り(候補を出すだけで仕入は変えません)、`twp supplier-payment` による支払(仕入先へ払うお金の台帳)の一覧・詳細・登録・更新・削除・ID を並べたファイルでのステータスの一括変更と、毎月の支払を生成する支払先マスタの一覧・詳細・登録・更新・削除(どちらも販売管理の管理者)、`twp business-place` / `twp payee` / `twp seal-impression` による帳票に載る自社の事業所・振込先・印影(画像の登録を含む)の一覧・詳細・登録・更新・削除(書き込みは販売管理の管理者。振込先の一覧は口座番号を伏字にします)、`twp purchase ai-mapping` による見積書 AI 読み取りのマッピング表の一覧・詳細・登録・更新・削除と反映先の選択肢、`twp estimate no-rule` / `twp invoice no-rule` / `twp purchase no-rule` による見積・請求・仕入の番号ルールの一覧(次に発行される番号つき)・詳細・登録・更新・削除と、`twp estimate format` による見積フォーマット(書類を作るときの既定値の組)の一覧・詳細・作成・更新・削除、`twp rounding-setting` による端数処理(金額の丸め方)の表示と変更(番号ルールと端数処理の変更は `--yes` が要り、変更前・変更後を出します)、`twp company` / `twp customer` による取引先企業・顧客の一覧と詳細(名前でも指定できます)、`twp customer` による顧客の登録・更新・削除(担当者・対応履歴ごと。ID を並べたファイルでの一括削除を含む)と担当者・対応履歴の一覧・詳細・登録・更新・削除、全顧客の最近の対応、名刺画像の登録・裏面メモ・削除、企業をまたいだ人物の一覧・詳細・CSV 書き出し、登録前の類似企業検索、`twp company` による取引先企業(仕入先を含む)の登録・更新・削除、`twp prospect` によるアプローチ先(見込客)の一覧・登録・更新・削除・CSV での一括登録と書き出し・重複確認・顧客への昇格と対応履歴の記録、`twp estimate|invoice|contract ai-review` による申請前AIチェックの実行(`--wait` で完了まで待つ)・結果の表示・指摘への確認済みの理由の登録と取消、`twp ai-review-reason` による理由の横断一覧・社内ナレッジへの追記文案の生成と追記PRの作成(販売管理の管理者)。販売管理・顧客管理の権限が要ります |
|
|
29
|
-
| **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・詳細・名前/説明/タグの変更・移動・公開・非公開・アーカイブ・予約公開・削除(ゴミ箱へ移す・`--permanent` で完全削除)・復元・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP
|
|
30
|
-
| **できる** | `twp attendance`
|
|
34
|
+
| **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・詳細・名前/説明/タグの変更・移動・公開・非公開・アーカイブ・予約公開・削除(ゴミ箱へ移す・`--permanent` で完全削除)・復元・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP ダウンロード)・AI による画像/文書の生成と画像のリミックス(`--out` でそのまま取得)・テキストファイルの本文の読み書き(`twp media content`)・差し替えと版の一覧・比較・取り出し・巻き戻し(`twp media version`)、`twp media folder` によるフォルダの一覧・ツリー表示・作成・名前変更・移動・削除・ゴミ箱からの復元と完全削除(`--folder` はフォルダID のほか「親/子」形式のパスでも指定可)、`twp media trash` によるゴミ箱の一覧と空にする操作、`twp media tag` によるタグの一覧・登録・統合・削除(統合と削除は管理者)、`twp media recent list` による最近閲覧したファイル、`twp storage get` によるストレージ使用量の確認(管理者) |
|
|
35
|
+
| **できる** | `twp attendance` による自分の勤怠の参照(いまの打刻状態・打刻の履歴・月の勤怠表)と打刻・打刻修正(過去の時刻での打刻・メモの変更・取り消し・プロジェクトの付け替え)、勤怠連絡の一覧・登録・変更・削除、チームの勤怠状況・フレックス精算の参照、管理者向けの残業サマリ(36協定を含む)・締め状況の参照 |
|
|
31
36
|
| **できる** | `twp leave` による有給の残日数・取得履歴・付与履歴の参照と有給の申請(`twp leave request`)、`twp workchange list` / `twp shift list` による月の勤務変更・シフトの参照(`--me` で自分の分・無ければ全員分=勤怠の管理者) |
|
|
37
|
+
| **できる** | `twp expense commuting` による通勤交通費の一覧・月ごとの内容と勤怠情報(有給・リモート・勤務変更)の参照、日ごとの区分の保存(下書き)・申請・申請の取消・削除。経費の管理者はテナント全員の一覧(`--all-users`)と月の CSV 出力(`export`)ができます |
|
|
32
38
|
| **できる** | `twp analysis` による分析の読み取り(稼働分析・プロジェクトアサイン・人材別アサインを月ごとの列で、今週のキャパシティと過負荷アラート・再分配候補・標準勤務時間の設定、負荷のリスク判定、プロジェクト健全性スコアの一覧・推移と AI の所見)、`twp project manhours` / `twp task manhours` による工数の集計、`twp project workload` によるメンバーごとのタスク件数、収支分析(`twp analysis profit`・`twp project profit`)・人材KPI(`twp analysis staff-kpi`)・プロジェクトのリスク分析(`twp project risk`)の読み取りと工程の一覧・登録(`twp project process`)。分析の権限と、ページごとの閲覧対象への登録が要ります |
|
|
33
39
|
| **できる** | `twp budget` による予実管理(年度の予実ダッシュボード・サマリー・部署行の内訳と未割当・CSV 出力、目標の一覧・JSON でのまとめ登録・前年度からのコピー・CSV の取り込みと雛形、プロジェクトの部署按分の参照と全件置換)。分析の権限と予実管理ページの閲覧対象への登録が要り、目標の書き込みは全体管理者か分析の権限が「管理者」の人です |
|
|
34
|
-
| **できる** | `twp workflow`
|
|
40
|
+
| **できる** | `twp workflow` による、自分が申請できる申請書・申請書の定義(管理者)・自分の申請・承認履歴・自分の承認待ちの参照(申請書は名前でも指定できます)と、申請の起票・提出・更新・削除、承認・却下・差し戻し・取下げ、承認画面の AIチェックの結果の表示と承認者コメント |
|
|
35
41
|
| **できる** | `twp report` による自分のレポート(日報)の一覧(フォーマット・状態・語で絞り込み)・詳細と、下書きの作成(フォーマットの入力項目から雛形を出せます)・更新・提出・AI アドバイス、使えるレポートフォーマットの一覧。確認者としての一覧(未読・書いた人・作成日で絞り込み)・既読・コメント・確認済み・確認の取り消し・差し戻し |
|
|
36
42
|
| **できる** | `twp wiki` / `twp note` / `twp meeting` による、wiki ページ(親ページ直下の子の一覧を含む)・ノート・議事録(開催日の期間で絞り込み)の一覧と、本文を `--output text` で文書として読むこと |
|
|
37
43
|
| **できる** | `twp outlook` / `twp teams` / `twp onedrive` による Microsoft 365 の読み取り(メール・添付・予定、Teams のチーム・チャネル・チャット・メッセージ・スレッド返信・自分宛てメンション、OneDrive のファイルの一覧・情報・ダウンロード)。TWP に Microsoft アカウントでログインしたことがあるユーザーが対象です。書き込みはメールの送信・返信・全員返信・転送(`twp outlook mail send` / `reply` / `reply-all` / `forward`)、Teams のチャット送信・チャネル投稿・スレッド返信(`twp teams message send` / `reply send`)、予定の作成・更新・削除(`twp outlook event create` / `update` / `delete`)、共有リンクの作成(`twp onedrive link create`)ができ(いずれも `--yes` が必要)、OneDrive へのアップロード(`twp onedrive item upload`)もできます |
|
|
@@ -338,6 +344,29 @@ twp job-title list | get <職位> | create --code <コード> --name <職位名>
|
|
|
338
344
|
- **所属者がいる(過去の所属履歴を含む)・子部署がある部署、所属から参照されている役職・職位は削除できません**(サーバが断ります)。そのときはサーバの理由に続けて、次に打つコマンドを案内します(部署は `--valid-to` で無効化、子部署は `--parent` で移す、役職・職位は `--status inactive` で無効化)。終了コードは 3 です
|
|
339
345
|
- ヘルプは `twp department help` / `twp position help` / `twp job-title help`
|
|
340
346
|
|
|
347
|
+
### スキル・資格・研修履歴を見る
|
|
348
|
+
|
|
349
|
+
```
|
|
350
|
+
twp skill list # スキルマスタ(カテゴリ別)
|
|
351
|
+
twp skill map [--fiscal-year <年度>] [--department <部署>] # スキルマップ(HR管理者のみ)
|
|
352
|
+
twp skill who --skill <スキル> [--min-level <1〜5>] [--fiscal-year <年度>] # スキルを持つ人(所属付き・HR管理者のみ)
|
|
353
|
+
twp skill self-evaluate <プロファイルID> --content-file <JSON> --yes # 自分の自己評価を提出する
|
|
354
|
+
twp qualification list [--keyword <語>] [--recommended] [--category <分類>] [--difficulty <難易度>]
|
|
355
|
+
|
|
356
|
+
twp user skills <ユーザー> [--fiscal-year <年度>] # スキル評価(自己・一次・二次・確定レベル)
|
|
357
|
+
twp user qualifications <ユーザー> # 保有資格
|
|
358
|
+
twp user trainings <ユーザー> [--from <日付>] [--to <日付>] # 研修受講履歴
|
|
359
|
+
twp user contracts <ユーザー> # 雇用契約の履歴(原価管理者・管理者のみ)
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
- **スキルマップの行はスキルプロファイル(ユーザー×年度)ごとです。** `--fiscal-year` を省くと同じ人が年度の数だけ並びます。`level` は確定レベル(未確定なら自己評価レベル)です
|
|
363
|
+
- `--department` は主所属の部署で絞ります(スキルマップの API に部署の絞り込みが無いため、ユーザー一覧を引いて絞ります。ユーザー一覧が引けなければ絞らずに出すことはせず止まります)
|
|
364
|
+
- `twp skill who` の `--skill` は ID か名前です(完全一致 → 部分一致で1件に絞れたときだけ受け付け、複数に当たれば候補を出して止まります)。所属はユーザー一覧から足すので、引けない権限のときは空欄にして理由を stderr に出します
|
|
365
|
+
- **`twp skill self-evaluate` は送信後に自分では直せず、上長へ通知が届きます**(`--yes` が要ります)。内容は `{"skills": [{"skill_id": "…", "self_level": 1〜5, "self_comment": "…"}], "skill_up_policy": "…"}` の JSON で、プロファイル ID と `skill_id` は `twp user skills me` で確認できます。プロファイルに無いスキルや知らないキーは送る前に止め、送らなかったスキルは stderr で挙げます
|
|
366
|
+
- 一次・二次評価と確定(評価者の操作)、資格の保有者の横断検索(`twp qualification who`)はまだありません(`twp api` では届きます)
|
|
367
|
+
- 権限が無いときは、誰の権限が要るかを先に案内します(終了コード 3)
|
|
368
|
+
- ヘルプは `twp skill help` / `twp qualification help` / `twp user help`
|
|
369
|
+
|
|
341
370
|
### 問い合わせカテゴリを扱う
|
|
342
371
|
|
|
343
372
|
```
|
|
@@ -355,6 +384,51 @@ twp inquiry category update <カテゴリ> [--title <名前>] [--sort <整数|la
|
|
|
355
384
|
- 削除はまだありません(`twp api /api/v2/inquiries/categories/<ID> --method DELETE --yes` で行えます)
|
|
356
385
|
- ヘルプは `twp inquiry category help`
|
|
357
386
|
|
|
387
|
+
### 人事評価・目標シートを読む
|
|
388
|
+
|
|
389
|
+
```
|
|
390
|
+
twp evaluation period list
|
|
391
|
+
twp evaluation period current
|
|
392
|
+
twp evaluation list [--period <評価期間ID>] [--status in_progress|completed|feedback_ready|feedback_sent] [--all]
|
|
393
|
+
twp evaluation subordinates --period <評価期間ID>
|
|
394
|
+
twp evaluation get <評価ID>
|
|
395
|
+
twp evaluation feedback mine
|
|
396
|
+
twp goal-sheet list [--period <評価期間ID>] [--status draft|submitted|approved] [--all]
|
|
397
|
+
twp goal-sheet mine
|
|
398
|
+
twp goal-sheet get <目標シートID>
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
- 一覧に出るのは**見てよい分だけ**です(人事管理の管理者は全員分、それ以外は評価期間時点の部下の分)。権限が無い人の分は 403 ではなく「出てこない」ので、0件でも「その人の分が無い」とは限りません
|
|
402
|
+
- `get` で読む権限が無いと、誰なら読めるか(本人・評価者・オブザーバー・人事管理の管理者)を案内して終了コード 3 になります
|
|
403
|
+
- `evaluation get` はプロジェクト別評価(`project_evaluations`)も続けて読みます。評価対象者本人が読むと評価段は空で返ります(フィードバックは `twp evaluation feedback mine`)
|
|
404
|
+
- `goal-sheet mine` は今期のシートが無くても作りません。目標の中身は `sections` にあるので `--output json` か `--query sections` で読んでください
|
|
405
|
+
- サーバに人で絞る条件はありません。特定の人だけを見るなら `--query "[?user_id=='<ユーザーID>']"` を使ってください
|
|
406
|
+
- 書き込み(目標シートの更新・提出、評価段の入力、フィードバックの保存・送信・公開、プロジェクト評価の作成)はまだありません
|
|
407
|
+
- ヘルプは `twp evaluation help` / `twp goal-sheet help`
|
|
408
|
+
|
|
409
|
+
### システムサポートへ依頼する
|
|
410
|
+
|
|
411
|
+
```
|
|
412
|
+
twp support category list
|
|
413
|
+
twp support list [--status <状態>]
|
|
414
|
+
twp support get <ID>
|
|
415
|
+
twp support create --category <名前|ID> --subject <件名> (--body <本文> | --body-file <パス>) [--attach <パス>]…
|
|
416
|
+
twp support comment create <ID> (--body <本文> | --body-file <パス>) [--attach <パス>]…
|
|
417
|
+
twp support close <ID> --yes
|
|
418
|
+
twp support reinquire <ID> --yes
|
|
419
|
+
twp support withdraw <ID> --yes
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
- `list` は自分が出した依頼を返します(テナントのサポート管理者はテナントの全件)。`--status` は `new` / `in_progress` / `waiting`(回答済み)/ `re_inquiry` / `closed` / `withdrawn`
|
|
423
|
+
- 返答が来たかは `twp support get <ID> --output text` で確かめます。依頼の本文・状態の履歴・コメントを時系列で出し、運営の返答は「サポート(氏名)」と表示します
|
|
424
|
+
- `--attach` はローカルファイルで、3件まで指定できます(各ファイルを容量検査 → アップロードしてから依頼・コメントを送ります)。`--dry-run` は最初に送るリクエストと、依頼の本体(件名・本文・カテゴリ)を表示します
|
|
425
|
+
- 件名は255文字、依頼の本文は10,000文字、コメントは5,000文字まで。`--body-file -` で標準入力から読みます
|
|
426
|
+
- `close`(完了)・`reinquire`(回答済みの依頼を再問い合わせ)・`withdraw`(取り下げ)は `--yes` が要ります。状態が合わないときはサーバが断ります(終了コード 3)
|
|
427
|
+
- 他の人の依頼と存在しない依頼は、どちらも「見つかりません」になります
|
|
428
|
+
- 添付のダウンロードはまだありません(`get` は添付 ID を出します。`twp api /api/v2/attachments/<添付ID>/download` で取得できます)
|
|
429
|
+
- 運営(マスターテナント)側の操作はありません
|
|
430
|
+
- ヘルプは `twp support help`
|
|
431
|
+
|
|
358
432
|
### 自分宛ての通知を扱う
|
|
359
433
|
|
|
360
434
|
```
|
|
@@ -697,6 +771,27 @@ twp prospect interaction list|create|update|delete [<対応履歴ID>] --prospect
|
|
|
697
771
|
- 権限(顧客管理): 閲覧は「閲覧者」以上、登録・更新・`import` は「編集者」以上、削除・`export`・`promote`・対応履歴の削除は「管理者」
|
|
698
772
|
- ヘルプは `twp prospect help` / `twp prospect import help` / `twp prospect promote help` / `twp prospect interaction help`
|
|
699
773
|
|
|
774
|
+
### お知らせを読む・確認する・返信する
|
|
775
|
+
|
|
776
|
+
```
|
|
777
|
+
twp announcement list [--unread | --needs-confirm] [--keyword <語>] [--all]
|
|
778
|
+
twp announcement get <お知らせID> [--output text]
|
|
779
|
+
twp announcement counts
|
|
780
|
+
twp announcement read <お知らせID>...
|
|
781
|
+
twp announcement read-all --yes
|
|
782
|
+
twp announcement confirm <お知らせID> --yes
|
|
783
|
+
twp announcement reply list <お知らせID>
|
|
784
|
+
twp announcement reply create <お知らせID> --body-file <ファイル|->
|
|
785
|
+
```
|
|
786
|
+
|
|
787
|
+
- 運営からのお知らせと組織のお知らせを混ぜて扱います。掲載中のものだけです。`get` で見ただけでは既読になりません
|
|
788
|
+
- `--needs-confirm` は「確認が要るのにまだ確認していない」お知らせだけを出します
|
|
789
|
+
- **確認が要るお知らせは、既読にしても「確認しました」を押すまで未読のままです**(画面と同じ)。確認を記録するのは `confirm` だけで、発信者が見る記録として残り取り消せないので `--yes` が要ります
|
|
790
|
+
- `read-all` は既読を未読へ戻せないので `--yes` が要ります。送る前に未読件数を stderr に出し、`--dry-run` なら件数を出すだけで既読にしません
|
|
791
|
+
- `get --output text` は本文を読める形(タイトル・発信者・本文・返信)で出します。返信は自分に見える範囲だけです
|
|
792
|
+
- 返信は返信を受け付けていて掲載中の組織のお知らせにだけ送れます(2,000 文字まで・作成者へ通知が届きます)。返信の削除・お知らせの作成と配信はまだありません(`twp api` で到達できます)
|
|
793
|
+
- ヘルプは `twp announcement help`
|
|
794
|
+
|
|
700
795
|
### メディアライブラリのファイルを扱う
|
|
701
796
|
|
|
702
797
|
```bash
|
|
@@ -724,6 +819,19 @@ twp media folder update <ID|パス> --name <新しい名前>
|
|
|
724
819
|
twp media folder move <ID|パス> (--parent <ID|パス> | --root)
|
|
725
820
|
twp media folder delete <ID|パス> --yes [--recursive] [--permanent]
|
|
726
821
|
twp media folder restore <ID> [--project <コード|ID>]
|
|
822
|
+
twp media content get <ファイルID>
|
|
823
|
+
twp media content update <ファイルID> --file <パス|->
|
|
824
|
+
twp media version list <ファイルID> [--limit <件数>]
|
|
825
|
+
twp media version get <ファイルID> --rev <版番号>
|
|
826
|
+
twp media version compare <ファイルID> --from <版番号> --to <版番号>
|
|
827
|
+
twp media version download <ファイルID> --rev <版番号> --out <パス> [--force]
|
|
828
|
+
twp media version create <ファイルID> --file <パス> [--comment <説明>]
|
|
829
|
+
twp media version restore <ファイルID> --rev <版番号> --yes
|
|
830
|
+
twp media image create (--prompt <文> | --prompt-file <パス|->) [--from <ファイルID>] [--model <ID>] [--quality <品質>] [--size <幅x高さ>] [--project <コード|ID>] [--folder <ID|パス>] [--out <パス> [--force]] --yes
|
|
831
|
+
twp media document create (--prompt <文> | --prompt-file <パス|->) --format <形式> [--model <ID>] [--project <コード|ID>] [--folder <ID|パス>] [--out <パス> [--force]] --yes
|
|
832
|
+
twp media model list --for image|document
|
|
833
|
+
twp media document-format list
|
|
834
|
+
twp media prompt create (--content <文> | --content-file <パス|->) --for image|video|music
|
|
727
835
|
twp storage get
|
|
728
836
|
```
|
|
729
837
|
|
|
@@ -742,8 +850,16 @@ twp storage get
|
|
|
742
850
|
- **一括操作(`bulk-*`)は1件でも失敗すると終了コード 3 で終わり、失敗したファイルと理由・適用済みのファイルを stderr に出します**(サーバは失敗があっても HTTP 200 を返すため)。`bulk-publish` / `bulk-unpublish` / `bulk-archive` は存在しないファイルIDが1件でもあると他も適用しません。`bulk-restore` / `bulk-move` / `bulk-delete` は1件ずつ処理するので、失敗したもの以外は適用されます。`bulk-download` は ZIP に入った件数が指定より少なければ書き出さずに終了コード 3 で終わります。件数は 100 件まで(`bulk-download` は 50 件)
|
|
743
851
|
- `bulk-restore` はゴミ箱から戻す操作です(アーカイブの解除ではありません)。`bulk-delete --permanent` は**ゴミ箱にあるファイルだけ**を完全に削除します(先に `bulk-delete` でゴミ箱へ移してください)
|
|
744
852
|
- `twp storage get` は使用量・上限・残量と種類別の内訳を出します(管理者のみ。アップロード前の容量検査は誰でも自動で行われます)
|
|
853
|
+
- **AI 生成(`twp media image create` / `twp media document create`)は生成物をメディアライブラリに保存し、`--out` を付けるとそのファイルをそのまま書き出します。** 付けなければファイルIDを出して終わります(あとから `twp media download` で取れます)。AI クレジットを消費するので `--yes` が要ります(送る内容は `--dry-run` で確認できます)。`--from <ファイルID>` を付けると、その画像を元にしたリミックスになります
|
|
854
|
+
- 書き出し先が既にあるときは、**生成を送る前に**止まります(クレジットを使ってから「書けません」で落ちません)。取得だけが失敗したときは、ファイルIDと `twp media download` のコマンドを出して失敗で終わります(生成し直す必要はありません)
|
|
855
|
+
- **生成の回数制限(1分あたりの回数・ユーザーごと)に当たっても自動では打ち直しません**(生成は1回ごとに課金されるため)。待つ秒数を stderr に出して終了コード 4 で終わります
|
|
856
|
+
- モデルごとの目安の消費クレジットと、指定できる `--size` / `--quality` は `twp media model list --for image` で確かめられます(`estimated_milli_credits` は 1000 で 1 クレジット)
|
|
745
857
|
- コマンド名は `twp task attachment` と同じ動詞(`upload` / `list` / `download`)に揃えています(`twp://` 形式のパスは採っていません)
|
|
746
|
-
-
|
|
858
|
+
- **`twp media content update` は本文を `--file` のファイルか標準入力(`--file -`)からだけ受け取ります**(コマンド引数には載せません)。中身は加工せずに送り(先頭の BOM だけ落とします)、空の本文はサーバが受け付けないので送る前に止めます。書き換えると新しい版が積まれます
|
|
859
|
+
- `twp media content get` は表示用です(トークンらしき値の伏字化・CRLF の LF 化・制御文字の除去がかかります)。書き換えて戻す元データは `twp media download --out` でバイト列のまま取り出してください
|
|
860
|
+
- **`twp media version create` はファイルIDを変えずに中身を差し替えます**(URLの発行・転送・新しい版の登録を1コマンドで行い、sha256 をローカルと突き合わせます)。版の登録に失敗すると、ストレージの実体だけが新しく版の記録が古いまま残るので、打ち直すコマンドを stderr に出して失敗で終わります
|
|
861
|
+
- 版は `--rev` で番号を指定します(`twp media version list` の `version_number`)。`twp media version restore` は指定した版の内容で新しい版を積みます。版が積まれるとサーバが古い版を間引くため、`--yes` が必要です
|
|
862
|
+
- ヘルプは `twp media help` / `twp media content help` / `twp media version help`
|
|
747
863
|
|
|
748
864
|
### 自分の勤怠を見る・打刻する
|
|
749
865
|
|
|
@@ -754,7 +870,7 @@ twp attendance timesheet [--month <YYYY-MM>]
|
|
|
754
870
|
twp attendance punch <clock-in|clock-out|break-start|break-end|switch> [--project <コード|ID>] [--task <タスクID>] [--memo <メモ>]
|
|
755
871
|
```
|
|
756
872
|
|
|
757
|
-
-
|
|
873
|
+
- 対象はログインしている本人の勤怠だけです(勤怠連絡・チームの勤怠は下の節)。打刻の修正・過去の時刻での打刻は次の節の `twp attendance record` で行います
|
|
758
874
|
- `twp attendance punch` の打刻時刻はサーバの時刻です。いま打てる種類は `twp attendance status` で分かります。**今月が締め済みなら打刻を送らずに止めます**(終了コード 3。サーバは締め済みの月への打刻を拒否しないため)
|
|
759
875
|
- `--month` / `--date` を省くと今月です。「今月」はテナントの業務日の区切りでサーバが決めます
|
|
760
876
|
- 存在しない日付(`2026-02-30` など)や `YYYY-MM` 以外の年月は、送る前に引数エラー(終了コード 2)にします
|
|
@@ -782,6 +898,27 @@ twp attendance record move <記録ID> --project <コード|ID> [--month <YY
|
|
|
782
898
|
- `record move` はサーバが元の記録を取り消し、同じ時刻・種類で付け替え先の記録を作ります(タスクの紐づけは外れます)
|
|
783
899
|
- 締め・締め解除は CLI からはできません
|
|
784
900
|
|
|
901
|
+
### 勤怠連絡・チームの勤怠・フレックス精算
|
|
902
|
+
|
|
903
|
+
```bash
|
|
904
|
+
twp attendance report list [--month <YYYY-MM> | --from <YYYY-MM-DD> --to <YYYY-MM-DD>] [--user <ユーザー>]
|
|
905
|
+
twp attendance report get <ID>
|
|
906
|
+
twp attendance report reasons
|
|
907
|
+
twp attendance report create (--date <YYYY-MM-DD> | --from <YYYY-MM-DD> --to <YYYY-MM-DD>) --category <区分> --reason <理由> [--detail <理由詳細>] [--start-time <HH:MM>] [--end-time <HH:MM>] [--note <連絡内容> | --note-file <パス>] [--private-note <メモ> | --private-note-file <パス>] [--user <ユーザー>]
|
|
908
|
+
twp attendance report update <ID> [--category <区分> --reason <理由>] [--detail <理由詳細> | --clear-detail] [--start-time <HH:MM>] [--end-time <HH:MM>] [--note … | --note-file …]
|
|
909
|
+
twp attendance report delete <ID> --yes
|
|
910
|
+
twp attendance team [--mode all|related|project] [--project <コード|ID>]
|
|
911
|
+
twp attendance flex-settlement [--month <YYYY-MM>] [--user <ユーザー>]
|
|
912
|
+
```
|
|
913
|
+
|
|
914
|
+
- 勤怠連絡は遅刻・早退・欠勤などの連絡です。`--category` / `--reason` / `--detail` は名前・コード・ID の完全一致で指定します(理由は区分に、理由詳細は理由に紐づくものだけ)。一致しない・複数当たるときは候補を出して終了コード 2 で止まります。使える組み合わせは `report reasons` で分かります
|
|
915
|
+
- `report create` は `--date` なら1日、`--from` / `--to` なら期間で登録します。期間は、既に連絡のある日にも重ねて登録します(サーバが重複を飛ばさないため、先に `report list` で確かめてください)。期間は土日祝を含む毎日に1件ずつ登録し、送る前に日数を出します。31日を超える期間は、打ち間違いを疑って `--yes` が無い限り送りません(終了コード 2)。登録すると上長へ通知が届きます。他の人の分(`--user`)は勤怠の管理者だけが登録できます
|
|
916
|
+
- **作成・変更・削除は、対象の月が締め済みなら送らずに止めます**(終了コード 3。勤怠連絡は勤怠の集計に効きますが、サーバは締め済みの月への変更を拒否しないため)
|
|
917
|
+
- `report delete` は勤怠の管理者だけができます(本人でも消せません)。`report update` は管理者・本人・作成者ができます
|
|
918
|
+
- `report list` には承認済みの有給(ID が `paid-leave-…`)と勤務変更(`work-change-…`)も並びます。これらは `report update` / `delete` では変えられません(`twp leave` / `twp workchange` を使ってください)。`--from` / `--to` は12か月まで
|
|
919
|
+
- `team` は画面の「チームの勤怠」と同じ集計で、一人ずつのいまの打刻状態と今日の勤怠連絡・休暇を出します
|
|
920
|
+
- `flex-settlement` はフレックス勤務制の人の清算期間の所定・実労働・過不足です。フレックス制でない人は `is_flex: false` を返します。他の人の分は勤怠の管理者か上長だけが見られます
|
|
921
|
+
|
|
785
922
|
### 残業・締め状況を見る(勤怠の管理者)
|
|
786
923
|
|
|
787
924
|
```bash
|
|
@@ -810,6 +947,29 @@ twp shift list [--month <YYYY-MM>] [--me]
|
|
|
810
947
|
- `workchange list` / `shift list` は `--me` で自分の分、無ければ全員分です(全員分は勤怠の管理者権限が要り、無ければその旨を案内して終了コード 3)。`--month` が無ければ今月です
|
|
811
948
|
- 勤務変更やシフトの登録はできません(画面から行ってください。有給の申請は `leave request` でできます)
|
|
812
949
|
|
|
950
|
+
### 通勤交通費を申請する
|
|
951
|
+
|
|
952
|
+
```bash
|
|
953
|
+
twp expense commuting list [--limit <件数>]
|
|
954
|
+
twp expense commuting get (--month <YYYY-MM> | <ID>)
|
|
955
|
+
twp expense commuting attendance --month <YYYY-MM>
|
|
956
|
+
twp expense commuting save --month <YYYY-MM> (--content-file <パス> | --generate-cli-skeleton)
|
|
957
|
+
twp expense commuting apply <ID> [--workflow <申請書>] [--comment <コメント>] --yes
|
|
958
|
+
twp expense commuting cancel <ID> --yes
|
|
959
|
+
twp expense commuting delete <ID> --yes
|
|
960
|
+
# 経費の管理者
|
|
961
|
+
twp expense commuting list --all-users [--month <YYYY-MM>] [--status draft|pending|approved|rejected]
|
|
962
|
+
twp expense commuting export --month <YYYY-MM> --out <パス.csv> [--force] [--include-hidden]
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
- いつもの流れは `save --generate-cli-skeleton --output json > c.json` でひな形を取り、`daily_entries`(日 → `round_trip`=往復 / `one_way`=片道 / `""`=通勤なし)を埋めて `save --content-file c.json`、表示された ID で `apply <ID> --yes` です
|
|
966
|
+
- 区分を決める材料は `attendance` です(有給・リモート・勤務変更のある日が並びます)。CLI が出勤日から区分を自動で埋めることはしません
|
|
967
|
+
- `save` は月の全日を送ります(書かなかった日は通勤なし)。上書きできるのは下書きと差し戻しの月だけです。月に無い日・知らない区分・`daily_entries` と `comment` 以外のキーは、送る前に引数エラー(終了コード 2)にします
|
|
968
|
+
- `apply` は申請できる通勤交通費の申請書が1つならそれを使います。複数あれば `--workflow` で選びます。申請すると承認者へ通知が届くので `--yes` が要ります
|
|
969
|
+
- `get --month` でまだ作っていない月は、申請に使われる契約の通勤情報(交通機関・経路・片道の金額)を出します
|
|
970
|
+
- `export` の CSV は画面の「CSV出力」と同じ内容です。`=` `+` `-` `@` で始まるセル(`+` `-` は数値を除く)の先頭に `'` を付けて、表計算ソフトが式として読まないようにして保存します(サーバ側の無害化に重ねた守りで、既に `'` 付きのセルには重ねません)
|
|
971
|
+
- 経費管理を使う権限が無いと、その旨を案内して終了コード 3 で終わります。管理者の明細の書き換え・状態の巻き戻し・経費設定の変更はできません(画面から行ってください)
|
|
972
|
+
|
|
813
973
|
### 分析を見る
|
|
814
974
|
|
|
815
975
|
```bash
|
|
@@ -896,7 +1056,52 @@ twp worker-agent run stats <エージェント> <実行ID>
|
|
|
896
1056
|
- `run steps --type` は `thinking` / `tool_call` / `tool_result` / `error` / `budget_warning` / `final_summary`(カンマ区切りで複数)。ステップの保持期間は90日で、それより古い実行ではステップが0件です
|
|
897
1057
|
- トークン数(`*_tokens`)はキー名が秘密の伏字化に当たるため `***(伏字)` で出ます。見るときは `--no-redact` を付けてください
|
|
898
1058
|
- AIエージェント機能のライセンスが無いアカウントでは、どの操作も権限の案内を出して終了コード 3 になります
|
|
899
|
-
|
|
1059
|
+
|
|
1060
|
+
### ワーカーエージェントを作る・動かす
|
|
1061
|
+
|
|
1062
|
+
```
|
|
1063
|
+
twp worker-agent create --name <名前> --instructions-file <パス> --tool <ツール名>... --schedule <スケジュール> [--write-enabled --yes] [--enable]
|
|
1064
|
+
twp worker-agent update <エージェント> [--schedule <スケジュール>] [--instructions-file <パス>] [--tool <ツール名>...] [--write-enabled --yes | --read-only]
|
|
1065
|
+
twp worker-agent enable <エージェント>
|
|
1066
|
+
twp worker-agent disable <エージェント>
|
|
1067
|
+
twp worker-agent delete <エージェント> --yes
|
|
1068
|
+
twp worker-agent run start <エージェント> [--simulate] [--wait] --yes
|
|
1069
|
+
twp worker-agent run cancel <エージェント> <実行ID>
|
|
1070
|
+
```
|
|
1071
|
+
|
|
1072
|
+
- **`--schedule` は `interval:30m` / `daily:09:00` / `weekly:mon,fri@09:00` / `monthly:1,15@09:00`(`last` で月末)。** 時刻は Asia/Tokyo。間隔は15〜1440分・5分刻みで、外れた値は送る前に止めます
|
|
1073
|
+
- 指示文は `--instructions-file` で渡してください(引数では改行・引用符が壊れます)。`--cli-input-json` で API の本文をまとめて渡すこともできます
|
|
1074
|
+
- 作成直後は無効です(`--enable` か `twp worker-agent enable` で定期実行が始まります)。`update --tool` は許可ツールを丸ごと置き換えます
|
|
1075
|
+
- **書き込み系ツールを許可する作成・更新(`--write-enabled`)・削除・今すぐ実行は `--yes` が要ります。** 今すぐ実行は AI のクレジットを消費します
|
|
1076
|
+
- `run start --simulate` は書き込み系ツールを実際には書き込まずに記録だけします(twp 共通の `--dry-run` は「何も送らずに送る内容を表示する」で別物です)
|
|
1077
|
+
- **`run start --wait` は終わるまで待って最終要約を先頭に出します。** 終了コードは 0=succeeded・3=failed / cancelled / 見送り・6=上限(既定300秒・`--wait-timeout` で最大480秒)まで終わらなかった(未完了。実行は続いているので、打ち直さず `run get` で確かめてください。打ち直すと二重に実行されます)
|
|
1078
|
+
- 編集・削除・有効化・今すぐ実行はオーナーだけができます(管理者でも他人のエージェントは不可)。無効化と取消は管理者もできます
|
|
1079
|
+
- CLI から作ったエージェントは画面から作ったものと同じ扱い(`created_via: ui`)で記録されます
|
|
1080
|
+
|
|
1081
|
+
### コンテナエージェント(リポジトリで作業する AI セッション)を動かす
|
|
1082
|
+
|
|
1083
|
+
```bash
|
|
1084
|
+
twp agent repository list
|
|
1085
|
+
twp agent repository branches <owner/repo>
|
|
1086
|
+
twp agent session create --repository <owner/repo> --instructions-file task.md [--base <ブランチ>] [--model <モデル>] [--wait] --yes
|
|
1087
|
+
twp agent session instruct <セッション> --body-file more.md [--wait] --yes
|
|
1088
|
+
twp agent session resume <セッション> [--body-file more.md] [--wait] --yes
|
|
1089
|
+
twp agent session list [--status <状態>] [--repository <owner/repo>] [--all]
|
|
1090
|
+
twp agent session get <セッション>
|
|
1091
|
+
twp agent session chat <セッション> [--limit <件数>]
|
|
1092
|
+
twp agent session logs <セッション> [--all]
|
|
1093
|
+
twp agent session diff <セッション>
|
|
1094
|
+
twp agent session cancel <セッション>
|
|
1095
|
+
twp agent session delete <セッション> --yes
|
|
1096
|
+
```
|
|
1097
|
+
|
|
1098
|
+
- `--repository` は `twp agent repository list` の `full_name`(`owner/repo`)か `id` です。あなたが参加するプロジェクトに紐づいたリポジトリだけが使えます
|
|
1099
|
+
- **`create` / `instruct` / `resume` はテナントの AI クレジットを消費するので `--yes` が要ります**(画面から起動したときと同じ API を使うので、消費の記録も同じです)
|
|
1100
|
+
- **`--wait` を付けると 5 秒おきに状態を引き、作業が止まったら最後のアシスタント発言・作業ブランチ・PR URL を出します。** `instruct` / `resume` では、指示を送った時刻より後の発言が出るまで待ちます。`failed` / `cancelled` / `expired` なら終了コード 3、`--timeout`(既定 300 秒・最大 540 秒)で止まらなければ終了コード 6(未完了。作業は続いているので、打ち直さず `get` / `chat` で確かめてください。打ち直すとクレジットを二重に消費します)
|
|
1101
|
+
- 終わった(`completed` の)セッションには `instruct` を送れません。`resume --body-file` で再開の指示として送ってください
|
|
1102
|
+
- `diff --output text` は unified diff の本文、`chat --output text` は1発言1段落で出します
|
|
1103
|
+
- `cancel` は runner を止めるだけで記録は残ります(`resume` で再開できます)。`delete` は起動した本人だけが実行でき、取り消せません
|
|
1104
|
+
- メンバーの管理・ターミナルのログ・リアルタイムの出力(WebSocket)はまだありません(`twp api /api/v2/agent/...` で到達できます)
|
|
900
1105
|
|
|
901
1106
|
### ワークフロー(申請)を見る・出す・承認する
|
|
902
1107
|
|
|
@@ -934,6 +1139,17 @@ twp workflow approval cancel <申請ID> [--comment-file <パス>] --yes
|
|
|
934
1139
|
- `reject` / `send-back` はコメント(理由)が必須です。`cancel` は申請者本人が承認待ちの申請を取り下げる操作です
|
|
935
1140
|
- 削除・却下・差し戻し・取下げは `--yes` が無いと実行しません(`--dry-run` なら送信先だけを確認できます)
|
|
936
1141
|
|
|
1142
|
+
```bash
|
|
1143
|
+
twp workflow ai-review get <申請ID>
|
|
1144
|
+
twp workflow ai-review-comment update <指摘ID> --instance <申請ID> (--text <本文> | --text-file <パス>)
|
|
1145
|
+
twp workflow ai-review-comment delete <指摘ID> --instance <申請ID> --yes
|
|
1146
|
+
```
|
|
1147
|
+
|
|
1148
|
+
- `ai-review get` は承認画面の「AI要約・妥当性チェック」と同じ結果です。対象は取引(見積・請求・取引契約)の承認申請で、提出時に作られます(それ以外の申請では結果が空です)。1行=確認した観点で、`severity` が `warning` の行が指摘、`reason_judgment` / `reason` は申請者の理由、`approver_comment` は承認者の追記です
|
|
1149
|
+
- `ai-review-comment` は承認者の確認結果の追記です。書けるのは、いまその申請を承認できる人だけで、申請者が理由を添えた指摘にだけ書けます(送る前に結果を読んで確かめます)。申請者の理由は書き換えません
|
|
1150
|
+
- `approval pending` には申請ごとの AIチェックの要約(`ai_review` / `ai_warnings` / `ai_severity` / `ai_verdict`=総合所見)が付きます。`ai_review` が `none` は結果なし(取引以外の申請・未生成)、`unavailable` は取得できなかった申請です
|
|
1151
|
+
- 申請者が自分で実行する申請前チェック(`twp estimate ai-review` 等)とは別の結果です
|
|
1152
|
+
|
|
937
1153
|
### レポート(日報)を書く
|
|
938
1154
|
|
|
939
1155
|
```bash
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{AGENT_REPOSITORIES_PATH,AGENT_SESSIONS_PATH}from"./chunk-FEJDU42E.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-QBGEYQ2I.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
|
|
4
|
+
import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var SESSION_COLUMNS=["sessionId","status","repositoryFullName","baseBranch","workBranch","prUrl","aiModel","myRole","createdAt"];var SESSION_GET_COLUMNS=["sessionId","status","repositoryFullName","repositoryId","baseBranch","workBranch","branchName","prUrl","errorMessage","aiProvider","aiModel","sessionMode","executionMode","masterUserName","myRole","createdAt","updatedAt","completedAt","instructions"];var CHAT_COLUMNS=["timestamp","role","user_name","content"];var REPOSITORY_COLUMNS=["id","full\
|
|
5
|
+
_name","default_branch","private"];var BRANCH_COLUMNS=["name","protected"];var DIFF_COLUMNS=["path","status","additions","deletions"];var INSTRUCTION_MAX_CHARS=1e4;var ACTIVE=new Set(["created","pending","provisioning","running"]);var FAILED=new Set(["failed","cancelled","expired"]);var WAIT_POLL_INTERVAL_MS=5e3;var WAIT_DEFAULT_SECONDS=300;var WAIT_MAX_SECONDS=540;var WAIT_CHAT_SCAN_LIMIT=2e3;var sleep=ms=>new Promise(resolve=>setTimeout(resolve,ms));var SESSION_REF_HELP="<\u30BB\u30C3\u30B7\u30E7\u30F3> \u306F\u30BB\u30C3\u30B7\u30E7\u30F3 ID\uFF08twp \
|
|
6
|
+
agent session list \u306E sessionId \u5217\uFF09\u3067\u3059\u3002";var CREDIT_CONFIRMATION="AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C";function usageOf(op){return`twp agent ${op} help`}function noArgs(input,op){if(input.args.length>0)throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usageOf(op))}function single(input,op,label,hint){const values=input.args.map(arg=>arg.trim());if(values.length>
|
|
7
|
+
1)throw new UsageError(`${op} \u304C\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F ${label} \u3060\u3051\u3067\u3059: ${values.slice(1).join(" ")}`,usageOf(op));const value=values[0]??"";if(value==="")throw new UsageError(`${label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usageOf(op));if(!isSafePathSegment(value))throw new UsageError(`${label}\u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${value}`,hint);return value}function sessionId(input,op){return single(input,
|
|
8
|
+
`session ${op}`,"<\u30BB\u30C3\u30B7\u30E7\u30F3>","\u30BB\u30C3\u30B7\u30E7\u30F3 ID \u306F twp agent session list \u306E sessionId \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}function sessionPath(id,suffix=""){return`${AGENT_SESSIONS_PATH}/${encodeURIComponent(id)}${suffix}`}function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);
|
|
9
|
+
return body}function sessionOf(body,what){const session=envelope(body,what)["session"];if(!isRecord(session)||typeof session["sessionId"]!=="string"){throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B session.sessionId \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return session}function listOf(body,key,what){const value=envelope(body,what)[key];if(!Array.isArray(value))throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B ${key}\
|
|
10
|
+
\u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return value}function limitIn(input,max){const limit=positiveInteger(input.flags,"--limit");if(limit!==void 0&&limit>max)throw new UsageError(`--limit \u306F 1\u301C${max} \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${limit}`);return limit}function refusedBeforeSending(err){return err instanceof ApiError&&err.status>=400&&err.status<500||err instanceof
|
|
11
|
+
NotLoggedInError||err instanceof SessionExpiredError}var WAIT_FLAG={name:"--wait",summary:"runner \u306E\u4F5C\u696D\u304C\u6B62\u307E\u308B\uFF08\u5B8C\u4E86\u30FB\u5931\u6557\u30FB\u5165\u529B\u5F85\u3061\uFF09\u307E\u3067\u5F85\u3061\u3001\u6700\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u30FB\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR URL \u3092\u51FA\u3059",takesValue:false};var TIMEOUT_FLAG={name:"--timeout",summary:`--wait \u3067\u5F85\u3064\u4E0A\u9650\u306E\u79D2\u6570\uFF08\u65E2\u5B9A ${WAIT_DEFAULT_SECONDS}\
|
|
12
|
+
\u30FB\u6700\u5927 ${WAIT_MAX_SECONDS}\uFF09`,takesValue:true,placeholder:"<\u79D2>"};function waitSeconds(input,op){const timeout=positiveInteger(input.flags,TIMEOUT_FLAG.name);if(!input.flags.has(WAIT_FLAG.name)){if(timeout!==void 0)throw new UsageError("--timeout \u306F --wait \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usageOf(op));return void 0}if(timeout!==void 0&&timeout>WAIT_MAX_SECONDS){throw new UsageError(`--timeout \u306F ${WAIT_MAX_SECONDS} \u79D2\u4EE5\u4E0B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\
|
|
13
|
+
\uFF08\u305D\u308C\u3088\u308A\u9577\u304F\u5F85\u3064\u306A\u3089 --wait \u3092\u5916\u3057\u3001\u3042\u3068\u3067 twp agent session get \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF09`,usageOf(op))}return timeout??WAIT_DEFAULT_SECONDS}function chatRows(body){return listOf(body,"messages","\u30C1\u30E3\u30C3\u30C8")}function lastAssistant(rows){for(let i=rows.length-1;i>=0;i--){const row=rows[i];if(isRecord(row)&&row["role"]==="assistant"&&typeof row["content"]==="string"){return{
|
|
14
|
+
role:"assistant",content:row["content"],timestamp:typeof row["timestamp"]==="string"?row["timestamp"]:""}}}return null}function isAfter(timestamp,since){if(since===null)return true;const a=Date.parse(timestamp);const b=Date.parse(since);return!Number.isNaN(a)&&!Number.isNaN(b)&&a>b}async function waitForSession(ctx,id,seconds,since){const deadline=Date.now()+seconds*1e3;const hint=`twp agent session get ${id}`;ctx.warn(`runner \u306E\u4F5C\u696D\u304C\u6B62\u307E\u308B\u306E\u3092\u5F85\u3061\u307E\u3059\uFF08${WAIT_POLL_INTERVAL_MS/
|
|
15
|
+
1e3} \u79D2\u304A\u304D\u30FB\u6700\u5927 ${seconds} \u79D2\uFF09\u3002`);for(;;){await sleep(WAIT_POLL_INTERVAL_MS);let session;try{session=sessionOf(await ctx.send({method:"GET",path:sessionPath(id)}),"\u30BB\u30C3\u30B7\u30E7\u30F3");const status=String(session["status"]);if(FAILED.has(status)){const reason=typeof session["errorMessage"]==="string"&&session["errorMessage"]!==""?`: ${session["errorMessage"]}`:"";throw new ApiRejectedError(`\u30BB\u30C3\u30B7\u30E7\u30F3\u304C ${status} \u3067\u7D42\u308F\u308A\u307E\u3057\u305F${reason}\
|
|
16
|
+
\u3002\u4F1A\u8A71\u306F twp agent session chat ${id} \u3067\u8AAD\u3081\u307E\u3059`)}if(!ACTIVE.has(status)){const last=lastAssistant(chatRows(await ctx.send({method:"GET",path:sessionPath(id,"/chat-messages"),query:{limit:WAIT_CHAT_SCAN_LIMIT}})));if(last!==null&&isAfter(last.timestamp,since))return{session,last};if(since===null)return{session,last}}}catch(err){if(err instanceof ApiRejectedError)throw err;ctx.warn(`\u6307\u793A\u306F\u53D7\u3051\u4ED8\u3051\u6E08\u307F\u3067\u3059\u304C\u3001\u5F85\u3064\u9014\u4E2D\u3067\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6253\u3061\u76F4\u3059\u524D\u306B ${hint}\
|
|
17
|
+
\u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002`);if(err instanceof NetworkError||err instanceof ApiResponseError||err instanceof ApiError&&(err.status>=500||err.status===429)){throw new WaitTimeoutError(`\u5F85\u3064\u9014\u4E2D\u3067\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${err.message}\uFF09\u3002\u4F5C\u696D\u306F\u53D7\u3051\u4ED8\u3051\u6E08\u307F\u3067\u3059\u3002\u6253\u3061\u76F4\u3055\u305A ${hint} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044`)}
|
|
18
|
+
throw err}if(Date.now()>=deadline){const status=String(session["status"]);throw new WaitTimeoutError(ACTIVE.has(status)?`${seconds} \u79D2\u5F85\u3061\u307E\u3057\u305F\u304C\u4F5C\u696D\u304C\u6B62\u307E\u308A\u307E\u305B\u3093\u3067\u3057\u305F\uFF08status=${status}\uFF09\u3002\u3042\u3068\u3067 ${hint} \u3068 twp agent session chat ${id} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u4F5C\u696D\u306F runner \u4E0A\u3067\u7D9A\u3044\u3066\u3044\u307E\u3059\uFF09`:`${seconds} \u79D2\u5F85\u3061\
|
|
19
|
+
\u307E\u3057\u305F\u304C\u3001\u9001\u3063\u305F\u6307\u793A\u3088\u308A\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08status=${status}\uFF09\u3002twp agent session chat ${id} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u6B62\u307E\u3063\u305F\u307E\u307E\u306A\u3089 twp agent session resume \u3067\u518D\u958B\u3067\u304D\u307E\u3059\uFF09`)}}}function startedOf(body,what){const data=envelope(body,
|
|
20
|
+
what);const session=data["session"];if(session!==void 0&&session!==null&&!isRecord(session))throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E session \u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002`);const ts=data["timestamp"];return{session:isRecord(session)?session:null,timestamp:typeof ts==="string"?ts:null,last_assistant_message:typeof data["last_assistant_message"]==="string"?data["last_assistant_message"]:null,last_assistant_at:typeof data["last_assistant_at"]==="string"?data["\
|
|
21
|
+
last_assistant_at"]:null}}function startedRaw(what){return body=>startedOf(body,what)}function startedSummary(what){return body=>{const started=startedOf(body,what);const session=started.session??{};return{sessionId:session["sessionId"]??null,status:session["status"]??null,workBranch:session["workBranch"]??session["branchName"]??null,prUrl:session["prUrl"]??null,last_assistant_message:started.last_assistant_message}}}function startedDocument(what){return body=>{const started=startedOf(body,what);
|
|
22
|
+
const session=started.session??{};const lines=[started.last_assistant_message??"\uFF08\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u306E\u767A\u8A00\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF09",""];for(const key of["sessionId","status","workBranch","branchName","prUrl","errorMessage"]){const value=session[key];if(value!==null&&value!==void 0&&value!=="")lines.push(`${key}: ${String(value)}`)}return`${lines.join("\n")}
|
|
23
|
+
`}}function startedNotes(op){return(body,input)=>{const started=startedOf(body,op);const id=started.session?.["sessionId"]??input.args[0]??"<\u30BB\u30C3\u30B7\u30E7\u30F3>";if(input.flags.has(WAIT_FLAG.name))return[];return[`runner \u306F\u975E\u540C\u671F\u3067\u52D5\u304D\u307E\u3059\u3002\u9032\u307F\u5177\u5408\u306F twp agent session get ${String(id)}\u3001\u4F1A\u8A71\u306F twp agent session chat ${String(id)} \u3067\u8AAD\u3081\u307E\u3059\uFF08--wait \u3092\u4ED8\u3051\u308B\u3068\u6B62\u307E\u308B\u307E\u3067\u5F85\u3061\u307E\u3059\uFF09\u3002`]}}
|
|
24
|
+
function waitPlannedNotes(input,idHint){return["\u9001\u308B\u3068\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\uFF08runner \u304C AI \u3092\u547C\u3076\u305F\u3081\uFF09",...input.flags.has(WAIT_FLAG.name)?[`\u7D9A\u3051\u3066 GET ${AGENT_SESSIONS_PATH}/${idHint} \u3092 ${WAIT_POLL_INTERVAL_MS/1e3} \u79D2\u304A\u304D\u306B\u9001\u308A\u3001\u6B62\u307E\u3063\u305F\u3089\u30C1\u30E3\u30C3\u30C8\u30921\u56DE\u8AAD\u307F\u307E\u3059`]:[]]}async function sendAndMaybeWait(input,ctx,plan,op,idFrom){
|
|
25
|
+
const seconds=waitSeconds(input,op);let sent;try{sent=await ctx.send(plan)}catch(err){if(op==="session instruct"&&err instanceof ApiError&&err.status===400&&String(err.body?.error_description??"").includes("\u53D7\u3051\u4ED8\u3051\u3089\u308C\u308B\u72B6\u614B\u3067\u306F\u3042\u308A\u307E\u305B\u3093")){ctx.warn("\u7D42\u308F\u3063\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u306B\u306F\u6307\u793A\u3092\u9001\u308C\u307E\u305B\u3093\u3002twp agent session resume <\u30BB\u30C3\u30B7\u30E7\u30F3> --body-file <\u30D1\u30B9> --yes \u3067\u518D\u958B\u306E\u6307\u793A\u3068\u3057\u3066\u9001\u308C\u307E\u3059\u3002")}
|
|
26
|
+
if(!refusedBeforeSending(err)){ctx.warn("\u9001\u4FE1\u306E\u7D50\u679C\u3092\u53D7\u3051\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30B5\u30FC\u30D0\u3067\u53D7\u3051\u4ED8\u3051\u6E08\u307F\u306E\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF08\u6253\u3061\u76F4\u3059\u3068\u4E8C\u91CD\u306B\u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u3046\u308B\uFF09\u3002twp agent session list \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002")}throw err}const data=envelope(sent,
|
|
27
|
+
op);if(isRecord(data["session"])&&FAILED.has(String(data["session"]["status"]))){const failed=data["session"];const reason=typeof failed["errorMessage"]==="string"&&failed["errorMessage"]!==""?`: ${failed["errorMessage"]}`:"";throw new ApiRejectedError(`\u30BB\u30C3\u30B7\u30E7\u30F3\u306F ${String(failed["status"])} \u3067\u3059${reason}\uFF08session=${String(failed["sessionId"])}\uFF09`)}const base={result:true,session:isRecord(data["session"])?data["session"]:null,timestamp:typeof data["times\
|
|
28
|
+
tamp"]==="string"?data["timestamp"]:null,last_assistant_message:null,last_assistant_at:null};if(seconds===void 0)return base;const id=idFrom(data);const since=op==="session create"?null:base["timestamp"]??new Date().toISOString();const{session,last}=await waitForSession(ctx,id,seconds,since);return{...base,session,last_assistant_message:last?.content??null,last_assistant_at:last?.timestamp??null}}var sessionPaging=envelopePaging({label:"\u30BB\u30C3\u30B7\u30E7\u30F3\u4E00\u89A7"});function sessionRows(body){
|
|
29
|
+
envelope(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u4E00\u89A7");return sessionPaging.items(body)}var REPOSITORY_FLAG={name:"--repository",summary:"\u30EA\u30DD\u30B8\u30C8\u30EA\uFF08owner/repo\u30FB\u540D\u524D\u30FBID\u3002twp agent repository list \u3067\u78BA\u8A8D\u3067\u304D\u308B\uFF09",takesValue:true,placeholder:"<owner/repo>"};async function resolveRepository(input,ctx,ref,flag){const repo=await ctx.resolver.agentRepository(ref,flag);if(!isSafePathSegment(repo.id))throw new UsageError(`\u30EA\u30DD\u30B8\
|
|
30
|
+
\u30C8\u30EA ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${repo.id}`);return withResolved(input,{repositoryId:repo.id})}var sessionListOperation={name:"list",summary:"\u30B3\u30F3\u30C6\u30CA\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u4E00\u89A7\u3059\u308B\uFF08\u81EA\u5206\u304C\u30DE\u30B9\u30BF\u30FC\u304B\u30E1\u30F3\u30D0\u30FC\u306E\u3082\u306E\u30FB\u65B0\u3057\u3044\u9806\uFF09",usage:"twp agent session list [--status <\u72B6\u614B>] [--rep\
|
|
31
|
+
ository <owner/repo>] [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:`\u81EA\u5206\u304C\u30DE\u30B9\u30BF\u30FC\uFF08\u8D77\u52D5\u3057\u305F\u4EBA\uFF09\u304B\u30E1\u30F3\u30D0\u30FC\u3068\u3057\u3066\u53C2\u52A0\u3057\u3066\u3044\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3060\u3051\u304C\u51FA\u307E\u3059\u3002
|
|
32
|
+
--status \u306F pending / provisioning / running / completed / failed / cancelled \u7B49\u306E\u72B6\u614B\u3067\u7D5E\u308A\u307E\u3059\u3002
|
|
33
|
+
|
|
34
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\uFF08\u6307\u793A\u6587\u30FB\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u30FB\u6DFB\u4ED8\u306E\u4E00\u89A7\u3092\u542B\u3080\uFF09\u3002
|
|
35
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${SESSION_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
|
|
36
|
+
|
|
37
|
+
`+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--status",summary:"\u72B6\u614B\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u72B6\u614B>"},REPOSITORY_FLAG],paging:sessionPaging,async prepare(input,ctx){noArgs(input,"session list");limitIn(input,100);const repo=nonEmpty(input.flags,REPOSITORY_FLAG.name);return repo===void 0?input:resolveRepository(input,ctx,repo,REPOSITORY_FLAG.name)},plan:input=>({method:"GET",path:AGENT_SESSIONS_PATH,query:{status:nonEmpty(input.flags,"--status"),
|
|
38
|
+
repositoryId:input.resolved?.["repositoryId"],limit:limitIn(input,100),cursor:nonEmpty(input.flags,"--cursor")}}),summarize:body=>sessionRows(body).map(row=>pick(row,SESSION_COLUMNS)),raw:sessionRows,notes:body=>sessionRows(body).length===0?["\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u306F\u3042\u308A\u307E\u305B\u3093\u3002"]:[]};var sessionGetOperation={name:"get",summary:"\u30BB\u30C3\u30B7\u30E7\u30F31\u4EF6\u306E\u72B6\u614B\u30FB\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR \u3092\u8868\u793A\u3059\u308B",
|
|
39
|
+
usage:"twp agent session get <\u30BB\u30C3\u30B7\u30E7\u30F3>",description:`${SESSION_REF_HELP}
|
|
40
|
+
\u53C2\u52A0\u3057\u3066\u3044\u306A\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u306F\u300C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u300D\u306B\u306A\u308A\u307E\u3059\u3002
|
|
41
|
+
|
|
42
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002`,flags:[],plan:input=>({method:"GET",path:sessionPath(sessionId(input,"get"))}),summarize:body=>pick(sessionOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3"),SESSION_GET_COLUMNS),raw:body=>sessionOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3")};var INSTRUCTIONS_SPEC={flag:"--instructions",fileFlag:"--instructions-file",label:"\u521D\u671F\u6307\u793A",maxChars:INSTRUCTION_MAX_CHARS,usage:"twp ag\
|
|
43
|
+
ent session create --repository <owner/repo> --instructions-file <\u30D1\u30B9> --yes"};var BODY_SPEC={flag:"--body",fileFlag:"--body-file",label:"\u6307\u793A",maxChars:INSTRUCTION_MAX_CHARS,usage:"twp agent session instruct <\u30BB\u30C3\u30B7\u30E7\u30F3> --body-file <\u30D1\u30B9> --yes"};var sessionCreateOperation={name:"create",summary:"\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u4F5C\u696D\u3059\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8D77\u52D5\u3059\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\u30FB--wait \u3067\u6B62\u307E\u308B\u307E\u3067\u5F85\u3064\uFF09",
|
|
44
|
+
usage:"twp agent session create --repository <owner/repo> (--instructions-file <\u30D1\u30B9> | --instructions <\u6587>) [--base <\u30D6\u30E9\u30F3\u30C1>] [--model <\u30E2\u30C7\u30EB>] [--wait [--timeout <\u79D2>]] --yes",description:`\u753B\u9762\u306E\u300C\u65B0\u3057\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u300D\u3068\u540C\u3058 POST /api/v2/agent/sessions \u3092\u9001\u308A\u307E\u3059\u3002runner \u304C\u8D77\u52D5\u3057\u3066\u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u53D6\u5F97\u3057\u3001
|
|
45
|
+
\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\uFF08agent/task-<\u30BB\u30C3\u30B7\u30E7\u30F3ID>\uFF09\u3067\u6307\u793A\u3069\u304A\u308A\u306B\u4F5C\u696D\u3057\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\u3002
|
|
46
|
+
--repository \u306F twp agent repository list \u306E full_name\uFF08owner/repo\uFF09\u304B id \u3067\u3059\u3002
|
|
47
|
+
--base \u3092\u7701\u304F\u3068\u3001\u30B5\u30FC\u30D0\u304C\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u65E2\u5B9A\u306E\u30D6\u30E9\u30F3\u30C1\u3092\u4F7F\u3044\u307E\u3059\u3002--model \u3092\u7701\u304F\u3068\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3067\u3059\u3002
|
|
48
|
+
--wait \u3092\u4ED8\u3051\u308B\u3068 5 \u79D2\u304A\u304D\u306B\u72B6\u614B\u3092\u5F15\u304D\u3001\u4F5C\u696D\u304C\u6B62\u307E\u3063\u305F\u3089\u6700\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u30FB\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR URL \u3092\u51FA\u3057\u307E\u3059
|
|
49
|
+
\uFF08failed / cancelled / expired \u306A\u3089\u7D42\u4E86\u30B3\u30FC\u30C9 3\u3001--timeout \u79D2\u3067\u6B62\u307E\u3089\u306A\u3051\u308C\u3070\u7D42\u4E86\u30B3\u30FC\u30C9 6\uFF1D\u672A\u5B8C\u4E86\u30FB\u6253\u3061\u76F4\u3055\u306A\u3044\u3002\u65E2\u5B9A ${WAIT_DEFAULT_SECONDS} \u79D2\u30FB\u6700\u5927 ${WAIT_MAX_SECONDS} \u79D2\uFF09\u3002
|
|
50
|
+
\u6307\u793A\u6587\u306F\u6539\u884C\u3084 Markdown \u3092\u58CA\u3055\u306A\u3044\u3088\u3046 --instructions-file \u3067\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002`,destructive:true,confirmation:CREDIT_CONFIRMATION,flags:[REPOSITORY_FLAG,{name:"--base",summary:"\u4F5C\u696D\u306E\u8D77\u70B9\u306B\u3059\u308B\u30D6\u30E9\u30F3\u30C1\uFF08twp agent repository branches \u3067\u78BA\u8A8D\u3067\u304D\u308B\uFF09",takesValue:true,placeholder:"<\u30D6\u30E9\u30F3\u30C1>"},
|
|
51
|
+
{name:INSTRUCTIONS_SPEC.fileFlag,summary:"\u521D\u671F\u6307\u793A\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:INSTRUCTIONS_SPEC.flag,summary:"\u521D\u671F\u6307\u793A\u3092\u76F4\u63A5\u6E21\u3059\uFF08\u6539\u884C\u3092\u542B\u3080\u306A\u3089 --instructions-file\uFF09",takesValue:true,placeholder:"<\u6587>"},{name:"--model",summary:"AI \u30E2\u30C7\u30EB\uFF08claude \u306E\u30E2\u30C7\u30EB\u306E\u307F\u30FB\u7701\u7565\u6642\u306F\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\uFF09",
|
|
52
|
+
takesValue:true,placeholder:"<\u30E2\u30C7\u30EB>"},WAIT_FLAG,TIMEOUT_FLAG],async prepare(input,ctx){noArgs(input,"session create");waitSeconds(input,"session create");const repo=nonEmpty(input.flags,REPOSITORY_FLAG.name);if(repo===void 0)throw new UsageError("--repository \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","\u30EA\u30DD\u30B8\u30C8\u30EA\u306F twp agent repository list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002");const instructions=await readBody(input,INSTRUCTIONS_SPEC);
|
|
53
|
+
if(instructions===void 0)throw new UsageError("\u521D\u671F\u6307\u793A\u3092 --instructions-file \u304B --instructions \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",INSTRUCTIONS_SPEC.usage);return withResolved(await resolveRepository(input,ctx,repo,REPOSITORY_FLAG.name),{instructions})},plan:input=>({method:"POST",path:AGENT_SESSIONS_PATH,body:{repositoryId:requireResolved(input,"repositoryId"),instructions:requireResolved(input,"instructions"),...nonEmpty(input.flags,"--base")!==void 0?
|
|
54
|
+
{baseBranch:nonEmpty(input.flags,"--base")}:{},...nonEmpty(input.flags,"--model")!==void 0?{aiModel:nonEmpty(input.flags,"--model")}:{}}}),plannedNotes:input=>waitPlannedNotes(input,"{\u4F5C\u6210\u3057\u305F\u30BB\u30C3\u30B7\u30E7\u30F3ID}"),execute:(input,ctx)=>sendAndMaybeWait(input,ctx,sessionCreateOperation.plan(input),"session create",data=>{const session=data["session"];const id=isRecord(session)?session["sessionId"]:void 0;if(typeof id!=="string"||!isSafePathSegment(id))throw new ApiResponseError(
|
|
55
|
+
"\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210\u306E\u5FDC\u7B54\u306B session.sessionId \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return id}),summarize:startedSummary("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210"),raw:startedRaw("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210"),document:startedDocument("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210"),notes:startedNotes("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210")};var sessionInstructOperation={
|
|
56
|
+
name:"instruct",summary:"\u52D5\u3044\u3066\u3044\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3078\u8FFD\u52A0\u306E\u6307\u793A\u3092\u9001\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\u30FB--wait \u3067\u7B54\u3048\u3092\u5F85\u3064\uFF09",usage:"twp agent session instruct <\u30BB\u30C3\u30B7\u30E7\u30F3> (--body-file <\u30D1\u30B9> | --body <\u6587>) [--wait [--timeout <\u79D2>]] --yes",description:`${SESSION_REF_HELP}
|
|
57
|
+
\u753B\u9762\u306E\u30C1\u30E3\u30C3\u30C8\u6B04\u304B\u3089\u9001\u308B\u306E\u3068\u540C\u3058 POST /api/v2/agent/sessions/{id}/instructions \u3067\u3059\u3002\u767A\u8A00\u8005\u306F\u3042\u306A\u305F\u3068\u3057\u3066\u8A18\u9332\u3055\u308C\u307E\u3059\u3002
|
|
58
|
+
\u30BB\u30C3\u30B7\u30E7\u30F3\u304C running / pending / \u5165\u529B\u5F85\u3061\u306E\u3068\u304D\u3060\u3051\u53D7\u3051\u4ED8\u3051\u307E\u3059\uFF08\u7D42\u308F\u3063\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u306F twp agent session resume \u3067\u518D\u958B\u3057\u307E\u3059\uFF09\u3002
|
|
59
|
+
--wait \u3092\u4ED8\u3051\u308B\u3068\u3001\u9001\u3063\u305F\u6642\u523B\u3088\u308A\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u304C\u51FA\u3066\u4F5C\u696D\u304C\u6B62\u307E\u308B\u307E\u3067\u5F85\u3061\u307E\u3059\u3002`,destructive:true,confirmation:CREDIT_CONFIRMATION,flags:[{name:BODY_SPEC.fileFlag,summary:"\u6307\u793A\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:BODY_SPEC.
|
|
60
|
+
flag,summary:"\u6307\u793A\u3092\u76F4\u63A5\u6E21\u3059\uFF08\u6539\u884C\u3092\u542B\u3080\u306A\u3089 --body-file\uFF09",takesValue:true,placeholder:"<\u6587>"},WAIT_FLAG,TIMEOUT_FLAG],async prepare(input){sessionId(input,"instruct");waitSeconds(input,"session instruct");const body=await readBody(input,BODY_SPEC);if(body===void 0)throw new UsageError("\u6307\u793A\u3092 --body-file \u304B --body \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",BODY_SPEC.usage);return withResolved(input,
|
|
61
|
+
{instruction:body})},plan:input=>({method:"POST",path:sessionPath(sessionId(input,"instruct"),"/instructions"),body:{instruction:requireResolved(input,"instruction")}}),plannedNotes:input=>waitPlannedNotes(input,input.args[0]??"<\u30BB\u30C3\u30B7\u30E7\u30F3>"),execute:(input,ctx)=>sendAndMaybeWait(input,ctx,sessionInstructOperation.plan(input),"session instruct",()=>sessionId(input,"instruct")),summarize:startedSummary("\u6307\u793A\u306E\u9001\u4FE1"),raw:startedRaw("\u6307\u793A\u306E\u9001\u4FE1"),
|
|
62
|
+
document:startedDocument("\u6307\u793A\u306E\u9001\u4FE1"),notes:startedNotes("\u6307\u793A\u306E\u9001\u4FE1")};var RESUME_SPEC={...BODY_SPEC,label:"\u518D\u958B\u306E\u6307\u793A",usage:"twp agent session resume <\u30BB\u30C3\u30B7\u30E7\u30F3> [--body-file <\u30D1\u30B9>] --yes"};var sessionResumeOperation={name:"resume",summary:"\u6B62\u307E\u3063\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u518D\u958B\u3059\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\u30FB--body-file \u3067\u518D\u958B\u306E\u6307\u793A\uFF09",
|
|
63
|
+
usage:"twp agent session resume <\u30BB\u30C3\u30B7\u30E7\u30F3> [--body-file <\u30D1\u30B9> | --body <\u6587>] [--wait [--timeout <\u79D2>]] --yes",description:`${SESSION_REF_HELP}
|
|
64
|
+
\u753B\u9762\u306E\u300C\u518D\u958B\u300D\u3068\u540C\u3058 POST /api/v2/agent/sessions/{id}/resume \u3067\u3059\u3002runner \u3092\u8D77\u52D5\u3057\u76F4\u3057\u3001\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u306E\u7D9A\u304D\u304B\u3089\u4F5C\u696D\u3057\u307E\u3059\u3002
|
|
65
|
+
\u518D\u958B\u306E\u6307\u793A\u306F\u4EFB\u610F\u3067\u3059\uFF08\u7701\u304F\u3068\u524D\u56DE\u306E\u7D9A\u304D\u3092\u518D\u958B\u3057\u307E\u3059\uFF09\u3002`,destructive:true,confirmation:CREDIT_CONFIRMATION,flags:[{name:BODY_SPEC.fileFlag,summary:"\u518D\u958B\u306E\u6307\u793A\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:BODY_SPEC.flag,summary:"\u518D\u958B\u306E\u6307\u793A\u3092\u76F4\u63A5\u6E21\u3059",
|
|
66
|
+
takesValue:true,placeholder:"<\u6587>"},WAIT_FLAG,TIMEOUT_FLAG],async prepare(input){sessionId(input,"resume");waitSeconds(input,"session resume");const body=await readBody(input,RESUME_SPEC);return body===void 0?input:withResolved(input,{resumeInstruction:body})},plan:input=>{const instruction=input.resolved?.["resumeInstruction"];return{method:"POST",path:sessionPath(sessionId(input,"resume"),"/resume"),body:instruction===void 0?{}:{resumeInstruction:instruction}}},plannedNotes:input=>waitPlannedNotes(
|
|
67
|
+
input,input.args[0]??"<\u30BB\u30C3\u30B7\u30E7\u30F3>"),execute:(input,ctx)=>sendAndMaybeWait(input,ctx,sessionResumeOperation.plan(input),"session resume",()=>sessionId(input,"resume")),summarize:startedSummary("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B"),raw:startedRaw("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B"),document:startedDocument("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B"),notes:startedNotes("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B")};function messageOf(body,what){
|
|
68
|
+
const data=envelope(body,what);return{message:typeof data["message"]==="string"?data["message"]:null}}var sessionCancelOperation={name:"cancel",summary:"\u52D5\u3044\u3066\u3044\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u6B62\u3081\u308B\uFF08runner \u3092\u505C\u6B62\u3059\u308B\u3002\u8A18\u9332\u306F\u6B8B\u308A\u3001resume \u3067\u518D\u958B\u3067\u304D\u308B\uFF09",usage:"twp agent session cancel <\u30BB\u30C3\u30B7\u30E7\u30F3>",description:`${SESSION_REF_HELP}
|
|
69
|
+
\u753B\u9762\u306E\u300C\u505C\u6B62\u300D\u3068\u540C\u3058 DELETE /api/v2/agent/sessions/{id} \u3067\u3059\u3002\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u8A18\u9332\u306F\u6D88\u3048\u307E\u305B\u3093\uFF08\u6D88\u3059\u306E\u306F delete\uFF09\u3002`,flags:[],plan:input=>({method:"DELETE",path:sessionPath(sessionId(input,"cancel"))}),summarize:body=>messageOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u505C\u6B62"),raw:body=>messageOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u505C\u6B62")};var sessionDeleteOperation={
|
|
70
|
+
name:"delete",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u524A\u9664\u3059\u308B\uFF08\u30DE\u30B9\u30BF\u30FC\u306E\u307F\u30FB\u53D6\u308A\u6D88\u305B\u306A\u3044\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp agent session delete <\u30BB\u30C3\u30B7\u30E7\u30F3> --yes",description:`${SESSION_REF_HELP}
|
|
71
|
+
DELETE /api/v2/agent/sessions/{id}/delete\u3002\u8D77\u52D5\u3057\u305F\u672C\u4EBA\uFF08\u30DE\u30B9\u30BF\u30FC\uFF09\u3060\u3051\u304C\u524A\u9664\u3067\u304D\u307E\u3059\u3002\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR \u306F GitHub \u306B\u6B8B\u308A\u307E\u3059\u3002`,destructive:true,flags:[],plan:input=>({method:"DELETE",path:sessionPath(sessionId(input,"delete"),"/delete")}),summarize:body=>messageOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u524A\u9664"),raw:body=>messageOf(body,"\u30BB\u30C3\u30B7\
|
|
72
|
+
\u30E7\u30F3\u306E\u524A\u9664")};var logPaging=envelopePaging({label:"\u30BB\u30C3\u30B7\u30E7\u30F3\u30ED\u30B0",itemsKey:"logs",readCursor:body=>{const record=isRecord(body)?body:{};return{hasMore:record["hasMore"],cursor:record["nextCursor"]}}});function logRows(body){envelope(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u30ED\u30B0");return logPaging.items(body)}var sessionLogsOperation={name:"logs",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u5B9F\u884C\u30ED\u30B0\uFF08runner \u306E\u30A4\u30D9\u30F3\u30C8\uFF09\u3092\u4E00\u89A7\u3059\u308B",
|
|
73
|
+
usage:"twp agent session logs <\u30BB\u30C3\u30B7\u30E7\u30F3> [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:`${SESSION_REF_HELP}
|
|
74
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
75
|
+
|
|
76
|
+
${LIST_PAGING_HELP}`,flags:[...LIST_FLAGS],paging:logPaging,plan:input=>({method:"GET",path:sessionPath(sessionId(input,"logs"),"/logs"),query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}),summarize:body=>logRows(body),raw:logRows,notes:body=>logRows(body).length===0?["\u30ED\u30B0\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002"]:[]};function chatSummary(row){const metadata=isRecord(row)&&isRecord(row["metadata"])?row["metadata"]:{};return{...pick(
|
|
77
|
+
row,["timestamp","role","content"]),user_name:metadata["userName"]??null}}var sessionChatOperation={name:"chat",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u4F1A\u8A71\uFF08\u6307\u793A\u3068\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u306E\u767A\u8A00\u30FB\u30D5\u30A1\u30A4\u30EB\u5909\u66F4\uFF09\u3092\u53E4\u3044\u9806\u306B\u8868\u793A\u3059\u308B",usage:"twp agent session chat <\u30BB\u30C3\u30B7\u30E7\u30F3> [--limit <\u4EF6\u6570>]",description:`${SESSION_REF_HELP}
|
|
78
|
+
--limit \u306F\u30B5\u30FC\u30D0\u304C**\u53E4\u3044\u5074\u304B\u3089**\u8D70\u67FB\u3059\u308B\u30ED\u30B0\u306E\u4EF6\u6570\u3067\u3059\uFF08\u65E2\u5B9A 100\uFF09\u3002\u30C4\u30FC\u30EB\u306E\u30ED\u30B0\u3082\u6570\u3048\u3066\u304B\u3089\u4F1A\u8A71\u3060\u3051\u3092\u6B8B\u3059\u306E\u3067\u3001
|
|
79
|
+
\u9577\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u306F\u65E2\u5B9A\u306E\u307E\u307E\u3060\u3068\u6700\u8FD1\u306E\u767A\u8A00\u307E\u3067\u5C4A\u304D\u307E\u305B\u3093\u3002\u6700\u5F8C\u307E\u3067\u8AAD\u3080\u306B\u306F --limit \u3092\u5927\u304D\u304F\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3053\u306EAPI\u306B\u30DA\u30FC\u30B8\u30F3\u30B0\u306F\u3042\u308A\u307E\u305B\u3093\u3002
|
|
80
|
+
--output text \u306F1\u767A\u8A00\u30921\u6BB5\u843D\u306B\u3057\u3066\u8AAD\u3081\u308B\u5F62\u3067\u51FA\u3057\u307E\u3059\u3002
|
|
81
|
+
|
|
82
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002--output table / tsv \u306F\u8981\u7D04\u5217\uFF08${CHAT_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[{name:"--limit",summary:"\u30B5\u30FC\u30D0\u304C\u53E4\u3044\u5074\u304B\u3089\u8D70\u67FB\u3059\u308B\u30ED\u30B0\u306E\u4EF6\u6570\uFF08\u65E2\u5B9A 100\uFF09",takesValue:true,placeholder:"<\u4EF6\u6570>"}],plan:input=>({method:"GET",path:sessionPath(sessionId(input,"cha\
|
|
83
|
+
t"),"/chat-messages"),query:{limit:positiveInteger(input.flags,"--limit")}}),summarize:body=>chatRows(body).map(chatSummary).map(row=>pick(row,CHAT_COLUMNS)),raw:chatRows,document(body){const blocks=chatRows(body).map(row=>{const s=chatSummary(row);const who=s["role"]==="user"?`user${s["user_name"]!==null?`\uFF08${String(s["user_name"])}\uFF09`:""}`:String(s["role"]??"");return`[${String(s["timestamp"]??"")}] ${who}
|
|
84
|
+
${String(s["content"]??"")}`});return blocks.length===0?"\uFF08\u4F1A\u8A71\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF09\n":`${blocks.join("\n\n")}
|
|
85
|
+
`},notes:body=>chatRows(body).length===0?["\u4F1A\u8A71\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF08runner \u304C\u8D77\u52D5\u4E2D\u304B\u3001\u4F1A\u8A71\u306E\u4FDD\u5B58\u5148\u306B\u5C4A\u3044\u3066\u3044\u307E\u305B\u3093\uFF09\u3002"]:[]};function diffOf(body){return envelope(body,"Git \u306E\u5DEE\u5206")["gitDiff"]??null}function diffFiles(body){const diff=diffOf(body);if(diff===null)return[];if(Array.isArray(diff))return diff;if(isRecord(diff)&&Array.isArray(diff["files"]))return diff["\
|
|
86
|
+
files"];throw new ApiResponseError("Git \u306E\u5DEE\u5206\u306E\u5FDC\u7B54\u306B files \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}var sessionDiffOperation={name:"diff",summary:"\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u306E\u5909\u66F4\u30D5\u30A1\u30A4\u30EB\uFF08\u8D77\u70B9\u30D6\u30E9\u30F3\u30C1\u3068\u306E\u5DEE\u5206\uFF09\u3092\u8868\u793A\u3059\u308B",usage:"twp agent session diff <\u30BB\u30C3\u30B7\u30E7\u30F3>",
|
|
87
|
+
description:`${SESSION_REF_HELP}
|
|
88
|
+
--output table / tsv \u306F\u5909\u66F4\u30D5\u30A1\u30A4\u30EB1\u4EF6\uFF1D1\u884C\uFF08${DIFF_COLUMNS.join(" / ")}\uFF09\u3001--output text \u306F unified diff \u306E\u672C\u6587\u3067\u3059\u3002
|
|
89
|
+
--output json \u306F API \u306E gitDiff\uFF08diff \u672C\u6587\u30FBfiles\u30FBbaseBranch\uFF09\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\uFF08runner \u304C\u307E\u3060\u5DEE\u5206\u3092\u5831\u544A\u3057\u3066\u3044\u306A\u3051\u308C\u3070 null\uFF09\u3002`,flags:[],plan:input=>({method:"GET",path:sessionPath(sessionId(input,"diff"),"/git-diff")}),summarize:body=>diffFiles(body).map(row=>pick(row,DIFF_COLUMNS)),raw:diffOf,document(body){const diff=diffOf(body);const text=isRecord(diff)&&
|
|
90
|
+
typeof diff["diff"]==="string"?diff["diff"]:"";return text===""?"\uFF08\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\n":text.endsWith("\n")?text:`${text}
|
|
91
|
+
`},notes:body=>diffOf(body)===null?["\u5DEE\u5206\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF08runner \u304C\u307E\u3060\u5909\u66F4\u3092\u5831\u544A\u3057\u3066\u3044\u307E\u305B\u3093\uFF09\u3002"]:diffFiles(body).length===0?["\u5909\u66F4\u30D5\u30A1\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093\u3002"]:[]};function repositoryRows(body){return listOf(body,"list","\u30EA\u30DD\u30B8\u30C8\u30EA\u4E00\u89A7")}var repositoryListOperation={name:"list",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8D77\u52D5\u3067\u304D\u308B\u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u4E00\u89A7\u3059\u308B\uFF08\u53C2\u52A0\u30D7\
|
|
92
|
+
\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u3044\u305F\u3082\u306E\uFF09",usage:"twp agent repository list",description:`\u30C6\u30CA\u30F3\u30C8\u306B\u9023\u643A\u3057\u305F GitHub \u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u3046\u3061\u3001\u3042\u306A\u305F\u304C\u53C2\u52A0\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u3044\u305F\u3082\u306E\u3060\u3051\u304C\u51FA\u307E\u3059\u3002
|
|
93
|
+
\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002
|
|
94
|
+
|
|
95
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${REPOSITORY_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[],plan(input){noArgs(input,"repository list");return{method:"GET",path:AGENT_REPOSITORIES_PATH}},summarize:body=>repositoryRows(body).map(row=>pick(row,REPOSITORY_COLUMNS)),raw:repositoryRows,notes:body=>repositoryRows(body).length===0?["\u8D77\u52D5\u3067\u304D\u308B\u30EA\u30DD\u30B8\u30C8\u30EA\u306F\u3042\u308A\u307E\u305B\u3093\uFF08GitHub \u9023\u643A\u304C\u672A\u8A2D\u5B9A\u304B\u3001\u53C2\u52A0\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u30EA\u30DD\u30B8\u30C8\u30EA\u304C\u7D10\u3065\u3044\u3066\u3044\u307E\u305B\u3093\uFF09\u3002"]:
|
|
96
|
+
[]};var repositoryBranchesOperation={name:"branches",summary:"\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30D6\u30E9\u30F3\u30C1\u3092\u4E00\u89A7\u3059\u308B\uFF08--base \u306B\u6E21\u305B\u308B\u540D\u524D\uFF09",usage:"twp agent repository branches <\u30EA\u30DD\u30B8\u30C8\u30EA>",description:"<\u30EA\u30DD\u30B8\u30C8\u30EA> \u306F twp agent repository list \u306E full_name\uFF08owner/repo\uFF09\u304B id \u3067\u3059\u3002",flags:[],async prepare(input,ctx){const values=input.args.map(arg=>arg.trim());
|
|
97
|
+
if(values.length!==1||values[0]==="")throw new UsageError("<\u30EA\u30DD\u30B8\u30C8\u30EA>\u30921\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usageOf("repository branches"));return resolveRepository(input,ctx,values[0],"<\u30EA\u30DD\u30B8\u30C8\u30EA>")},plan:input=>({method:"GET",path:`${AGENT_REPOSITORIES_PATH}/${encodeURIComponent(requireResolved(input,"repositoryId"))}/branches`}),summarize:body=>listOf(body,"list","\u30D6\u30E9\u30F3\u30C1\u4E00\u89A7").map(row=>pick(row,BRANCH_COLUMNS)),
|
|
98
|
+
raw:body=>listOf(body,"list","\u30D6\u30E9\u30F3\u30C1\u4E00\u89A7")};var sessionResource={name:"session",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\uFF08\u8D77\u52D5\u30FB\u6307\u793A\u30FB\u518D\u958B\u30FB\u505C\u6B62\u30FB\u524A\u9664\u30FB\u72B6\u614B\u30FB\u4F1A\u8A71\u30FB\u30ED\u30B0\u30FB\u5DEE\u5206\uFF09",operations:[sessionListOperation,sessionGetOperation,sessionCreateOperation,sessionInstructOperation,sessionResumeOperation,sessionCancelOperation,sessionDeleteOperation,sessionLogsOperation,
|
|
99
|
+
sessionChatOperation,sessionDiffOperation]};var repositoryResource={name:"repository",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8D77\u52D5\u3067\u304D\u308B\u30EA\u30DD\u30B8\u30C8\u30EA\u3068\u305D\u306E\u30D6\u30E9\u30F3\u30C1",operations:[repositoryListOperation,repositoryBranchesOperation]};var agentDomain={name:"agent",summary:"\u30B3\u30F3\u30C6\u30CA\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\uFF08\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u4F5C\u696D\u3059\u308B AI \u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u8D77\u52D5\u30FB\u6307\u793A\u30FB\u76E3\u8996\uFF09",
|
|
100
|
+
operations:[],subresources:[sessionResource,repositoryResource]};export{WAIT_POLL_INTERVAL_MS,agentDomain};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{stepToItem}from"./chunk-LUQ2KE6Y.js";import{loadLocalConfig}from"./chunk-QVPU4HHG.js";import"./chunk-N2UVRM3Z.js";import{loadAiConfig}from"./chunk-AEJHDFXB.js";import"./chunk-JTJWDV5U.js";import"./chunk-GY7KI5E5.js";import
|
|
4
|
-
isRecord,pick}from"./chunk-
|
|
3
|
+
import{stepToItem}from"./chunk-LUQ2KE6Y.js";import{loadLocalConfig}from"./chunk-QVPU4HHG.js";import"./chunk-N2UVRM3Z.js";import{loadAiConfig}from"./chunk-AEJHDFXB.js";import"./chunk-JTJWDV5U.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{acknowledgement,
|
|
4
|
+
isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30A2\u30A4\u30C6\u30E0";var STATUSES=["pending","processing","completed","failed"];var AI_TYPES=["claude","gemini","codex","copilot"];var EFFORTS=["low","medium","high","xhigh","max"];var PRIORITIES=["P0","P1","P2","P3"];var LIST_COLUMNS=["item_id","status","task_key","label","ai_type","ai_effort","runner_id","created_at"];var GET_COLUMNS=["item_id","status","task_key","label","prompt","ai_type","ai_model","ai_effort","runn\
|
|
5
5
|
er_id","attempt_count","reclaim_count","error_message","created_by_name","created_at","started_at","completed_at"];var HISTORY_COLUMNS=["item_id","status","task_key","skill","ai_type","runner_id","duration_ms","cost_usd","created_at"];var PROJECT_FLAG={name:"--project",summary:"\u30AD\u30E5\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\u3002\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"\
|
|
6
6
|
<\u30B3\u30FC\u30C9|ID>"};var ITEM_FLAG={name:"--item",summary:"\u30A2\u30A4\u30C6\u30E0\u306E ID\uFF08item_id\uFF09\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u30A2\u30A4\u30C6\u30E0ID>"};var FORBIDDEN_CORE="\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\uFF08admin \u30ED\u30FC\u30EB\uFF09\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\uFF08\u500B\u4EBA\u30AD\u30E5\u30FC\u3092\u9664\u304F\uFF09";
|
|
7
7
|
var CREATE_HINT="\u30A2\u30A4\u30C6\u30E0\u306E\u6295\u5165\uFF08twp agent-loop create\uFF09\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u306A\u3089\u7BA1\u7406\u8005\u3067\u306A\u304F\u3066\u3082\u884C\u3048\u307E\u3059";var FORBIDDEN_UPDATE=`\u30AD\u30E5\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u66F4\u65B0\u306B\u306F${FORBIDDEN_CORE}\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u3078\u306E\u66F8\u304D\u623B\u3057\u3060\u3051\u306F\u3001\u305D\u306E\u30A2\u30A4\u30C6\u30E0\u3092 claim \u3057\u305F\u30EB\u30FC\u30D7\u81EA\u8EAB\u304C run_id \u3092\u6DFB\u3048\u3066\u884C\u3048\u307E\u3059\u3002`+
|